Usage popover: add cumulative Total input row

Fresh + cache read + cache write — the session's billed input volume;
shown only when a cache split exists.
This commit is contained in:
Rohit C Prasad
2026-07-28 11:39:15 -07:00
parent 92c1833223
commit a35b505659
2 changed files with 9 additions and 1 deletions
+3
View File
@@ -33,6 +33,9 @@ test("usage chip appears after a turn and opens the breakdown popover", async ({
await expect(pop).toContainText("Claude Opus 4.8 · Anthropic");
await expect(pop).toContainText("Input");
await expect(pop).toContainText("Cache read");
// 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");
await expect(pop).toContainText("10k tokens");
// Second turn accumulates (totals double), and the scrim click closes the popover.
+6 -1
View File
@@ -660,9 +660,14 @@ function UsageChip({
</div>
<div className="mt-0.5 flex flex-col gap-0.5">
{stat("Input", t.input)}
{stat("Output", t.output)}
{t.cache_read > 0 && stat("Cache read", t.cache_read)}
{t.cache_write > 0 && stat("Cache write", 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. */}
{t.cache_read + t.cache_write > 0 &&
stat("Total input", t.input + t.cache_read + t.cache_write)}
{stat("Output", t.output)}
</div>
</div>
))}