diff --git a/codex-rs/tui/src/analytics.rs b/codex-rs/tui/src/analytics.rs index 99ed0b1563..a1962372e7 100644 --- a/codex-rs/tui/src/analytics.rs +++ b/codex-rs/tui/src/analytics.rs @@ -77,7 +77,6 @@ pub(crate) struct AnalyticsView { ranges: [usize; 3], end_date: chrono::NaiveDate, token_model: Option, - group_picker: Option, pub(crate) is_done: bool, } @@ -105,7 +104,6 @@ impl AnalyticsView { ranges: [0; 3], end_date: chrono::Utc::now().date_naive(), token_model: None, - group_picker: None, is_done: false, }; view.sections[Section::Usage].group = 1; @@ -137,7 +135,6 @@ impl AnalyticsView { pub(crate) fn refresh(&mut self) { self.end_date = chrono::Utc::now().date_naive(); - self.group_picker = None; self.live = self.connection.as_ref().map(|(config, _, _)| { std::sync::Arc::new(client::Live::new( std::sync::Arc::clone(config), @@ -294,7 +291,6 @@ impl AnalyticsView { if key_hint::plain(KeyCode::Char('q')).is_press(key) || key_hint::ctrl(KeyCode::Char('c')).is_press(key) { - self.group_picker = None; self.is_done = true; return; } @@ -303,30 +299,7 @@ impl AnalyticsView { } else { self.keymap.action_for(key) }; - if let Some(choice) = self.group_picker { - let options = self.group_options(); - let Some(&group) = options.get(choice) else { - self.group_picker = None; - return; - }; - match action { - Some(ListAction::MoveUp | ListAction::MoveLeft) => { - self.group_picker = Some((choice + options.len() - 1) % options.len()); - } - Some(ListAction::MoveDown | ListAction::MoveRight) => { - self.group_picker = Some((choice + 1) % options.len()); - } - Some(ListAction::Accept) => { - self.sections[self.section].group = group; - self.group_picker = None; - self.load_report(self.section); - } - Some(ListAction::Cancel) => self.group_picker = None, - _ => {} - } - self.follow_selection = true; - return; - } + self.follow_selection = true; if key_hint::plain(KeyCode::Char('z')).is_press(key) { self.zoomed = !self.zoomed; @@ -379,10 +352,13 @@ impl AnalyticsView { return; } if key_hint::plain(KeyCode::Char('g')).is_press(key) && self.group_options().len() > 1 { - self.group_picker = self - .group_options() + let options = self.group_options(); + let next = options .iter() - .position(|group| *group == self.sections[self.section].group); + .position(|group| *group == self.sections[self.section].group) + .map_or(/*default*/ 0, |index| (index + 1) % options.len()); + self.sections[self.section].group = options[next]; + self.load_report(self.section); return; } let visible = self.visible_sections(); @@ -407,7 +383,6 @@ impl AnalyticsView { self.scroll_offset = 0; } self.section = section; - self.group_picker = None; return; } if self.section == Section::Summary { diff --git a/codex-rs/tui/src/analytics/account_layout_tests.rs b/codex-rs/tui/src/analytics/account_layout_tests.rs index 2d5c53ef50..d6c7da06dc 100644 --- a/codex-rs/tui/src/analytics/account_layout_tests.rs +++ b/codex-rs/tui/src/analytics/account_layout_tests.rs @@ -1,5 +1,8 @@ //! Account layouts, authenticated report loading, independent ranges, and model filters. use super::*; +use codex_config::types::KeybindingSpec; +use codex_config::types::KeybindingsSpec; +use codex_config::types::TuiKeymap; use pretty_assertions::assert_eq; use crate::analytics::sections::Section; @@ -60,8 +63,6 @@ async fn changing_ranges_and_grouping_preserves_other_reports_and_focus() { press(&mut view, KeyCode::Char('r')); test_support::settle(&mut view).await; press(&mut view, KeyCode::Char('g')); - press(&mut view, KeyCode::Down); - press(&mut view, KeyCode::Enter); test_support::settle(&mut view).await; assert_eq!( ( @@ -264,46 +265,42 @@ async fn account_reports_request_only_eligible_endpoints_and_refresh() { } #[tokio::test] -async fn legacy_response_closes_an_attribution_picker_that_is_no_longer_valid() { +async fn grouping_cycle_uses_current_server_capabilities() { let server = test_support::server().await; let (_home, _app_server, mut view) = client::tests::connected_view(&server, "plus").await; view.section = Section::Usage; view.account = Load::Ready(codex_protocol::account::PlanType::Plus); + view.sections[Section::Usage].group = 3; view.start_reports(); - view.group_picker = Some(3); test_support::settle(&mut view).await; assert_eq!( - ( - view.group_picker, - view.group_options(), - view.sections[Section::Usage].group - ), - (None, &[0, 2][..], 0) + (view.group_options(), view.sections[Section::Usage].group), + (&[0, 2][..], 0) ); - press(&mut view, KeyCode::Enter); + press(&mut view, KeyCode::Char('g')); + assert_eq!(view.sections[Section::Usage].group, 2); + press(&mut view, KeyCode::Char('g')); + assert_eq!(view.sections[Section::Usage].group, 0); } -#[tokio::test] -async fn legacy_response_invalidates_picker_before_the_next_draw() { - let server = test_support::server().await; - for choice in [2, 3] { - let (_home, _app_server, mut view) = client::tests::connected_view(&server, "plus").await; - view.section = Section::Usage; - view.account = Load::Ready(codex_protocol::account::PlanType::Plus); - view.start_reports(); - view.group_picker = Some(choice); - // Complete the request without polling the view, as can happen between key events. - tokio::time::timeout(std::time::Duration::from_secs(/*secs*/ 10), async { - while view.consumer_attribution() { - tokio::task::yield_now().await; - } - }) - .await - .unwrap(); - press(&mut view, KeyCode::Enter); - assert_eq!((view.group_picker, view.is_done), (None, false)); - test_support::settle(&mut view).await; - assert_eq!(view.sections[Section::Usage].group, 0); +#[test] +fn ungrouped_sections_preserve_configured_g_jump_top() { + let mut config = TuiKeymap::default(); + config.list.jump_top = Some(KeybindingsSpec::One(KeybindingSpec("g".into()))); + let keymap = RuntimeKeymap::from_config(&config).expect("valid list keymap"); + let mut view = fixture::view(models::AccountKind::Enterprise); + view.keymap = keymap.list; + for section in [ + Section::Chats, + Section::Plugins, + Section::Skills, + Section::Credits, + ] { + view.section = section; + press(&mut view, KeyCode::End); + assert!(view.sections[section].cursor > 0, "{section:?}"); + press(&mut view, KeyCode::Char('g')); + assert_eq!(view.sections[section].cursor, 0, "{section:?}"); } } @@ -433,3 +430,62 @@ async fn unknown_plan_keeps_summary_available_without_billing_reports() { .unwrap(); insta::assert_snapshot!(terminal.backend().to_string()); } + +#[test] +fn navigation_keeps_its_row_when_sections_change() { + for width in [64, 120] { + let mut view = fixture::view(models::AccountKind::Consumer); + let mut positions = Vec::new(); + for section in [ + Section::Summary, + Section::Usage, + Section::Chats, + Section::Summary, + ] { + view.section = section; + let rendered = screen(&mut view, width, /*height*/ 40); + positions.push( + rendered + .lines() + .position(|line| line.contains("Summary") && line.contains("usage history")) + .unwrap(), + ); + } + assert_eq!(positions, vec![positions[0]; 4]); + } +} + +#[test] +fn taller_report_reveals_more_legend_rows_and_keeps_timestamp_in_footer() { + let mut view = fixture::view(models::AccountKind::Consumer); + view.section = Section::Usage; + let mut history = fixture::history(/*report*/ 0, /*range*/ 0, /*group*/ 1); + history.updated_at = Some(1_788_364_800); + for day in &mut history.data { + day.values = (0..10) + .map(|index| models::AccountAnalyticsValue { + key: format!("feature-{index}"), + label: format!("Feature {}", index + 1), + value: day.total / 10.0, + }) + .collect(); + } + view.sections[Section::Usage].history = data::Load::Ready(history); + let short = screen(&mut view, /*width*/ 120, /*height*/ 30); + let tall = screen(&mut view, /*width*/ 120, /*height*/ 60); + assert!( + tall.lines().filter(|line| line.contains('●')).count() + > short.lines().filter(|line| line.contains('●')).count() + ); + assert!( + tall.lines() + .rev() + .take(3) + .any(|line| line.contains("Updated")) + ); + insta::assert_snapshot!("legend_tall_report", tall); + for width in [24, 40, 64] { + let narrow = screen(&mut view, width, /*height*/ 60); + assert!(narrow.lines().last().unwrap().contains("UTC")); + } +} diff --git a/codex-rs/tui/src/analytics/chart.rs b/codex-rs/tui/src/analytics/chart.rs index fee9d6a6f6..32d31dd816 100644 --- a/codex-rs/tui/src/analytics/chart.rs +++ b/codex-rs/tui/src/analytics/chart.rs @@ -1,6 +1,6 @@ //! Daily history with a stable chart and a compact, separated breakdown table. //! Chart series rank by the full range; table rows rank by the selected day and retain series colors. -//! Missing and zero days retain the same row count; only explicit expansion changes height. +//! Missing and zero days retain the same row count; only viewport changes and explicit expansion change height. use super::AnalyticsView; use super::data; @@ -245,8 +245,13 @@ impl AnalyticsView { }) .collect::>(); values.sort_by(|(_, a), (_, b)| b.value.abs().total_cmp(&a.value.abs())); - let remainder = if !expanded && values.len() > 4 { - let remaining = values.split_off(/*at*/ 3); + let row_budget = if self.zoomed { + (self.viewport_height / 4).max(/*other*/ 4) + } else { + 4 + }; + let remainder = if !expanded && values.len() > row_budget { + let remaining = values.split_off(row_budget - 1); Some(( format!("{} more", remaining.len()), remaining.iter().map(|(_, value)| value.value).sum::(), @@ -317,9 +322,10 @@ impl AnalyticsView { )); lines.resize(table_end, Line::default()); } - if let Some(updated) = history - .updated_at - .and_then(|value| chrono::DateTime::from_timestamp(value, /*nsecs*/ 0)) + if !self.zoomed + && let Some(updated) = history + .updated_at + .and_then(|value| chrono::DateTime::from_timestamp(value, /*nsecs*/ 0)) { lines.push( format!("Updated {} UTC", updated.format("%b %-d %H:%M")) diff --git a/codex-rs/tui/src/analytics/dashboard.rs b/codex-rs/tui/src/analytics/dashboard.rs index 885208a3a6..57a58349a6 100644 --- a/codex-rs/tui/src/analytics/dashboard.rs +++ b/codex-rs/tui/src/analytics/dashboard.rs @@ -79,93 +79,69 @@ impl AnalyticsView { .into(), ); } - if focused && self.group_picker.is_some() { - content.extend(self.group_options().iter().enumerate().map( - |(index, group)| { - let label = format!( - "{} {}", - if self.group_picker == Some(index) { - "›" - } else { - " " - }, - self.group_label(section, *group) - ); - if self.group_picker == Some(index) { - label.set_style(accent_style()).into() - } else { - label.into() + match section { + Section::Summary => content.extend(self.summary_lines(inner_width)), + Section::Usage + | Section::Plugins + | Section::Credits + | Section::Activity + | Section::Skills => content.extend( + self.history_lines( + section, + inner_width, + inner_height.saturating_sub(/*rhs*/ 13).max(/*other*/ 1), + ) + .lines, + ), + Section::Plan => content.extend(self.plan_lines(inner_width).0), + Section::Chats if !self.business() => { + content.extend(self.task_lines(inner_width).0) + } + Section::Chats => { + content.push( + "30d active · lifetime credits" + .set_style(secondary_style()) + .into(), + ); + content.push(Line::default()); + if let Some(chats) = self.chats.ready() { + if chats.rows.is_empty() { + content.push( + "No recent local chats.".set_style(secondary_style()).into(), + ); } - }, - )); - } else { - match section { - Section::Summary => content.extend(self.summary_lines(inner_width)), - Section::Usage - | Section::Plugins - | Section::Credits - | Section::Activity - | Section::Skills => content.extend( - self.history_lines( - section, - inner_width, - inner_height.saturating_sub(/*rhs*/ 13).max(/*other*/ 1), - ) - .lines, - ), - Section::Plan => content.extend(self.plan_lines(inner_width).0), - Section::Chats if !self.business() => { - content.extend(self.task_lines(inner_width).0) - } - Section::Chats => { + for chat in chats.rows.iter().take(/*n*/ 5) { + let amount = chat + .usage + .as_ref() + .map(|usage| { + data::credits(usage.estimated_usage_credits_micros) + }) + .unwrap_or_else(|| "—".into()); + content.push(columns( + truncate( + chat.display_title().to_string().into(), + inner_width.saturating_sub(amount.len() + 1), + ), + number(amount).into(), + inner_width, + )); + } + content.push(Line::default()); content.push( - "30d active · lifetime credits" + "Local chats · excludes subagents" .set_style(secondary_style()) .into(), ); - content.push(Line::default()); - if let Some(chats) = self.chats.ready() { - if chats.rows.is_empty() { - content.push( - "No recent local chats." - .set_style(secondary_style()) - .into(), - ); - } - for chat in chats.rows.iter().take(/*n*/ 5) { - let amount = chat - .usage - .as_ref() - .map(|usage| { - data::credits(usage.estimated_usage_credits_micros) - }) - .unwrap_or_else(|| "—".into()); - content.push(columns( - truncate( - chat.display_title().to_string().into(), - inner_width.saturating_sub(amount.len() + 1), - ), - number(amount).into(), - inner_width, - )); - } - content.push(Line::default()); + if chats.rows.iter().any(|chat| chat.usage.is_none()) { content.push( - "Local chats · excludes subagents" + "Some estimates unavailable" .set_style(secondary_style()) .into(), ); - if chats.rows.iter().any(|chat| chat.usage.is_none()) { - content.push( - "Some estimates unavailable" - .set_style(secondary_style()) - .into(), - ); - } - } else if let Some(message) = self.chats.message() { - content - .push(message.to_string().set_style(secondary_style()).into()); } + } else if let Some(message) = self.chats.message() { + content.push(message.to_string().set_style(secondary_style()).into()); } } } diff --git a/codex-rs/tui/src/analytics/panels.rs b/codex-rs/tui/src/analytics/panels.rs index ea5e6048a7..a30031ffd9 100644 --- a/codex-rs/tui/src/analytics/panels.rs +++ b/codex-rs/tui/src/analytics/panels.rs @@ -58,27 +58,9 @@ impl AnalyticsView { .into(), ); } - let mut selection; + let selection; let mut chart_bands = 0; - if focused && let Some(choice) = self.group_picker { - lines.extend( - self.group_options() - .iter() - .enumerate() - .map(|(index, group)| { - let label = format!( - "{} {}", - if index == choice { "›" } else { " " }, - self.group_label(section, *group) - ); - if index == choice { - label.set_style(accent_style()).into() - } else { - label.into() - } - }), - ); - } + if section == Section::Summary { selection = 0..1; lines.extend(self.summary_lines(width)); @@ -100,9 +82,7 @@ impl AnalyticsView { lines.extend(history.lines); selection = 0..lines.len(); } - if focused && self.group_picker.is_some() { - selection = 0..2 + self.group_options().len(); - } + let mut wrapped = Vec::new(); let mut wrapped_selection = 0..0; for (index, line) in lines.into_iter().enumerate() { diff --git a/codex-rs/tui/src/analytics/plot/annotations.rs b/codex-rs/tui/src/analytics/plot/annotations.rs index 1666d66542..0ebd263906 100644 --- a/codex-rs/tui/src/analytics/plot/annotations.rs +++ b/codex-rs/tui/src/analytics/plot/annotations.rs @@ -1,12 +1,13 @@ -//! Missing-day markers, selected-value callouts, and stable calendar labels. +//! Missing-day markers, daily-value callouts, and stable calendar labels. use super::Renderer; use super::amount; use super::layout::Layout; use super::painting::Band; -use crate::analytics::styles::number; use crate::analytics::styles::secondary_style; +use crate::color::is_light; use crate::style::accent_style; +use crate::terminal_palette::default_bg; use ratatui::buffer::Buffer; use ratatui::style::Style; use ratatui::style::Styled; @@ -52,72 +53,101 @@ impl Renderer<'_> { width, .. } = self.layout; - let selected_total = self.days[self.cursor] - .1 - .map_or(/*default*/ 0.0, |day| day.total); - let selected = self.days[self.cursor] - .1 - .map_or_else(|| "—".into(), |_| amount(selected_total, self.unit)); - // A partial number can mean a different amount; leave the cursor when the value cannot fit. - let selected = if selected.width() <= plot_width { - selected - } else { - String::new() - }; - let x = self.layout.center(self.cursor - start); - let label_width = selected.width(); - let label_x = x - .saturating_sub(label_width / 2) - .clamp(axis_width, width - label_width); - let below = selected_total < 0.0; - let band = if below { - Band::Negative - } else { - Band::Positive - }; - let extent = self.values[self.cursor] - .iter() - .map(|value| band.amount(*value)) - .sum::(); - let rows = ((extent * height as f64 / self.peak).ceil() as usize).min(height); - let cap = if below { - baseline + rows - } else { - baseline - rows - }; - let mut label_y = if below { - cap + 1 - } else { - cap.saturating_sub(/*rhs*/ 1) - }; - // Keep the callout close without painting over a neighboring bar. A guide connects any gap. - while (label_x..label_x + label_width) - .any(|col| buf[(col as u16, label_y as u16)].symbol() != " ") + // Give the selected value first choice of space; the other labels never overwrite it. + for index in + std::iter::once(self.cursor).chain((start..start + self.layout.count).filter(|index| { + self.days.len() <= 7 + && *index != self.cursor + && self.days[*index].1.is_some_and(|day| { + day.total != 0.0 || self.values[*index].iter().any(|value| *value != 0.0) + }) + })) { - if below { - label_y += 1; - } else if label_y > 0 { - label_y -= 1; - } else { - break; + let total = self.days[index].1.map_or(/*default*/ 0.0, |day| day.total); + let label = self.days[index] + .1 + .map_or_else(|| "—".into(), |_| amount(total, self.unit)); + // A partial number can mean a different amount; leave the cursor when the value cannot fit. + if label.width() > plot_width { + continue; } + let x = self.layout.center(index - start); + let label_width = label.width(); + let label_x = x + .saturating_sub(label_width / 2) + .clamp(axis_width, width - label_width); + let occupied = label_x.saturating_sub(/*rhs*/ 1).max(axis_width) + ..(label_x + label_width + 1).min(width); + let below = total < 0.0; + let band = if below { + Band::Negative + } else { + Band::Positive + }; + let extent = self.values[index] + .iter() + .map(|value| band.amount(*value)) + .sum::(); + let rows = ((extent * height as f64 / self.peak).ceil() as usize).min(height); + let cap = if below { + baseline + rows + } else { + baseline - rows + }; + let mut label_y = if below { + cap + 1 + } else { + cap.saturating_sub(/*rhs*/ 1) + }; + // Keep the callout close without painting over a neighboring bar. A guide connects any gap. + while occupied + .clone() + .any(|col| buf[(col as u16, label_y as u16)].symbol() != " ") + { + if below && label_y + 1 < marker_row { + label_y += 1; + } else if !below && label_y > 0 { + label_y -= 1; + } else { + break; + } + } + if occupied + .clone() + .any(|col| buf[(col as u16, label_y as u16)].symbol() != " ") + { + continue; + } + // Use white on dark backgrounds and the terminal foreground on light backgrounds. + let style = if index == self.cursor { + let selected = Style::default().bold().not_dim(); + if default_bg().is_some_and(is_light) { + selected + } else { + selected.white() + } + } else { + Style::default().dim() + }; + let guide = if below { + cap + 1..label_y + } else { + label_y + 1..cap + }; + for y in guide { + let cell = &mut buf[(x as u16, y as u16)]; + if cell.symbol() == " " { + cell.set_char('┊').set_style(style); + } + } + buf.set_line( + label_x as u16, + label_y as u16, + &Line::from(label.set_style(style)), + label_width as u16, + ); } - let guide = if below { - cap + 1..label_y - } else { - label_y + 1..cap - }; - for y in guide { - buf[(x as u16, y as u16)] - .set_char('┊') - .set_style(accent_style()); - } - buf.set_line( - label_x as u16, - label_y as u16, - &Line::from(number(selected)), - label_width as u16, - ); + let x = self.layout.center(self.cursor - start); buf[(x as u16, marker_row as u16)] .set_char('▲') .set_style(accent_style()); diff --git a/codex-rs/tui/src/analytics/plot_tests.rs b/codex-rs/tui/src/analytics/plot_tests.rs index 6312072ec5..b78a6ebe7e 100644 --- a/codex-rs/tui/src/analytics/plot_tests.rs +++ b/codex-rs/tui/src/analytics/plot_tests.rs @@ -467,3 +467,69 @@ fn duplicate_message_dates_render_the_full_other_remainder() { ); insta::assert_snapshot!(display(&rendered)); } + +#[test] +fn seven_day_totals_render_without_selecting_each_bar() { + let start: NaiveDate = "2026-01-01".parse().unwrap(); + let rows = (0..7) + .map(|index| AccountAnalyticsDay { + date: start + chrono::Duration::days(index), + total: 111.0 + index as f64 * 100.0, + values: vec![value("a", 111.0 + index as f64 * 100.0)], + }) + .collect::>(); + let days = rows + .iter() + .map(|day| (day.date, Some(day))) + .collect::>(); + let rendered = chart( + &days, + &rows[0].values, + /*cursor*/ 3, + /*width*/ 100, + /*height*/ 8, + AccountAnalyticsUnit::Count, + ); + let text = display(&rendered); + for day in &rows { + assert!(text.contains(&day.total.to_string())); + } + insta::assert_snapshot!("seven_day_totals", text); +} + +#[test] +fn narrow_equal_height_totals_remain_separate_numbers() { + let start: NaiveDate = "2026-01-01".parse().unwrap(); + let rows = (0..7) + .map(|index| AccountAnalyticsDay { + date: start + chrono::Duration::days(index), + total: 111.0, + values: vec![value("a", /*value*/ 111.0)], + }) + .collect::>(); + let days = rows + .iter() + .map(|day| (day.date, Some(day))) + .collect::>(); + let mut screens = Vec::new(); + for width in [21, 28, 35] { + let rendered = chart( + &days, + &rows[0].values, + /*cursor*/ 3, + width, + /*height*/ 4, + AccountAnalyticsUnit::Count, + ); + let text = rendered + .lines + .iter() + .map(|line| line.to_string().trim_end().to_owned()) + .collect::>() + .join("\n"); + assert!(text.contains("111")); + assert!(!text.contains("111111")); + screens.push(text); + } + insta::assert_snapshot!(screens.join("\n\n")); +} diff --git a/codex-rs/tui/src/analytics/render.rs b/codex-rs/tui/src/analytics/render.rs index ce5c1d3ca5..e791b30e27 100644 --- a/codex-rs/tui/src/analytics/render.rs +++ b/codex-rs/tui/src/analytics/render.rs @@ -102,21 +102,8 @@ impl AnalyticsView { .map(crate::key_hint::ShortcutHint::display_label) .unwrap_or_default() }; - let controls = if self.visible_sections().is_empty() { + let mut controls = if self.visible_sections().is_empty() { format!("R refresh · {} back · q close", hint(ListAction::Cancel)) - } else if self.group_picker.is_some() { - format!( - "{}/{} {} · {} select · {} cancel", - hint(ListAction::MoveUp), - hint(ListAction::MoveDown), - if self.section == Section::Summary { - "view" - } else { - "group" - }, - hint(ListAction::Accept), - hint(ListAction::Cancel) - ) } else { let navigation = if !self.zoomed { format!("{}/z maximize", hint(ListAction::Accept)) @@ -193,21 +180,42 @@ impl AnalyticsView { } Line::from(spans) }; + let updated = self + .zoomed + .then(|| self.sections[self.section].history.ready()) + .flatten() + .and_then(|history| history.updated_at) + .and_then(|value| chrono::DateTime::from_timestamp(value, /*nsecs*/ 0)) + .map(|updated| format!("Updated {} UTC", updated.format("%b %-d %H:%M"))); + let add_updated = |footer: &mut Vec>| { + if let Some(updated) = &updated { + let timestamp = Line::from(updated.clone().set_style(secondary_style())); + if let Some(line) = footer + .last_mut() + .filter(|line| line.width() + timestamp.width() + 3 <= width) + { + *line = columns(line.clone(), timestamp, width); + } else { + footer.extend(word_wrap_lines( + [columns(Line::default(), timestamp, width)], + RtOptions::new(width), + )); + } + } + }; let mut footer = word_wrap_lines(controls.lines().map(control_line), RtOptions::new(width)); - if self.group_picker.is_none() - && matches!( - self.section, - Section::Plugins | Section::Activity | Section::Skills - ) - && !self.day_has_details(self.section, self.sections[self.section].cursor) + if matches!( + self.section, + Section::Plugins | Section::Activity | Section::Skills + ) && !self.day_has_details(self.section, self.sections[self.section].cursor) { let height = footer.len(); - let controls = - controls.replace(&format!(" · {} details", hint(ListAction::Accept)), ""); + controls = controls.replace(&format!(" · {} details", hint(ListAction::Accept)), ""); footer = word_wrap_lines(controls.lines().map(control_line), RtOptions::new(width)); // Removing a contextual hint must not resize the chart on narrow terminals. footer.resize(height, Line::default()); } + add_updated(&mut footer); let sections = if self.zoomed { let line = Line::from( self.visible_sections() @@ -235,7 +243,7 @@ impl AnalyticsView { }; let [title, range, tabs, body, hints] = Layout::vertical([ Constraint::Length(1), - Constraint::Length(if show_range { 2 } else { 1 }), + Constraint::Length(2), Constraint::Length(if sections.is_empty() { 0 } else { @@ -309,9 +317,7 @@ impl AnalyticsView { panel = self.panel(self.section, width, height); } } - let center_summary = self.section == Section::Summary - && self.profile.ready().is_some() - && self.group_picker.is_none(); + let center_summary = self.section == Section::Summary && self.profile.ready().is_some(); if center_summary { // Keep the section heading and rule fixed; center the profile below them. let padding = usize::from(body.height).saturating_sub(panel.lines.len()) / 2; @@ -324,13 +330,41 @@ impl AnalyticsView { } else { panel.selection }; - if !center_summary { + if !center_summary && panel.lines.len() > usize::from(body.height) { panel.lines.push(Line::default()); } (panel.lines, selection) } else { self.dashboard_lines(width, usize::from(body.height)) }; + if lines.len() <= self.viewport_height { + let height = footer.len(); + let controls = controls + .replace( + &format!( + " · {}/{} scroll", + hint(ListAction::PageUp), + hint(ListAction::PageDown) + ), + "", + ) + .replace( + &format!( + " · {}/{} scroll", + hint(ListAction::MoveUp), + hint(ListAction::MoveDown) + ), + "", + ); + footer = word_wrap_lines(controls.lines().map(control_line), RtOptions::new(width)); + add_updated(&mut footer); + if updated.is_some() { + let padding = height.saturating_sub(footer.len()); + footer.splice(0..0, std::iter::repeat_n(Line::default(), padding)); + } else { + footer.resize(height, Line::default()); + } + } if self.follow_selection { if selection.start < self.scroll_offset { self.scroll_offset = selection.start; diff --git a/codex-rs/tui/src/analytics/sections.rs b/codex-rs/tui/src/analytics/sections.rs index efeebca7da..aeac212ce4 100644 --- a/codex-rs/tui/src/analytics/sections.rs +++ b/codex-rs/tui/src/analytics/sections.rs @@ -93,12 +93,6 @@ impl AnalyticsView { { self.sections[Section::Usage].group = 0; } - if self - .group_picker - .is_some_and(|choice| choice >= self.group_options().len()) - { - self.group_picker = None; - } if let Some(chats) = self.tasks.ready() { self.sections[Section::Chats].cursor = self.sections[Section::Chats] .cursor diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__account_plan_error.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__account_plan_error.snap index 7fe9dbd95e..29304acc1a 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__account_plan_error.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__account_plan_error.snap @@ -1,12 +1,12 @@ --- source: tui/src/analytics/connection_tests.rs -assertion_line: 189 expression: terminal.backend().to_string() --- " Analytics · Live account " " " " " " " +" " " Couldn't load account plan. Press R to retry Analytics. " " " " " @@ -41,5 +41,4 @@ expression: terminal.backend().to_string() " " " " " " -" " " R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__local_profile_error.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__local_profile_error.snap index abc08f1d82..b860e2706b 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__local_profile_error.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__local_profile_error.snap @@ -4,6 +4,7 @@ expression: terminal.backend().to_string() --- " Analytics · Live account · analytics@example.test " " " +" " " [1 Summary] 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used " " " " ▎ Summary " @@ -47,6 +48,5 @@ expression: terminal.backend().to_string() " " " " " " -" " -" tab/1–5 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–5 section · z dashboard " +" g view · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__local_profile_recovered.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__local_profile_recovered.snap index d04262a82f..251ba91728 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__local_profile_recovered.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__connection_tests__local_profile_recovered.snap @@ -4,6 +4,7 @@ expression: terminal.backend().to_string() --- " Analytics · Live account · analytics@example.test " " " +" " " [1 Summary] 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used " " " " ▎ Summary " @@ -13,7 +14,6 @@ expression: terminal.backend().to_string() " " " " " " -" " " Local account " " @local-user " " Enterprise " @@ -21,7 +21,7 @@ expression: terminal.backend().to_string() " 12.3K 12.3K — — — " " Lifetime tokens Peak tokens Longest chat Current streak Longest streak " " " -" Token activity [Daily] Weekly Cumulative " +" Token activity Daily " " Last 12 months " " " " Nov Dec Jan Feb Mar Apr May Jun Jul Aug " @@ -48,5 +48,5 @@ expression: terminal.backend().to_string() " " " " " " -" tab/1–5 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–5 section · z dashboard " +" g view · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__tests__live_account_identity_is_visible_and_closing_aborts_pending_loads.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__tests__live_account_identity_is_visible_and_closing_aborts_pending_loads.snap index a11a26728b..8068475b9c 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__tests__live_account_identity_is_visible_and_closing_aborts_pending_loads.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__client__tests__live_account_identity_is_visible_and_closing_aborts_pending_loads.snap @@ -6,6 +6,7 @@ expression: terminal.backend().to_string() " " " " " " +" " " No history has been reported. " " " " " @@ -24,5 +25,4 @@ expression: terminal.backend().to_string() " " " " " " -" " " R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plan__tests__period_navigation_preserves_unknowns_and_resets_on_new_snapshot.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plan__tests__period_navigation_preserves_unknowns_and_resets_on_new_snapshot.snap index 8f82620a5f..b84a18a7a7 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plan__tests__period_navigation_preserves_unknowns_and_resets_on_new_snapshot.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plan__tests__period_navigation_preserves_unknowns_and_resets_on_new_snapshot.snap @@ -4,6 +4,7 @@ expression: "output.join(\"\\n\")" --- " Analytics · Live account " " " +" " " 1 Summary 2 Total usage history [3 Plan usage history] 4 Messages 5 Plugins called 6 Skills used 7 Top chats " " " " ▎ Plan usage history By feature " @@ -29,12 +30,12 @@ expression: "output.join(\"\\n\")" " " " " " " -" " " tab/1–7 section · z dashboard · ←/→ window · ↑/↓ period · enter details " -" g group · R refresh · pgup/pgdn scroll · esc back · q close " +" g group · R refresh · esc back · q close " " Analytics · Live account " " " +" " " Summary Total usage history [Plan usage history] " " Messages Plugins called Skills used Top chats " " " @@ -58,8 +59,7 @@ expression: "output.join(\"\\n\")" " activity may be delayed " " " " " -" " " tab/1–7 section · z dashboard · ←/→ window · ↑/↓ " " period · enter details " -" g group · R refresh · pgup/pgdn scroll · esc back · q " -" close " +" g group · R refresh · esc back · q close " +" " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plan__tests__plan_overview_escape_closes_with_retained_expansion.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plan__tests__plan_overview_escape_closes_with_retained_expansion.snap index a3266e9059..50ba4a826a 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plan__tests__plan_overview_escape_closes_with_retained_expansion.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plan__tests__plan_overview_escape_closes_with_retained_expansion.snap @@ -4,12 +4,13 @@ expression: output --- " Analytics · Live account " " " +" " " ╭─ 1 Summary ────────────────────────────────────────╮ ╭─ 2 Total usage history ────────────────────────────╮ " " │ │ │ │ " " │ No history has been reported. │ │ 7d │ " " │ │ │ By feature │ " " │ │ │ Total usage · relative units │ " -" │ │ │ 86 │ " +" │ │ │ 20 73 64 91 81 100 86 │ " " │ │ │ 100 ▁▁▁▁ ▅▅▅▅ ▅▅▅▅ ▇▇▇▇ ▆▆▆▆ ████ ▆▆▆▆ │ " " │ │ │ 0 ─────────────────────────────────────────────── │ " " │ │ │ ▲ │ " @@ -26,7 +27,7 @@ expression: output " │ By feature │ │ 7d │ " " │ › 5-hour limits │ │ By model │ " " │ │ │ 574 reported messages │ " -" │ Latest period · 12 total 125% │ │ 103 │ " +" │ Latest period · 12 total 125% │ │ 62 83 107 75 59 85 103 │ " " │ │ │ 150 ▃▃▃▃ ▄▄▄▄ ▅▅▅▅ ▄▄▄▄ ▃▃▃▃ ▄▄▄▄ ▅▅▅▅ │ " " │ Weekly limits │ │ 0 ─────────────────────────────────────────────── │ " " │ │ │ ▲ │ " @@ -42,7 +43,7 @@ expression: output " │ │ │ │ " " │ 7d │ │ 7d │ " " │ 186 calls │ │ 54 uses │ " -" │ 29 │ │ 11 │ " +" │ 34 23 29 26 22 23 29 │ │ 8 6 9 8 7 5 11 │ " " │ 40 ▆▆▆▆ ▄▄▄▄ ▅▅▅▅ ▅▅▅▅ ▄▄▄▄ ▄▄▄▄ ▅▅▅▅ │ │ 20 ▃▃▃▃ ▂▂▂▂ ▃▃▃▃ ▃▃▃▃ ▂▂▂▂ ▂▂▂▂ ▄▄▄▄ │ " " │ 0 ──────────────────────────────────────────────── │ │ 0 ──────────────────────────────────────────────── │ " " │ ▲ │ │ ▲ │ " @@ -59,6 +60,5 @@ expression: output " │ │ " " │ No history has been reported. │ " " │ │ " -" │ │ " " tab/1–7 section · enter/z maximize " " g group · R refresh · pgup/pgdn scroll · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__duplicate_message_dates_render_the_full_other_remainder.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__duplicate_message_dates_render_the_full_other_remainder.snap index 423a0c2ad6..6a5d3333c5 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__duplicate_message_dates_render_the_full_other_remainder.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__duplicate_message_dates_render_the_full_other_remainder.snap @@ -19,11 +19,12 @@ expression: display(&rendered) Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() 3: Style::new().magenta().bg(Color::Reset).underline_color(Color::Reset) 4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) -5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +6: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 22:1 24:0 1: 0:0 1:2 3:0 18:3 30:0 @@ -37,5 +38,5 @@ Rows (column:palette): 9: 0:0 18:4 30:0 10: 0:0 18:4 30:0 11: 0:0 2:2 3:0 4:2 -12: 0:0 23:1 24:0 -13: 0:0 20:5 26:0 +12: 0:0 23:5 24:0 +13: 0:0 20:6 26:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__missing_zero_and_narrow_charts_keep_the_selection_visible.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__missing_zero_and_narrow_charts_keep_the_selection_visible.snap index 2d3bb8bf83..bc23bf58b1 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__missing_zero_and_narrow_charts_keep_the_selection_visible.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__missing_zero_and_narrow_charts_keep_the_selection_visible.snap @@ -3,7 +3,7 @@ source: tui/src/analytics/plot_tests.rs expression: "snapshots.join(\"\\n\\n\")" --- width=36, cursor=0 - + 5 6 ▄▄▄▄▄▄▄ ███████ — 0 ███████ @@ -13,22 +13,23 @@ width=36, cursor=0 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().fg(Color::Rgb(165, 165, 165)).bg(Color::Reset).underline_color(Color::Reset) -2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) -3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() -4: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +1: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() +2: Style::new().fg(Color::Rgb(165, 165, 165)).bg(Color::Reset).underline_color(Color::Reset) +3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) +4: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +6: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): -0: 0:0 -1: 0:0 1:1 2:0 27:2 34:0 -2: 0:0 27:2 34:0 -3: 0:0 8:3 9:0 19:4 20:0 27:2 34:0 -4: 0:0 1:1 2:0 3:4 -5: 0:0 8:3 9:0 -6: 0:0 5:5 11:0 16:1 22:0 27:1 33:0 +0: 0:0 30:1 31:0 +1: 0:0 1:2 2:0 27:3 34:0 +2: 0:0 27:3 34:0 +3: 0:0 8:4 9:0 19:1 20:0 27:3 34:0 +4: 0:0 1:2 2:0 3:1 +5: 0:0 8:5 9:0 +6: 0:0 5:6 11:0 16:2 22:0 27:2 33:0 width=36, cursor=1 - + 5 6 ▄▄▄▄▄▄▄ ███████ — 0 ███████ @@ -38,19 +39,20 @@ width=36, cursor=1 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().fg(Color::Rgb(165, 165, 165)).bg(Color::Reset).underline_color(Color::Reset) -2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) -3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() -5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +1: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() +2: Style::new().fg(Color::Rgb(165, 165, 165)).bg(Color::Reset).underline_color(Color::Reset) +3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) +4: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +6: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): -0: 0:0 -1: 0:0 1:1 2:0 27:2 34:0 -2: 0:0 27:2 34:0 -3: 0:0 8:3 9:0 19:4 20:0 27:2 34:0 -4: 0:0 1:1 2:0 3:3 -5: 0:0 19:4 20:0 -6: 0:0 5:1 11:0 16:5 22:0 27:1 33:0 +0: 0:0 30:1 31:0 +1: 0:0 1:2 2:0 27:3 34:0 +2: 0:0 27:3 34:0 +3: 0:0 8:1 9:0 19:4 20:0 27:3 34:0 +4: 0:0 1:2 2:0 3:1 +5: 0:0 19:5 20:0 +6: 0:0 5:2 11:0 16:6 22:0 27:2 33:0 width=8, cursor=2 5 @@ -63,19 +65,20 @@ width=8, cursor=2 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) 3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -4: Style::new().fg(Color::Rgb(165, 165, 165)).bg(Color::Reset).underline_color(Color::Reset) -5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().fg(Color::Rgb(165, 165, 165)).bg(Color::Reset).underline_color(Color::Reset) +6: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 6:1 7:0 1: 0:0 5:2 7:0 2: 0:0 5:2 7:0 3: 0:3 1:0 3:3 4:0 5:2 7:0 4: 0:3 -5: 0:0 6:1 7:0 -6: 0:4 2:0 5:5 7:0 +5: 0:0 6:4 7:0 +6: 0:5 2:0 5:6 7:0 width=1, cursor=2 5 @@ -87,15 +90,16 @@ width=1, cursor=2 Palette: -0: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +0: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) 2: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) +3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +4: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) Rows (column:palette): 0: 0:0 1: 0:1 2: 0:1 3: 0:1 4: 0:2 -5: 0:0 -6: 0:3 +5: 0:3 +6: 0:4 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__narrow_equal_height_totals_remain_separate_numbers.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__narrow_equal_height_totals_remain_separate_numbers.snap new file mode 100644 index 0000000000..1508a355fd --- /dev/null +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__narrow_equal_height_totals_remain_separate_numbers.snap @@ -0,0 +1,30 @@ +--- +source: tui/src/analytics/plot_tests.rs +expression: "screens.join(\"\\n\\n\")" +--- + 111 111 111 +111 ┊ 111 ┊ 111 ┊ +▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ +██ ██ ██ ██ ██ ██ ██ +██ ██ ██ ██ ██ ██ ██ +───────────────────── + ▲ + 1 2 3 4 5 6 7 + + +111 111 111 111 111 111 111 + ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ ▇▇ + ██ ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ ██ +──────────────────────────── + ▲ + 1 2 3 4 5 6 7 + + + 150 111 111 111 111 111 111 111 + ▇▇ ▇▇ ▇▇ ▇▇▇ ▇▇ ▇▇ ▇▇▇ + 75 ██ ██ ██ ███ ██ ██ ███ + ██ ██ ██ ███ ██ ██ ███ + 0 ────────────────────────────── + ▲ + 1 2 3 4 5 6 7 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__narrow_long_range_charts_never_truncate_dates.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__narrow_long_range_charts_never_truncate_dates.snap index 1448b75fff..fd494d74a1 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__narrow_long_range_charts_never_truncate_dates.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__narrow_long_range_charts_never_truncate_dates.snap @@ -13,16 +13,17 @@ width=1 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) 3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() Rows (column:palette): 0: 0:0 1: 0:1 2: 0:2 3: 0:2 4: 0:3 -5: 0:1 +5: 0:4 6: 0:0 width=2 @@ -36,18 +37,19 @@ width=2 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) 3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 1: 0:0 1:1 2: 0:2 3: 0:2 4: 0:3 -5: 0:0 1:1 -6: 0:4 +5: 0:0 1:4 +6: 0:5 width=5 @@ -60,18 +62,19 @@ width=5 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) 3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 1: 0:0 4:1 2: 0:2 3: 0:2 4: 0:3 -5: 0:0 4:1 -6: 0:0 3:4 +5: 0:0 4:4 +6: 0:0 3:5 width=6 @@ -84,15 +87,16 @@ Jan 15 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) 3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 1: 0:0 5:1 2: 0:2 3: 0:2 4: 0:3 -5: 0:0 5:1 -6: 0:4 +5: 0:0 5:4 +6: 0:5 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__oversized_axes_are_hidden_instead_of_truncated.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__oversized_axes_are_hidden_instead_of_truncated.snap index b55f3fc92d..f082b06e12 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__oversized_axes_are_hidden_instead_of_truncated.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__oversized_axes_are_hidden_instead_of_truncated.snap @@ -14,10 +14,11 @@ Jan 15 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) 3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 1:1 5:0 1: 0:0 1:2 6:0 @@ -25,8 +26,8 @@ Rows (column:palette): 3: 0:0 1:2 6:0 4: 0:0 1:2 6:0 5: 0:3 -6: 0:0 3:1 4:0 -7: 0:4 6:0 +6: 0:0 3:4 4:0 +7: 0:5 6:0 width=30 100M @@ -40,10 +41,11 @@ width=30 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() 3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 15:1 19:0 1: 0:0 1:2 5:0 12:3 24:0 @@ -51,8 +53,8 @@ Rows (column:palette): 3: 0:0 2:2 5:0 12:3 24:0 4: 0:0 12:3 24:0 5: 0:0 4:2 5:0 6:2 -6: 0:0 17:1 18:0 -7: 0:0 14:4 20:0 +6: 0:0 17:4 18:0 +7: 0:0 14:5 20:0 width=35 100M @@ -66,10 +68,11 @@ width=35 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() 3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 18:1 22:0 1: 0:0 1:2 5:0 14:3 26:0 @@ -77,8 +80,8 @@ Rows (column:palette): 3: 0:0 2:2 5:0 14:3 26:0 4: 0:0 14:3 26:0 5: 0:0 4:2 5:0 6:2 -6: 0:0 20:1 21:0 -7: 0:0 17:4 23:0 +6: 0:0 20:4 21:0 +7: 0:0 17:5 23:0 width=44 100M @@ -92,10 +95,11 @@ width=44 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() 3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 22:1 26:0 1: 0:0 1:2 5:0 19:3 31:0 @@ -103,8 +107,8 @@ Rows (column:palette): 3: 0:0 2:2 5:0 19:3 31:0 4: 0:0 19:3 31:0 5: 0:0 4:2 5:0 6:2 -6: 0:0 24:1 25:0 -7: 0:0 21:4 27:0 +6: 0:0 24:4 25:0 +7: 0:0 21:5 27:0 width=30 @@ -118,10 +122,11 @@ width=30 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) 3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 1: 0:0 4:1 24:0 @@ -129,5 +134,5 @@ Rows (column:palette): 3: 0:0 9:2 21:0 4: 0:0 9:2 21:0 5: 0:3 -6: 0:0 14:1 15:0 -7: 0:0 11:4 17:0 +6: 0:0 14:4 15:0 +7: 0:0 11:5 17:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__partial_cells_use_the_midpoint_and_descend_from_the_baseline.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__partial_cells_use_the_midpoint_and_descend_from_the_baseline.snap index 5cce260999..f8b8f2f1a6 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__partial_cells_use_the_midpoint_and_descend_from_the_baseline.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__partial_cells_use_the_midpoint_and_descend_from_the_baseline.snap @@ -3,45 +3,47 @@ source: tui/src/analytics/plot_tests.rs expression: "snapshots.join(\"\\n\\n\")" --- sign=1 - +1.75 ▇▇▇▇ — ──────────── ▲ 14 15 Palette: -0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().magenta().bg(Color::Reset).underline_color(Color::Reset) -2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() -3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() +1: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) +2: Style::new().magenta().bg(Color::Reset).underline_color(Color::Reset) +3: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): -0: 0:0 -1: 0:0 1:1 5:0 8:2 9:0 -2: 0:3 -3: 0:0 8:2 9:0 -4: 0:0 1:3 3:0 7:4 9:0 +0: 0:0 4:1 +1: 0:1 1:2 5:1 8:3 9:1 +2: 0:0 +3: 0:1 8:4 9:1 +4: 0:1 1:0 3:1 7:5 9:1 sign=-1 — ──────────── ▁▁▁▁ - +-1.75 ▲ 14 15 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() 3: Style::new().magenta().bg(Color::Reset).underline_color(Color::Reset).reversed() -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 1: 0:0 8:1 9:0 2: 0:2 3: 0:0 1:3 5:0 -4: 0:0 -5: 0:0 8:1 9:0 -6: 0:0 1:2 3:0 7:4 9:0 +4: 0:2 5:0 +5: 0:0 8:4 9:0 +6: 0:0 1:2 3:0 7:5 9:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__selected_callout_keeps_the_authoritative_daily_total.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__selected_callout_keeps_the_authoritative_daily_total.snap index 64bc60cf31..b9a309eac9 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__selected_callout_keeps_the_authoritative_daily_total.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__selected_callout_keeps_the_authoritative_daily_total.snap @@ -14,10 +14,11 @@ expression: display(&rendered) Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) 1: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +2: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 3: Style::new().magenta().bg(Color::Reset).underline_color(Color::Reset) 4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) -5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +6: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 1: 0:0 1:1 3:0 21:2 26:0 @@ -25,5 +26,5 @@ Rows (column:palette): 3: 0:0 1:1 3:0 18:4 30:0 4: 0:0 18:4 30:0 5: 0:0 2:1 3:0 4:1 -6: 0:0 23:2 24:0 -7: 0:0 20:5 26:0 +6: 0:0 23:5 24:0 +7: 0:0 20:6 26:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__seven_day_totals.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__seven_day_totals.snap new file mode 100644 index 0000000000..a1f322d99a --- /dev/null +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__seven_day_totals.snap @@ -0,0 +1,37 @@ +--- +source: tui/src/analytics/plot_tests.rs +expression: text +--- + 711 + 800 611 + 511 █████████ + 411 █████████ █████████ + 311 ████████ █████████ █████████ + 400 211 █████████ ████████ █████████ █████████ + 111 ████████ █████████ ████████ █████████ █████████ + █████████ ████████ █████████ ████████ █████████ █████████ + ████████ █████████ ████████ █████████ ████████ █████████ █████████ + 0 ─────────────────────────────────────────────────────────────────────────────────────────────── + ▲ + Jan 1 Jan 2 Jan 3 Jan 4 Jan 5 Jan 6 Jan 7 + +Palette: +0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) +1: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() +2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) +3: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +Rows (column:palette): +0: 0:0 91:1 94:0 +1: 0:0 1:1 4:0 77:1 80:0 +2: 0:0 64:1 67:0 88:2 97:0 +3: 0:0 50:3 53:0 74:2 83:0 88:2 97:0 +4: 0:0 37:1 40:0 61:2 69:0 74:2 83:0 88:2 97:0 +5: 0:0 1:1 4:0 23:1 26:0 47:2 56:0 61:2 69:0 74:2 83:0 88:2 97:0 +6: 0:0 10:1 13:0 34:2 42:0 47:2 56:0 61:2 69:0 74:2 83:0 88:2 97:0 +7: 0:0 20:2 29:0 34:2 42:0 47:2 56:0 61:2 69:0 74:2 83:0 88:2 97:0 +8: 0:0 7:2 15:0 20:2 29:0 34:2 42:0 47:2 56:0 61:2 69:0 74:2 83:0 88:2 97:0 +9: 0:0 3:1 4:0 5:1 +10: 0:0 51:4 52:0 +11: 0:0 9:1 14:0 22:1 27:0 36:1 41:0 49:5 54:0 63:1 68:0 76:1 81:0 90:1 95:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__signed_chart_dark.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__signed_chart_dark.snap index 569de4714f..82660a65c4 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__signed_chart_dark.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__signed_chart_dark.snap @@ -3,9 +3,9 @@ source: tui/src/analytics/plot_tests.rs expression: display(&rendered) --- - 15 + 15 8.00 ▅▅▅▅▅▅▅▅ - 7.5 ████████ + 7.5 ████████ 0.00 ████████ ▂▂▂▂▂▂▂▂ ▆▆▆▆▆▆▆▆ 0 ────────────────────────────────────── ▄▄▄▄▄▄▄▄ ████████ ▂▂▂▂▂▂▂▂ @@ -19,23 +19,24 @@ expression: display(&rendered) Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) 1: Style::new().fg(Color::Rgb(165, 165, 165)).bg(Color::Reset).underline_color(Color::Reset) -2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) -3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() +2: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() +3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) 4: Style::new().magenta().bg(Color::Reset).underline_color(Color::Reset).reversed() 5: Style::new().magenta().bg(Color::Reset).underline_color(Color::Reset) -6: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() -7: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +6: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() +7: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +8: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 -1: 0:0 3:1 5:0 -2: 0:0 8:2 16:0 -3: 0:0 2:1 5:0 8:2 16:0 -4: 0:0 8:2 16:0 20:2 28:0 33:2 41:0 -5: 0:0 4:1 5:0 6:3 +1: 0:0 3:1 5:0 9:2 13:0 +2: 0:0 8:3 16:0 +3: 0:0 2:1 5:0 8:3 16:0 35:2 39:0 +4: 0:0 8:3 16:0 20:3 28:0 33:3 41:0 +5: 0:0 4:1 5:0 6:2 6: 0:0 8:4 16:0 20:5 28:0 33:4 41:0 7: 0:0 8: 0:0 22:6 27:0 9: 0:0 2:1 5:0 10: 0:0 -11: 0:0 24:6 25:0 -12: 0:0 8:1 14:0 21:7 27:0 34:1 40:0 +11: 0:0 24:7 25:0 +12: 0:0 8:1 14:0 21:8 27:0 34:1 40:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__signed_chart_light.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__signed_chart_light.snap index 67c34343e7..f100f1c7e8 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__signed_chart_light.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__signed_chart_light.snap @@ -3,9 +3,9 @@ source: tui/src/analytics/plot_tests.rs expression: display(&rendered) --- - 15 + 15 8.00 ▅▅▅▅▅▅▅▅ - 7.5 ████████ + 7.5 ████████ 0.00 ████████ ▂▂▂▂▂▂▂▂ ▆▆▆▆▆▆▆▆ 0 ────────────────────────────────────── ▄▄▄▄▄▄▄▄ ████████ ▂▂▂▂▂▂▂▂ @@ -19,23 +19,24 @@ expression: display(&rendered) Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) 1: Style::new().fg(Color::Rgb(76, 76, 76)).bg(Color::Reset).underline_color(Color::Reset) -2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) -3: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() +2: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() +3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) 4: Style::new().magenta().bg(Color::Reset).underline_color(Color::Reset).reversed() 5: Style::new().magenta().bg(Color::Reset).underline_color(Color::Reset) -6: Style::new().fg(Color::Rgb(0, 95, 135)).bg(Color::Reset).underline_color(Color::Reset).bold() -7: Style::new().fg(Color::Rgb(0, 95, 135)).bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +6: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).bold() +7: Style::new().fg(Color::Rgb(0, 95, 135)).bg(Color::Reset).underline_color(Color::Reset).bold() +8: Style::new().fg(Color::Rgb(0, 95, 135)).bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 -1: 0:0 3:1 5:0 -2: 0:0 8:2 16:0 -3: 0:0 2:1 5:0 8:2 16:0 -4: 0:0 8:2 16:0 20:2 28:0 33:2 41:0 -5: 0:0 4:1 5:0 6:3 +1: 0:0 3:1 5:0 9:2 13:0 +2: 0:0 8:3 16:0 +3: 0:0 2:1 5:0 8:3 16:0 35:2 39:0 +4: 0:0 8:3 16:0 20:3 28:0 33:3 41:0 +5: 0:0 4:1 5:0 6:2 6: 0:0 8:4 16:0 20:5 28:0 33:4 41:0 7: 0:0 8: 0:0 22:6 27:0 9: 0:0 2:1 5:0 10: 0:0 -11: 0:0 24:6 25:0 -12: 0:0 8:1 14:0 21:7 27:0 34:1 40:0 +11: 0:0 24:7 25:0 +12: 0:0 8:1 14:0 21:8 27:0 34:1 40:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__tiny_segments_keep_their_series_color_beside_a_large_day.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__tiny_segments_keep_their_series_color_beside_a_large_day.snap index 1d80f5587b..cd4be0edf0 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__tiny_segments_keep_their_series_color_beside_a_large_day.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__tiny_segments_keep_their_series_color_beside_a_large_day.snap @@ -6,7 +6,7 @@ sign=1 100.00 100 ████████████ ████████████ - 50 ████████████ + 50 ████████████ 0.01 ████████████ ▁▁▁▁▁▁▁▁▁▁▁▁ 0 ─────────────────────────────────────── ▲ @@ -14,19 +14,20 @@ sign=1 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() 3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) -4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 11:1 17:0 1: 0:0 1:2 4:0 8:3 20:0 2: 0:0 8:3 20:0 -3: 0:0 2:2 4:0 8:3 20:0 +3: 0:0 2:2 4:0 8:3 20:0 31:2 35:0 4: 0:0 8:3 20:0 28:3 40:0 5: 0:0 3:2 4:0 5:2 -6: 0:0 14:1 15:0 -7: 0:0 11:4 17:0 30:2 36:0 +6: 0:0 14:4 15:0 +7: 0:0 11:5 17:0 30:2 36:0 sign=-1 100.00 @@ -36,7 +37,7 @@ sign=-1 ████████████ 0 ────────────────────────────────────── ▇▇▇▇▇▇▇▇▇▇▇▇ - + -0.01 -100 @@ -45,11 +46,12 @@ sign=-1 Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) -1: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +1: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() 2: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() 3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset) 4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).reversed() -5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +5: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +6: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 12:1 18:0 1: 0:0 2:2 5:0 9:3 21:0 @@ -58,9 +60,9 @@ Rows (column:palette): 4: 0:0 9:3 21:0 5: 0:0 4:2 5:0 6:2 6: 0:0 28:4 40:0 -7: 0:0 +7: 0:0 32:2 37:0 8: 0:0 9: 0:0 1:2 5:0 10: 0:0 -11: 0:0 15:1 16:0 -12: 0:0 12:5 18:0 31:2 37:0 +11: 0:0 15:5 16:0 +12: 0:0 12:6 18:0 31:2 37:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__zero_credit_history_uses_a_readable_scale.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__zero_credit_history_uses_a_readable_scale.snap index c130c04793..8c4964a90b 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__zero_credit_history_uses_a_readable_scale.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__plot__tests__zero_credit_history_uses_a_readable_scale.snap @@ -14,8 +14,9 @@ expression: display(&rendered) Palette: 0: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset) 1: Style::new().fg(Color::Reset).bg(Color::Reset).underline_color(Color::Reset).dim() -2: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() -3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() +2: Style::new().white().bg(Color::Reset).underline_color(Color::Reset).bold() +3: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold() +4: Style::new().cyan().bg(Color::Reset).underline_color(Color::Reset).bold().underlined() Rows (column:palette): 0: 0:0 1: 0:0 3:1 4:0 @@ -23,5 +24,5 @@ Rows (column:palette): 3: 0:0 1:1 4:0 4: 0:0 7:1 8:0 12:1 13:0 18:1 19:0 23:1 24:0 29:1 30:0 34:1 35:0 38:2 42:0 5: 0:0 3:1 4:0 5:1 -6: 0:0 40:2 41:0 -7: 0:0 7:1 8:0 11:1 13:0 17:1 19:0 22:1 24:0 28:1 30:0 33:1 35:0 39:3 41:0 +6: 0:0 40:3 41:0 +7: 0:0 7:1 8:0 11:1 13:0 17:1 19:0 22:1 24:0 28:1 30:0 33:1 35:0 39:4 41:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__account_layouts_show_reports_and_wrap_navigation.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__account_layouts_show_reports_and_wrap_navigation.snap index 84f1033ec6..7856f68d76 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__account_layouts_show_reports_and_wrap_navigation.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__account_layouts_show_reports_and_wrap_navigation.snap @@ -4,6 +4,7 @@ expression: "screens.join(\"\\n\")" --- " Analytics · Live account " " " +" " " [1 Summary] 2 Total usage history 3 Messages 4 Plugins called 5 Skills used 6 Top chats " " " " ▎ Summary " @@ -29,9 +30,8 @@ expression: "screens.join(\"\\n\")" " " " " " " -" " -" tab/1–6 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–6 section · z dashboard " +" g view · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -42,11 +42,11 @@ expression: "screens.join(\"\\n\")" " ──────────────────────────────────────────────────────────────────────────────────────────────── " " Total usage · relative units " " Approximate · may be delayed up to 6 hours " -" 86 " -" 100 ▃▃▃▃▃▃▃▃ ████████ ▁▁▁▁▁▁▁▁ " -" ▃▃▃▃▃▃▃▃ ████████ ▆▆▆▆▆▆▆▆ ████████ ████████ " +" 91 100 86 " +" 100 73 ▃▃▃▃▃▃▃▃ 81 ████████ ▁▁▁▁▁▁▁▁ " +" ▃▃▃▃▃▃▃▃ 64 ████████ ▆▆▆▆▆▆▆▆ ████████ ████████ " " ████████ ▆▆▆▆▆▆▆▆ ████████ ████████ ████████ ████████ " -" 50 ████████ ████████ ████████ ████████ ████████ ████████ " +" 50 20 ████████ ████████ ████████ ████████ ████████ ████████ " " ▁▁▁▁▁▁▁▁ ████████ ████████ ████████ ████████ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ ████████ ████████ " " 0 ─────────────────────────────────────────────────────────────────────────────────────────── " @@ -62,7 +62,7 @@ expression: "screens.join(\"\\n\")" " ● Other 10.5% " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -74,9 +74,9 @@ expression: "screens.join(\"\\n\")" " 574 reported messages " " " " 150 " -" 103 " -" ▇▇▇▇▇▇▇▇ ▆▆▆▆▆▆▆▆ " -" 75 ▆▆▆▆▆▆▆▆ ████████ ▄▄▄▄▄▄▄▄ ▇▇▇▇▇▇▇▇ ████████ " +" 107 103 " +" 83 ▇▇▇▇▇▇▇▇ 75 85 ▆▆▆▆▆▆▆▆ " +" 75 62 ▆▆▆▆▆▆▆▆ ████████ ▄▄▄▄▄▄▄▄ 59 ▇▇▇▇▇▇▇▇ ████████ " " ▇▇▇▇▇▇▇▇ ████████ ████████ ████████ ▆▆▆▆▆▆▆▆ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ ████████ ████████ " @@ -93,7 +93,7 @@ expression: "screens.join(\"\\n\")" " ● Other 7 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -104,9 +104,9 @@ expression: "screens.join(\"\\n\")" " ──────────────────────────────────────────────────────────────────────────────────────────────── " " 186 calls " " " -" 40 29 " -" ▇▇▇▇▇▇▇▇ " -" ████████ ████████ ▄▄▄▄▄▄▄▄ █████████ " +" 40 34 29 29 " +" ▇▇▇▇▇▇▇▇ 23 26 23 " +" ████████ ████████ ▄▄▄▄▄▄▄▄ 22 █████████ " " 20 ████████ ████████ ████████ ████████ ▆▆▆▆▆▆▆▆ ████████ █████████ " " ████████ ████████ ████████ ████████ ████████ ████████ █████████ " " ████████ ████████ ████████ ████████ ████████ ████████ █████████ " @@ -124,7 +124,7 @@ expression: "screens.join(\"\\n\")" " ● Notion 4 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -137,9 +137,9 @@ expression: "screens.join(\"\\n\")" " " " 20 " " " -" 11 " -" 10 ▁▁▁▁▁▁▁▁ ▆▆▆▆▆▆▆▆▆ " -" ▆▆▆▆▆▆▆▆ ████████ ▆▆▆▆▆▆▆▆ ▃▃▃▃▃▃▃▃ █████████ " +" 9 11 " +" 10 8 6 ▁▁▁▁▁▁▁▁ 8 7 ▆▆▆▆▆▆▆▆▆ " +" ▆▆▆▆▆▆▆▆ ████████ ▆▆▆▆▆▆▆▆ ▃▃▃▃▃▃▃▃ 5 █████████ " " ████████ ████████ ████████ ████████ ████████ ▆▆▆▆▆▆▆▆ █████████ " " ████████ ████████ ████████ ████████ ████████ ████████ █████████ " " 0 ──────────────────────────────────────────────────────────────────────────────────────────── " @@ -155,10 +155,11 @@ expression: "screens.join(\"\\n\")" " ● Debugging 1 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " " Analytics · Live account " " " +" " " 1 Summary 2 Total usage history 3 Messages 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -184,19 +185,19 @@ expression: "screens.join(\"\\n\")" " " " " " " -" " " tab/1–6 section · s sort · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " " Analytics · Live account " " " +" " " ╭─ 1 Summary ──────────────────────────────────────────────────╮ ╭─ 2 Total usage history ──────────────────────────────────────╮ " " │ │ │ │ " " │ No history has been reported. │ │ 7d │ " " │ │ │ By feature │ " " │ │ │ Total usage · relative units │ " -" │ │ │ 86 │ " -" │ │ │ 100 ▃▃▃▃▃ ▂▂▂▂▂ ▆▆▆▆▆ ▄▄▄▄▄ █████ ▅▅▅▅▅▅ │ " +" │ │ │ 73 64 91 81 100 86 │ " +" │ │ │ 100 20 ▃▃▃▃▃ ▂▂▂▂▂ ▆▆▆▆▆ ▄▄▄▄▄ █████ ▅▅▅▅▅▅ │ " " │ │ │ ▃▃▃▃▃ █████ █████ █████ █████ █████ ██████ │ " " │ │ │ 0 ───────────────────────────────────────────────────────── │ " " │ │ │ ▲ │ " @@ -214,9 +215,9 @@ expression: "screens.join(\"\\n\")" " │ │ │ │ " " │ 7d │ │ 7d │ " " │ By model │ │ 186 calls │ " -" │ 574 reported messages │ │ 29 │ " -" │ 103 │ │ 40 ▅▅▅▅▅ ▁▁▁▁▁ ▃▃▃▃▃ ▂▂▂▂▂▂ ▁▁▁▁▁ ▃▃▃▃▃▃ │ " -" │ 150 ▃▃▃▃▃ ▁▁▁▁▁ ▂▂▂▂▂▂ │ │ █████ █████ █████ ██████ █████ █████ ██████ │ " +" │ 574 reported messages │ │ 34 23 29 26 22 23 29 │ " +" │ 83 107 85 103 │ │ 40 ▅▅▅▅▅ ▁▁▁▁▁ ▃▃▃▃▃ ▂▂▂▂▂▂ ▁▁▁▁▁ ▃▃▃▃▃▃ │ " +" │ 150 62 ▃▃▃▃▃ 75 59 ▁▁▁▁▁ ▂▂▂▂▂▂ │ │ █████ █████ █████ ██████ █████ █████ ██████ │ " " │ ▆▆▆▆▆ █████ █████ █████ ▆▆▆▆▆ █████ ██████ │ │ 0 ────────────────────────────────────────────────────────── │ " " │ 0 ───────────────────────────────────────────────────────── │ │ ▲ │ " " │ ▲ │ │ Aug 27 Aug 28 Aug 29 Aug 30 Aug 31 Sep 1 Sep 2 │ " @@ -235,7 +236,7 @@ expression: "screens.join(\"\\n\")" " │ 7d │ │ No history has been reported. │ " " │ 54 uses │ │ │ " " │ 11 │ │ │ " -" │ 20 │ │ │ " +" │ 20 8 6 9 8 7 5 │ │ │ " " │ ▆▆▆▆▆ ▄▄▄▄▄ ▇▇▇▇▇ ▆▆▆▆▆▆ ▅▅▅▅▅ ▄▄▄▄▄ ██████ │ │ │ " " │ 0 ────────────────────────────────────────────────────────── │ │ │ " " │ ▲ │ │ │ " @@ -249,12 +250,12 @@ expression: "screens.join(\"\\n\")" " │ │ │ │ " " │ │ │ │ " " ╰────────────────────────────────────────────────────────────────╯ ╰────────────────────────────────────────────────────────────────╯ " -" " " tab/1–6 section · s sort · enter/z maximize " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " " Analytics · Live account " " " +" " " [1 Summary] 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used 6 " " Top chats " " " @@ -280,9 +281,8 @@ expression: "screens.join(\"\\n\")" " " " " " " -" " -" tab/1–6 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–6 section · z dashboard " +" g view · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -294,10 +294,10 @@ expression: "screens.join(\"\\n\")" " ──────────────────────────────────────────────────────────────────────────────────────────────── " " 431.00 credits " " " -" 150 " -" ▂▂▂▂▂▂▂▂ " -" ▃▃▃▃▃▃▃▃ ████████ 64.00 " -" 75 ▂▂▂▂▂▂▂▂ ████████ ████████ ████████ ▄▄▄▄▄▄▄▄ " +" 150 109.00 " +" 85.00 ▂▂▂▂▂▂▂▂ " +" 57.00 ▃▃▃▃▃▃▃▃ 75.00 ████████ 64.00 " +" 75 41.00 ▂▂▂▂▂▂▂▂ ████████ ████████ ████████ ▄▄▄▄▄▄▄▄ " " ▅▅▅▅▅▅▅▅ ████████ ████████ ████████ ████████ ████████ " " 0 ████████ ████████ ████████ ████████ ████████ ████████ " " 0 ─────────────────────────────────────────────────────────────────────────────────────────── " @@ -313,7 +313,7 @@ expression: "screens.join(\"\\n\")" " ● Web 9.00 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -325,12 +325,13 @@ expression: "screens.join(\"\\n\")" " ──────────────────────────────────────────────────────────────────────────────────────────────── " " All models · m change model " " 4.4M tokens " -" " -" 1M ▂▂▂▂▂▂▂▂ 731K " -" ▆▆▆▆▆▆▆▆ ▃▃▃▃▃▃▃▃ ████████ ▅▅▅▅▅▅▅▅ " -" 500K ████████ ▅▅▅▅▅▅▅▅ ████████ ████████ ████████ ████████ " +" 850K " +" 1M 773.5K 688.5K 731K " +" 620.5K 544K ▅▅▅▅▅▅▅▅ ▁▁▁▁▁▁▁▁ ████████ ▃▃▃▃▃▃▃▃ " +" ▅▅▅▅▅▅▅▅ ▂▂▂▂▂▂▂▂ ████████ ████████ ████████ ████████ " +" 500K 170K ████████ ████████ ████████ ████████ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ ████████ " -" ▆▆▆▆▆▆▆▆ ████████ ████████ ████████ ████████ ████████ ████████ " +" ████████ ████████ ████████ ████████ ████████ ████████ ████████ " " 0 ────────────────────────────────────────────────────────────────────────────────────────── " " ▲ " " Aug 27 Aug 28 Aug 29 Aug 30 Aug 31 Sep 1 Sep 2 " @@ -341,10 +342,9 @@ expression: "screens.join(\"\\n\")" " ● Cached input 602,000 " " ● Uncached input 86,000 " " ● Output 43,000 " -" Updated Sep 2 16:00 UTC " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close Updated Sep 2 16:00 UTC " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -355,9 +355,9 @@ expression: "screens.join(\"\\n\")" " ▎ Plugins called " " ──────────────────────────────────────────────────────────────────────────────────────────────── " " 186 calls " -" " -" 40 29 " -" ████████ ▂▂▂▂▂▂▂▂ ▂▂▂▂▂▂▂▂▂ " +" 34 " +" 40 29 29 " +" ████████ 23 ▂▂▂▂▂▂▂▂ 26 22 23 ▂▂▂▂▂▂▂▂▂ " " ████████ ▃▃▃▃▃▃▃▃ ████████ ▇▇▇▇▇▇▇▇ ▂▂▂▂▂▂▂▂ ▃▃▃▃▃▃▃▃ █████████ " " 20 ████████ ████████ ████████ ████████ ████████ ████████ █████████ " " ████████ ████████ ████████ ████████ ████████ ████████ █████████ " @@ -375,7 +375,7 @@ expression: "screens.join(\"\\n\")" " ● Notion 4 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -389,8 +389,8 @@ expression: "screens.join(\"\\n\")" " " " 20 " " 11 " -" ▂▂▂▂▂▂▂▂▂ " -" 10 ▃▃▃▃▃▃▃▃ ▅▅▅▅▅▅▅▅ ▃▃▃▃▃▃▃▃ █████████ " +" 8 9 8 7 ▂▂▂▂▂▂▂▂▂ " +" 10 ▃▃▃▃▃▃▃▃ 6 ▅▅▅▅▅▅▅▅ ▃▃▃▃▃▃▃▃ 5 █████████ " " ████████ ▆▆▆▆▆▆▆▆ ████████ ████████ ████████ ▄▄▄▄▄▄▄▄ █████████ " " ████████ ████████ ████████ ████████ ████████ ████████ █████████ " " 0 ──────────────────────────────────────────────────────────────────────────────────────────── " @@ -406,10 +406,11 @@ expression: "screens.join(\"\\n\")" " ● Debugging 1 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 " " Top chats] " " " @@ -435,19 +436,19 @@ expression: "screens.join(\"\\n\")" " " " " " " -" " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " " Analytics · Live account " " " +" " " ╭─ 1 Summary ──────────────────────────────────────────────────╮ ╭─ 2 Credits usage history ────────────────────────────────────╮ " " │ │ │ │ " " │ No history has been reported. │ │ 7d │ " " │ │ │ By product │ " " │ │ │ 431.00 credits │ " -" │ │ │ │ " -" │ │ │ 150 ▁▁▁▁▁ ▃▃▃▃▃ 64.00 │ " +" │ │ │ 85.00 109.00 │ " +" │ │ │ 150 41.00 57.00 ▁▁▁▁▁ 75.00 ▃▃▃▃▃ 64.00 │ " " │ │ │ 0 ▄▄▄▄▄ ▆▆▆▆▆ █████ █████ █████ ▆▆▆▆▆▆ │ " " │ │ │ 0 ───────────────────────────────────────────────────────── │ " " │ │ │ ▲ │ " @@ -465,9 +466,9 @@ expression: "screens.join(\"\\n\")" " │ │ │ │ " " │ 7d · All models │ │ 7d │ " " │ By token type │ │ 186 calls │ " -" │ 4.4M tokens │ │ 29 │ " -" │ 731K │ │ 40 ▅▅▅▅▅ ▁▁▁▁▁ ▃▃▃▃▃ ▂▂▂▂▂▂ ▁▁▁▁▁ ▃▃▃▃▃▃ │ " -" │ 1M ▁▁▁▁▁ ▄▄▄▄▄ ▃▃▃▃▃ ▅▅▅▅▅ ▃▃▃▃▃ │ │ █████ █████ █████ ██████ █████ █████ ██████ │ " +" │ 4.4M tokens │ │ 34 23 29 26 22 23 29 │ " +" │ 620.5K 544K 773.5K 688.5K 850K 731K │ │ 40 ▅▅▅▅▅ ▁▁▁▁▁ ▃▃▃▃▃ ▂▂▂▂▂▂ ▁▁▁▁▁ ▃▃▃▃▃▃ │ " +" │ 1M 170K ▁▁▁▁▁ ▄▄▄▄▄ ▃▃▃▃▃ ▅▅▅▅▅ ▃▃▃▃▃ │ │ █████ █████ █████ ██████ █████ █████ ██████ │ " " │ ▂▂▂▂▂ █████ █████ █████ █████ █████ █████ │ │ 0 ────────────────────────────────────────────────────────── │ " " │ 0 ──────────────────────────────────────────────────────── │ │ ▲ │ " " │ ▲ │ │ Aug 27 Aug 28 Aug 29 Aug 30 Aug 31 Sep 1 Sep 2 │ " @@ -486,7 +487,7 @@ expression: "screens.join(\"\\n\")" " │ 7d │ │ 30d active · lifetime credits │ " " │ 54 uses │ │ │ " " │ 11 │ │ Q3 planning analysis 120.00 │ " -" │ 20 │ │ Refactor billing usage 113.00 │ " +" │ 20 8 6 9 8 7 5 │ │ Refactor billing usage 113.00 │ " " │ ▆▆▆▆▆ ▄▄▄▄▄ ▇▇▇▇▇ ▆▆▆▆▆▆ ▅▅▅▅▅ ▄▄▄▄▄ ██████ │ │ Other usage 109.00 │ " " │ 0 ────────────────────────────────────────────────────────── │ │ Launch readiness review 85.00 │ " " │ ▲ │ │ Plan the week 0.00 │ " @@ -500,6 +501,5 @@ expression: "screens.join(\"\\n\")" " │ │ │ │ " " │ │ │ │ " " ╰────────────────────────────────────────────────────────────────╯ ╰────────────────────────────────────────────────────────────────╯ " -" " " tab/1–6 section · enter/z maximize " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__account_pending_and_error_do_not_start_reports.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__account_pending_and_error_do_not_start_reports.snap index 1b32eda5ec..bb29ece2da 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__account_pending_and_error_do_not_start_reports.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__account_pending_and_error_do_not_start_reports.snap @@ -6,6 +6,7 @@ expression: error " " " " " " +" " " Sign in again to view Analytics. " " " " " @@ -24,5 +25,4 @@ expression: error " " " " " " -" " " R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__business_chats_display_only_supplied_dollars.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__business_chats_display_only_supplied_dollars.snap index 3bcd7e284f..dcdfc0d403 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__business_chats_display_only_supplied_dollars.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__business_chats_display_only_supplied_dollars.snap @@ -4,6 +4,7 @@ expression: "format!(\"{dollars}\\n{narrow}\")" --- " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 " " Top chats] " " " @@ -29,12 +30,12 @@ expression: "format!(\"{dollars}\\n{narrow}\")" " " " " " " -" " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " " Analytics · Live account " " " +" " " Summary Credits usage history Token " " usage history Plugins called Skills " " used [Top chats] " @@ -58,8 +59,7 @@ expression: "format!(\"{dollars}\\n{narrow}\")" " Local chats · excludes archived chats " " and subagent usage " " " -" " " tab/1–6 section · z dashboard · ↑/↓ " " row · enter details " -" R refresh · pgup/pgdn scroll · esc " -" back · q close " +" R refresh · esc back · q close " +" " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__business_tokens_filter_models.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__business_tokens_filter_models.snap index c8553d0590..d11660c49e 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__business_tokens_filter_models.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__business_tokens_filter_models.snap @@ -12,12 +12,13 @@ expression: "format!(\"{all}\\n{filtered}\")" " ──────────────────────────────────────────────────────────────────────────────────────────────── " " All models · m change model " " 4.4M tokens " -" " -" 1M ▂▂▂▂▂▂▂▂ 731K " -" ▆▆▆▆▆▆▆▆ ▃▃▃▃▃▃▃▃ ████████ ▅▅▅▅▅▅▅▅ " -" 500K ████████ ▅▅▅▅▅▅▅▅ ████████ ████████ ████████ ████████ " +" 850K " +" 1M 773.5K 688.5K 731K " +" 620.5K 544K ▅▅▅▅▅▅▅▅ ▁▁▁▁▁▁▁▁ ████████ ▃▃▃▃▃▃▃▃ " +" ▅▅▅▅▅▅▅▅ ▂▂▂▂▂▂▂▂ ████████ ████████ ████████ ████████ " +" 500K 170K ████████ ████████ ████████ ████████ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ ████████ " -" ▆▆▆▆▆▆▆▆ ████████ ████████ ████████ ████████ ████████ ████████ " +" ████████ ████████ ████████ ████████ ████████ ████████ ████████ " " 0 ────────────────────────────────────────────────────────────────────────────────────────── " " ▲ " " Aug 27 Aug 28 Aug 29 Aug 30 Aug 31 Sep 1 Sep 2 " @@ -28,10 +29,9 @@ expression: "format!(\"{all}\\n{filtered}\")" " ● Cached input 602,000 " " ● Uncached input 86,000 " " ● Output 43,000 " -" Updated Sep 2 16:00 UTC " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close Updated Sep 2 16:00 UTC " " Analytics · Live account · analytics@example.test " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -43,12 +43,13 @@ expression: "format!(\"{all}\\n{filtered}\")" " ──────────────────────────────────────────────────────────────────────────────────────────────── " " GPT-5.5 · m change model " " 4.4M tokens " -" " -" 1M ▂▂▂▂▂▂▂▂ 731K " -" ▆▆▆▆▆▆▆▆ ▃▃▃▃▃▃▃▃ ████████ ▅▅▅▅▅▅▅▅ " -" 500K ████████ ▅▅▅▅▅▅▅▅ ████████ ████████ ████████ ████████ " +" 850K " +" 1M 773.5K 688.5K 731K " +" 620.5K 544K ▅▅▅▅▅▅▅▅ ▁▁▁▁▁▁▁▁ ████████ ▃▃▃▃▃▃▃▃ " +" ▅▅▅▅▅▅▅▅ ▂▂▂▂▂▂▂▂ ████████ ████████ ████████ ████████ " +" 500K 170K ████████ ████████ ████████ ████████ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ ████████ " -" ▆▆▆▆▆▆▆▆ ████████ ████████ ████████ ████████ ████████ ████████ " +" ████████ ████████ ████████ ████████ ████████ ████████ ████████ " " 0 ────────────────────────────────────────────────────────────────────────────────────────── " " ▲ " " Aug 27 Aug 28 Aug 29 Aug 30 Aug 31 Sep 1 Sep 2 " @@ -59,7 +60,6 @@ expression: "format!(\"{all}\\n{filtered}\")" " ● Cached input 602,000 " " ● Uncached input 86,000 " " ● Output 43,000 " -" Updated Sep 2 16:00 UTC " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close Updated Sep 2 16:00 UTC " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__legend_tall_report.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__legend_tall_report.snap new file mode 100644 index 0000000000..7ad344cb2f --- /dev/null +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__legend_tall_report.snap @@ -0,0 +1,64 @@ +--- +source: tui/src/analytics/account_layout_tests.rs +expression: tall +--- +" Analytics · Live account " +" [7d] 30d · Aug 27–Sep 2, 2026 " +" " +" 1 Summary [2 Total usage history] 3 Messages 4 Plugins called 5 Skills used 6 Top chats " +" " +" ▎ Total usage history By feature " +" ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── " +" Total usage · relative units " +" Approximate · may be delayed up to 6 hours " +" 100 " +" 100 ██████████ " +" 91 ██████████ " +" ▂▂▂▂▂▂▂▂▂▂ ██████████ " +" ██████████ ██████████ 86 " +" ██████████ 81 ██████████ ▆▆▆▆▆▆▆▆▆▆ " +" ██████████ ▂▂▂▂▂▂▂▂▂▂ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ " +" 73 ██████████ ██████████ ██████████ ██████████ " +" ▇▇▇▇▇▇▇▇▇▇ ██████████ ██████████ ██████████ ██████████ " +" ██████████ 64 ██████████ ██████████ ██████████ ██████████ " +" ██████████ ▁▁▁▁▁▁▁▁▁▁ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" 50 ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" 20 ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" 0 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────── " +" ▲ " +" Aug 27 Aug 28 Aug 29 Aug 30 Aug 31 Sep 1 Sep 2 " +" " +" ──────────────────────────────────────────────────────── " +" Sep 2 · 86 usage units " +" Feature Share " +" ● Feature 1 10.0% " +" ● Feature 2 10.0% " +" ● Feature 3 10.0% " +" ● Feature 4 10.0% " +" ● Feature 5 10.0% " +" ● Feature 6 10.0% " +" ● Feature 7 10.0% " +" ● Feature 8 10.0% " +" ● Feature 9 10.0% " +" ● Feature 10 10.0% " +" " +" tab/1–6 section · z dashboard · ←/→ day · enter details " +" r 7/30d · g group · R refresh · esc back · q close Updated Sep 2 16:00 UTC " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__unknown_plan_keeps_summary_available_without_billing_reports.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__unknown_plan_keeps_summary_available_without_billing_reports.snap index a5c63118ea..337a1c8a6c 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__unknown_plan_keeps_summary_available_without_billing_reports.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__unknown_plan_keeps_summary_available_without_billing_reports.snap @@ -4,6 +4,7 @@ expression: terminal.backend().to_string() --- " Analytics · Live account · analytics@example.test " " " +" " " [1 Summary] " " " " ▎ Summary " @@ -20,7 +21,7 @@ expression: terminal.backend().to_string() " 12.3K — — — — " " Lifetime tokens Peak tokens Longest chat Current streak Longest streak " " " -" Token activity [Daily] Weekly Cumulative " +" Token activity Daily " " Last 12 months " " " " Token activity history unavailable " @@ -39,6 +40,5 @@ expression: terminal.backend().to_string() " " " " " " -" " -" tab/1–1 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–1 section · z dashboard " +" g view · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__unsupported_workspace_plans_hide_top_chats_and_skip_loading.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__unsupported_workspace_plans_hide_top_chats_and_skip_loading.snap index b431438a4f..4d434f7fb0 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__unsupported_workspace_plans_hide_top_chats_and_skip_loading.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__account_layout__unsupported_workspace_plans_hide_top_chats_and_skip_loading.snap @@ -10,8 +10,8 @@ expression: "screen(&mut view, 110, 24)" " ▎ Credits usage history By product " " ────────────────────────────────────────────────────────────────────────────────────────────────────────── " " 431.00 credits " -" " -" 150 ▁▁▁▁▁▁▁▁▁ ▃▃▃▃▃▃▃▃▃ 64.00 " +" 85.00 109.00 " +" 150 41.00 57.00 ▁▁▁▁▁▁▁▁▁ 75.00 ▃▃▃▃▃▃▃▃▃ 64.00 " " 0 ▄▄▄▄▄▄▄▄▄ ▆▆▆▆▆▆▆▆▆▆ █████████ ██████████ █████████ ▆▆▆▆▆▆▆▆▆▆ " " 0 ───────────────────────────────────────────────────────────────────────────────────────────────────── " " ▲ " @@ -25,4 +25,4 @@ expression: "screen(&mut view, 110, 24)" " ● IDE extension 10.00 " " ● Web 9.00 " " tab/1–5 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_breakdown_ranks_nonzero_groups_and_reflows.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_breakdown_ranks_nonzero_groups_and_reflows.snap index 7041b36cd0..c288c094b4 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_breakdown_ranks_nonzero_groups_and_reflows.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_breakdown_ranks_nonzero_groups_and_reflows.snap @@ -4,6 +4,7 @@ expression: "screens.join(\"\\n\")" --- " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -31,12 +32,12 @@ expression: "screens.join(\"\\n\")" " " " " " " -" " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " " Analytics · Live account " " " +" " " Summary Credits usage history Token usage history " " Plugins called Skills used [Top chats] " " " @@ -58,18 +59,18 @@ expression: "screens.join(\"\\n\")" " " " Refactor billing usage 113.00 " " Other usage 109.00 " -" Launch readiness review 85.00 " " " -" Showing 1–4 of 5 chats " +" Showing 1–3 of 5 chats " " Local chats · excludes archived chats and subagent " " usage " " " " tab/1–6 section · z dashboard · ↑/↓ row · enter " " details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -97,6 +98,5 @@ expression: "screens.join(\"\\n\")" " " " " " " -" " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_long_title_keeps_detail_indent_and_counts_missing_estimates.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_long_title_keeps_detail_indent_and_counts_missing_estimates.snap index 4f9de2fc9e..e0cd2f1fce 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_long_title_keeps_detail_indent_and_counts_missing_estimates.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_long_title_keeps_detail_indent_and_counts_missing_estimates.snap @@ -4,6 +4,7 @@ expression: output --- " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -29,6 +30,5 @@ expression: output " " " " " " -" " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_range_controls_and_visible_rows.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_range_controls_and_visible_rows.snap index 6271ae1f09..d03ad5ee9c 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_range_controls_and_visible_rows.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__chats_range_controls_and_visible_rows.snap @@ -4,6 +4,7 @@ expression: "screens.join(\"\\n\")" --- " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -19,16 +20,16 @@ expression: "screens.join(\"\\n\")" " Chat 06 120.00 " " Chat 07 120.00 " " Chat 08 120.00 " -" Chat 09 120.00 " " " -" Showing 1–9 of 30 chats " +" Showing 1–8 of 30 chats " " Local chats · excludes archived chats and subagent usage " " " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -36,7 +37,6 @@ expression: "screens.join(\"\\n\")" " Active in past 30 days · sorted by lifetime credits " " " " Chat Lifetime credits " -" Chat 22 120.00 " " Chat 23 120.00 " " Chat 24 120.00 " " Chat 25 120.00 " @@ -46,14 +46,15 @@ expression: "screens.join(\"\\n\")" " Chat 29 120.00 " " › Chat 30 120.00 " " " -" Showing 22–30 of 30 chats " +" Showing 23–30 of 30 chats " " Local chats · excludes archived chats and subagent usage " " " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -61,7 +62,6 @@ expression: "screens.join(\"\\n\")" " Active in past 30 days · sorted by lifetime credits " " " " Chat Lifetime credits " -" Chat 26 120.00 " " Chat 27 120.00 " " Chat 28 120.00 " " Chat 29 120.00 " @@ -71,8 +71,8 @@ expression: "screens.join(\"\\n\")" " GPT-5.6-Sol high standard 120.00 " " " " " -" Showing 26–30 of 30 chats " +" Showing 27–30 of 30 chats " " Local chats · excludes archived chats and subagent usage " " " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__moving_chat_selection_collapses_details_before_they_leave_the_viewport.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__moving_chat_selection_collapses_details_before_they_leave_the_viewport.snap index 098d8ceb15..c0d1489e00 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__moving_chat_selection_collapses_details_before_they_leave_the_viewport.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__moving_chat_selection_collapses_details_before_they_leave_the_viewport.snap @@ -4,6 +4,7 @@ expression: "screen(&mut view, 110, 24)" --- " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -23,6 +24,5 @@ expression: "screen(&mut view, 110, 24)" " " " " " " -" " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__unavailable_chat_titles_are_hidden_in_panel_and_overview.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__unavailable_chat_titles_are_hidden_in_panel_and_overview.snap index 7d71240c5f..787c135e10 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__unavailable_chat_titles_are_hidden_in_panel_and_overview.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__chats_table__unavailable_chat_titles_are_hidden_in_panel_and_overview.snap @@ -4,6 +4,7 @@ expression: "screens.join(\"\\n\")" --- " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -27,13 +28,12 @@ expression: "screens.join(\"\\n\")" " " " " " " -" " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " " Analytics · Live account " " " -" │ 27 28 29 30 31 1 2 │ │ │ " +" " " │ │ │ Sep 2 · 29 calls │ " " │ Sep 2 · 731,000 tokens │ │ ● Slack 10 │ " " │ ● Cached input 602,000 │ │ ● Figma 10 │ " @@ -45,7 +45,7 @@ expression: "screens.join(\"\\n\")" " │ │ │ │ " " │ 7d │ │ 30d active · lifetime credits │ " " │ 54 uses │ │ │ " -" │ 11 │ │ Chat usage unavailable — │ " +" │ 8 6 9 8 7 5 11 │ │ Chat usage unavailable — │ " " │ 20 ▃▃▃▃ ▂▂▂▂ ▃▃▃▃ ▃▃▃▃ ▂▂▂▂ ▂▂▂▂ ▄▄▄▄ │ │ │ " " │ 0 ─────────────────────────────────────────── │ │ Local chats · excludes subagents │ " " │ ▲ │ │ Some estimates unavailable │ " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__compact__report_headlines_and_axes_compact_large_values.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__compact__report_headlines_and_axes_compact_large_values.snap index b590c1762a..7094fc070b 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__compact__report_headlines_and_axes_compact_large_values.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__compact__report_headlines_and_axes_compact_large_values.snap @@ -31,7 +31,7 @@ expression: "screenshots.join(\"\\n\")" " ● Example 12,280,365,226 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -62,7 +62,7 @@ expression: "screenshots.join(\"\\n\")" " ● Example 9,749 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -93,4 +93,4 @@ expression: "screenshots.join(\"\\n\")" " ● Example 2,901 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chat_all_metrics.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chat_all_metrics.snap index ada4ee5ae9..67a6d16732 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chat_all_metrics.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chat_all_metrics.snap @@ -4,6 +4,7 @@ expression: "screen(&mut view, 110, 30)" --- " Analytics · Live account " " " +" " " 1 Summary 2 Total usage history 3 Messages 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -25,10 +26,9 @@ expression: "screen(&mut view, 110, 30)" " high · fast · codex " " " " Chat usage unavailable — — — " -" Chat usage unavailable — — — " " " -" Showing 1–3 of 3 chats " +" Showing 1–2 of 3 chats " " Local chats · includes discovered descendants · excludes archived roots " " " " tab/1–6 section · s sort · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chat_available_limits.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chat_available_limits.snap index 105eb43397..2215a45acd 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chat_available_limits.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chat_available_limits.snap @@ -4,6 +4,7 @@ expression: "screen(&mut view, 58, 30)" --- " Analytics · Live account " " " +" " " Summary Total usage history Messages Plugins called " " Skills used [Top chats] " " " @@ -28,7 +29,6 @@ expression: "screen(&mut view, 58, 30)" " " " " " " -" " " tab/1–6 section · s sort · z dashboard · ↑/↓ row · " " enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chats_keep_missing_rows_and_only_offer_known_metrics.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chats_keep_missing_rows_and_only_offer_known_metrics.snap index 501dbdab21..4e048b6d5a 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chats_keep_missing_rows_and_only_offer_known_metrics.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__consumer_refresh__consumer_chats_keep_missing_rows_and_only_offer_known_metrics.snap @@ -4,6 +4,7 @@ expression: "screen(&mut view, 90, 30)" --- " Analytics · Live account " " " +" " " 1 Summary 2 Total usage history 3 Messages 4 Plugins called 5 Skills used [6 Top " " chats] " " " @@ -29,6 +30,5 @@ expression: "screen(&mut view, 90, 30)" " Showing 1–3 of 3 chats " " Local chats · includes discovered descendants · excludes archived roots " " " -" " " tab/1–6 section · s sort · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__dashboard__dashboard_cards_align_and_keep_stable_summary_heights.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__dashboard__dashboard_cards_align_and_keep_stable_summary_heights.snap index c76a65ecc3..dfc4c590ad 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__dashboard__dashboard_cards_align_and_keep_stable_summary_heights.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__dashboard__dashboard_cards_align_and_keep_stable_summary_heights.snap @@ -10,8 +10,8 @@ expression: "format!(\"{wide}\\n{narrow}\")" " │ No history has been reported. │ │ 7d │ " " │ │ │ By feature │ " " │ │ │ Total usage · relative units │ " -" │ │ │ 86 │ " -" │ │ │ 100 ▃▃▃▃▃ ▂▂▂▂▂▂ ▆▆▆▆▆ ▄▄▄▄▄▄ █████ ▅▅▅▅▅▅ │ " +" │ │ │ 73 64 91 81 100 86 │ " +" │ │ │ 100 20 ▃▃▃▃▃ ▂▂▂▂▂▂ ▆▆▆▆▆ ▄▄▄▄▄▄ █████ ▅▅▅▅▅▅ │ " " │ │ │ ▃▃▃▃▃ █████ ██████ █████ ██████ █████ ██████ │ " " │ │ │ 0 ─────────────────────────────────────────────────────────── │ " " │ │ │ ▲ │ " @@ -29,9 +29,9 @@ expression: "format!(\"{wide}\\n{narrow}\")" " │ │ │ │ " " │ 7d │ │ 7d │ " " │ By model │ │ 186 calls │ " -" │ 574 reported messages │ │ 29 │ " -" │ 103 │ │ 40 ▅▅▅▅▅ ▁▁▁▁▁▁ ▃▃▃▃▃ ▂▂▂▂▂▂ ▁▁▁▁▁▁ ▃▃▃▃▃▃ │ " -" │ 150 ▃▃▃▃▃▃ ▁▁▁▁▁ ▂▂▂▂▂▂ │ │ █████ ██████ █████ ██████ █████ ██████ ██████ │ " +" │ 574 reported messages │ │ 34 23 29 26 22 23 29 │ " +" │ 83 107 85 103 │ │ 40 ▅▅▅▅▅ ▁▁▁▁▁▁ ▃▃▃▃▃ ▂▂▂▂▂▂ ▁▁▁▁▁▁ ▃▃▃▃▃▃ │ " +" │ 150 62 ▃▃▃▃▃▃ 75 59 ▁▁▁▁▁ ▂▂▂▂▂▂ │ │ █████ ██████ █████ ██████ █████ ██████ ██████ │ " " │ ▆▆▆▆▆ █████ ██████ █████ ▆▆▆▆▆▆ █████ ██████ │ │ 0 ──────────────────────────────────────────────────────────── │ " " │ 0 ─────────────────────────────────────────────────────────── │ │ ▲ │ " " │ ▲ │ │ Aug 27 Aug 28 Aug 29 Aug 30 Aug 31 Sep 1 Sep 2 │ " @@ -50,7 +50,7 @@ expression: "format!(\"{wide}\\n{narrow}\")" " │ 7d │ │ No history has been reported. │ " " │ 54 uses │ │ │ " " │ 11 │ │ │ " -" │ 20 │ │ │ " +" │ 20 8 6 9 8 7 5 │ │ │ " " │ ▆▆▆▆▆ ▄▄▄▄▄▄ ▇▇▇▇▇ ▆▆▆▆▆▆ ▅▅▅▅▅ ▄▄▄▄▄▄ ██████ │ │ │ " " │ 0 ──────────────────────────────────────────────────────────── │ │ │ " " │ ▲ │ │ │ " @@ -65,7 +65,7 @@ expression: "format!(\"{wide}\\n{narrow}\")" " │ │ │ │ " " ╰──────────────────────────────────────────────────────────────────╯ ╰──────────────────────────────────────────────────────────────────╯ " " tab/1–6 section · enter/z maximize " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -92,7 +92,7 @@ expression: "format!(\"{wide}\\n{narrow}\")" " │ 7d │ " " │ By feature │ " " │ Total usage · relative units │ " -" │ 100 │ " +" │ 20 73 64 91 81 100 86 │ " " │ 100 ▁▁▁▁▁ ▅▅▅▅▅ ▅▅▅▅▅▅ ▇▇▇▇▇ ▆▆▆▆▆▆ █████ ▆▆▆▆▆▆ │ " " │ 0 ─────────────────────────────────────────────────────────── │ " " │ ▲ │ " @@ -109,7 +109,7 @@ expression: "format!(\"{wide}\\n{narrow}\")" " │ 7d │ " " │ By model │ " " │ 574 reported messages │ " -" │ 103 │ " +" │ 62 83 107 75 59 85 103 │ " " │ 150 ▃▃▃▃▃ ▄▄▄▄▄ ▅▅▅▅▅▅ ▄▄▄▄▄ ▃▃▃▃▃▃ ▄▄▄▄▄ ▅▅▅▅▅▅ │ " " │ 0 ─────────────────────────────────────────────────────────── │ " " tab/1–6 section · enter/z maximize " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_cumulative_narrow.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_cumulative_narrow.snap index ce65f92b67..7ac4ca264b 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_cumulative_narrow.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_cumulative_narrow.snap @@ -4,6 +4,7 @@ expression: "screen(&mut view, 64, 60)" --- " Analytics · Live account " " " +" " " [Summary] Total usage history Messages Plugins called " " Skills used Top chats " " " @@ -25,7 +26,7 @@ expression: "screen(&mut view, 64, 60)" " 158 days 160 days " " Current streak Longest streak " " " -" Token activity Daily Weekly [Cumulative] " +" Token activity Cumulative " " Last 12 months " " " " Mar Apr May Jun Jul Aug " @@ -59,6 +60,5 @@ expression: "screen(&mut view, 64, 60)" " " " " " " -" " -" tab/1–6 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–6 section · z dashboard " +" g view · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_daily_wide.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_daily_wide.snap index 7c6b33950e..e9c3cb0deb 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_daily_wide.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_daily_wide.snap @@ -4,13 +4,13 @@ expression: "screen(&mut view, 140, 44)" --- " Analytics · Live account " " " +" " " [1 Summary] 2 Total usage history 3 Messages 4 Plugins called 5 Skills used 6 Top chats " " " " ▎ Summary " " ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── " " " " " -" " " Example User " " @example.user " " Plus " @@ -18,7 +18,7 @@ expression: "screen(&mut view, 140, 44)" " 142.3B 7B 44h 7m 158 days 160 days " " Lifetime tokens Peak tokens Longest chat Current streak Longest streak " " " -" Token activity [Daily] Weekly Cumulative " +" Token activity Daily " " Last 12 months " " " " Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug " @@ -44,5 +44,5 @@ expression: "screen(&mut view, 140, 44)" " " " " " " -" tab/1–6 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–6 section · z dashboard " +" g view · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_overview.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_overview.snap index 7714fd3f35..610cbe249b 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_overview.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_overview.snap @@ -4,6 +4,7 @@ expression: "screen(&mut view, 144, 64)" --- " Analytics · Live account " " " +" " " ╭─ ▸ 1 Summary ────────────────────────────────────────────────────╮ ╭─ 2 Total usage history ────────────────────────────────────────╮ " " │ │ │ │ " " │ Example User │ │ 7d │ " @@ -63,6 +64,5 @@ expression: "screen(&mut view, 144, 64)" " │ │ │ │ " " │ │ │ │ " " ╰──────────────────────────────────────────────────────────────────╯ ╰──────────────────────────────────────────────────────────────────╯ " -" " " tab/1–6 section · enter/z maximize " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" g view · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_partial.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_partial.snap index add561967c..a3d4e23815 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_partial.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_partial.snap @@ -4,6 +4,7 @@ expression: rendered --- " Analytics · Live account " " " +" " " [1 Summary] 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used " " " " ▎ Summary " @@ -19,7 +20,7 @@ expression: rendered " 0 — — — — " " Lifetime tokens Peak tokens Longest chat Current streak Longest streak " " " -" Token activity [Daily] Weekly Cumulative " +" Token activity Daily " " Last 12 months " " " " Token activity history unavailable " @@ -39,6 +40,5 @@ expression: rendered " " " " " " -" " -" tab/1–5 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–5 section · z dashboard " +" g view · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_scrolled.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_scrolled.snap index b619593112..811912d0a6 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_scrolled.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_scrolled.snap @@ -4,10 +4,10 @@ expression: "screen(&mut view, 64, 18)" --- " Analytics · Live account " " " +" " " [Summary] Total usage history Messages Plugins called " " Skills used Top chats " " " -" Most used reasoning high · 26% " " Skills explored 147 " " Total skills used 13,190 " " Total chats 21,482 " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_weekly.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_weekly.snap index ac470baf20..b27b760030 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_weekly.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__summary__summary_weekly.snap @@ -4,13 +4,13 @@ expression: "screen(&mut view, 110, 44)" --- " Analytics · Live account " " " +" " " [1 Summary] 2 Total usage history 3 Messages 4 Plugins called 5 Skills used 6 Top chats " " " " ▎ Summary " " ────────────────────────────────────────────────────────────────────────────────────────────────────────── " " " " " -" " " Example User " " @example.user " " Plus " @@ -18,7 +18,7 @@ expression: "screen(&mut view, 110, 44)" " 142.3B 7B 44h 7m 158 days 160 days " " Lifetime tokens Peak tokens Longest chat Current streak Longest streak " " " -" Token activity Daily [Weekly] Cumulative " +" Token activity Weekly " " Last 12 months " " " " Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug " @@ -44,5 +44,5 @@ expression: "screen(&mut view, 110, 44)" " " " " " " -" tab/1–6 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–6 section · z dashboard " +" g view · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_1.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_1.snap index 944378ba5f..dcb904941b 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_1.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_1.snap @@ -15,20 +15,21 @@ Text: " 4.4M tokens " " " " 1M " -" " -" ▂▂▂▂▂▂▂▂▂▂ " -" ██████████ 731K " -" ▇▇▇▇▇▇▇▇▇▇ ██████████ ▁▁▁▁▁▁▁▁▁▁ " -" ██████████ ▃▃▃▃▃▃▃▃▃▃ ██████████ ██████████ " -" ▁▁▁▁▁▁▁▁▁▁ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ▆▆▆▆▆▆▆▆▆▆ ██████████ ██████████ ██████████ ██████████ " +" 850K " +" ▁▁▁▁▁▁▁▁▁▁ " +" 773.5K ██████████ " +" ▅▅▅▅▅▅▅▅▅▅ 688.5K ██████████ 731K " +" ██████████ ██████████ ▇▇▇▇▇▇▇▇▇▇ " +" 620.5K ██████████ ██████████ ██████████ ██████████ " +" ▆▆▆▆▆▆▆▆▆▆ 544K ██████████ ██████████ ██████████ ██████████ " +" ██████████ ▂▂▂▂▂▂▂▂▂▂ ██████████ ██████████ ██████████ ██████████ " " 500K ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" 170K ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ▁▁▁▁▁▁▁▁▁▁ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -42,10 +43,9 @@ Text: " ● Cached input 602,000 " " ● Uncached input 86,000 " " ● Output 43,000 " -" Updated Sep 2 16:00 UTC " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close Updated Sep 2 16:00 UTC " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -54,9 +54,9 @@ Palette (foreground|background|underline|modifiers): 4: Reset|Reset|Reset|DIM 5: Green|Reset|Reset|NONE 6: Magenta|Reset|Reset|NONE -7: Cyan|Reset|Reset|NONE -8: Cyan|Reset|Reset|BOLD | UNDERLINED -9: White|Reset|Reset|BOLD +7: White|Reset|Reset|BOLD +8: Cyan|Reset|Reset|NONE +9: Cyan|Reset|Reset|BOLD | UNDERLINED Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 2:3 6:0 11:2 34:0 @@ -69,34 +69,34 @@ Rows (column:palette): 8: 0:0 2:3 13:0 9: 0:0 10: 0:0 5:2 7:0 -11: 0:0 +11: 0:0 91:4 95:0 12: 0:0 89:5 99:0 -13: 0:0 89:5 99:0 107:3 111:0 -14: 0:0 57:5 67:0 89:6 99:0 105:5 115:0 -15: 0:0 57:6 67:0 73:5 83:0 89:7 99:0 105:5 115:0 -16: 0:0 26:5 36:0 57:6 67:0 73:6 83:0 89:7 99:0 105:6 115:0 -17: 0:0 26:6 36:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 -18: 0:0 26:6 36:0 42:5 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -19: 0:0 3:2 7:0 26:7 36:0 42:6 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -20: 0:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -21: 0:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -22: 0:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -23: 0:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -24: 0:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -25: 0:0 10:7 20:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -26: 0:0 10:7 20:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -27: 0:0 10:7 20:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -28: 0:0 6:2 7:0 8:4 118:0 -29: 0:0 109:3 110:0 -30: 0:0 12:2 18:0 27:2 33:0 43:2 49:0 59:2 65:0 74:2 80:0 91:2 96:0 107:8 112:0 -31: 0:0 -32: 0:0 2:4 58:0 -33: 0:0 2:1 7:3 24:0 -34: 0:0 2:1 12:0 52:1 58:0 -35: 0:0 2:7 4:0 -36: 0:0 2:6 4:0 -37: 0:0 2:5 4:0 -38: 0:0 2:2 25:0 +13: 0:0 59:4 65:0 89:5 99:0 +14: 0:0 57:5 67:0 74:4 80:0 89:6 99:0 107:7 111:0 +15: 0:0 57:6 67:0 89:6 99:0 105:5 115:0 +16: 0:0 27:4 33:0 57:6 67:0 73:5 83:0 89:8 99:0 105:6 115:0 +17: 0:0 26:5 36:0 44:4 48:0 57:8 67:0 73:6 83:0 89:8 99:0 105:6 115:0 +18: 0:0 26:6 36:0 42:5 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +19: 0:0 3:2 7:0 26:8 36:0 42:6 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +20: 0:0 26:8 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +21: 0:0 26:8 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +22: 0:0 26:8 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +23: 0:0 26:8 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +24: 0:0 13:4 17:0 26:8 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +25: 0:0 10:5 20:0 26:8 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +26: 0:0 10:8 20:0 26:8 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +27: 0:0 10:8 20:0 26:8 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +28: 0:0 10:8 20:0 26:8 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +29: 0:0 6:2 7:0 8:4 118:0 +30: 0:0 109:3 110:0 +31: 0:0 12:2 18:0 27:2 33:0 43:2 49:0 59:2 65:0 74:2 80:0 91:2 96:0 107:9 112:0 +32: 0:0 +33: 0:0 2:4 58:0 +34: 0:0 2:1 7:3 24:0 +35: 0:0 2:1 12:0 52:1 58:0 +36: 0:0 2:8 4:0 +37: 0:0 2:6 4:0 +38: 0:0 2:5 4:0 39: 0:0 -40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 22:9 23:2 34:9 43:2 53:9 56:2 64:9 65:2 118:0 +40: 0:0 2:7 9:2 20:7 21:2 34:7 37:2 44:7 49:2 118:0 +41: 0:0 2:7 3:2 12:7 13:2 22:7 23:2 34:7 37:2 45:7 46:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_2.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_2.snap index 96c32c3861..1294e0e6ea 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_2.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_2.snap @@ -14,13 +14,13 @@ Text: " 186 calls " " " " 40 " -" " +" 34 " " ▁▁▁▁▁▁▁▁▁▁ " " ██████████ " -" ██████████ 29 " -" ██████████ ▆▆▆▆▆▆▆▆▆▆ ▆▆▆▆▆▆▆▆▆▆ " +" ██████████ 29 29 " +" ██████████ ▆▆▆▆▆▆▆▆▆▆ 26 ▆▆▆▆▆▆▆▆▆▆ " " ██████████ ██████████ ▂▂▂▂▂▂▂▂▂▂ ██████████ " -" ██████████ ██████████ ██████████ ██████████ " +" ██████████ 23 ██████████ ██████████ 22 23 ██████████ " " ██████████ ▇▇▇▇▇▇▇▇▇▇ ██████████ ██████████ ▃▃▃▃▃▃▃▃▃▃ ▇▇▇▇▇▇▇▇▇▇ ██████████ " " 20 ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,18 +45,18 @@ Text: " ● Notion 4 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD 2: Rgb(165, 165, 165)|Reset|Reset|NONE 3: Cyan|Reset|Reset|BOLD 4: Reset|Reset|Reset|DIM -5: Green|Reset|Reset|NONE -6: Magenta|Reset|Reset|NONE -7: Cyan|Reset|Reset|NONE -8: Cyan|Reset|Reset|BOLD | UNDERLINED -9: White|Reset|Reset|BOLD +5: White|Reset|Reset|BOLD +6: Green|Reset|Reset|NONE +7: Magenta|Reset|Reset|NONE +8: Cyan|Reset|Reset|NONE +9: Cyan|Reset|Reset|BOLD | UNDERLINED Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 2:3 6:0 11:2 34:0 @@ -68,35 +68,35 @@ Rows (column:palette): 7: 0:0 2:3 11:0 8: 0:0 9: 0:0 3:2 5:0 -10: 0:0 +10: 0:0 12:4 14:0 11: 0:0 12: 0:0 -13: 0:0 108:3 110:0 -14: 0:0 9:5 19:0 -15: 0:0 9:5 19:0 -16: 0:0 9:5 19:0 41:5 51:0 105:5 115:0 -17: 0:0 9:6 19:0 41:5 51:0 105:5 115:0 -18: 0:0 3:2 5:0 9:6 19:0 41:5 51:0 57:5 67:0 105:5 115:0 -19: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:5 83:0 89:5 99:0 105:6 115:0 -20: 0:0 9:6 19:0 25:6 35:0 41:6 51:0 57:6 67:0 73:5 83:0 89:6 99:0 105:6 115:0 -21: 0:0 9:6 19:0 25:6 35:0 41:6 51:0 57:6 67:0 73:6 83:0 89:6 99:0 105:6 115:0 -22: 0:0 9:7 19:0 25:6 35:0 41:6 51:0 57:6 67:0 73:6 83:0 89:6 99:0 105:6 115:0 -23: 0:0 9:7 19:0 25:6 35:0 41:7 51:0 57:6 67:0 73:6 83:0 89:6 99:0 105:7 115:0 -24: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 -25: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -26: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -27: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +13: 0:0 44:4 46:0 108:5 110:0 +14: 0:0 9:6 19:0 60:4 62:0 +15: 0:0 9:6 19:0 +16: 0:0 9:6 19:0 28:4 30:0 41:6 51:0 76:4 78:0 92:4 94:0 105:6 115:0 +17: 0:0 9:7 19:0 41:6 51:0 105:6 115:0 +18: 0:0 3:2 5:0 9:7 19:0 41:6 51:0 57:6 67:0 105:6 115:0 +19: 0:0 9:7 19:0 25:6 35:0 41:7 51:0 57:7 67:0 73:6 83:0 89:6 99:0 105:7 115:0 +20: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 +21: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +22: 0:0 9:8 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +23: 0:0 9:8 19:0 25:7 35:0 41:8 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:8 115:0 +24: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:7 83:0 89:8 99:0 105:8 115:0 +25: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +26: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +27: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 28: 0:0 4:2 5:0 6:4 118:0 29: 0:0 109:3 110:0 -30: 0:0 10:2 16:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:8 112:0 +30: 0:0 10:2 16:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:9 112:0 31: 0:0 32: 0:0 2:4 58:0 33: 0:0 2:1 7:3 18:0 34: 0:0 2:1 8:0 53:1 58:0 -35: 0:0 2:7 4:0 -36: 0:0 2:6 4:0 -37: 0:0 2:5 4:0 +35: 0:0 2:8 4:0 +36: 0:0 2:7 4:0 +37: 0:0 2:6 4:0 38: 0:0 39: 0:0 -40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 24:9 33:2 43:9 46:2 54:9 55:2 118:0 +40: 0:0 2:5 9:2 20:5 21:2 34:5 37:2 44:5 49:2 118:0 +41: 0:0 2:5 3:2 12:5 13:2 24:5 27:2 35:5 36:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_3.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_3.snap index 6f20a96507..5672e1b3a4 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_3.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_3.snap @@ -14,17 +14,17 @@ Text: " 17.2K credits " " " " 5K " -" " +" 4,360.00 " " ▄▄▄▄▄▄▄▄▄▄ " " ██████████ " " ██████████ " -" ██████████ " -" ▇▇▇▇▇▇▇▇▇▇ ██████████ " +" 3,400.00 ██████████ " +" ▇▇▇▇▇▇▇▇▇▇ 3,000.00 ██████████ " " ██████████ ▃▃▃▃▃▃▃▃▃▃ ██████████ " " ██████████ ██████████ ██████████ 2,560.00 " -" 2.5K ██████████ ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ " +" 2.5K 2,280.00 ██████████ ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ " " ▅▅▅▅▅▅▅▅▅▅ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ " +" 1,640.00 ██████████ ██████████ ██████████ ██████████ ██████████ " " ▁▁▁▁▁▁▁▁▁▁ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,7 +45,7 @@ Text: " ● Web 360.00 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -54,9 +54,9 @@ Palette (foreground|background|underline|modifiers): 4: Reset|Reset|Reset|DIM 5: Green|Reset|Reset|NONE 6: Magenta|Reset|Reset|NONE -7: Cyan|Reset|Reset|NONE -8: Cyan|Reset|Reset|BOLD | UNDERLINED -9: White|Reset|Reset|BOLD +7: White|Reset|Reset|BOLD +8: Cyan|Reset|Reset|NONE +9: Cyan|Reset|Reset|BOLD | UNDERLINED Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 2:3 6:0 11:2 34:0 @@ -68,35 +68,35 @@ Rows (column:palette): 7: 0:0 2:3 15:0 8: 0:0 9: 0:0 5:2 7:0 -10: 0:0 +10: 0:0 89:4 97:0 11: 0:0 12: 0:0 13: 0:0 -14: 0:0 89:5 99:0 -15: 0:0 89:5 99:0 +14: 0:0 58:4 66:0 89:5 99:0 +15: 0:0 73:4 81:0 89:5 99:0 16: 0:0 89:6 99:0 -17: 0:0 57:5 67:0 89:6 99:0 105:3 113:0 -18: 0:0 3:2 7:0 57:5 67:0 73:5 83:0 89:6 99:0 +17: 0:0 57:5 67:0 89:6 99:0 105:7 113:0 +18: 0:0 3:2 7:0 42:4 50:0 57:5 67:0 73:5 83:0 89:6 99:0 19: 0:0 57:6 67:0 73:5 83:0 89:6 99:0 -20: 0:0 57:6 67:0 73:6 83:0 89:6 99:0 105:5 115:0 +20: 0:0 26:4 34:0 57:6 67:0 73:6 83:0 89:6 99:0 105:5 115:0 21: 0:0 42:5 52:0 57:6 67:0 73:6 83:0 89:6 99:0 105:6 115:0 -22: 0:0 42:6 52:0 57:6 67:0 73:6 83:0 89:7 99:0 105:6 115:0 -23: 0:0 26:5 36:0 42:6 52:0 57:7 67:0 73:6 83:0 89:7 99:0 105:6 115:0 -24: 0:0 26:6 36:0 42:6 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:6 115:0 -25: 0:0 26:6 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -26: 0:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -27: 0:0 15:4 16:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +22: 0:0 42:6 52:0 57:6 67:0 73:6 83:0 89:8 99:0 105:6 115:0 +23: 0:0 26:5 36:0 42:6 52:0 57:8 67:0 73:6 83:0 89:8 99:0 105:6 115:0 +24: 0:0 26:6 36:0 42:6 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:6 115:0 +25: 0:0 26:6 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +26: 0:0 26:8 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +27: 0:0 15:4 16:0 26:8 36:0 42:8 52:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 28: 0:0 6:2 7:0 8:4 118:0 29: 0:0 109:3 110:0 -30: 0:0 12:2 18:0 27:2 33:0 43:2 49:0 59:2 65:0 74:2 80:0 91:2 96:0 107:8 112:0 +30: 0:0 12:2 18:0 27:2 33:0 43:2 49:0 59:2 65:0 74:2 80:0 91:2 96:0 107:9 112:0 31: 0:0 32: 0:0 2:4 58:0 33: 0:0 2:1 7:3 26:0 34: 0:0 2:1 9:0 51:1 58:0 -35: 0:0 2:7 4:0 +35: 0:0 2:8 4:0 36: 0:0 2:6 4:0 37: 0:0 2:5 4:0 38: 0:0 39: 0:0 -40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 24:9 33:2 43:9 46:2 54:9 55:2 118:0 +40: 0:0 2:7 9:2 20:7 21:2 34:7 37:2 44:7 49:2 118:0 +41: 0:0 2:7 3:2 12:7 13:2 24:7 27:2 35:7 36:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_4.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_4.snap index 67ef4f1376..e7a71c765e 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_4.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_4.snap @@ -6,6 +6,7 @@ expression: snapshot Text: " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -43,9 +44,8 @@ Text: " " " " " " -" " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -56,26 +56,26 @@ Palette (foreground|background|underline|modifiers): Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 -2: 0:0 2:2 94:3 107:0 -3: 0:0 -4: 0:0 2:3 13:0 -5: 0:0 2:4 118:0 -6: 0:0 2:2 53:0 -7: 0:0 -8: 0:0 2:1 8:0 82:1 98:0 -9: 0:0 2:3 24:0 92:3 98:0 -10: 0:0 2:4 98:0 -11: 0:0 2:2 82:0 91:1 98:0 -12: 0:0 2:1 54:2 82:0 -13: 0:0 +2: 0:0 +3: 0:0 2:2 94:3 107:0 +4: 0:0 +5: 0:0 2:3 13:0 +6: 0:0 2:4 118:0 +7: 0:0 2:2 53:0 +8: 0:0 +9: 0:0 2:1 8:0 82:1 98:0 +10: 0:0 2:3 24:0 92:3 98:0 +11: 0:0 2:4 98:0 +12: 0:0 2:2 82:0 91:1 98:0 +13: 0:0 2:1 54:2 82:0 14: 0:0 15: 0:0 16: 0:0 17: 0:0 18: 0:0 -19: 0:0 2:2 24:0 -20: 0:0 2:2 58:0 -21: 0:0 +19: 0:0 +20: 0:0 2:2 24:0 +21: 0:0 2:2 58:0 22: 0:0 23: 0:0 24: 0:0 @@ -95,4 +95,4 @@ Rows (column:palette): 38: 0:0 39: 0:0 40: 0:0 2:5 9:2 20:5 21:2 34:5 37:2 44:5 49:2 118:0 -41: 0:0 2:5 3:2 14:5 23:2 33:5 36:2 44:5 45:2 118:0 +41: 0:0 2:5 3:2 14:5 17:2 25:5 26:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_6.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_6.snap index d89bbe591c..cd2102da7d 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_6.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_6.snap @@ -22,11 +22,11 @@ Text: " " " 11 " " ▃▃▃▃▃▃▃▃▃▃ " -" 10 ██████████ " -" ▄▄▄▄▄▄▄▄▄▄ ██████████ " -" ▄▄▄▄▄▄▄▄▄▄ ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ " -" ██████████ ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ " -" ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ ██████████ ██████████ ██████████ " +" 10 9 ██████████ " +" 8 ▄▄▄▄▄▄▄▄▄▄ 8 ██████████ " +" ▄▄▄▄▄▄▄▄▄▄ ██████████ ▄▄▄▄▄▄▄▄▄▄ 7 ██████████ " +" ██████████ 6 ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ " +" ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ ██████████ ██████████ 5 ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ▆▆▆▆▆▆▆▆▆▆ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,18 +45,18 @@ Text: " ● Debugging 1 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD 2: Rgb(165, 165, 165)|Reset|Reset|NONE 3: Cyan|Reset|Reset|BOLD 4: Reset|Reset|Reset|DIM -5: Green|Reset|Reset|NONE -6: Magenta|Reset|Reset|NONE -7: Cyan|Reset|Reset|NONE -8: Cyan|Reset|Reset|BOLD | UNDERLINED -9: White|Reset|Reset|BOLD +5: White|Reset|Reset|BOLD +6: Green|Reset|Reset|NONE +7: Magenta|Reset|Reset|NONE +8: Cyan|Reset|Reset|NONE +9: Cyan|Reset|Reset|BOLD | UNDERLINED Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 2:3 6:0 11:2 34:0 @@ -74,29 +74,29 @@ Rows (column:palette): 13: 0:0 14: 0:0 15: 0:0 -16: 0:0 108:3 110:0 +16: 0:0 108:5 110:0 17: 0:0 -18: 0:0 3:2 5:0 -19: 0:0 105:5 115:0 -20: 0:0 41:5 51:0 105:5 115:0 -21: 0:0 9:5 19:0 41:5 51:0 57:5 67:0 105:6 115:0 -22: 0:0 9:5 19:0 41:5 51:0 57:5 67:0 73:5 83:0 105:6 115:0 -23: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:5 83:0 89:5 99:0 105:6 115:0 -24: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:6 83:0 89:6 99:0 105:7 115:0 -25: 0:0 9:7 19:0 25:6 35:0 41:6 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 -26: 0:0 9:7 19:0 25:6 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -27: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +18: 0:0 3:2 5:0 45:4 46:0 +19: 0:0 13:4 14:0 61:4 62:0 105:6 115:0 +20: 0:0 41:6 51:0 77:4 78:0 105:6 115:0 +21: 0:0 9:6 19:0 29:4 30:0 41:6 51:0 57:6 67:0 105:7 115:0 +22: 0:0 9:6 19:0 41:6 51:0 57:6 67:0 73:6 83:0 93:4 94:0 105:7 115:0 +23: 0:0 9:7 19:0 25:6 35:0 41:7 51:0 57:7 67:0 73:6 83:0 89:6 99:0 105:7 115:0 +24: 0:0 9:7 19:0 25:6 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:8 115:0 +25: 0:0 9:8 19:0 25:7 35:0 41:7 51:0 57:8 67:0 73:7 83:0 89:8 99:0 105:8 115:0 +26: 0:0 9:8 19:0 25:7 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +27: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 28: 0:0 4:2 5:0 6:4 118:0 29: 0:0 109:3 110:0 -30: 0:0 10:2 16:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:8 112:0 +30: 0:0 10:2 16:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:9 112:0 31: 0:0 32: 0:0 2:4 58:0 33: 0:0 2:1 7:3 17:0 34: 0:0 2:1 7:0 54:1 58:0 -35: 0:0 2:7 4:0 -36: 0:0 2:6 4:0 -37: 0:0 2:5 4:0 +35: 0:0 2:8 4:0 +36: 0:0 2:7 4:0 +37: 0:0 2:6 4:0 38: 0:0 39: 0:0 -40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 24:9 33:2 43:9 46:2 54:9 55:2 118:0 +40: 0:0 2:5 9:2 20:5 21:2 34:5 37:2 44:5 49:2 118:0 +41: 0:0 2:5 3:2 12:5 13:2 24:5 27:2 35:5 36:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_8.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_8.snap index c4a8c25160..70502358d6 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_8.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_business_8.snap @@ -6,6 +6,7 @@ expression: snapshot Text: " Analytics · Live account " " " +" " " [1 Summary] 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used 6 Top chats " " " " ▎ Summary " @@ -43,9 +44,8 @@ Text: " " " " " " -" " -" tab/1–6 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–6 section · z dashboard " +" g view · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -56,11 +56,11 @@ Palette (foreground|background|underline|modifiers): Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 -2: 0:0 2:3 15:2 107:0 -3: 0:0 -4: 0:0 2:3 11:0 -5: 0:0 2:4 118:0 -6: 0:0 +2: 0:0 +3: 0:0 2:3 15:2 107:0 +4: 0:0 +5: 0:0 2:3 11:0 +6: 0:0 2:4 118:0 7: 0:0 8: 0:0 9: 0:0 @@ -94,5 +94,5 @@ Rows (column:palette): 37: 0:0 38: 0:0 39: 0:0 -40: 0:0 2:5 9:2 20:5 21:2 34:5 37:2 118:0 -41: 0:0 2:5 3:2 11:5 12:2 23:5 32:2 42:5 45:2 53:5 54:2 118:0 +40: 0:0 2:5 9:2 20:5 21:2 118:0 +41: 0:0 2:5 3:2 11:5 12:2 23:5 26:2 34:5 35:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_1.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_1.snap index 3fef73186e..90ef03bed9 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_1.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_1.snap @@ -13,13 +13,13 @@ Text: " ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── " " Total usage · relative units " " Approximate · may be delayed up to 6 hours " -" " -" 100 ██████████ " +" 100 " +" 100 91 ██████████ " " ▃▃▃▃▃▃▃▃▃▃ ██████████ 86 " -" ██████████ ██████████ ▃▃▃▃▃▃▃▃▃▃ " -" ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ ██████████ " +" ██████████ 81 ██████████ ▃▃▃▃▃▃▃▃▃▃ " +" 73 ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ ██████████ " " ▁▁▁▁▁▁▁▁▁▁ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ 64 ██████████ ██████████ ██████████ ██████████ " " ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -27,7 +27,7 @@ Text: " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" 20 ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ▄▄▄▄▄▄▄▄▄▄ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,7 +45,7 @@ Text: " ● Other 10.5% " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -53,10 +53,10 @@ Palette (foreground|background|underline|modifiers): 3: Cyan|Reset|Reset|BOLD 4: Reset|Reset|Reset|DIM 5: Green|Reset|Reset|NONE -6: Magenta|Reset|Reset|NONE -7: Cyan|Reset|Reset|NONE -8: Cyan|Reset|Reset|BOLD | UNDERLINED -9: White|Reset|Reset|BOLD +6: White|Reset|Reset|BOLD +7: Magenta|Reset|Reset|NONE +8: Cyan|Reset|Reset|NONE +9: Cyan|Reset|Reset|BOLD | UNDERLINED Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 2:3 6:0 11:2 34:0 @@ -67,36 +67,36 @@ Rows (column:palette): 6: 0:0 2:4 118:0 7: 0:0 2:2 30:0 8: 0:0 2:2 44:0 -9: 0:0 -10: 0:0 3:2 6:0 -11: 0:0 89:5 99:0 108:3 110:0 -12: 0:0 89:5 99:0 -13: 0:0 57:5 67:0 89:5 99:0 -14: 0:0 57:5 67:0 89:6 99:0 105:5 115:0 -15: 0:0 57:6 67:0 73:5 83:0 89:6 99:0 105:5 115:0 -16: 0:0 25:5 35:0 57:6 67:0 73:6 83:0 89:7 99:0 105:6 115:0 -17: 0:0 25:5 35:0 57:7 67:0 73:6 83:0 89:7 99:0 105:6 115:0 -18: 0:0 25:6 35:0 41:5 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 -19: 0:0 4:2 6:0 25:6 35:0 41:6 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -20: 0:0 25:7 35:0 41:6 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -21: 0:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -22: 0:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -23: 0:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -24: 0:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -25: 0:0 9:6 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -26: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -27: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +9: 0:0 92:4 95:0 +10: 0:0 3:2 6:0 60:4 62:0 +11: 0:0 89:5 99:0 108:6 110:0 +12: 0:0 76:4 78:0 89:5 99:0 +13: 0:0 28:4 30:0 57:5 67:0 89:5 99:0 +14: 0:0 57:5 67:0 89:7 99:0 105:5 115:0 +15: 0:0 44:4 46:0 57:7 67:0 73:5 83:0 89:7 99:0 105:5 115:0 +16: 0:0 25:5 35:0 57:7 67:0 73:7 83:0 89:8 99:0 105:7 115:0 +17: 0:0 25:5 35:0 57:8 67:0 73:7 83:0 89:8 99:0 105:7 115:0 +18: 0:0 25:7 35:0 41:5 51:0 57:8 67:0 73:7 83:0 89:8 99:0 105:8 115:0 +19: 0:0 4:2 6:0 25:7 35:0 41:7 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +20: 0:0 25:8 35:0 41:7 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +21: 0:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +22: 0:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +23: 0:0 13:4 15:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +24: 0:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +25: 0:0 9:7 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +26: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +27: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 28: 0:0 5:2 6:0 7:4 118:0 29: 0:0 109:3 110:0 -30: 0:0 11:2 17:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:8 112:0 +30: 0:0 11:2 17:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:9 112:0 31: 0:0 32: 0:0 2:4 58:0 33: 0:0 2:1 7:3 24:0 34: 0:0 2:1 9:0 53:1 58:0 -35: 0:0 2:7 4:0 -36: 0:0 2:6 4:0 +35: 0:0 2:8 4:0 +36: 0:0 2:7 4:0 37: 0:0 2:5 4:0 38: 0:0 39: 0:0 -40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 22:9 23:2 34:9 43:2 53:9 56:2 64:9 65:2 118:0 +40: 0:0 2:6 9:2 20:6 21:2 34:6 37:2 44:6 49:2 118:0 +41: 0:0 2:6 3:2 12:6 13:2 22:6 23:2 34:6 37:2 45:6 46:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_2.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_2.snap index ae9087c3fc..e2d2052726 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_2.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_2.snap @@ -14,13 +14,13 @@ Text: " 186 calls " " " " 40 " -" " +" 34 " " ▁▁▁▁▁▁▁▁▁▁ " " ██████████ " -" ██████████ 29 " -" ██████████ ▆▆▆▆▆▆▆▆▆▆ ▆▆▆▆▆▆▆▆▆▆ " +" ██████████ 29 29 " +" ██████████ ▆▆▆▆▆▆▆▆▆▆ 26 ▆▆▆▆▆▆▆▆▆▆ " " ██████████ ██████████ ▂▂▂▂▂▂▂▂▂▂ ██████████ " -" ██████████ ██████████ ██████████ ██████████ " +" ██████████ 23 ██████████ ██████████ 22 23 ██████████ " " ██████████ ▇▇▇▇▇▇▇▇▇▇ ██████████ ██████████ ▃▃▃▃▃▃▃▃▃▃ ▇▇▇▇▇▇▇▇▇▇ ██████████ " " 20 ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,18 +45,18 @@ Text: " ● Notion 4 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD 2: Rgb(165, 165, 165)|Reset|Reset|NONE 3: Cyan|Reset|Reset|BOLD 4: Reset|Reset|Reset|DIM -5: Green|Reset|Reset|NONE -6: Magenta|Reset|Reset|NONE -7: Cyan|Reset|Reset|NONE -8: Cyan|Reset|Reset|BOLD | UNDERLINED -9: White|Reset|Reset|BOLD +5: White|Reset|Reset|BOLD +6: Green|Reset|Reset|NONE +7: Magenta|Reset|Reset|NONE +8: Cyan|Reset|Reset|NONE +9: Cyan|Reset|Reset|BOLD | UNDERLINED Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 2:3 6:0 11:2 34:0 @@ -68,35 +68,35 @@ Rows (column:palette): 7: 0:0 2:3 11:0 8: 0:0 9: 0:0 3:2 5:0 -10: 0:0 +10: 0:0 12:4 14:0 11: 0:0 12: 0:0 -13: 0:0 108:3 110:0 -14: 0:0 9:5 19:0 -15: 0:0 9:5 19:0 -16: 0:0 9:5 19:0 41:5 51:0 105:5 115:0 -17: 0:0 9:6 19:0 41:5 51:0 105:5 115:0 -18: 0:0 3:2 5:0 9:6 19:0 41:5 51:0 57:5 67:0 105:5 115:0 -19: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:5 83:0 89:5 99:0 105:6 115:0 -20: 0:0 9:6 19:0 25:6 35:0 41:6 51:0 57:6 67:0 73:5 83:0 89:6 99:0 105:6 115:0 -21: 0:0 9:6 19:0 25:6 35:0 41:6 51:0 57:6 67:0 73:6 83:0 89:6 99:0 105:6 115:0 -22: 0:0 9:7 19:0 25:6 35:0 41:6 51:0 57:6 67:0 73:6 83:0 89:6 99:0 105:6 115:0 -23: 0:0 9:7 19:0 25:6 35:0 41:7 51:0 57:6 67:0 73:6 83:0 89:6 99:0 105:7 115:0 -24: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 -25: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -26: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -27: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +13: 0:0 44:4 46:0 108:5 110:0 +14: 0:0 9:6 19:0 60:4 62:0 +15: 0:0 9:6 19:0 +16: 0:0 9:6 19:0 28:4 30:0 41:6 51:0 76:4 78:0 92:4 94:0 105:6 115:0 +17: 0:0 9:7 19:0 41:6 51:0 105:6 115:0 +18: 0:0 3:2 5:0 9:7 19:0 41:6 51:0 57:6 67:0 105:6 115:0 +19: 0:0 9:7 19:0 25:6 35:0 41:7 51:0 57:7 67:0 73:6 83:0 89:6 99:0 105:7 115:0 +20: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 +21: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +22: 0:0 9:8 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +23: 0:0 9:8 19:0 25:7 35:0 41:8 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:8 115:0 +24: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:7 83:0 89:8 99:0 105:8 115:0 +25: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +26: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +27: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 28: 0:0 4:2 5:0 6:4 118:0 29: 0:0 109:3 110:0 -30: 0:0 10:2 16:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:8 112:0 +30: 0:0 10:2 16:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:9 112:0 31: 0:0 32: 0:0 2:4 58:0 33: 0:0 2:1 7:3 18:0 34: 0:0 2:1 8:0 53:1 58:0 -35: 0:0 2:7 4:0 -36: 0:0 2:6 4:0 -37: 0:0 2:5 4:0 +35: 0:0 2:8 4:0 +36: 0:0 2:7 4:0 +37: 0:0 2:6 4:0 38: 0:0 39: 0:0 -40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 24:9 33:2 43:9 46:2 54:9 55:2 118:0 +40: 0:0 2:5 9:2 20:5 21:2 34:5 37:2 44:5 49:2 118:0 +41: 0:0 2:5 3:2 12:5 13:2 24:5 27:2 35:5 36:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_4.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_4.snap index 819465410c..9672a1ed63 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_4.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_4.snap @@ -6,6 +6,7 @@ expression: snapshot Text: " Analytics · Live account " " " +" " " 1 Summary 2 Total usage history 3 Messages 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -43,9 +44,8 @@ Text: " " " " " " -" " " tab/1–6 section · s sort · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -56,11 +56,11 @@ Palette (foreground|background|underline|modifiers): Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 -2: 0:0 2:2 81:3 94:0 -3: 0:0 -4: 0:0 2:3 13:0 -5: 0:0 2:4 118:0 -6: 0:0 +2: 0:0 +3: 0:0 2:2 81:3 94:0 +4: 0:0 +5: 0:0 2:3 13:0 +6: 0:0 2:4 118:0 7: 0:0 8: 0:0 9: 0:0 @@ -95,4 +95,4 @@ Rows (column:palette): 38: 0:0 39: 0:0 40: 0:0 2:5 9:2 20:5 21:2 29:5 30:2 43:5 46:2 53:5 58:2 118:0 -41: 0:0 2:5 3:2 14:5 23:2 33:5 36:2 44:5 45:2 118:0 +41: 0:0 2:5 3:2 14:5 17:2 25:5 26:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_5.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_5.snap index 86c8984388..310fe8be49 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_5.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_5.snap @@ -17,13 +17,13 @@ Text: " " " " " " -" 103 " +" 107 103 " " ▄▄▄▄▄▄▄▄▄▄ " " ██████████ ██████████ " -" ██████████ ██████████ " -" ▄▄▄▄▄▄▄▄▄▄ ██████████ ▆▆▆▆▆▆▆▆▆▆ ██████████ " +" 83 ██████████ 85 ██████████ " +" ▄▄▄▄▄▄▄▄▄▄ ██████████ 75 ▆▆▆▆▆▆▆▆▆▆ ██████████ " " 75 ██████████ ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ " +" 62 ██████████ ██████████ ██████████ 59 ██████████ ██████████ " " ▆▆▆▆▆▆▆▆▆▆ ██████████ ██████████ ██████████ ▃▃▃▃▃▃▃▃▃▃ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,18 +45,18 @@ Text: " ● Other 7 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD 2: Rgb(165, 165, 165)|Reset|Reset|NONE 3: Cyan|Reset|Reset|BOLD 4: Reset|Reset|Reset|DIM -5: Green|Reset|Reset|NONE -6: Magenta|Reset|Reset|NONE -7: Cyan|Reset|Reset|NONE -8: Cyan|Reset|Reset|BOLD | UNDERLINED -9: White|Reset|Reset|BOLD +5: White|Reset|Reset|BOLD +6: Green|Reset|Reset|NONE +7: Magenta|Reset|Reset|NONE +8: Cyan|Reset|Reset|NONE +9: Cyan|Reset|Reset|BOLD | UNDERLINED Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 2:3 6:0 11:2 34:0 @@ -71,32 +71,32 @@ Rows (column:palette): 10: 0:0 11: 0:0 12: 0:0 -13: 0:0 108:3 111:0 +13: 0:0 44:4 47:0 108:5 111:0 14: 0:0 -15: 0:0 41:5 51:0 -16: 0:0 41:5 51:0 105:5 115:0 -17: 0:0 41:6 51:0 105:6 115:0 -18: 0:0 4:2 6:0 25:5 35:0 41:6 51:0 89:5 99:0 105:6 115:0 -19: 0:0 25:6 35:0 41:6 51:0 57:5 67:0 89:6 99:0 105:6 115:0 -20: 0:0 25:6 35:0 41:7 51:0 57:6 67:0 89:6 99:0 105:7 115:0 -21: 0:0 9:6 19:0 25:6 35:0 41:7 51:0 57:6 67:0 73:5 83:0 89:6 99:0 105:7 115:0 -22: 0:0 9:6 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 -23: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 -24: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -25: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -26: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -27: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +15: 0:0 41:6 51:0 +16: 0:0 28:4 30:0 41:6 51:0 92:4 94:0 105:6 115:0 +17: 0:0 41:7 51:0 60:4 62:0 105:7 115:0 +18: 0:0 4:2 6:0 25:6 35:0 41:7 51:0 89:6 99:0 105:7 115:0 +19: 0:0 13:4 15:0 25:7 35:0 41:7 51:0 57:6 67:0 76:4 78:0 89:7 99:0 105:7 115:0 +20: 0:0 25:7 35:0 41:8 51:0 57:7 67:0 89:7 99:0 105:8 115:0 +21: 0:0 9:7 19:0 25:7 35:0 41:8 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:8 115:0 +22: 0:0 9:7 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:7 83:0 89:8 99:0 105:8 115:0 +23: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:7 83:0 89:8 99:0 105:8 115:0 +24: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +25: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +26: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +27: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 28: 0:0 5:2 6:0 7:4 118:0 29: 0:0 109:3 110:0 -30: 0:0 11:2 17:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:8 112:0 +30: 0:0 11:2 17:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:9 112:0 31: 0:0 32: 0:0 2:4 58:0 33: 0:0 2:1 7:3 22:0 34: 0:0 2:1 7:0 50:1 58:0 -35: 0:0 2:7 4:0 -36: 0:0 2:6 4:0 -37: 0:0 2:5 4:0 +35: 0:0 2:8 4:0 +36: 0:0 2:7 4:0 +37: 0:0 2:6 4:0 38: 0:0 39: 0:0 -40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 22:9 23:2 34:9 43:2 53:9 56:2 64:9 65:2 118:0 +40: 0:0 2:5 9:2 20:5 21:2 34:5 37:2 44:5 49:2 118:0 +41: 0:0 2:5 3:2 12:5 13:2 22:5 23:2 34:5 37:2 45:5 46:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_6.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_6.snap index 008cf15a50..d05fdf853b 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_6.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_6.snap @@ -22,11 +22,11 @@ Text: " " " 11 " " ▃▃▃▃▃▃▃▃▃▃ " -" 10 ██████████ " -" ▄▄▄▄▄▄▄▄▄▄ ██████████ " -" ▄▄▄▄▄▄▄▄▄▄ ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ " -" ██████████ ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ " -" ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ ██████████ ██████████ ██████████ " +" 10 9 ██████████ " +" 8 ▄▄▄▄▄▄▄▄▄▄ 8 ██████████ " +" ▄▄▄▄▄▄▄▄▄▄ ██████████ ▄▄▄▄▄▄▄▄▄▄ 7 ██████████ " +" ██████████ 6 ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ " +" ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ ██████████ ██████████ 5 ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ▆▆▆▆▆▆▆▆▆▆ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,18 +45,18 @@ Text: " ● Debugging 1 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD 2: Rgb(165, 165, 165)|Reset|Reset|NONE 3: Cyan|Reset|Reset|BOLD 4: Reset|Reset|Reset|DIM -5: Green|Reset|Reset|NONE -6: Magenta|Reset|Reset|NONE -7: Cyan|Reset|Reset|NONE -8: Cyan|Reset|Reset|BOLD | UNDERLINED -9: White|Reset|Reset|BOLD +5: White|Reset|Reset|BOLD +6: Green|Reset|Reset|NONE +7: Magenta|Reset|Reset|NONE +8: Cyan|Reset|Reset|NONE +9: Cyan|Reset|Reset|BOLD | UNDERLINED Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 2:3 6:0 11:2 34:0 @@ -74,29 +74,29 @@ Rows (column:palette): 13: 0:0 14: 0:0 15: 0:0 -16: 0:0 108:3 110:0 +16: 0:0 108:5 110:0 17: 0:0 -18: 0:0 3:2 5:0 -19: 0:0 105:5 115:0 -20: 0:0 41:5 51:0 105:5 115:0 -21: 0:0 9:5 19:0 41:5 51:0 57:5 67:0 105:6 115:0 -22: 0:0 9:5 19:0 41:5 51:0 57:5 67:0 73:5 83:0 105:6 115:0 -23: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:5 83:0 89:5 99:0 105:6 115:0 -24: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:6 83:0 89:6 99:0 105:7 115:0 -25: 0:0 9:7 19:0 25:6 35:0 41:6 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 -26: 0:0 9:7 19:0 25:6 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -27: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +18: 0:0 3:2 5:0 45:4 46:0 +19: 0:0 13:4 14:0 61:4 62:0 105:6 115:0 +20: 0:0 41:6 51:0 77:4 78:0 105:6 115:0 +21: 0:0 9:6 19:0 29:4 30:0 41:6 51:0 57:6 67:0 105:7 115:0 +22: 0:0 9:6 19:0 41:6 51:0 57:6 67:0 73:6 83:0 93:4 94:0 105:7 115:0 +23: 0:0 9:7 19:0 25:6 35:0 41:7 51:0 57:7 67:0 73:6 83:0 89:6 99:0 105:7 115:0 +24: 0:0 9:7 19:0 25:6 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:8 115:0 +25: 0:0 9:8 19:0 25:7 35:0 41:7 51:0 57:8 67:0 73:7 83:0 89:8 99:0 105:8 115:0 +26: 0:0 9:8 19:0 25:7 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 +27: 0:0 9:8 19:0 25:8 35:0 41:8 51:0 57:8 67:0 73:8 83:0 89:8 99:0 105:8 115:0 28: 0:0 4:2 5:0 6:4 118:0 29: 0:0 109:3 110:0 -30: 0:0 10:2 16:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:8 112:0 +30: 0:0 10:2 16:0 26:2 32:0 42:2 48:0 58:2 64:0 74:2 80:0 91:2 96:0 107:9 112:0 31: 0:0 32: 0:0 2:4 58:0 33: 0:0 2:1 7:3 17:0 34: 0:0 2:1 7:0 54:1 58:0 -35: 0:0 2:7 4:0 -36: 0:0 2:6 4:0 -37: 0:0 2:5 4:0 +35: 0:0 2:8 4:0 +36: 0:0 2:7 4:0 +37: 0:0 2:6 4:0 38: 0:0 39: 0:0 -40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 24:9 33:2 43:9 46:2 54:9 55:2 118:0 +40: 0:0 2:5 9:2 20:5 21:2 34:5 37:2 44:5 49:2 118:0 +41: 0:0 2:5 3:2 12:5 13:2 24:5 27:2 35:5 36:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_8.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_8.snap index d3fe52e114..676095f522 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_8.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_dark_consumer_8.snap @@ -6,6 +6,7 @@ expression: snapshot Text: " Analytics · Live account " " " +" " " [1 Summary] 2 Total usage history 3 Messages 4 Plugins called 5 Skills used 6 Top chats " " " " ▎ Summary " @@ -43,9 +44,8 @@ Text: " " " " " " -" " -" tab/1–6 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–6 section · z dashboard " +" g view · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -56,11 +56,11 @@ Palette (foreground|background|underline|modifiers): Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 -2: 0:0 2:3 15:2 94:0 -3: 0:0 -4: 0:0 2:3 11:0 -5: 0:0 2:4 118:0 -6: 0:0 +2: 0:0 +3: 0:0 2:3 15:2 94:0 +4: 0:0 +5: 0:0 2:3 11:0 +6: 0:0 2:4 118:0 7: 0:0 8: 0:0 9: 0:0 @@ -94,5 +94,5 @@ Rows (column:palette): 37: 0:0 38: 0:0 39: 0:0 -40: 0:0 2:5 9:2 20:5 21:2 34:5 37:2 118:0 -41: 0:0 2:5 3:2 11:5 12:2 23:5 32:2 42:5 45:2 53:5 54:2 118:0 +40: 0:0 2:5 9:2 20:5 21:2 118:0 +41: 0:0 2:5 3:2 11:5 12:2 23:5 26:2 34:5 35:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_1.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_1.snap index 493c7c3247..cfd90d095b 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_1.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_1.snap @@ -15,20 +15,21 @@ Text: " 4.4M tokens " " " " 1M " -" " -" ▂▂▂▂▂▂▂▂▂▂ " -" ██████████ 731K " -" ▇▇▇▇▇▇▇▇▇▇ ██████████ ▁▁▁▁▁▁▁▁▁▁ " -" ██████████ ▃▃▃▃▃▃▃▃▃▃ ██████████ ██████████ " -" ▁▁▁▁▁▁▁▁▁▁ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ▆▆▆▆▆▆▆▆▆▆ ██████████ ██████████ ██████████ ██████████ " +" 850K " +" ▁▁▁▁▁▁▁▁▁▁ " +" 773.5K ██████████ " +" ▅▅▅▅▅▅▅▅▅▅ 688.5K ██████████ 731K " +" ██████████ ██████████ ▇▇▇▇▇▇▇▇▇▇ " +" 620.5K ██████████ ██████████ ██████████ ██████████ " +" ▆▆▆▆▆▆▆▆▆▆ 544K ██████████ ██████████ ██████████ ██████████ " +" ██████████ ▂▂▂▂▂▂▂▂▂▂ ██████████ ██████████ ██████████ ██████████ " " 500K ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" 170K ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" ▁▁▁▁▁▁▁▁▁▁ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -42,10 +43,9 @@ Text: " ● Cached input 602,000 " " ● Uncached input 86,000 " " ● Output 43,000 " -" Updated Sep 2 16:00 UTC " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close Updated Sep 2 16:00 UTC " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -69,34 +69,34 @@ Rows (column:palette): 8: 0:0 2:3 13:0 9: 0:0 10: 0:0 5:2 7:0 -11: 0:0 +11: 0:0 91:4 95:0 12: 0:0 89:5 99:0 -13: 0:0 89:5 99:0 107:3 111:0 -14: 0:0 57:5 67:0 89:6 99:0 105:5 115:0 -15: 0:0 57:6 67:0 73:5 83:0 89:7 99:0 105:5 115:0 -16: 0:0 26:5 36:0 57:6 67:0 73:6 83:0 89:7 99:0 105:6 115:0 -17: 0:0 26:6 36:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 +13: 0:0 59:4 65:0 89:5 99:0 +14: 0:0 57:5 67:0 74:4 80:0 89:6 99:0 107:1 111:0 +15: 0:0 57:6 67:0 89:6 99:0 105:5 115:0 +16: 0:0 27:4 33:0 57:6 67:0 73:5 83:0 89:7 99:0 105:6 115:0 +17: 0:0 26:5 36:0 44:4 48:0 57:7 67:0 73:6 83:0 89:7 99:0 105:6 115:0 18: 0:0 26:6 36:0 42:5 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 19: 0:0 3:2 7:0 26:7 36:0 42:6 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 20: 0:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 21: 0:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 22: 0:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 23: 0:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -24: 0:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -25: 0:0 10:7 20:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +24: 0:0 13:4 17:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +25: 0:0 10:5 20:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 26: 0:0 10:7 20:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 27: 0:0 10:7 20:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -28: 0:0 6:2 7:0 8:4 118:0 -29: 0:0 109:3 110:0 -30: 0:0 12:2 18:0 27:2 33:0 43:2 49:0 59:2 65:0 74:2 80:0 91:2 96:0 107:8 112:0 -31: 0:0 -32: 0:0 2:4 58:0 -33: 0:0 2:1 7:3 24:0 -34: 0:0 2:1 12:0 52:1 58:0 -35: 0:0 2:7 4:0 -36: 0:0 2:6 4:0 -37: 0:0 2:5 4:0 -38: 0:0 2:2 25:0 +28: 0:0 10:7 20:0 26:7 36:0 42:7 52:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +29: 0:0 6:2 7:0 8:4 118:0 +30: 0:0 109:3 110:0 +31: 0:0 12:2 18:0 27:2 33:0 43:2 49:0 59:2 65:0 74:2 80:0 91:2 96:0 107:8 112:0 +32: 0:0 +33: 0:0 2:4 58:0 +34: 0:0 2:1 7:3 24:0 +35: 0:0 2:1 12:0 52:1 58:0 +36: 0:0 2:7 4:0 +37: 0:0 2:6 4:0 +38: 0:0 2:5 4:0 39: 0:0 40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 22:9 23:2 34:9 43:2 53:9 56:2 64:9 65:2 118:0 +41: 0:0 2:9 3:2 12:9 13:2 22:9 23:2 34:9 37:2 45:9 46:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_2.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_2.snap index 3c82423e13..2106e8ff7c 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_2.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_2.snap @@ -14,13 +14,13 @@ Text: " 186 calls " " " " 40 " -" " +" 34 " " ▁▁▁▁▁▁▁▁▁▁ " " ██████████ " -" ██████████ 29 " -" ██████████ ▆▆▆▆▆▆▆▆▆▆ ▆▆▆▆▆▆▆▆▆▆ " +" ██████████ 29 29 " +" ██████████ ▆▆▆▆▆▆▆▆▆▆ 26 ▆▆▆▆▆▆▆▆▆▆ " " ██████████ ██████████ ▂▂▂▂▂▂▂▂▂▂ ██████████ " -" ██████████ ██████████ ██████████ ██████████ " +" ██████████ 23 ██████████ ██████████ 22 23 ██████████ " " ██████████ ▇▇▇▇▇▇▇▇▇▇ ██████████ ██████████ ▃▃▃▃▃▃▃▃▃▃ ▇▇▇▇▇▇▇▇▇▇ ██████████ " " 20 ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,7 +45,7 @@ Text: " ● Notion 4 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -68,13 +68,13 @@ Rows (column:palette): 7: 0:0 2:3 11:0 8: 0:0 9: 0:0 3:2 5:0 -10: 0:0 +10: 0:0 12:4 14:0 11: 0:0 12: 0:0 -13: 0:0 108:3 110:0 -14: 0:0 9:5 19:0 +13: 0:0 44:4 46:0 108:1 110:0 +14: 0:0 9:5 19:0 60:4 62:0 15: 0:0 9:5 19:0 -16: 0:0 9:5 19:0 41:5 51:0 105:5 115:0 +16: 0:0 9:5 19:0 28:4 30:0 41:5 51:0 76:4 78:0 92:4 94:0 105:5 115:0 17: 0:0 9:6 19:0 41:5 51:0 105:5 115:0 18: 0:0 3:2 5:0 9:6 19:0 41:5 51:0 57:5 67:0 105:5 115:0 19: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:5 83:0 89:5 99:0 105:6 115:0 @@ -99,4 +99,4 @@ Rows (column:palette): 38: 0:0 39: 0:0 40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 24:9 33:2 43:9 46:2 54:9 55:2 118:0 +41: 0:0 2:9 3:2 12:9 13:2 24:9 27:2 35:9 36:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_3.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_3.snap index fe27205f1d..02044abe31 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_3.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_3.snap @@ -14,17 +14,17 @@ Text: " 17.2K credits " " " " 5K " -" " +" 4,360.00 " " ▄▄▄▄▄▄▄▄▄▄ " " ██████████ " " ██████████ " -" ██████████ " -" ▇▇▇▇▇▇▇▇▇▇ ██████████ " +" 3,400.00 ██████████ " +" ▇▇▇▇▇▇▇▇▇▇ 3,000.00 ██████████ " " ██████████ ▃▃▃▃▃▃▃▃▃▃ ██████████ " " ██████████ ██████████ ██████████ 2,560.00 " -" 2.5K ██████████ ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ " +" 2.5K 2,280.00 ██████████ ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ " " ▅▅▅▅▅▅▅▅▅▅ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ " +" 1,640.00 ██████████ ██████████ ██████████ ██████████ ██████████ " " ▁▁▁▁▁▁▁▁▁▁ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,7 +45,7 @@ Text: " ● Web 360.00 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -68,17 +68,17 @@ Rows (column:palette): 7: 0:0 2:3 15:0 8: 0:0 9: 0:0 5:2 7:0 -10: 0:0 +10: 0:0 89:4 97:0 11: 0:0 12: 0:0 13: 0:0 -14: 0:0 89:5 99:0 -15: 0:0 89:5 99:0 +14: 0:0 58:4 66:0 89:5 99:0 +15: 0:0 73:4 81:0 89:5 99:0 16: 0:0 89:6 99:0 -17: 0:0 57:5 67:0 89:6 99:0 105:3 113:0 -18: 0:0 3:2 7:0 57:5 67:0 73:5 83:0 89:6 99:0 +17: 0:0 57:5 67:0 89:6 99:0 105:1 113:0 +18: 0:0 3:2 7:0 42:4 50:0 57:5 67:0 73:5 83:0 89:6 99:0 19: 0:0 57:6 67:0 73:5 83:0 89:6 99:0 -20: 0:0 57:6 67:0 73:6 83:0 89:6 99:0 105:5 115:0 +20: 0:0 26:4 34:0 57:6 67:0 73:6 83:0 89:6 99:0 105:5 115:0 21: 0:0 42:5 52:0 57:6 67:0 73:6 83:0 89:6 99:0 105:6 115:0 22: 0:0 42:6 52:0 57:6 67:0 73:6 83:0 89:7 99:0 105:6 115:0 23: 0:0 26:5 36:0 42:6 52:0 57:7 67:0 73:6 83:0 89:7 99:0 105:6 115:0 @@ -99,4 +99,4 @@ Rows (column:palette): 38: 0:0 39: 0:0 40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 24:9 33:2 43:9 46:2 54:9 55:2 118:0 +41: 0:0 2:9 3:2 12:9 13:2 24:9 27:2 35:9 36:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_4.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_4.snap index 2ca8350ac8..6cae4149df 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_4.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_4.snap @@ -6,6 +6,7 @@ expression: snapshot Text: " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -43,9 +44,8 @@ Text: " " " " " " -" " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -56,26 +56,26 @@ Palette (foreground|background|underline|modifiers): Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 -2: 0:0 2:2 94:3 107:0 -3: 0:0 -4: 0:0 2:3 13:0 -5: 0:0 2:4 118:0 -6: 0:0 2:2 53:0 -7: 0:0 -8: 0:0 2:1 8:0 82:1 98:0 -9: 0:0 2:3 24:0 92:3 98:0 -10: 0:0 2:4 98:0 -11: 0:0 2:2 82:0 91:1 98:0 -12: 0:0 2:1 54:2 82:0 -13: 0:0 +2: 0:0 +3: 0:0 2:2 94:3 107:0 +4: 0:0 +5: 0:0 2:3 13:0 +6: 0:0 2:4 118:0 +7: 0:0 2:2 53:0 +8: 0:0 +9: 0:0 2:1 8:0 82:1 98:0 +10: 0:0 2:3 24:0 92:3 98:0 +11: 0:0 2:4 98:0 +12: 0:0 2:2 82:0 91:1 98:0 +13: 0:0 2:1 54:2 82:0 14: 0:0 15: 0:0 16: 0:0 17: 0:0 18: 0:0 -19: 0:0 2:2 24:0 -20: 0:0 2:2 58:0 -21: 0:0 +19: 0:0 +20: 0:0 2:2 24:0 +21: 0:0 2:2 58:0 22: 0:0 23: 0:0 24: 0:0 @@ -95,4 +95,4 @@ Rows (column:palette): 38: 0:0 39: 0:0 40: 0:0 2:5 9:2 20:5 21:2 34:5 37:2 44:5 49:2 118:0 -41: 0:0 2:5 3:2 14:5 23:2 33:5 36:2 44:5 45:2 118:0 +41: 0:0 2:5 3:2 14:5 17:2 25:5 26:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_6.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_6.snap index fe76614dea..30b2bdc74c 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_6.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_6.snap @@ -22,11 +22,11 @@ Text: " " " 11 " " ▃▃▃▃▃▃▃▃▃▃ " -" 10 ██████████ " -" ▄▄▄▄▄▄▄▄▄▄ ██████████ " -" ▄▄▄▄▄▄▄▄▄▄ ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ " -" ██████████ ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ " -" ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ ██████████ ██████████ ██████████ " +" 10 9 ██████████ " +" 8 ▄▄▄▄▄▄▄▄▄▄ 8 ██████████ " +" ▄▄▄▄▄▄▄▄▄▄ ██████████ ▄▄▄▄▄▄▄▄▄▄ 7 ██████████ " +" ██████████ 6 ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ " +" ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ ██████████ ██████████ 5 ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ▆▆▆▆▆▆▆▆▆▆ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,7 +45,7 @@ Text: " ● Debugging 1 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -74,13 +74,13 @@ Rows (column:palette): 13: 0:0 14: 0:0 15: 0:0 -16: 0:0 108:3 110:0 +16: 0:0 108:1 110:0 17: 0:0 -18: 0:0 3:2 5:0 -19: 0:0 105:5 115:0 -20: 0:0 41:5 51:0 105:5 115:0 -21: 0:0 9:5 19:0 41:5 51:0 57:5 67:0 105:6 115:0 -22: 0:0 9:5 19:0 41:5 51:0 57:5 67:0 73:5 83:0 105:6 115:0 +18: 0:0 3:2 5:0 45:4 46:0 +19: 0:0 13:4 14:0 61:4 62:0 105:5 115:0 +20: 0:0 41:5 51:0 77:4 78:0 105:5 115:0 +21: 0:0 9:5 19:0 29:4 30:0 41:5 51:0 57:5 67:0 105:6 115:0 +22: 0:0 9:5 19:0 41:5 51:0 57:5 67:0 73:5 83:0 93:4 94:0 105:6 115:0 23: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:5 83:0 89:5 99:0 105:6 115:0 24: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:6 83:0 89:6 99:0 105:7 115:0 25: 0:0 9:7 19:0 25:6 35:0 41:6 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 @@ -99,4 +99,4 @@ Rows (column:palette): 38: 0:0 39: 0:0 40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 24:9 33:2 43:9 46:2 54:9 55:2 118:0 +41: 0:0 2:9 3:2 12:9 13:2 24:9 27:2 35:9 36:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_8.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_8.snap index b98126a5ba..b206d89ae3 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_8.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_business_8.snap @@ -6,6 +6,7 @@ expression: snapshot Text: " Analytics · Live account " " " +" " " [1 Summary] 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used 6 Top chats " " " " ▎ Summary " @@ -43,9 +44,8 @@ Text: " " " " " " -" " -" tab/1–6 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–6 section · z dashboard " +" g view · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -56,11 +56,11 @@ Palette (foreground|background|underline|modifiers): Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 -2: 0:0 2:3 15:2 107:0 -3: 0:0 -4: 0:0 2:3 11:0 -5: 0:0 2:4 118:0 -6: 0:0 +2: 0:0 +3: 0:0 2:3 15:2 107:0 +4: 0:0 +5: 0:0 2:3 11:0 +6: 0:0 2:4 118:0 7: 0:0 8: 0:0 9: 0:0 @@ -94,5 +94,5 @@ Rows (column:palette): 37: 0:0 38: 0:0 39: 0:0 -40: 0:0 2:5 9:2 20:5 21:2 34:5 37:2 118:0 -41: 0:0 2:5 3:2 11:5 12:2 23:5 32:2 42:5 45:2 53:5 54:2 118:0 +40: 0:0 2:5 9:2 20:5 21:2 118:0 +41: 0:0 2:5 3:2 11:5 12:2 23:5 26:2 34:5 35:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_1.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_1.snap index 607484b775..20ecfe9c38 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_1.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_1.snap @@ -13,13 +13,13 @@ Text: " ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── " " Total usage · relative units " " Approximate · may be delayed up to 6 hours " -" " -" 100 ██████████ " +" 100 " +" 100 91 ██████████ " " ▃▃▃▃▃▃▃▃▃▃ ██████████ 86 " -" ██████████ ██████████ ▃▃▃▃▃▃▃▃▃▃ " -" ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ ██████████ " +" ██████████ 81 ██████████ ▃▃▃▃▃▃▃▃▃▃ " +" 73 ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ ██████████ " " ▁▁▁▁▁▁▁▁▁▁ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ " +" ██████████ 64 ██████████ ██████████ ██████████ ██████████ " " ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -27,7 +27,7 @@ Text: " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " +" 20 ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ▄▄▄▄▄▄▄▄▄▄ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,7 +45,7 @@ Text: " ● Other 10.5% " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -67,13 +67,13 @@ Rows (column:palette): 6: 0:0 2:4 118:0 7: 0:0 2:2 30:0 8: 0:0 2:2 44:0 -9: 0:0 -10: 0:0 3:2 6:0 -11: 0:0 89:5 99:0 108:3 110:0 -12: 0:0 89:5 99:0 -13: 0:0 57:5 67:0 89:5 99:0 +9: 0:0 92:4 95:0 +10: 0:0 3:2 6:0 60:4 62:0 +11: 0:0 89:5 99:0 108:1 110:0 +12: 0:0 76:4 78:0 89:5 99:0 +13: 0:0 28:4 30:0 57:5 67:0 89:5 99:0 14: 0:0 57:5 67:0 89:6 99:0 105:5 115:0 -15: 0:0 57:6 67:0 73:5 83:0 89:6 99:0 105:5 115:0 +15: 0:0 44:4 46:0 57:6 67:0 73:5 83:0 89:6 99:0 105:5 115:0 16: 0:0 25:5 35:0 57:6 67:0 73:6 83:0 89:7 99:0 105:6 115:0 17: 0:0 25:5 35:0 57:7 67:0 73:6 83:0 89:7 99:0 105:6 115:0 18: 0:0 25:6 35:0 41:5 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 @@ -81,7 +81,7 @@ Rows (column:palette): 20: 0:0 25:7 35:0 41:6 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 21: 0:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 22: 0:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 -23: 0:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 +23: 0:0 13:4 15:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 24: 0:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 25: 0:0 9:6 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 26: 0:0 9:7 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:7 83:0 89:7 99:0 105:7 115:0 @@ -99,4 +99,4 @@ Rows (column:palette): 38: 0:0 39: 0:0 40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 22:9 23:2 34:9 43:2 53:9 56:2 64:9 65:2 118:0 +41: 0:0 2:9 3:2 12:9 13:2 22:9 23:2 34:9 37:2 45:9 46:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_2.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_2.snap index a7a08a1bd6..cd90f58801 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_2.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_2.snap @@ -14,13 +14,13 @@ Text: " 186 calls " " " " 40 " -" " +" 34 " " ▁▁▁▁▁▁▁▁▁▁ " " ██████████ " -" ██████████ 29 " -" ██████████ ▆▆▆▆▆▆▆▆▆▆ ▆▆▆▆▆▆▆▆▆▆ " +" ██████████ 29 29 " +" ██████████ ▆▆▆▆▆▆▆▆▆▆ 26 ▆▆▆▆▆▆▆▆▆▆ " " ██████████ ██████████ ▂▂▂▂▂▂▂▂▂▂ ██████████ " -" ██████████ ██████████ ██████████ ██████████ " +" ██████████ 23 ██████████ ██████████ 22 23 ██████████ " " ██████████ ▇▇▇▇▇▇▇▇▇▇ ██████████ ██████████ ▃▃▃▃▃▃▃▃▃▃ ▇▇▇▇▇▇▇▇▇▇ ██████████ " " 20 ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,7 +45,7 @@ Text: " ● Notion 4 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -68,13 +68,13 @@ Rows (column:palette): 7: 0:0 2:3 11:0 8: 0:0 9: 0:0 3:2 5:0 -10: 0:0 +10: 0:0 12:4 14:0 11: 0:0 12: 0:0 -13: 0:0 108:3 110:0 -14: 0:0 9:5 19:0 +13: 0:0 44:4 46:0 108:1 110:0 +14: 0:0 9:5 19:0 60:4 62:0 15: 0:0 9:5 19:0 -16: 0:0 9:5 19:0 41:5 51:0 105:5 115:0 +16: 0:0 9:5 19:0 28:4 30:0 41:5 51:0 76:4 78:0 92:4 94:0 105:5 115:0 17: 0:0 9:6 19:0 41:5 51:0 105:5 115:0 18: 0:0 3:2 5:0 9:6 19:0 41:5 51:0 57:5 67:0 105:5 115:0 19: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:5 83:0 89:5 99:0 105:6 115:0 @@ -99,4 +99,4 @@ Rows (column:palette): 38: 0:0 39: 0:0 40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 24:9 33:2 43:9 46:2 54:9 55:2 118:0 +41: 0:0 2:9 3:2 12:9 13:2 24:9 27:2 35:9 36:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_4.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_4.snap index 38012f81dd..53d82b0d4f 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_4.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_4.snap @@ -6,6 +6,7 @@ expression: snapshot Text: " Analytics · Live account " " " +" " " 1 Summary 2 Total usage history 3 Messages 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -43,9 +44,8 @@ Text: " " " " " " -" " " tab/1–6 section · s sort · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -56,11 +56,11 @@ Palette (foreground|background|underline|modifiers): Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 -2: 0:0 2:2 81:3 94:0 -3: 0:0 -4: 0:0 2:3 13:0 -5: 0:0 2:4 118:0 -6: 0:0 +2: 0:0 +3: 0:0 2:2 81:3 94:0 +4: 0:0 +5: 0:0 2:3 13:0 +6: 0:0 2:4 118:0 7: 0:0 8: 0:0 9: 0:0 @@ -95,4 +95,4 @@ Rows (column:palette): 38: 0:0 39: 0:0 40: 0:0 2:5 9:2 20:5 21:2 29:5 30:2 43:5 46:2 53:5 58:2 118:0 -41: 0:0 2:5 3:2 14:5 23:2 33:5 36:2 44:5 45:2 118:0 +41: 0:0 2:5 3:2 14:5 17:2 25:5 26:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_5.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_5.snap index c61c2f7475..93ccc1b3fa 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_5.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_5.snap @@ -17,13 +17,13 @@ Text: " " " " " " -" 103 " +" 107 103 " " ▄▄▄▄▄▄▄▄▄▄ " " ██████████ ██████████ " -" ██████████ ██████████ " -" ▄▄▄▄▄▄▄▄▄▄ ██████████ ▆▆▆▆▆▆▆▆▆▆ ██████████ " +" 83 ██████████ 85 ██████████ " +" ▄▄▄▄▄▄▄▄▄▄ ██████████ 75 ▆▆▆▆▆▆▆▆▆▆ ██████████ " " 75 ██████████ ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ ██████████ " -" ██████████ ██████████ ██████████ ██████████ ██████████ " +" 62 ██████████ ██████████ ██████████ 59 ██████████ ██████████ " " ▆▆▆▆▆▆▆▆▆▆ ██████████ ██████████ ██████████ ▃▃▃▃▃▃▃▃▃▃ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,7 +45,7 @@ Text: " ● Other 7 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -71,13 +71,13 @@ Rows (column:palette): 10: 0:0 11: 0:0 12: 0:0 -13: 0:0 108:3 111:0 +13: 0:0 44:4 47:0 108:1 111:0 14: 0:0 15: 0:0 41:5 51:0 -16: 0:0 41:5 51:0 105:5 115:0 -17: 0:0 41:6 51:0 105:6 115:0 +16: 0:0 28:4 30:0 41:5 51:0 92:4 94:0 105:5 115:0 +17: 0:0 41:6 51:0 60:4 62:0 105:6 115:0 18: 0:0 4:2 6:0 25:5 35:0 41:6 51:0 89:5 99:0 105:6 115:0 -19: 0:0 25:6 35:0 41:6 51:0 57:5 67:0 89:6 99:0 105:6 115:0 +19: 0:0 13:4 15:0 25:6 35:0 41:6 51:0 57:5 67:0 76:4 78:0 89:6 99:0 105:6 115:0 20: 0:0 25:6 35:0 41:7 51:0 57:6 67:0 89:6 99:0 105:7 115:0 21: 0:0 9:6 19:0 25:6 35:0 41:7 51:0 57:6 67:0 73:5 83:0 89:6 99:0 105:7 115:0 22: 0:0 9:6 19:0 25:7 35:0 41:7 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 @@ -99,4 +99,4 @@ Rows (column:palette): 38: 0:0 39: 0:0 40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 22:9 23:2 34:9 43:2 53:9 56:2 64:9 65:2 118:0 +41: 0:0 2:9 3:2 12:9 13:2 22:9 23:2 34:9 37:2 45:9 46:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_6.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_6.snap index 997757580f..c83d36ce48 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_6.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_6.snap @@ -22,11 +22,11 @@ Text: " " " 11 " " ▃▃▃▃▃▃▃▃▃▃ " -" 10 ██████████ " -" ▄▄▄▄▄▄▄▄▄▄ ██████████ " -" ▄▄▄▄▄▄▄▄▄▄ ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ " -" ██████████ ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ " -" ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ ██████████ ██████████ ██████████ " +" 10 9 ██████████ " +" 8 ▄▄▄▄▄▄▄▄▄▄ 8 ██████████ " +" ▄▄▄▄▄▄▄▄▄▄ ██████████ ▄▄▄▄▄▄▄▄▄▄ 7 ██████████ " +" ██████████ 6 ██████████ ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ " +" ██████████ ▅▅▅▅▅▅▅▅▅▅ ██████████ ██████████ ██████████ 5 ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ▆▆▆▆▆▆▆▆▆▆ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " " ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ ██████████ " @@ -45,7 +45,7 @@ Text: " ● Debugging 1 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -74,13 +74,13 @@ Rows (column:palette): 13: 0:0 14: 0:0 15: 0:0 -16: 0:0 108:3 110:0 +16: 0:0 108:1 110:0 17: 0:0 -18: 0:0 3:2 5:0 -19: 0:0 105:5 115:0 -20: 0:0 41:5 51:0 105:5 115:0 -21: 0:0 9:5 19:0 41:5 51:0 57:5 67:0 105:6 115:0 -22: 0:0 9:5 19:0 41:5 51:0 57:5 67:0 73:5 83:0 105:6 115:0 +18: 0:0 3:2 5:0 45:4 46:0 +19: 0:0 13:4 14:0 61:4 62:0 105:5 115:0 +20: 0:0 41:5 51:0 77:4 78:0 105:5 115:0 +21: 0:0 9:5 19:0 29:4 30:0 41:5 51:0 57:5 67:0 105:6 115:0 +22: 0:0 9:5 19:0 41:5 51:0 57:5 67:0 73:5 83:0 93:4 94:0 105:6 115:0 23: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:5 83:0 89:5 99:0 105:6 115:0 24: 0:0 9:6 19:0 25:5 35:0 41:6 51:0 57:6 67:0 73:6 83:0 89:6 99:0 105:7 115:0 25: 0:0 9:7 19:0 25:6 35:0 41:6 51:0 57:7 67:0 73:6 83:0 89:7 99:0 105:7 115:0 @@ -99,4 +99,4 @@ Rows (column:palette): 38: 0:0 39: 0:0 40: 0:0 2:9 9:2 20:9 21:2 34:9 37:2 44:9 49:2 118:0 -41: 0:0 2:9 3:2 12:9 13:2 24:9 33:2 43:9 46:2 54:9 55:2 118:0 +41: 0:0 2:9 3:2 12:9 13:2 24:9 27:2 35:9 36:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_8.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_8.snap index 464d93e875..4306d815a6 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_8.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__terminal_styles__analytics_light_consumer_8.snap @@ -6,6 +6,7 @@ expression: snapshot Text: " Analytics · Live account " " " +" " " [1 Summary] 2 Total usage history 3 Messages 4 Plugins called 5 Skills used 6 Top chats " " " " ▎ Summary " @@ -43,9 +44,8 @@ Text: " " " " " " -" " -" tab/1–6 section · z dashboard · ↑/↓ scroll " -" g view · R refresh · pgup/pgdn scroll · esc back · q close " +" tab/1–6 section · z dashboard " +" g view · R refresh · esc back · q close " Palette (foreground|background|underline|modifiers): 0: Reset|Reset|Reset|NONE 1: Reset|Reset|Reset|BOLD @@ -56,11 +56,11 @@ Palette (foreground|background|underline|modifiers): Rows (column:palette): 0: 0:0 2:1 11:2 28:0 1: 0:0 -2: 0:0 2:3 15:2 94:0 -3: 0:0 -4: 0:0 2:3 11:0 -5: 0:0 2:4 118:0 -6: 0:0 +2: 0:0 +3: 0:0 2:3 15:2 94:0 +4: 0:0 +5: 0:0 2:3 11:0 +6: 0:0 2:4 118:0 7: 0:0 8: 0:0 9: 0:0 @@ -94,5 +94,5 @@ Rows (column:palette): 37: 0:0 38: 0:0 39: 0:0 -40: 0:0 2:5 9:2 20:5 21:2 34:5 37:2 118:0 -41: 0:0 2:5 3:2 11:5 12:2 23:5 32:2 42:5 45:2 53:5 54:2 118:0 +40: 0:0 2:5 9:2 20:5 21:2 118:0 +41: 0:0 2:5 3:2 11:5 12:2 23:5 26:2 34:5 35:2 118:0 diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__tools_panel__analytics_tools_handle_empty_days_and_independent_failures.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__tools_panel__analytics_tools_handle_empty_days_and_independent_failures.snap index 83eef78037..d1fce9fa86 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__tools_panel__analytics_tools_handle_empty_days_and_independent_failures.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__tools_panel__analytics_tools_handle_empty_days_and_independent_failures.snap @@ -12,13 +12,13 @@ expression: "format!(\"{empty}\\n{missing}\\n{partial}\")" " 38 uses " " " " 10 " -" " +" 9 " " ▇▇▇▇▇▇▇▇▇▇▇▇ " -" ████████████ " +" 8 ████████████ 8 " " ▆▆▆▆▆▆▆▆▆▆▆▆ ████████████ ▆▆▆▆▆▆▆▆▆▆▆▆ " -" ████████████ ████████████ ████████████ " +" ████████████ ████████████ ████████████ 7 " " ████████████ ████████████ ████████████ ▅▅▅▅▅▅▅▅▅▅▅▅ " -" ████████████ ████████████ ████████████ ████████████ " +" ████████████ 6 ████████████ ████████████ ████████████ " " ████████████ ▄▄▄▄▄▄▄▄▄▄▄▄ ████████████ ████████████ ████████████ " " ████████████ ████████████ ████████████ ████████████ ████████████ " " 5 ████████████ ████████████ ████████████ ████████████ ████████████ " @@ -45,7 +45,7 @@ expression: "format!(\"{empty}\\n{missing}\\n{partial}\")" " " " " " tab/1–6 section · z dashboard · ←/→ day " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -57,13 +57,13 @@ expression: "format!(\"{empty}\\n{missing}\\n{partial}\")" " 38 uses " " " " 10 " -" " +" 9 " " ▇▇▇▇▇▇▇▇▇▇▇▇ " -" ████████████ " +" 8 ████████████ 8 " " ▆▆▆▆▆▆▆▆▆▆▆▆ ████████████ ▆▆▆▆▆▆▆▆▆▆▆▆ " -" ████████████ ████████████ ████████████ " +" ████████████ ████████████ ████████████ 7 " " ████████████ ████████████ ████████████ ▅▅▅▅▅▅▅▅▅▅▅▅ " -" ████████████ ████████████ ████████████ ████████████ " +" ████████████ 6 ████████████ ████████████ ████████████ " " ████████████ ▄▄▄▄▄▄▄▄▄▄▄▄ ████████████ ████████████ ████████████ " " ████████████ ████████████ ████████████ ████████████ ████████████ " " 5 ████████████ ████████████ ████████████ ████████████ ████████████ " @@ -90,7 +90,7 @@ expression: "format!(\"{empty}\\n{missing}\\n{partial}\")" " " " " " tab/1–6 section · z dashboard · ←/→ day " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -135,4 +135,4 @@ expression: "format!(\"{empty}\\n{missing}\\n{partial}\")" " " " " " tab/1–6 section · z dashboard · ←/→ day " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__tools_panel__analytics_tools_reflow_and_keep_independent_days.snap b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__tools_panel__analytics_tools_reflow_and_keep_independent_days.snap index 67b75a08a3..484164656c 100644 --- a/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__tools_panel__analytics_tools_reflow_and_keep_independent_days.snap +++ b/codex-rs/tui/src/analytics/snapshots/codex_tui__analytics__tests__tools_panel__analytics_tools_reflow_and_keep_independent_days.snap @@ -13,15 +13,15 @@ expression: "format!(\"{wide}\\n{narrow}\")" " " " 40 " " " -" " +" 34 " " ▂▂▂▂▂▂▂▂▂▂▂▂ " " ████████████ " -" ████████████ 29 " +" ████████████ 29 29 " " ████████████ ▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁ " -" ████████████ ████████████ ████████████ " +" ████████████ ████████████ 26 ████████████ " " ████████████ ████████████ ▂▂▂▂▂▂▂▂▂▂▂▂ ████████████ " -" ████████████ ████████████ ████████████ ████████████ " -" ████████████ ▃▃▃▃▃▃▃▃▃▃▃▃ ████████████ ████████████ ▃▃▃▃▃▃▃▃▃▃▃▃ ████████████ " +" ████████████ 23 ████████████ ████████████ 23 ████████████ " +" ████████████ ▃▃▃▃▃▃▃▃▃▃▃▃ ████████████ ████████████ 22 ▃▃▃▃▃▃▃▃▃▃▃▃ ████████████ " " ████████████ ████████████ ████████████ ████████████ ▆▆▆▆▆▆▆▆▆▆▆▆ ████████████ ████████████ " " 20 ████████████ ████████████ ████████████ ████████████ ████████████ ████████████ ████████████ " " ████████████ ████████████ ████████████ ████████████ ████████████ ████████████ ████████████ " @@ -49,7 +49,7 @@ expression: "format!(\"{wide}\\n{narrow}\")" " ● Notion 4 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -62,9 +62,9 @@ expression: "format!(\"{wide}\\n{narrow}\")" " 54 uses " " " " 20 " -" " -" ▂▂▂▂▂ " -" 10 ▃▃▃▃ ▅▅▅▅ ▃▃▃▃ 5 █████ " +" 11 " +" 8 9 8 7 ▂▂▂▂▂ " +" 10 ▃▃▃▃ 6 ▅▅▅▅ ▃▃▃▃ 5 █████ " " ████ ▆▆▆▆ ████ ████ ████ ▄▄▄▄ █████ " " ████ ████ ████ ████ ████ ████ █████ " " 0 ────────────────────────────────────────────────── " @@ -81,5 +81,5 @@ expression: "format!(\"{wide}\\n{narrow}\")" " " " tab/1–6 section · z dashboard · ←/→ day · enter " " details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q " -" close " +" r 7/30d · R refresh · esc back · q close " +" " diff --git a/codex-rs/tui/src/analytics/summary.rs b/codex-rs/tui/src/analytics/summary.rs index 04545b29d0..b0f790a875 100644 --- a/codex-rs/tui/src/analytics/summary.rs +++ b/codex-rs/tui/src/analytics/summary.rs @@ -32,7 +32,6 @@ impl AnalyticsView { self.section = Section::Summary; self.zoomed = true; self.scroll_offset = 0; - self.group_picker = None; if let Some(view) = view { self.sections[Section::Summary].group = VIEWS .iter() diff --git a/codex-rs/tui/src/analytics/summary_panel.rs b/codex-rs/tui/src/analytics/summary_panel.rs index 3beec95ef6..6bcebfd5a9 100644 --- a/codex-rs/tui/src/analytics/summary_panel.rs +++ b/codex-rs/tui/src/analytics/summary_panel.rs @@ -7,7 +7,6 @@ use super::render::join_columns; use super::sections::Section; use super::styles::secondary_style; use crate::line_truncation::truncate_line_with_ellipsis_if_overflow as truncate; -use crate::style::accent_style; use crate::wrapping::RtOptions; use crate::wrapping::word_wrap_lines; use codex_backend_client::ProfileInvocationKind; @@ -157,17 +156,7 @@ impl AnalyticsView { lines.extend([values, labels, Line::default()]); } let selected = self.sections[Section::Summary].group; - let mut controls = Line::default(); - for (index, view) in super::summary::VIEWS.iter().enumerate() { - if index > 0 { - controls.spans.push(" ".into()); - } - controls.spans.push(if index == selected { - format!("[{}]", view.label()).set_style(accent_style()) - } else { - view.label().to_string().set_style(secondary_style()) - }); - } + let controls = Line::from(super::summary::VIEWS[selected].label()); if inner_width >= 58 { lines.push(columns( "Token activity".bold().into(), diff --git a/codex-rs/tui/src/analytics/summary_tests.rs b/codex-rs/tui/src/analytics/summary_tests.rs index 62f4179052..faf84d765b 100644 --- a/codex-rs/tui/src/analytics/summary_tests.rs +++ b/codex-rs/tui/src/analytics/summary_tests.rs @@ -27,8 +27,6 @@ fn summary_modes_reflow_and_keep_selection_across_tabs() { screen(&mut view, /*width*/ 140, /*height*/ 44) ); press(&mut view, KeyCode::Char('g')); - press(&mut view, KeyCode::Down); - press(&mut view, KeyCode::Enter); assert_eq!(view.sections[Section::Summary].group, 1); assert!(view.profile.ready().is_some()); insta::assert_snapshot!( @@ -39,8 +37,6 @@ fn summary_modes_reflow_and_keep_selection_across_tabs() { press(&mut view, KeyCode::BackTab); assert_eq!(view.sections[Section::Summary].group, 1); press(&mut view, KeyCode::Char('g')); - press(&mut view, KeyCode::Down); - press(&mut view, KeyCode::Enter); insta::assert_snapshot!( "summary_cumulative_narrow", screen(&mut view, /*width*/ 64, /*height*/ 60) @@ -110,8 +106,6 @@ async fn summary_loads_once_per_refresh_and_does_not_block_other_reports() { assert!(matches!(view.profile, Load::Error(_))); assert!(view.sections[Section::Usage].history.ready().is_some()); press(&mut view, KeyCode::Char('g')); - press(&mut view, KeyCode::Down); - press(&mut view, KeyCode::Enter); press(&mut view, KeyCode::Tab); press(&mut view, KeyCode::BackTab); test_support::settle(&mut view).await; @@ -141,3 +135,19 @@ async fn closing_summary_aborts_its_pending_profile() { view.cancel_loads(); assert!(cancelled_rx.await.is_err()); } + +#[test] +fn summary_scroll_hints_follow_overflow_and_grouping_wraps() { + let mut view = fixture::view(models::AccountKind::Consumer); + view.profile = Load::Ready(profile()); + view.select_summary(Some(crate::analytics::TokenActivityView::Daily)); + assert!(!screen(&mut view, /*width*/ 140, /*height*/ 60).contains("scroll")); + assert!(screen(&mut view, /*width*/ 80, /*height*/ 18).contains("scroll")); + let mut groups = Vec::new(); + for _ in 0..4 { + groups.push(view.sections[Section::Summary].group); + press(&mut view, KeyCode::Char('g')); + } + assert_eq!(groups, vec![0, 1, 2, 0]); + assert!(!screen(&mut view, /*width*/ 140, /*height*/ 60).contains("scroll")); +} diff --git a/codex-rs/tui/src/analytics_tests.rs b/codex-rs/tui/src/analytics_tests.rs index 5d8969b7cb..c945f9dd03 100644 --- a/codex-rs/tui/src/analytics_tests.rs +++ b/codex-rs/tui/src/analytics_tests.rs @@ -39,6 +39,25 @@ fn screen(view: &mut AnalyticsView, width: u16, height: u16) -> String { terminal.backend().to_string() } +#[test] +fn analytics_exact_fit_content_has_no_scroll_hint() { + let mut view = fixture::view(models::AccountKind::Enterprise); + view.section = Section::Chats; + screen(&mut view, /*width*/ 120, /*height*/ 60); + let chrome_height = 60 - view.viewport_height; + let content_height = view + .panel(Section::Chats, /*width*/ 116, /*chart_height*/ 4) + .lines + .len(); + let exact_height = (chrome_height + content_height) as u16; + + let exact = screen(&mut view, /*width*/ 120, exact_height); + assert!(!exact.contains("scroll")); + assert_eq!(view.viewport_height, content_height); + + insta::assert_snapshot!(exact); +} + #[test] fn analytics_overview() { let mut view = fixture::view(models::AccountKind::Consumer); @@ -93,15 +112,8 @@ async fn analytics_credits_grouping_preserves_selected_day_and_total() { .iter() .map(|day| day.total) .collect::>(); - press(&mut view, KeyCode::Char('g')); - view.end_date = fixture::END_DATE; - fixture::seed_reports(&mut view); - let picker = screen(&mut view, /*width*/ 85, /*height*/ 40); - press(&mut view, KeyCode::Esc); for group in [2, 4, 5, 0] { press(&mut view, KeyCode::Char('g')); - press(&mut view, KeyCode::Down); - press(&mut view, KeyCode::Enter); test_support::settle(&mut view).await; assert_eq!( ( @@ -122,11 +134,9 @@ async fn analytics_credits_grouping_preserves_selected_day_and_total() { before ); } + view.end_date = fixture::END_DATE; fixture::seed_reports(&mut view); - insta::assert_snapshot!(format!( - "{picker}\n{}", - screen(&mut view, /*width*/ 85, /*height*/ 40) - )); + insta::assert_snapshot!(screen(&mut view, /*width*/ 85, /*height*/ 40)); } #[tokio::test] diff --git a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__transcript_composer__analytics_menu_reopen_preserves_navigation_and_explicit_view_selects_summary.snap b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__transcript_composer__analytics_menu_reopen_preserves_navigation_and_explicit_view_selects_summary.snap index f7b6079b54..3980dcd75b 100644 --- a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__transcript_composer__analytics_menu_reopen_preserves_navigation_and_explicit_view_selects_summary.snap +++ b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__transcript_composer__analytics_menu_reopen_preserves_navigation_and_explicit_view_selects_summary.snap @@ -25,7 +25,7 @@ expression: snapshot tab/1–6 section · z dashboard · ←/→ day - r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close + r 7/30d · R refresh · esc back · q close Analytics · Live account [7d] 30d · [date range] @@ -50,10 +50,11 @@ expression: snapshot tab/1–6 section · z dashboard · ←/→ day - r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close + r 7/30d · R refresh · esc back · q close Analytics · Live account + [1 Summary] 2 Total usage history 3 Messages 4 Plugins called 5 Skills used 6 Top chats @@ -67,12 +68,11 @@ expression: snapshot — — Current streak Longest streak - Token activity Daily [Weekly] Cumulative + Token activity Weekly Last 12 months Token activity history unavailable Activity insights Most used plugins and skills - tab/1–6 section · z dashboard · ↑/↓ scroll g view · R refresh · pgup/pgdn scroll · esc back · q close diff --git a/codex-rs/tui/src/app/tests/transcript_composer.rs b/codex-rs/tui/src/app/tests/transcript_composer.rs index 922a05da91..ed0174a383 100644 --- a/codex-rs/tui/src/app/tests/transcript_composer.rs +++ b/codex-rs/tui/src/app/tests/transcript_composer.rs @@ -162,7 +162,7 @@ async fn analytics_menu_reopen_preserves_navigation_and_explicit_view_selects_su assert_eq!(screens[0], screens[1]); assert!(screens[1].contains("[4 Plugins called]")); assert!(screens[2].contains("[1 Summary]")); - assert!(screens[2].contains("[Weekly]")); + assert!(screens[2].contains("Weekly")); let snapshot = screens.join("\n\n"); let snapshot = snapshot .lines() diff --git a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_credits_grouping_preserves_selected_day_and_total.snap b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_credits_grouping_preserves_selected_day_and_total.snap index a05dade7ae..47a9ac2585 100644 --- a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_credits_grouping_preserves_selected_day_and_total.snap +++ b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_credits_grouping_preserves_selected_day_and_total.snap @@ -1,48 +1,7 @@ --- source: tui/src/analytics_tests.rs -expression: "format!(\"{picker}\\n{}\", screen(&mut view, 85, 40))" +expression: "screen(&mut view, 85, 40)" --- -" Analytics · Live account · analytics@example.test " -" [7d] 30d · Aug 27–Sep 2, 2026 " -" " -" 1 Summary [2 Credits usage history] 3 Token usage history 4 Plugins called 5 " -" Skills used 6 Top chats " -" " -" ▎ Credits usage history By product " -" ───────────────────────────────────────────────────────────────────────────────── " -" › Product " -" Model " -" Speed " -" Reasoning " -" 431.00 credits " -" " -" 150 " -" " -" 109.00 " -" ▃▃▃▃▃▃▃ " -" ███████ " -" ▂▂▂▂▂▂▂ ███████ " -" 75 ███████ ▄▄▄▄▄▄▄ ███████ " -" ███████ ███████ ███████ ▄▄▄▄▄▄▄ " -" ▇▇▇▇▇▇▇ ███████ ███████ ███████ ███████ " -" ▄▄▄▄▄▄▄ ███████ ███████ ███████ ███████ ███████ " -" ███████ ███████ ███████ ███████ ███████ ███████ " -" ███████ ███████ ███████ ███████ ███████ ███████ " -" 0 ███████ ███████ ███████ ███████ ███████ ███████ " -" 0 ──────────────────────────────────────────────────────────────────────────── " -" ▲ " -" Aug 27 Aug 28 Aug 29 Aug 30 Aug 31 Sep 1 Sep 2 " -" " -" ──────────────────────────────────────────────────────── " -" Sep 1 · 109.00 credits " -" Product Credits " -" ● CLI 39.00 " -" ● Desktop app 38.00 " -" ● IDE extension 18.00 " -" ● Web 14.00 " -" " -" ↑/↓ group · enter select · esc cancel " - " Analytics · Live account · analytics@example.test " " [7d] 30d · Aug 27–Sep 2, 2026 " " " @@ -58,12 +17,12 @@ expression: "format!(\"{picker}\\n{}\", screen(&mut view, 85, 40))" " " " 109.00 " " ▅▅▅▅▅▅▅ " +" 85.00 ███████ " " ███████ " -" ███████ " -" ███████ ███████ " -" 75 ███████ ███████ ███████ " +" ███████ 75.00 ███████ " +" 75 57.00 ███████ ███████ ███████ 64.00 " " ███████ ███████ ███████ ▆▆▆▆▆▆▆ " -" ███████ ███████ ███████ ███████ ███████ " +" 41.00 ███████ ███████ ███████ ███████ ███████ " " ▂▂▂▂▂▂▂ ███████ ███████ ███████ ███████ ███████ " " ███████ ███████ ███████ ███████ ███████ ███████ " " ███████ ███████ ███████ ███████ ███████ ███████ " @@ -82,4 +41,4 @@ expression: "format!(\"{picker}\\n{}\", screen(&mut view, 85, 40))" " ● Web 14.00 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_dates_distinguish_zero_missing_and_exact_details.snap b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_dates_distinguish_zero_missing_and_exact_details.snap index fe32fe284a..1bd8e2e004 100644 --- a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_dates_distinguish_zero_missing_and_exact_details.snap +++ b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_dates_distinguish_zero_missing_and_exact_details.snap @@ -5,9 +5,9 @@ expression: "screens.join(\"\\n\\n\")" ▎ Credits usage history By product ────────────────────────────────────────────────────── 13.1K credits - + 12,746.44 15K ▄▄▄▄ - ████ + ████ 85.00 75.00 109.00 64.00 0.00 ████ — ▁▁▁▁ ▁▁▁▁ ▁▁▁▁ ▁▁▁▁ 0 ──────────────────────────────────────────────── ▲ @@ -26,7 +26,7 @@ Product Credits 13.1K credits 12,746.44 15K ▄▄▄▄ - ████ + ████ 85.00 75.00 109.00 64.00 0 ████ — ▁▁▁▁ ▁▁▁▁ ▁▁▁▁ ▁▁▁▁ 0 ──────────────────────────────────────────────── ▲ @@ -43,9 +43,9 @@ Product Credits ▎ Credits usage history By product ────────────────────────────────────────────────────── 13.1K credits - + 12,746.44 15K ▄▄▄▄ - ████ + ████ 85.00 75.00 109.00 64.00 0 ████ — ▁▁▁▁ ▁▁▁▁ ▁▁▁▁ ▁▁▁▁ 0 ──────────────────────────────────────────────── ▲ diff --git a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_day_navigation_keeps_geometry_and_legend.snap b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_day_navigation_keeps_geometry_and_legend.snap index 9d55188eae..a30174ec2c 100644 --- a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_day_navigation_keeps_geometry_and_legend.snap +++ b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_day_navigation_keeps_geometry_and_legend.snap @@ -14,14 +14,14 @@ expression: "snapshots.join(\"\\n\")" " " " 150 " " " -" " +" 109.00 " " ▅▅▅▅ " -" ████ " -" ▆▆▆▆ ████ " +" 85.00 ████ " +" ▆▆▆▆ 75.00 ████ 64.00 " " 75 ████ ████ ████ " " ████ ████ ████ ████ " " ████ ████ ████ ████ " -" ████ ████ ████ ████ " +" 14.00 ████ ████ ████ ████ " " ████ ████ ████ ████ " " 0 ████ — ████ ████ ████ ████ " " 0 ───────────────────────────────────────────────── " @@ -38,8 +38,8 @@ expression: "snapshots.join(\"\\n\")" " " " tab/1–6 section · z dashboard · ←/→ day · enter " " details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q " -" close " +" r 7/30d · R refresh · esc back · q close " +" " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -53,16 +53,16 @@ expression: "snapshots.join(\"\\n\")" " 150 " " " " " -" " +" 109.00 " " ▇▇▇▇▇▇▇▇▇▇▇▇ " -" ████████████ " -" ▄▄▄▄▄▄▄▄▄▄▄▄ ████████████ " -" 75 ████████████ ▄▄▄▄▄▄▄▄▄▄▄▄ ████████████ " +" 85.00 ████████████ " +" ▄▄▄▄▄▄▄▄▄▄▄▄ 75.00 ████████████ " +" 75 ████████████ ▄▄▄▄▄▄▄▄▄▄▄▄ ████████████ 64.00 " " ████████████ ████████████ ████████████ ▃▃▃▃▃▃▃▃▃▃▃▃ " " ████████████ ████████████ ████████████ ████████████ " " ████████████ ████████████ ████████████ ████████████ " " ████████████ ████████████ ████████████ ████████████ " -" ████████████ ████████████ ████████████ ████████████ " +" 14.00 ████████████ ████████████ ████████████ ████████████ " " ▃▃▃▃▃▃▃▃▃▃▃▃ ████████████ ████████████ ████████████ ████████████ " " 0 ████████████ — ████████████ ████████████ ████████████ ████████████ " " 0 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── " @@ -78,4 +78,4 @@ expression: "snapshots.join(\"\\n\")" " ● Web — " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_details_reflow_and_keep_focus.snap b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_details_reflow_and_keep_focus.snap index 782eafa7f2..e6f8747544 100644 --- a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_details_reflow_and_keep_focus.snap +++ b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_details_reflow_and_keep_focus.snap @@ -4,6 +4,7 @@ expression: "format!(\"{wide}\\n{narrow}\")" --- " Analytics · Live account " " " +" " " 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " " " " ▎ Top chats " @@ -41,12 +42,12 @@ expression: "format!(\"{wide}\\n{narrow}\")" " " " " " " -" " " tab/1–6 section · z dashboard · ↑/↓ row · enter details " -" R refresh · pgup/pgdn scroll · esc back · q close " +" R refresh · esc back · q close " " Analytics · Live account " " " +" " " Summary Credits usage history Token usage history " " Plugins called Skills used [Top chats] " " " @@ -61,7 +62,6 @@ expression: "format!(\"{wide}\\n{narrow}\")" " GPT-5.6-Sol 120.00 " " high · standard " " " -" " " tab/1–6 section · z dashboard · ↑/↓ row · enter " " details " " R refresh · pgup/pgdn scroll · esc back · q close " diff --git a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_empty_turns_keep_geometry_and_disable_details.snap b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_empty_turns_keep_geometry_and_disable_details.snap index ca697bb1d7..8b7a48d2f0 100644 --- a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_empty_turns_keep_geometry_and_disable_details.snap +++ b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_empty_turns_keep_geometry_and_disable_details.snap @@ -14,11 +14,11 @@ expression: "snapshots.join(\"\\n\")" " " " 150 " " " -" " +" 107 " " ▄▄▄▄ " -" ████ " -" ▅▅▅▅ ████ " -" 75 ████ ████ ████ " +" 83 ████ " +" ▅▅▅▅ ████ 75 " +" 75 62 ████ ████ ████ 59 " " ▇▇▇▇ ████ ████ ████ ▅▅▅▅ " " ████ ████ ████ ████ ████ " " ████ ████ ████ ████ ████ " @@ -37,8 +37,8 @@ expression: "snapshots.join(\"\\n\")" " " " " " tab/1–6 section · z dashboard · ←/→ day " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc " -" back · q close " +" r 7/30d · g group · R refresh · esc back · q close " +" " " " " Analytics · Live account " @@ -53,11 +53,11 @@ expression: "snapshots.join(\"\\n\")" " " " 150 " " " -" " +" 107 " " ▄▄▄▄ " -" ████ " -" ▅▅▅▅ ████ " -" 75 ████ ████ ████ " +" 83 ████ " +" ▅▅▅▅ ████ 75 " +" 75 62 ████ ████ ████ 59 " " ▇▇▇▇ ████ ████ ████ ▅▅▅▅ " " ████ ████ ████ ████ ████ " " ████ ████ ████ ████ ████ " @@ -76,8 +76,8 @@ expression: "snapshots.join(\"\\n\")" " " " " " tab/1–6 section · z dashboard · ←/→ day " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc " -" back · q close " +" r 7/30d · g group · R refresh · esc back · q close " +" " " " " Analytics · Live account " @@ -92,12 +92,12 @@ expression: "snapshots.join(\"\\n\")" " 150 " " " " " -" " +" 107 " " ▅▅▅▅▅▅▅▅ " -" ████████ " -" ▂▂▂▂▂▂▂▂ ████████ " -" 75 ████████ ████████ ▄▄▄▄▄▄▄▄ " -" ▁▁▁▁▁▁▁▁ ████████ ████████ ████████ " +" 83 ████████ " +" ▂▂▂▂▂▂▂▂ ████████ 75 " +" 75 62 ████████ ████████ ▄▄▄▄▄▄▄▄ " +" ▁▁▁▁▁▁▁▁ ████████ ████████ ████████ 59 " " ████████ ████████ ████████ ████████ ▇▇▇▇▇▇▇▇ " " ████████ ████████ ████████ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ " @@ -117,7 +117,7 @@ expression: "snapshots.join(\"\\n\")" " " " " " tab/1–6 section · z dashboard · ←/→ day " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -131,12 +131,12 @@ expression: "snapshots.join(\"\\n\")" " 150 " " " " " -" " +" 107 " " ▅▅▅▅▅▅▅▅ " -" ████████ " -" ▂▂▂▂▂▂▂▂ ████████ " -" 75 ████████ ████████ ▄▄▄▄▄▄▄▄ " -" ▁▁▁▁▁▁▁▁ ████████ ████████ ████████ " +" 83 ████████ " +" ▂▂▂▂▂▂▂▂ ████████ 75 " +" 75 62 ████████ ████████ ▄▄▄▄▄▄▄▄ " +" ▁▁▁▁▁▁▁▁ ████████ ████████ ████████ 59 " " ████████ ████████ ████████ ████████ ▇▇▇▇▇▇▇▇ " " ████████ ████████ ████████ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ " @@ -156,4 +156,4 @@ expression: "snapshots.join(\"\\n\")" " " " " " tab/1–6 section · z dashboard · ←/→ day " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_exact_fit_content_has_no_scroll_hint.snap b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_exact_fit_content_has_no_scroll_hint.snap new file mode 100644 index 0000000000..f279d346ca --- /dev/null +++ b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_exact_fit_content_has_no_scroll_hint.snap @@ -0,0 +1,24 @@ +--- +source: tui/src/analytics_tests.rs +expression: exact +--- +" Analytics · Live account " +" " +" " +" 1 Summary 2 Credits usage history 3 Token usage history 4 Plugins called 5 Skills used [6 Top chats] " +" " +" ▎ Top chats " +" ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── " +" Active in past 30 days · sorted by lifetime credits " +" " +" Chat Lifetime credits " +" › Q3 planning analysis 120.00 " +" Refactor billing usage 113.00 " +" Other usage 109.00 " +" Launch readiness review 85.00 " +" " +" Showing 1–4 of 5 chats " +" Local chats · excludes archived chats and subagent usage " +" " +" tab/1–6 section · z dashboard · ↑/↓ row · enter details " +" R refresh · esc back · q close " diff --git a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_maximized_refunds_leave_room_for_both_bands.snap b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_maximized_refunds_leave_room_for_both_bands.snap index 0cd1f42a1e..dd14dd91d0 100644 --- a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_maximized_refunds_leave_room_for_both_bands.snap +++ b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_maximized_refunds_leave_room_for_both_bands.snap @@ -11,9 +11,9 @@ expression: output " ▎ Credits usage history By product " " ──────────────────────────────────────────────────────────────────────────────────────────────── " " 367.00 credits " -" " -" 150 ▁▁▁▁▁▁▁▁ " -" ▁▁▁▁▁▁▁▁ ▅▅▅▅▅▅▅▅ ▄▄▄▄▄▄▄▄ ████████ " +" 109.00 " +" 150 57.00 85.00 75.00 ▁▁▁▁▁▁▁▁ " +" 41.00 ▁▁▁▁▁▁▁▁ ▅▅▅▅▅▅▅▅ ▄▄▄▄▄▄▄▄ ████████ " " 0 ▆▆▆▆▆▆▆▆ ████████ ████████ ████████ ████████ " " 0 ────────────────────────────────────────────────────────────────────────────────────────── " " ▇▇▇▇▇▇▇▇ " @@ -33,4 +33,4 @@ expression: output " " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_model_labels_and_tool_remainders_are_unambiguous.snap b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_model_labels_and_tool_remainders_are_unambiguous.snap index 600dffda5a..5a3ae89fd2 100644 --- a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_model_labels_and_tool_remainders_are_unambiguous.snap +++ b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_model_labels_and_tool_remainders_are_unambiguous.snap @@ -10,8 +10,8 @@ expression: "format!(\"{overview}\\n{skills}\")" " │ No history has been reported. │ │ 7d │ " " │ │ │ By feature │ " " │ │ │ Total usage · relative units │ " -" │ │ │ 86 │ " -" │ │ │ 100 ▃▃▃▃▃ ▂▂▂▂▂ ▆▆▆▆▆ ▄▄▄▄▄ █████ ▅▅▅▅▅▅ │ " +" │ │ │ 73 64 91 81 100 86 │ " +" │ │ │ 100 20 ▃▃▃▃▃ ▂▂▂▂▂ ▆▆▆▆▆ ▄▄▄▄▄ █████ ▅▅▅▅▅▅ │ " " │ │ │ ▃▃▃▃▃ █████ █████ █████ █████ █████ ██████ │ " " │ │ │ 0 ───────────────────────────────────────────────────────── │ " " │ │ │ ▲ │ " @@ -29,9 +29,9 @@ expression: "format!(\"{overview}\\n{skills}\")" " │ │ │ │ " " │ 7d │ │ 7d │ " " │ By model │ │ 186 calls │ " -" │ 574 reported messages │ │ 29 │ " -" │ 103 │ │ 40 ▅▅▅▅▅ ▁▁▁▁▁ ▃▃▃▃▃ ▂▂▂▂▂▂ ▁▁▁▁▁ ▃▃▃▃▃▃ │ " -" │ 150 ▃▃▃▃▃ ▁▁▁▁▁ ▂▂▂▂▂▂ │ │ █████ █████ █████ ██████ █████ █████ ██████ │ " +" │ 574 reported messages │ │ 34 23 29 26 22 23 29 │ " +" │ 83 107 85 103 │ │ 40 ▅▅▅▅▅ ▁▁▁▁▁ ▃▃▃▃▃ ▂▂▂▂▂▂ ▁▁▁▁▁ ▃▃▃▃▃▃ │ " +" │ 150 62 ▃▃▃▃▃ 75 59 ▁▁▁▁▁ ▂▂▂▂▂▂ │ │ █████ █████ █████ ██████ █████ █████ ██████ │ " " │ ▆▆▆▆▆ █████ █████ █████ ▆▆▆▆▆ █████ ██████ │ │ 0 ────────────────────────────────────────────────────────── │ " " │ 0 ───────────────────────────────────────────────────────── │ │ ▲ │ " " │ ▲ │ │ Aug 27 Aug 28 Aug 29 Aug 30 Aug 31 Sep 1 Sep 2 │ " @@ -50,7 +50,7 @@ expression: "format!(\"{overview}\\n{skills}\")" " │ 7d │ │ No history has been reported. │ " " │ 54 uses │ │ │ " " │ 11 │ │ │ " -" │ 20 │ │ │ " +" │ 20 8 6 9 8 7 5 │ │ │ " " │ ▆▆▆▆▆ ▄▄▄▄▄ ▇▇▇▇▇ ▆▆▆▆▆▆ ▅▅▅▅▅ ▄▄▄▄▄ ██████ │ │ │ " " │ 0 ────────────────────────────────────────────────────────── │ │ │ " " │ ▲ │ │ │ " @@ -65,7 +65,7 @@ expression: "format!(\"{overview}\\n{skills}\")" " │ │ │ │ " " ╰────────────────────────────────────────────────────────────────╯ ╰────────────────────────────────────────────────────────────────╯ " " tab/1–6 section · enter/z maximize " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " " Analytics · Live account " " [7d] 30d · Aug 27–Sep 2, 2026 " @@ -79,9 +79,9 @@ expression: "format!(\"{overview}\\n{skills}\")" " 20 " " " " " -" 11 " -" 10 ▇▇▇▇▇▇▇▇▇ " -" ▄▄▄▄▄▄▄▄ ████████ ▄▄▄▄▄▄▄▄ ▁▁▁▁▁▁▁▁ █████████ " +" 9 11 " +" 10 8 8 7 ▇▇▇▇▇▇▇▇▇ " +" ▄▄▄▄▄▄▄▄ 6 ████████ ▄▄▄▄▄▄▄▄ ▁▁▁▁▁▁▁▁ 5 █████████ " " ████████ ▅▅▅▅▅▅▅▅ ████████ ████████ ████████ ▂▂▂▂▂▂▂▂ █████████ " " ████████ ████████ ████████ ████████ ████████ ████████ █████████ " " ████████ ████████ ████████ ████████ ████████ ████████ █████████ " @@ -98,4 +98,4 @@ expression: "format!(\"{overview}\\n{skills}\")" " ● Debugging 1 " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_overview.snap b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_overview.snap index d287e1cd57..1e49c634bd 100644 --- a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_overview.snap +++ b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_overview.snap @@ -10,7 +10,7 @@ expression: wide " │ No history has been reported. │ │ 7d │ " " │ │ │ By feature │ " " │ │ │ Total usage · relative units │ " -" │ │ │ 86 │ " +" │ │ │ 20 73 64 91 81 100 86 │ " " │ │ │ 100 ▁▁▁▁ ▅▅▅▅ ▅▅▅▅ ▇▇▇▇ ▆▆▆▆ ████ ▆▆▆▆ │ " " │ │ │ 0 ─────────────────────────────────────────────── │ " " │ │ │ ▲ │ " @@ -27,8 +27,8 @@ expression: wide " │ │ │ │ " " │ 7d │ │ 7d │ " " │ By model │ │ 186 calls │ " -" │ 574 reported messages │ │ 29 │ " -" │ 103 │ │ 40 ▆▆▆▆ ▄▄▄▄ ▅▅▅▅ ▅▅▅▅ ▄▄▄▄ ▄▄▄▄ ▅▅▅▅ │ " +" │ 574 reported messages │ │ 34 23 29 26 22 23 29 │ " +" │ 62 83 107 75 59 85 103 │ │ 40 ▆▆▆▆ ▄▄▄▄ ▅▅▅▅ ▅▅▅▅ ▄▄▄▄ ▄▄▄▄ ▅▅▅▅ │ " " │ 150 ▃▃▃▃ ▄▄▄▄ ▅▅▅▅ ▄▄▄▄ ▃▃▃▃ ▄▄▄▄ ▅▅▅▅ │ │ 0 ──────────────────────────────────────────────── │ " " │ 0 ─────────────────────────────────────────────── │ │ ▲ │ " " │ ▲ │ │ 27 28 29 30 31 1 2 │ " @@ -45,7 +45,7 @@ expression: wide " │ │ │ │ " " │ 7d │ │ No history has been reported. │ " " │ 54 uses │ │ │ " -" │ 11 │ │ │ " +" │ 8 6 9 8 7 5 11 │ │ │ " " │ 20 ▃▃▃▃ ▂▂▂▂ ▃▃▃▃ ▃▃▃▃ ▂▂▂▂ ▂▂▂▂ ▄▄▄▄ │ │ │ " " │ 0 ──────────────────────────────────────────────── │ │ │ " " │ ▲ │ │ │ " @@ -61,4 +61,4 @@ expression: wide " " " " " tab/1–6 section · enter/z maximize " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close " diff --git a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_usage_ranks_its_own_models_after_turns_load.snap b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_usage_ranks_its_own_models_after_turns_load.snap index c19b3448e1..934222448e 100644 --- a/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_usage_ranks_its_own_models_after_turns_load.snap +++ b/codex-rs/tui/src/snapshots/codex_tui__analytics__tests__analytics_usage_ranks_its_own_models_after_turns_load.snap @@ -11,19 +11,17 @@ expression: selected_day " ──────────────────────────────────────────────────────────────────────────────────────────────── " " Total usage · relative units " " Approximate · may be delayed up to 6 hours " -" 100 " -" 100 ████████ ▇▇▇▇▇▇▇▇ " -" ▅▅▅▅▅▅▅▅ ████████ ████████ " -" ████████ ▂▂▂▂▂▂▂▂ ████████ ████████ " -" ▁▁▁▁▁▁▁▁ ████████ ████████ ████████ ████████ " -" ████████ ████████ ████████ ████████ ████████ " -" ████████ ▇▇▇▇▇▇▇▇ ████████ ████████ ████████ ████████ " +" 100 100 " +" 100 91 ████████ ▇▇▇▇▇▇▇▇ " +" ▇▇▇▇▇▇▇▇ 81 ████████ ████████ " +" 73 ████████ ▅▅▅▅▅▅▅▅ ████████ ████████ " +" ▆▆▆▆▆▆▆▆ 64 ████████ ████████ ████████ ████████ " +" ████████ ▅▅▅▅▅▅▅▅ ████████ ████████ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ ████████ " " 50 ████████ ████████ ████████ ████████ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ ████████ " -" ████████ ████████ ████████ ████████ ████████ ████████ " -" ████████ ████████ ████████ ████████ ████████ ████████ " -" ▆▆▆▆▆▆▆▆ ████████ ████████ ████████ ████████ ████████ ████████ " +" 20 ████████ ████████ ████████ ████████ ████████ ████████ " +" ▃▃▃▃▃▃▃▃ ████████ ████████ ████████ ████████ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ ████████ ████████ " " ████████ ████████ ████████ ████████ ████████ ████████ ████████ " " 0 ─────────────────────────────────────────────────────────────────────────────────────────── " @@ -36,7 +34,9 @@ expression: selected_day " ● Remote GPT-5.6-Sol 91.1% " " ● Remote GPT-5.5 6.8% " " ● Remote Other 2.1% " -" … 3 more 0.0% " +" ● Remote GPT-5.6-Terra 0.0% " +" ● Remote Model E 0.0% " +" ● Remote Model F 0.0% " " " " tab/1–6 section · z dashboard · ←/→ day · enter details " -" r 7/30d · g group · R refresh · pgup/pgdn scroll · esc back · q close " +" r 7/30d · g group · R refresh · esc back · q close "