Improve analytics chart readability and navigation (#45770)

## Why

Reading daily totals required selecting each bar, and changing grouping required opening a picker. Section navigation could shift vertically, while scroll hints appeared even when content fit.

## What changed

- Make `g` cycle through available groupings and summary views directly.
- Show daily totals on charts spanning up to seven days when space permits, prioritizing the selected value and keeping neighboring labels separate.
- Keep section navigation at a stable height, show more legend rows in taller maximized reports, and move their update timestamp into the footer.
- Hide scroll hints when content fits, including an exact fit, and show only the active summary view label.

## Testing

Add regression tests and snapshots for seven-day totals, narrow label spacing, grouping wraparound and server capabilities, configured `g` navigation in ungrouped sections, stable tab placement, adaptive legends, footer timestamps, and overflow-dependent scroll hints.

GitOrigin-RevId: 9d14f314b4a22ca2d926f0e69c6b89e4f9c8550d
This commit is contained in:
Felipe Coury
2026-09-15 19:13:32 +00:00
committed by copyberry
parent 9bd49c9dcc
commit de40696ec4
92 changed files with 1474 additions and 1214 deletions
+7 -32
View File
@@ -77,7 +77,6 @@ pub(crate) struct AnalyticsView {
ranges: [usize; 3],
end_date: chrono::NaiveDate,
token_model: Option<String>,
group_picker: Option<usize>,
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 {
@@ -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"));
}
}
+12 -6
View File
@@ -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::<Vec<_>>();
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::<f64>(),
@@ -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"))
+53 -77
View File
@@ -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());
}
}
}
+3 -23
View File
@@ -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() {
+95 -65
View File
@@ -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::<f64>();
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::<f64>();
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());
+66
View File
@@ -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::<Vec<_>>();
let days = rows
.iter()
.map(|day| (day.date, Some(day)))
.collect::<Vec<_>>();
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::<Vec<_>>();
let days = rows
.iter()
.map(|day| (day.date, Some(day)))
.collect::<Vec<_>>();
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::<Vec<_>>()
.join("\n");
assert!(text.contains("111"));
assert!(!text.contains("111111"));
screens.push(text);
}
insta::assert_snapshot!(screens.join("\n\n"));
}
+61 -27
View File
@@ -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<Line<'static>>| {
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;
-6
View File
@@ -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
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
" "
@@ -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 "
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 "
@@ -6,6 +6,7 @@ expression: error
" "
" "
" "
" "
" Sign in again to view Analytics. "
" "
" "
@@ -24,5 +25,4 @@ expression: error
" "
" "
" "
" "
" R refresh · esc back · q close "
@@ -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 "
" "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 │ "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 "
@@ -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 "
" "
-1
View File
@@ -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()
+1 -12
View File
@@ -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(),
+16 -6
View File
@@ -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"));
}
+21 -11
View File
@@ -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::<Vec<_>>();
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]
@@ -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
@@ -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()
@@ -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 "
@@ -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 ────────────────────────────────────────────────
▲
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "
@@ -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 "