Usage popover: label rows as session totals

Section header 'Session totals' + pluralized cache rows make the
cumulative semantics explicit.
This commit is contained in:
Rohit C Prasad
2026-07-28 11:42:44 -07:00
parent a35b505659
commit d1524b3376
2 changed files with 6 additions and 4 deletions
+3 -1
View File
@@ -30,9 +30,11 @@ test("usage chip appears after a turn and opens the breakdown popover", async ({
await expect(pop).toBeVisible();
await expect(pop).toContainText("Context window");
await expect(pop).toContainText("9.8k of 200k · 5%");
await expect(pop).toContainText("Session totals");
await expect(pop).toContainText("Claude Opus 4.8 · Anthropic");
await expect(pop).toContainText("Input");
await expect(pop).toContainText("Cache read");
await expect(pop).toContainText("Cache reads");
await expect(pop).toContainText("Cache writes");
// Total input = fresh 1k + cache_read 8k + cache_write 800 (cumulative billed input).
await expect(pop).toContainText("Total input");
await expect(pop).toContainText("9.8k");
+3 -3
View File
@@ -650,7 +650,7 @@ function UsageChip({
</div>
) : null}
<div className="text-[10.5px] uppercase tracking-[0.06em] text-faint font-semibold mb-1">
This session
Session totals
</div>
<div className="flex flex-col gap-1.5">
{Object.entries(usage.byModel).map(([id, t]) => (
@@ -660,8 +660,8 @@ function UsageChip({
</div>
<div className="mt-0.5 flex flex-col gap-0.5">
{stat("Input", t.input)}
{t.cache_read > 0 && stat("Cache read", t.cache_read)}
{t.cache_write > 0 && stat("Cache write", t.cache_write)}
{t.cache_read > 0 && stat("Cache reads", t.cache_read)}
{t.cache_write > 0 && stat("Cache writes", t.cache_write)}
{/* Cumulative billed input volume = fresh + cache reads + cache
writes (each class bills at its own rate). Shown only when a
cache split exists — otherwise it would duplicate Input. */}