From 7bbb3880b2017cdce9d4d5132ae0a50c36089be9 Mon Sep 17 00:00:00 2001 From: hmenzagh Date: Mon, 13 Apr 2026 22:14:25 +0200 Subject: [PATCH 1/4] fix(parser): implement request dedup and deltaize for token accuracy - Deduplicate API responses by requestId to eliminate 2-3x overcounting from streaming chunks, sub-agent mirrors, and compact retries - Implement deltaize algorithm to correctly distribute tokens across minutes for long streaming responses with extended thinking - Preserve code metrics on partial-overlap streams using ghost markers - Fix ghost event filtering in model breakdowns Fixes token and cost accuracy issues observed with heavy sub-agent usage. --- src/data/parser.rs | 1055 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1027 insertions(+), 28 deletions(-) diff --git a/src/data/parser.rs b/src/data/parser.rs index b4f4ac1..e66269e 100644 --- a/src/data/parser.rs +++ b/src/data/parser.rs @@ -31,6 +31,23 @@ pub struct Event { pub lines_deleted: u64, /// Basename of the JSONL file (session UUID). pub session_file: String, + /// API request id (`req_…`) — the canonical identifier Anthropic bills + /// against. Used to dedup events that get rewritten across files (e.g. + /// sub-agents echoing the parent's messages, auto-compact retries) or + /// across streaming chunks within the same file. `None` for user-side + /// events (`lines_accepted`, etc). + pub request_id: Option, + /// Raw `costUSD` read verbatim from the JSONL (the authoritative billed + /// amount, cumulative per streaming snapshot when emitted by Claude + /// Code). Preserved separately from `cost_usd` so `deltaize_stream` can + /// delta the cumulative rather than fall back to a token-pricing + /// approximation. `None` when the field is absent (Pro-plan logs, which + /// never carry `costUSD`). + pub raw_cost_usd: Option, + /// Per-line UUID from the JSONL. Used to dedup user-side patch events + /// that get mirrored across parent and sub-agent files (same uuid, same + /// content). Assistant events are deduped by `request_id` instead. + pub line_uuid: Option, } // --------------------------------------------------------------------------- @@ -47,6 +64,12 @@ struct RawLine { cost_usd: Option, #[serde(rename = "toolUseResult")] tool_use_result: Option, + #[serde(rename = "requestId")] + request_id: Option, + /// Per-line UUID assigned by Claude Code. Preserved byte-identical when + /// the same event is mirrored into a sub-agent's JSONL, so we can use it + /// to dedup user-side patch events (which have no `requestId`). + uuid: Option, } #[derive(Deserialize)] @@ -98,16 +121,270 @@ struct RawPatchHunk { // Public API // --------------------------------------------------------------------------- -/// Parse a list of JSONL files in parallel and return all events. +/// Parse a list of JSONL files in parallel and dedup so totals match +/// Anthropic's billing (1 `request_id` = 1 HTTP request = 1 invoice line). +/// See `dedup_by_request_id` for the canonicalization algorithm. pub fn parse_session_files(paths: &[PathBuf]) -> Vec { - let mut events: Vec = paths + let raw: Vec = paths .par_iter() .filter_map(|p| parse_one_file(p)) .flatten() .collect(); - events.sort_by_key(|e| e.timestamp); - events + dedup_by_request_id(raw) +} + +fn dedup_by_request_id(events: Vec) -> Vec { + let total = events.len(); + let mut without_req: Vec = Vec::new(); + let mut by_req: HashMap>> = HashMap::new(); + for e in events { + match &e.request_id { + Some(id) => { + let inner = by_req.entry(id.clone()).or_default(); + // Avoid cloning session_file on every event: only clone on + // the first chunk per stream (i.e. per unique file). + if let Some(stream) = inner.get_mut(&e.session_file) { + stream.push(e); + } else { + inner.insert(e.session_file.clone(), vec![e]); + } + } + None => without_req.push(e), + } + } + + // User-side events (patches) have no requestId but carry a per-line + // `uuid` Claude Code preserves byte-identical across sub-agent mirrors. + // Dedup by uuid; events without a uuid (older logs) pass through + // unchanged — under-counting is worse than a rare over-count. + let mut out: Vec = Vec::with_capacity(total); + let mut seen_uuids: std::collections::HashSet = + std::collections::HashSet::with_capacity(without_req.len()); + for e in without_req { + match &e.line_uuid { + Some(uuid) => { + if seen_uuids.insert(uuid.clone()) { + out.push(e); + } + } + None => out.push(e), + } + } + + for (_req, files) in by_req { + let mut streams: Vec> = files.into_values().collect(); + // Sort streams by `session_file` for deterministic canonical pick: + // HashMap iteration is randomized, and two mirrors with identical + // `stream_score` would otherwise flip which one wins, making + // provenance-asserting tests flaky. + streams.sort_by(|a, b| { + let ka = a.first().map(|e| e.session_file.as_str()).unwrap_or(""); + let kb = b.first().map(|e| e.session_file.as_str()).unwrap_or(""); + ka.cmp(kb) + }); + // Sort chunks by timestamp so deltaization sees snapshots in order. + for s in &mut streams { + s.sort_by_key(|e| e.timestamp); + } + let Some(canonical_idx) = pick_canonical_index(&streams) else { + continue; + }; + + // Ghost chunks emit per non-canonical timestamp not covered by the + // canonical. Billing/model are zeroed so they can't inflate totals + // or leak into `index::model_shares` (cleared model → `ModelId::Other`, + // filtered by `total > 0`); line metrics are preserved because a + // mirror timestamp absent from the canonical necessarily carries + // unique Edit/Write content. Dedup by `timestamp` alone is safe: + // mirrors are byte-identical at matching timestamps. + let canonical_ts: std::collections::HashSet> = + streams[canonical_idx].iter().map(|e| e.timestamp).collect(); + // Debug-only invariant guard: if two non-canonical streams land on + // the same timestamp with different `lines_*`, the mirror format + // has diverged and timestamp-only dedup would drop distinct content. + let mut ghost_seen: std::collections::HashMap, (u64, u64, u64, u64)> = + std::collections::HashMap::new(); + let mut ghosts: Vec = Vec::new(); + for (i, stream) in streams.iter().enumerate() { + if i == canonical_idx { + continue; + } + for e in stream { + if canonical_ts.contains(&e.timestamp) { + continue; + } + let metrics = ( + e.lines_suggested, + e.lines_added, + e.lines_deleted, + e.lines_accepted, + ); + if let Some(prev) = ghost_seen.get(&e.timestamp) { + debug_assert_eq!( + prev, &metrics, + "mirror invariant violated at {}: {:?} vs {:?}", + e.timestamp, prev, metrics + ); + continue; + } + ghost_seen.insert(e.timestamp, metrics); + ghosts.push(Event { + timestamp: e.timestamp, + model: String::new(), + input_tokens: 0, + output_tokens: 0, + cache_read_input_tokens: 0, + cache_creation_input_tokens: 0, + cost_usd: 0.0, + lines_suggested: e.lines_suggested, + lines_accepted: e.lines_accepted, + lines_added: e.lines_added, + lines_deleted: e.lines_deleted, + session_file: e.session_file.clone(), + request_id: None, + raw_cost_usd: None, + line_uuid: None, + }); + } + } + + let canonical = streams.swap_remove(canonical_idx); + out.extend(deltaize_stream(canonical)); + out.extend(ghosts); + } + + out.sort_by_key(|e| e.timestamp); + out +} + +/// Score a stream by `(max_total_usage, chunk_count, lines_sum, +/// latest_timestamp)` and return the index of the stream with the highest +/// score. Ties are broken lexicographically: richer billing > more chunks +/// > more content > later. +/// +/// Returns the index (rather than the stream itself) so the caller can keep +/// borrowing the other streams for ghost-chunk extraction before moving the +/// canonical out. +fn pick_canonical_index(streams: &[Vec]) -> Option { + streams + .iter() + .enumerate() + .max_by_key(|(_, s)| stream_score(s)) + .map(|(i, _)| i) +} + +type StreamScore = (u64, usize, u64, DateTime); + +fn stream_score(s: &[Event]) -> StreamScore { + let max_total = s + .iter() + .map(|e| { + e.input_tokens + + e.output_tokens + + e.cache_read_input_tokens + + e.cache_creation_input_tokens + }) + .max() + .unwrap_or(0); + let chunks = s.len(); + let lines_sum: u64 = s + .iter() + .map(|e| e.lines_suggested + e.lines_added + e.lines_deleted) + .sum(); + let latest_ts = s + .iter() + .map(|e| e.timestamp) + .max() + .unwrap_or_else(|| DateTime::::from_timestamp(0, 0).unwrap()); + (max_total, chunks, lines_sum, latest_ts) +} + +/// Convert cumulative snapshots into per-chunk deltas. First chunk's delta +/// equals its full snapshot (implicit `prev = 0`). +/// +/// **Cost handling** — two paths, in order of fidelity: +/// 1. If **every** chunk in the stream carries a raw `costUSD` (API logs +/// where Claude Code records Anthropic's billed amount on each snapshot), +/// delta that cumulative value. This preserves whatever pricing +/// Anthropic actually applied — promo rates, cache-creation surcharges, +/// post-launch price changes the local table may not know about. +/// 2. Otherwise (Pro-plan logs, or any stream with even a single chunk +/// missing `costUSD`), recompute from delta tokens via `model_pricing`. +/// +/// The all-or-none gate on path 1 is deliberate. A mixed stream (some raw +/// cost, some missing) cannot be reconciled correctly: emitting a +/// token-pricing estimate on the gap chunks would not advance the raw +/// cumulative baseline, so the next raw-cost chunk would re-emit spend +/// already covered by the gap estimates — inflating the total. Falling +/// back uniformly to tokens keeps the total internally consistent at the +/// cost of one stream's raw-cost fidelity. +fn deltaize_stream(mut stream: Vec) -> Vec { + let mut prev_in = 0u64; + let mut prev_out = 0u64; + let mut prev_cr = 0u64; + let mut prev_cc = 0u64; + let mut prev_raw_cost = 0.0_f64; + + let use_raw_cost = !stream.is_empty() && stream.iter().all(|e| e.raw_cost_usd.is_some()); + + for e in stream.iter_mut() { + let d_in = e.input_tokens.saturating_sub(prev_in); + let d_out = e.output_tokens.saturating_sub(prev_out); + let d_cr = e.cache_read_input_tokens.saturating_sub(prev_cr); + let d_cc = e.cache_creation_input_tokens.saturating_sub(prev_cc); + + // Snapshot monotonicity: advance only when the new value is larger, + // so a transient regression (e.g. unordered mirror) doesn't poison + // subsequent deltas. + prev_in = prev_in.max(e.input_tokens); + prev_out = prev_out.max(e.output_tokens); + prev_cr = prev_cr.max(e.cache_read_input_tokens); + prev_cc = prev_cc.max(e.cache_creation_input_tokens); + + e.input_tokens = d_in; + e.output_tokens = d_out; + e.cache_read_input_tokens = d_cr; + e.cache_creation_input_tokens = d_cc; + + e.cost_usd = if use_raw_cost { + let cur_cost = e + .raw_cost_usd + .expect("use_raw_cost invariant: every chunk has raw cost"); + let delta = (cur_cost - prev_raw_cost).max(0.0); + prev_raw_cost = prev_raw_cost.max(cur_cost); + delta + } else { + cost_from_tokens(&e.model, d_in, d_out, d_cr, d_cc) + }; + // lines_* are per-chunk (not cumulative) — preserve as-is. + } + + stream +} + +/// Cost approximation from token counts via the local pricing table. Used +/// as fallback when the JSONL doesn't carry a raw `costUSD`. Mirrors +/// Anthropic's billing structure: fresh input at `input_price`, cache reads +/// at `cache_read_price`, cache creation at `input_price × 1.25` (the +/// default 5-min ephemeral TTL that Claude Code uses), output at +/// `output_price`. +fn cost_from_tokens( + model: &str, + input: u64, + output: u64, + cache_read: u64, + cache_creation: u64, +) -> f64 { + // Mirrors `CACHE_CREATION_WEIGHT` in `index::split_entry_cost`. + const CACHE_CREATION_MULTIPLIER: f64 = 1.25; + let (input_price, output_price, cache_read_price) = super::models::model_pricing(model); + let fresh_input = input.saturating_sub(cache_read); + (fresh_input as f64 * input_price + + cache_read as f64 * cache_read_price + + cache_creation as f64 * input_price * CACHE_CREATION_MULTIPLIER + + output as f64 * output_price) + / super::models::TOKENS_PER_MILLION } // --------------------------------------------------------------------------- @@ -157,26 +434,6 @@ fn count_diff_lines(old: Option<&str>, new: Option<&str>) -> (u64, u64) { (added, removed) } -/// Compute cost for an event, using costUSD if available, otherwise model pricing. -fn compute_cost( - cost_usd: f64, - model: &str, - input_tokens: u64, - output_tokens: u64, - cache_read: u64, -) -> f64 { - if cost_usd > 0.0 { - cost_usd - } else { - let (input_price, output_price, cache_read_price) = super::models::model_pricing(model); - let fresh_input = input_tokens.saturating_sub(cache_read); - (fresh_input as f64 * input_price - + cache_read as f64 * cache_read_price - + output_tokens as f64 * output_price) - / super::models::TOKENS_PER_MILLION - } -} - /// Try to extract an Event from a single JSON line. /// Handles both assistant messages (tokens + suggested lines) and user messages (accepted lines). fn parse_line(line: &str, session_file: &str) -> Option { @@ -192,13 +449,23 @@ fn parse_line(line: &str, session_file: &str) -> Option { let msg = raw.message?; let usage = msg.usage?; + let request_id = raw.request_id; + let line_uuid = raw.uuid.clone(); let model = msg.model.unwrap_or_default(); let input_tokens = usage.input_tokens.unwrap_or(0); let output_tokens = usage.output_tokens.unwrap_or(0); let cache_read = usage.cache_read_input_tokens.unwrap_or(0); let cache_creation = usage.cache_creation_input_tokens.unwrap_or(0); - let raw_cost = raw.cost_usd.unwrap_or(0.0); - let cost_usd = compute_cost(raw_cost, &model, input_tokens, output_tokens, cache_read); + let raw_cost_usd = raw.cost_usd; + let cost_usd = raw_cost_usd.filter(|c| *c > 0.0).unwrap_or_else(|| { + cost_from_tokens( + &model, + input_tokens, + output_tokens, + cache_read, + cache_creation, + ) + }); // Count lines suggested via Edit/Write tool_use blocks let mut lines_suggested = 0u64; @@ -243,6 +510,9 @@ fn parse_line(line: &str, session_file: &str) -> Option { lines_added: lines_added_total, lines_deleted: lines_deleted_total, session_file: session_file.to_owned(), + request_id, + raw_cost_usd, + line_uuid, }) } Some("user") => { @@ -290,6 +560,9 @@ fn parse_line(line: &str, session_file: &str) -> Option { lines_added: added, lines_deleted: deleted, session_file: session_file.to_owned(), + request_id: None, + raw_cost_usd: None, + line_uuid: raw.uuid, }) } _ => None, @@ -303,6 +576,7 @@ fn parse_line(line: &str, session_file: &str) -> Option { #[cfg(test)] mod tests { use super::*; + use chrono::Timelike; fn make_line(json: &str) -> String { json.to_string() @@ -332,8 +606,11 @@ mod tests { assert_eq!(ev.output_tokens, 200); assert_eq!(ev.cache_read_input_tokens, 500); assert_eq!(ev.cache_creation_input_tokens, 300); - // cost computed from model pricing: (500*5.0 + 500*0.50 + 200*25.0) / 1M - assert!((ev.cost_usd - 0.00775).abs() < 1e-9); + // cost from model pricing: + // fresh_input 500 * $5/M + cache_read 500 * $0.5/M + // + cache_creation 300 * $5/M * 1.25 + output 200 * $25/M + // = 2500 + 250 + 1875 + 5000 = 9625 micro-USD + assert!((ev.cost_usd - 0.009625).abs() < 1e-9); assert_eq!(ev.lines_suggested, 0); assert_eq!(ev.lines_added, 0); assert_eq!(ev.lines_deleted, 0); @@ -469,4 +746,726 @@ mod tests { let ev = parse_line(&line, "test.jsonl").expect("should parse"); assert_eq!(ev.model, "claude-opus-4-6"); } + + #[test] + fn captures_request_id() { + let line = make_line( + r#"{ + "type": "assistant", + "timestamp": "2026-04-01T12:00:00.000Z", + "requestId": "req_01abc", + "message": { + "id": "msg_01abc", + "model": "claude-opus-4-6", + "usage": { "input_tokens": 1, "output_tokens": 1 } + } + }"#, + ); + let ev = parse_line(&line, "test.jsonl").expect("should parse"); + assert_eq!(ev.request_id.as_deref(), Some("req_01abc")); + } + + // ------------------------------------------------------------------ + // Unit tests on deltaize_stream / stream_score + // ------------------------------------------------------------------ + + fn mk_event( + ts: &str, + req: &str, + file: &str, + model: &str, + (i, o, cr, cc): (u64, u64, u64, u64), + (ls, la, ld): (u64, u64, u64), + ) -> Event { + mk_event_with_cost(ts, req, file, model, (i, o, cr, cc), (ls, la, ld), None) + } + + fn mk_event_with_cost( + ts: &str, + req: &str, + file: &str, + model: &str, + (i, o, cr, cc): (u64, u64, u64, u64), + (ls, la, ld): (u64, u64, u64), + raw_cost_usd: Option, + ) -> Event { + Event { + timestamp: DateTime::parse_from_rfc3339(ts) + .unwrap() + .with_timezone(&Utc), + model: model.into(), + input_tokens: i, + output_tokens: o, + cache_read_input_tokens: cr, + cache_creation_input_tokens: cc, + cost_usd: 0.0, + lines_suggested: ls, + lines_accepted: 0, + lines_added: la, + lines_deleted: ld, + session_file: file.into(), + request_id: Some(req.into()), + raw_cost_usd, + line_uuid: None, + } + } + + #[test] + fn first_chunk_delta_equals_full_snapshot() { + let stream = vec![mk_event( + "2026-04-01T12:00:00.100Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (3, 21, 6754, 13837), + (0, 0, 0), + )]; + let out = deltaize_stream(stream); + assert_eq!(out.len(), 1); + assert_eq!(out[0].input_tokens, 3); + assert_eq!(out[0].output_tokens, 21); + assert_eq!(out[0].cache_read_input_tokens, 6754); + assert_eq!(out[0].cache_creation_input_tokens, 13837); + } + + #[test] + fn delta_handles_non_monotonic_snapshot_defensively() { + // output regresses mid-stream (shouldn't happen in real data, but + // saturating_sub + monotonic prev must prevent panic & underflow). + let stream = vec![ + mk_event( + "2026-04-01T12:00:00.100Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (3, 50, 100, 0), + (0, 0, 0), + ), + mk_event( + "2026-04-01T12:00:00.200Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (3, 30, 100, 0), + (0, 0, 0), + ), // regression + mk_event( + "2026-04-01T12:00:00.300Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (3, 80, 100, 0), + (0, 0, 0), + ), + ]; + let out = deltaize_stream(stream); + // Expected deltas: out (50, 0, 30), since prev tracks the max. + assert_eq!(out[0].output_tokens, 50); + assert_eq!(out[1].output_tokens, 0); + assert_eq!(out[2].output_tokens, 30); + // Total reconciles to the max snapshot (80), not the last (80). + let sum_out: u64 = out.iter().map(|e| e.output_tokens).sum(); + assert_eq!(sum_out, 80); + } + + #[test] + fn delta_cost_uses_raw_cumulative_when_present() { + // Three chunks with a cumulative raw costUSD that diverges from the + // pricing-table estimate — e.g. Anthropic applied promo pricing. + // We must preserve Anthropic's billed amount via delta, not fall + // back to the token-pricing approximation. + let stream = vec![ + mk_event_with_cost( + "2026-04-01T12:00:00.100Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (100, 10, 500, 0), + (0, 0, 0), + Some(0.42), + ), + mk_event_with_cost( + "2026-04-01T12:00:00.200Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (100, 30, 500, 0), + (0, 0, 0), + Some(1.00), + ), + mk_event_with_cost( + "2026-04-01T12:00:00.300Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (100, 80, 500, 0), + (0, 0, 0), + Some(2.50), + ), + ]; + let out = deltaize_stream(stream); + // Per-chunk deltas: 0.42, 0.58, 1.50. Sum = 2.50 (final cumulative). + assert!((out[0].cost_usd - 0.42).abs() < 1e-9); + assert!((out[1].cost_usd - 0.58).abs() < 1e-9); + assert!((out[2].cost_usd - 1.50).abs() < 1e-9); + let sum: f64 = out.iter().map(|e| e.cost_usd).sum(); + assert!( + (sum - 2.50).abs() < 1e-9, + "sum must reconstitute final raw cumulative cost" + ); + + // Sanity: differs from the token-pricing fallback (0.80 approx), so + // we really preserved Anthropic's authoritative figure. + let fallback = cost_from_tokens("claude-opus-4-6", 100, 80, 500, 0); + assert!( + (sum - fallback).abs() > 1e-3, + "test invariant: raw cost must diverge from token-pricing estimate" + ); + } + + #[test] + fn mixed_raw_cost_stream_falls_back_to_tokens_without_inflating() { + // Mixed streams must fall back to tokens uniformly. Mixing a token + // estimate on a gap chunk with a delta of the next raw cumulative + // would double-emit the gap's spend (raw cumulative already includes + // it) and inflate the total. + let stream = vec![ + mk_event_with_cost( + "2026-04-01T12:00:00.100Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (100, 10, 500, 0), + (0, 0, 0), + Some(0.42), + ), + mk_event_with_cost( + "2026-04-01T12:00:00.200Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (100, 30, 500, 0), + (0, 0, 0), + None, // gap + ), + mk_event_with_cost( + "2026-04-01T12:00:00.300Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (100, 80, 500, 0), + (0, 0, 0), + Some(1.00), + ), + ]; + let out = deltaize_stream(stream); + + // All-or-none: stream falls back to cost_from_tokens for every chunk. + // Total must equal the token-pricing cost of the final snapshot + // (100, 80, 500), never the inflated 1.30 that mixed delta gave. + let sum: f64 = out.iter().map(|e| e.cost_usd).sum(); + let expected = cost_from_tokens("claude-opus-4-6", 100, 80, 500, 0); + assert!( + (sum - expected).abs() < 1e-9, + "mixed stream must fall back to token pricing, got {sum} expected {expected}" + ); + + // And critically: the inflation path (0.42 + token_gap + 0.58 ≈ 1.30) + // must not happen. + assert!(sum < 1.30 - 1e-3, "must not inflate via hybrid delta"); + } + + #[test] + fn delta_cost_sums_to_final_cost() { + // Opus 4-6 pricing: in=5, out=25, cache_read=0.5 per M tokens. + let stream = vec![ + mk_event( + "2026-04-01T12:00:00.100Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (100, 10, 500, 0), + (0, 0, 0), + ), + mk_event( + "2026-04-01T12:00:00.200Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (100, 30, 500, 0), + (0, 0, 0), + ), + mk_event( + "2026-04-01T12:00:00.300Z", + "r", + "f.jsonl", + "claude-opus-4-6", + (100, 80, 500, 0), + (0, 0, 0), + ), + ]; + let out = deltaize_stream(stream); + let sum_cost: f64 = out.iter().map(|e| e.cost_usd).sum(); + let final_cost = cost_from_tokens("claude-opus-4-6", 100, 80, 500, 0); + assert!( + (sum_cost - final_cost).abs() < 1e-9, + "sum of deltaized costs ({sum_cost}) must equal final cost ({final_cost})" + ); + } + + #[test] + fn canonical_stream_prefers_richer_file_on_mirror_tie() { + // Two streams with the SAME max_total. Winner must be the one with + // more chunks (proxy for completeness) and more lines. + let rich = vec![ + mk_event( + "2026-04-01T12:00:00.100Z", + "r", + "rich.jsonl", + "claude-opus-4-6", + (3, 21, 1000, 0), + (0, 0, 0), + ), + mk_event( + "2026-04-01T12:00:00.200Z", + "r", + "rich.jsonl", + "claude-opus-4-6", + (3, 100, 1000, 0), + (0, 0, 0), + ), // edit block + mk_event( + "2026-04-01T12:00:00.300Z", + "r", + "rich.jsonl", + "claude-opus-4-6", + (3, 200, 1000, 0), + (40, 20, 20), + ), // tool_use Edit, lines=40 + ]; + // Poor stream: single terminal snapshot, SAME max_total, but a later + // timestamp (would have won the old latest-ts tiebreak). + let poor = vec![mk_event( + "2026-04-01T12:00:00.400Z", // LATER than rich's last chunk + "r", + "poor.jsonl", + "claude-opus-4-6", + (3, 200, 1000, 0), + (0, 0, 0), + )]; + let streams = vec![rich.clone(), poor.clone()]; + let idx = pick_canonical_index(&streams).unwrap(); + let canonical = &streams[idx]; + assert_eq!(canonical.len(), 3, "canonical must be the rich stream"); + assert_eq!(canonical[0].session_file, "rich.jsonl"); + // lines survive + let total_lines: u64 = canonical.iter().map(|e| e.lines_suggested).sum(); + assert_eq!(total_lines, 40); + } + + // ------------------------------------------------------------------ + // Integration tests via parse_session_files (tmp files on disk) + // ------------------------------------------------------------------ + + fn tmp_dir(label: &str) -> PathBuf { + let d = std::env::temp_dir().join(format!( + "ccmeter_{label}_{}_{}", + std::process::id(), + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_nanos(), + )); + std::fs::create_dir_all(&d).unwrap(); + d + } + + fn write_file(dir: &Path, name: &str, lines: &[&str]) -> PathBuf { + use std::io::Write; + let p = dir.join(name); + let mut f = std::fs::File::create(&p).unwrap(); + for l in lines { + writeln!(f, "{l}").unwrap(); + } + p + } + + #[test] + fn preserves_lines_when_chunks_share_cumulative_total() { + // Two chunks under the same requestId with IDENTICAL cumulative + // snapshots (text chunk then Edit chunk — newer Claude Code writes + // final usage on every content-block line). lines_suggested from + // the Edit chunk must survive even though its tokens delta to zero. + let dir = tmp_dir("same_total"); + let text_line = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:00.100Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","content":[{"type":"text"}],"usage":{"input_tokens":3,"output_tokens":200,"cache_read_input_tokens":1000,"cache_creation_input_tokens":0}}}"#; + let edit_line = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:00.200Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","content":[{"type":"tool_use","name":"Edit","input":{"old_string":"a\nb\nc","new_string":"A\nB\nC"}}],"usage":{"input_tokens":3,"output_tokens":200,"cache_read_input_tokens":1000,"cache_creation_input_tokens":0}}}"#; + let path = write_file(&dir, "s.jsonl", &[text_line, edit_line]); + + let events = parse_session_files(&[path]); + let _ = std::fs::remove_dir_all(&dir); + + let total_lines: u64 = events.iter().map(|e| e.lines_suggested).sum(); + assert!( + total_lines > 0, + "lines_suggested must survive; got {total_lines}" + ); + // Billing invariant: summed deltas = final snapshot. + let sum_out: u64 = events.iter().map(|e| e.output_tokens).sum(); + assert_eq!(sum_out, 200); + } + + #[test] + fn sums_lines_across_chunks_within_same_request_same_file() { + let dir = tmp_dir("sum_lines"); + let c1 = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:00.100Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","content":[{"type":"tool_use","name":"Edit","input":{"old_string":"a\nb","new_string":"A\nB"}}],"usage":{"input_tokens":3,"output_tokens":50,"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}"#; + let c2 = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:00.200Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","content":[{"type":"tool_use","name":"Edit","input":{"old_string":"x\ny\nz","new_string":"X\nY\nZ"}}],"usage":{"input_tokens":3,"output_tokens":100,"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}"#; + let path = write_file(&dir, "s.jsonl", &[c1, c2]); + + let events = parse_session_files(&[path]); + let _ = std::fs::remove_dir_all(&dir); + + let total_sugg: u64 = events.iter().map(|e| e.lines_suggested).sum(); + // Each Edit contributes added+removed; exact count depends on diff logic. + // Minimum: c1 contributes >= 2, c2 contributes >= 3 → total >= 5. + assert!( + total_sugg >= 5, + "expected at least 5 suggested lines, got {total_sugg}" + ); + } + + #[test] + fn does_not_double_count_lines_mirrored_across_files() { + let dir = tmp_dir("mirror_lines"); + let edit = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:00.100Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","content":[{"type":"tool_use","name":"Edit","input":{"old_string":"a\nb","new_string":"A\nB"}}],"usage":{"input_tokens":3,"output_tokens":50,"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}"#; + let parent = write_file(&dir, "parent.jsonl", &[edit]); + let agent = write_file(&dir, "agent-sub.jsonl", &[edit]); + + let events_mirrored = parse_session_files(&[parent.clone(), agent.clone()]); + let _ = std::fs::remove_dir_all(&dir); + + // Reference: same edit in a single file. + let dir2 = tmp_dir("mirror_single"); + let solo = write_file(&dir2, "solo.jsonl", &[edit]); + let events_solo = parse_session_files(&[solo]); + let _ = std::fs::remove_dir_all(&dir2); + + let mirrored_lines: u64 = events_mirrored.iter().map(|e| e.lines_suggested).sum(); + let solo_lines: u64 = events_solo.iter().map(|e| e.lines_suggested).sum(); + assert_eq!( + mirrored_lines, solo_lines, + "mirror must not inflate lines_suggested" + ); + } + + #[test] + fn multi_minute_request_preserves_chunk_timestamps() { + let dir = tmp_dir("multi_minute"); + // Single stream spanning 19:11 → 19:12 → 19:14 (gap of 2 min). + // All three timestamps must survive dedup so active_minutes + // clustering (5-min gap threshold) sees the full interval. + let c1 = r#"{"type":"assistant","timestamp":"2026-04-01T19:11:00.000Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","usage":{"input_tokens":10,"output_tokens":50,"cache_read_input_tokens":0,"cache_creation_input_tokens":0}}}"#; + let c2 = r#"{"type":"assistant","timestamp":"2026-04-01T19:12:00.000Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","usage":{"input_tokens":10,"output_tokens":150,"cache_read_input_tokens":0,"cache_creation_input_tokens":0}}}"#; + let c3 = r#"{"type":"assistant","timestamp":"2026-04-01T19:14:00.000Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","usage":{"input_tokens":10,"output_tokens":300,"cache_read_input_tokens":0,"cache_creation_input_tokens":0}}}"#; + let path = write_file(&dir, "s.jsonl", &[c1, c2, c3]); + + let events = parse_session_files(&[path]); + let _ = std::fs::remove_dir_all(&dir); + + assert_eq!(events.len(), 3, "all three chunk timestamps must survive"); + // Minutes observed: + let mut minutes: Vec<_> = events + .iter() + .map(|e| (e.timestamp.hour(), e.timestamp.minute())) + .collect(); + minutes.sort(); + assert_eq!(minutes, vec![(19, 11), (19, 12), (19, 14)]); + // Billing: deltas sum to final snapshot. + let sum_out: u64 = events.iter().map(|e| e.output_tokens).sum(); + assert_eq!(sum_out, 300); + } + + #[test] + fn ghosts_dedup_across_multiple_non_canonical_mirrors() { + // 3-file scenario: late terminal canonical + 2 byte-identical mirror + // streams with chunks at the same early timestamps. Without + // timestamp-only dedup the ghosts would be emitted twice (once per + // mirror), inflating both line metrics and session_minutes counts. + let dir = tmp_dir("multi_mirror_ghosts"); + let early1 = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:00.100Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","content":[{"type":"tool_use","name":"Edit","input":{"old_string":"a","new_string":"A"}}],"usage":{"input_tokens":3,"output_tokens":50,"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}"#; + let early2 = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:01.100Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","usage":{"input_tokens":3,"output_tokens":150,"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}"#; + let late = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:05.000Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","usage":{"input_tokens":3,"output_tokens":300,"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}"#; + + // Two mirror files with identical early chunks. + let pa = write_file(&dir, "a.jsonl", &[early1, early2]); + let pb = write_file(&dir, "b.jsonl", &[early1, early2]); + // Canonical: terminal snapshot, higher max_total. + let pc = write_file(&dir, "c.jsonl", &[late]); + + let events = parse_session_files(&[pa, pb, pc]); + let _ = std::fs::remove_dir_all(&dir); + + // 1 canonical chunk + exactly 2 ghosts (one per unique non-canonical + // timestamp), NOT 4 (which would be ghosts × 2 mirrors). + assert_eq!(events.len(), 3, "ghosts must be deduped across mirrors"); + let ghosts: Vec<&Event> = events.iter().filter(|e| e.output_tokens == 0).collect(); + assert_eq!(ghosts.len(), 2); + + // Billing untouched. + let sum_out: u64 = events.iter().map(|e| e.output_tokens).sum(); + assert_eq!(sum_out, 300); + + // Edit lines counted exactly once (3+3 not 6+6 for added/deleted=1 + // each via count_diff_lines("a","A")). + let total_added: u64 = events.iter().map(|e| e.lines_added).sum(); + let total_deleted: u64 = events.iter().map(|e| e.lines_deleted).sum(); + assert_eq!(total_added, 1, "Edit added counted once across mirrors"); + assert_eq!(total_deleted, 1, "Edit deleted counted once across mirrors"); + } + + #[test] + fn ghost_model_is_cleared_to_avoid_zero_token_model_share_leak() { + // Ghost events keep a timestamp + line metrics but must not register + // as model usage in downstream aggregators (`index::model_shares` + // accepts known models even with total=0). Clearing `model` makes + // them fall through to ModelId::Other and be filtered out. + let dir = tmp_dir("ghost_model_cleared"); + let early = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:00.100Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","usage":{"input_tokens":3,"output_tokens":50,"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}"#; + let late = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:05.000Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","usage":{"input_tokens":3,"output_tokens":300,"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}"#; + let pa = write_file(&dir, "a.jsonl", &[early]); + let pb = write_file(&dir, "b.jsonl", &[late]); + + let events = parse_session_files(&[pa, pb]); + let _ = std::fs::remove_dir_all(&dir); + + let ghosts: Vec<&Event> = events.iter().filter(|e| e.output_tokens == 0).collect(); + assert!(!ghosts.is_empty()); + assert!( + ghosts.iter().all(|g| g.model.is_empty()), + "ghost.model must be cleared to avoid leaking into model_shares" + ); + } + + #[test] + fn partial_overlap_preserves_unique_lines_from_non_canonical_stream() { + // Pathological partial-overlap: the non-canonical stream carries a + // unique Edit block (lines_suggested != 0), the canonical stream is + // a terminal snapshot with higher max_total but no content blocks + // recorded. The Edit's line metrics must survive via the ghost + // chunk; otherwise we'd silently under-count code activity. + let dir = tmp_dir("partial_overlap_lines"); + // a.jsonl: 2 chunks, the second carries an Edit (3 added, 2 removed + // → lines_suggested = 5 from `count_diff_lines`). + let a1 = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:00.100Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","content":[{"type":"thinking"}],"usage":{"input_tokens":3,"output_tokens":50,"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}"#; + let a2 = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:01.200Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","content":[{"type":"tool_use","name":"Edit","input":{"old_string":"a\nb\nc","new_string":"X\nY\nZ"}}],"usage":{"input_tokens":3,"output_tokens":150,"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}"#; + // b.jsonl: terminal snapshot only, higher max_total, no content blocks. + let b1 = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:03.500Z","requestId":"r","message":{"id":"m","model":"claude-opus-4-6","usage":{"input_tokens":3,"output_tokens":300,"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}"#; + let pa = write_file(&dir, "a.jsonl", &[a1, a2]); + let pb = write_file(&dir, "b.jsonl", &[b1]); + + let events = parse_session_files(&[pa, pb]); + let _ = std::fs::remove_dir_all(&dir); + + // Billing comes from b's snapshot only. + let sum_out: u64 = events.iter().map(|e| e.output_tokens).sum(); + assert_eq!(sum_out, 300, "billing must equal canonical snapshot"); + + // Line metrics from a.jsonl's Edit are preserved via the ghost. + let total_sugg: u64 = events.iter().map(|e| e.lines_suggested).sum(); + let total_added: u64 = events.iter().map(|e| e.lines_added).sum(); + let total_deleted: u64 = events.iter().map(|e| e.lines_deleted).sum(); + assert!( + total_sugg > 0, + "Edit lines_suggested must survive on the ghost; got {total_sugg}" + ); + assert_eq!(total_added, 3, "all 3 new lines must be counted"); + assert_eq!(total_deleted, 3, "all 3 old lines must be counted"); + + // Ghost itself: zero billing, non-zero lines, in a.jsonl. + let ghost_with_lines: Vec<&Event> = events + .iter() + .filter(|e| e.output_tokens == 0 && e.lines_added > 0) + .collect(); + assert_eq!(ghost_with_lines.len(), 1); + assert_eq!(ghost_with_lines[0].session_file, "a.jsonl"); + assert_eq!(ghost_with_lines[0].cost_usd, 0.0); + assert!(ghost_with_lines[0].request_id.is_none()); + } + + #[test] + fn partial_overlap_preserves_non_canonical_timestamps_as_ghosts() { + // Realistic partial-overlap scenario: parent file logs progressive + // streaming chunks (cumulative usage), a sub-agent file logs only a + // terminal snapshot with higher `max_total`. The canonical-stream + // picker correctly chooses the sub-agent for billing (= highest + // final snapshot), but we must NOT lose the earlier minutes of + // activity the parent captured. They come back as zero-usage ghost + // events so `active_minutes` and the minute-level timeline stay + // correct. + let dir = tmp_dir("partial_overlap"); + let mk = |ts: &str, out: u64| { + format!( + r#"{{"type":"assistant","timestamp":"{ts}","requestId":"r","message":{{"id":"m","model":"claude-opus-4-6","usage":{{"input_tokens":3,"output_tokens":{out},"cache_read_input_tokens":100,"cache_creation_input_tokens":0}}}}}}"# + ) + }; + // Parent file: 3 progressive chunks, terminates at out=200. + let a_lines = [ + mk("2026-04-01T12:00:00.100Z", 50), + mk("2026-04-01T12:00:01.200Z", 120), + mk("2026-04-01T12:00:02.300Z", 200), + ]; + // Sub-agent file: 1 late chunk with the complete snapshot, out=300. + let b_lines = [mk("2026-04-01T12:00:03.500Z", 300)]; + let pa = write_file( + &dir, + "a.jsonl", + &a_lines.iter().map(String::as_str).collect::>(), + ); + let pb = write_file( + &dir, + "b.jsonl", + &b_lines.iter().map(String::as_str).collect::>(), + ); + + let events = parse_session_files(&[pa, pb]); + let _ = std::fs::remove_dir_all(&dir); + + // 1 canonical chunk (from b.jsonl) + 3 ghost chunks (from a.jsonl). + assert_eq!(events.len(), 4, "4 events: 1 canonical + 3 ghosts"); + + // Billing invariant: sum must equal the canonical snapshot — ghosts + // contribute zero. Never the inflated 50+120+200+300 = 670. + let sum_out: u64 = events.iter().map(|e| e.output_tokens).sum(); + assert_eq!(sum_out, 300, "billing stays at the canonical snapshot"); + + // Activity preservation: the 3 parent timestamps survive as ghosts + // in a.jsonl, and b.jsonl carries the canonical. + let canonical: Vec<&Event> = events.iter().filter(|e| e.output_tokens > 0).collect(); + assert_eq!(canonical.len(), 1); + assert_eq!(canonical[0].session_file, "b.jsonl"); + + let ghosts: Vec<&Event> = events.iter().filter(|e| e.output_tokens == 0).collect(); + assert_eq!(ghosts.len(), 3); + assert!(ghosts.iter().all(|g| g.session_file == "a.jsonl")); + assert!(ghosts.iter().all(|g| g.request_id.is_none())); + } + + #[test] + fn independent_subagent_calls_preserved() { + // A requestId that only exists in an agent file (no parent mirror). + let dir = tmp_dir("indep_agent"); + let line = r#"{"type":"assistant","timestamp":"2026-04-01T12:00:00.100Z","requestId":"r_indep","message":{"id":"m","model":"claude-opus-4-6","usage":{"input_tokens":5,"output_tokens":40,"cache_read_input_tokens":200,"cache_creation_input_tokens":0}}}"#; + let path = write_file(&dir, "agent-solo.jsonl", &[line]); + + let events = parse_session_files(&[path]); + let _ = std::fs::remove_dir_all(&dir); + + assert_eq!(events.len(), 1); + assert_eq!(events[0].output_tokens, 40); + assert_eq!(events[0].cache_read_input_tokens, 200); + } + + #[test] + fn deltaized_tokens_sum_to_final_snapshot_across_streams() { + // Two streams (parent + mirror), each with 3 cumulative chunks. + // Total billable must equal ONE final snapshot (not two). + let dir = tmp_dir("sum_invariant"); + let mk = |ts: &str, out: u64| { + format!( + r#"{{"type":"assistant","timestamp":"{ts}","requestId":"r","message":{{"id":"m","model":"claude-opus-4-6","usage":{{"input_tokens":3,"output_tokens":{out},"cache_read_input_tokens":500,"cache_creation_input_tokens":0}}}}}}"# + ) + }; + let p1 = mk("2026-04-01T12:00:00.100Z", 10); + let p2 = mk("2026-04-01T12:00:00.200Z", 50); + let p3 = mk("2026-04-01T12:00:00.300Z", 120); + let parent = write_file(&dir, "parent.jsonl", &[&p1, &p2, &p3]); + let agent = write_file(&dir, "agent-echo.jsonl", &[&p1, &p2, &p3]); + + let events = parse_session_files(&[parent, agent]); + let _ = std::fs::remove_dir_all(&dir); + + let sum_in: u64 = events.iter().map(|e| e.input_tokens).sum(); + let sum_out: u64 = events.iter().map(|e| e.output_tokens).sum(); + let sum_cr: u64 = events.iter().map(|e| e.cache_read_input_tokens).sum(); + assert_eq!(sum_in, 3, "sum(input) must equal final input_tokens"); + assert_eq!(sum_out, 120, "sum(output) must equal final output_tokens"); + assert_eq!(sum_cr, 500, "sum(cache_read) must equal final cache_read"); + } + + #[test] + fn cost_from_tokens_includes_cache_creation_surcharge() { + // Opus 4-6: input=$5/M, output=$25/M, cache_read=$0.5/M, + // cache_creation = input × 1.25 = $6.25/M. + let cost = cost_from_tokens("claude-opus-4-6", 0, 0, 0, 1_000_000); + assert!( + (cost - 6.25).abs() < 1e-9, + "1M cache_creation tokens must cost $6.25 (= $5 × 1.25), got {cost}" + ); + + // Sanity: a full request with all four buckets. + let cost = cost_from_tokens("claude-opus-4-6", 1000, 200, 500, 300); + // fresh=500 × $5/M = $0.0025 + // cache_read=500 × $0.5/M = $0.00025 + // cache_creation=300 × $5/M × 1.25 = $0.001875 + // output=200 × $25/M = $0.005 + // sum = $0.009625 + assert!((cost - 0.009625).abs() < 1e-9); + } + + #[test] + fn dedups_user_events_mirrored_across_files_by_uuid() { + // Same user-side patch line mirrored into parent + sub-agent logs + // (identical `uuid`). Must be counted once for lines_added / + // lines_accepted, otherwise efficiency metrics inflate. + let dir = tmp_dir("user_uuid_dedup"); + let patch = r#"{"type":"user","timestamp":"2026-04-01T12:00:00.000Z","uuid":"u-1","toolUseResult":{"structuredPatch":[{"lines":["+a","+b","-c"]}]}}"#; + let parent = write_file(&dir, "parent.jsonl", &[patch]); + let agent = write_file(&dir, "agent-sub.jsonl", &[patch]); + + let events = parse_session_files(&[parent, agent]); + let _ = std::fs::remove_dir_all(&dir); + + assert_eq!( + events.len(), + 1, + "user event must not be duplicated by mirror" + ); + assert_eq!(events[0].lines_added, 2); + assert_eq!(events[0].lines_deleted, 1); + assert_eq!(events[0].lines_accepted, 3); + } + + #[test] + fn keeps_user_events_without_uuid_even_when_duplicated() { + // Edge case: older Claude Code versions may not emit uuid on user + // events. We must keep them all — under-counting is worse than a + // rare over-count, and historical data shouldn't silently vanish. + let dir = tmp_dir("user_no_uuid"); + let patch = r#"{"type":"user","timestamp":"2026-04-01T12:00:00.000Z","toolUseResult":{"structuredPatch":[{"lines":["+a"]}]}}"#; + let a = write_file(&dir, "a.jsonl", &[patch]); + let b = write_file(&dir, "b.jsonl", &[patch]); + + let events = parse_session_files(&[a, b]); + let _ = std::fs::remove_dir_all(&dir); + + assert_eq!(events.len(), 2); + assert!(events.iter().all(|e| e.line_uuid.is_none())); + } + + #[test] + fn keeps_user_events_without_request_id() { + use std::io::Write; + + let dir = tmp_dir("user_events"); + let user = r#"{"type":"user","timestamp":"2026-04-01T12:00:00.000Z","toolUseResult":{"structuredPatch":[{"lines":["+a","-b"]}]}}"#; + let path_a = dir.join("a.jsonl"); + writeln!(std::fs::File::create(&path_a).unwrap(), "{user}").unwrap(); + let path_b = dir.join("b.jsonl"); + writeln!(std::fs::File::create(&path_b).unwrap(), "{user}").unwrap(); + + let events = parse_session_files(&[path_a, path_b]); + let _ = std::fs::remove_dir_all(&dir); + + assert_eq!(events.len(), 2); + assert!(events.iter().all(|e| e.request_id.is_none())); + } } From ace7bf679826621e13d1fc28409c1ed99316ba73 Mon Sep 17 00:00:00 2001 From: hmenzagh Date: Mon, 13 Apr 2026 22:14:28 +0200 Subject: [PATCH 2/4] fix(data): add versioned cache schema with automatic invalidation - Implement schema_version tracking in history.json - Auto-invalidate and rebuild cache on version mismatch - Fixes cache migration without manual user intervention --- src/app.rs | 35 +++++++++++--- src/data/cache.rs | 116 ++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 136 insertions(+), 15 deletions(-) diff --git a/src/app.rs b/src/app.rs index 7e69584..a71608d 100644 --- a/src/app.rs +++ b/src/app.rs @@ -147,6 +147,12 @@ pub(crate) struct App { pub(crate) update_info: Option, update_rx: mpsc::Receiver, + + /// Outcome of the initial on-disk cache load. `Migrated` and + /// `Recovered` both trigger a one-time banner but with distinct + /// messages so the user can tell a planned schema bump apart from a + /// corrupted cache. Dismissed on the first user keypress. + pub(crate) cache_load_state: cache::CacheLoad, } impl App { @@ -166,7 +172,17 @@ impl App { discovery::discover_project_groups_with_root_map(); let raw_groups = Arc::new(raw_groups); let session_map = Arc::new(session_map); - let (merged_cache, index) = load_data(&raw_groups, &session_map); + let (merged_cache, index, mut cache_load_state) = load_data(&raw_groups, &session_map); + // Debug escape hatch for screenshotting the banners after a + // migration already happened. Set CCMETER_FORCE_BANNER=recovered + // for the corruption banner, anything else for the migration one. + if let Ok(kind) = std::env::var("CCMETER_FORCE_BANNER") { + cache_load_state = if kind.eq_ignore_ascii_case("recovered") { + cache::CacheLoad::Recovered + } else { + cache::CacheLoad::Migrated + }; + } let (daily_tokens, thresholds) = compute_daily_and_thresholds(&merged_cache, None, None); let minute_tokens = index.build_minute_tokens(None, None); @@ -258,6 +274,7 @@ impl App { refresh_requested: false, update_info: None, update_rx, + cache_load_state, }; app.record_rate_history(); app @@ -589,6 +606,12 @@ impl App { return false; } + // Dismiss the cache-state notice on the first user keypress. + if self.cache_load_state != cache::CacheLoad::Fresh { + self.cache_load_state = cache::CacheLoad::Fresh; + self.render_dirty = true; + } + // Tab/BackTab cycle time filters globally, except in Settings/RateTracking. if !matches!(self.view, View::Settings(_) | View::RateTracking) { match key.code { @@ -879,7 +902,7 @@ fn compute_hit_tokens(hits: &mut [RateLimitHit], index: &EventIndex) { fn load_data( raw_groups: &[discovery::ProjectGroup], session_map: &HashMap, -) -> (cache::Cache, EventIndex) { +) -> (cache::Cache, EventIndex, cache::CacheLoad) { let all_session_files: Vec = raw_groups .iter() .flat_map(|g| g.sources.iter()) @@ -887,13 +910,13 @@ fn load_data( .collect(); let events = parser::parse_session_files(&all_session_files); - let old_cache = cache::load(); + let outcome = cache::load(); let fresh_cache = cache::from_events(&events, session_map); - let merged = cache::merge(old_cache, &fresh_cache); + let merged = cache::merge(outcome.cache, &fresh_cache); cache::save(&merged); let index = EventIndex::build(&events, session_map); - (merged, index) + (merged, index, outcome.state) } fn spawn_reload( @@ -905,7 +928,7 @@ fn spawn_reload( let session_map = Arc::clone(session_map); let tx = tx.clone(); std::thread::spawn(move || { - let (cache, index) = load_data(&raw_groups, &session_map); + let (cache, index, _) = load_data(&raw_groups, &session_map); let _ = tx.send((cache, index)); }); } diff --git a/src/data/cache.rs b/src/data/cache.rs index 301433a..7490277 100644 --- a/src/data/cache.rs +++ b/src/data/cache.rs @@ -36,11 +36,54 @@ pub struct DayEntry { pub active_minutes: u64, } +/// Bumped whenever the on-disk cache schema or aggregation logic changes in +/// a way that would make pre-existing values inconsistent with a fresh parse. +/// Caches with a different (or missing) version are dropped at load time. +/// +/// History: +/// - v2: `parse_session_files` now dedups events by `request_id` (max usage +/// per request). Pre-fix caches over-counted tokens/cost on days with +/// sub-agent activity (parent + sub-agent JSONLs both logged the same +/// `req_…`), so the high-water-mark merge would freeze the inflated +/// values in place. +const CURRENT_SCHEMA_VERSION: u32 = 2; + /// Full cache: source_root -> cwd -> date (YYYY-MM-DD) -> metrics. #[derive(Debug, Default, Clone, Serialize, Deserialize)] #[serde(transparent)] pub struct Cache(HashMap>>); +/// On-disk wrapper. Pre-v2 caches were the bare `Cache` map at top level +/// and fail this deserialize, triggering migration. +#[derive(Debug, Deserialize)] +struct VersionedCache { + schema_version: u32, + data: Cache, +} + +/// Borrowing twin so `save` can serialize without cloning the full cache. +#[derive(Serialize)] +struct VersionedCacheRef<'a> { + schema_version: u32, + data: &'a Cache, +} + +/// `Migrated` (planned schema bump, "cache rebuilt") and `Recovered` +/// (genuine load failure) are surfaced separately so a real corruption +/// isn't masked by the migration banner. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum CacheLoad { + Fresh, + Migrated, + Recovered, +} + +#[derive(Debug)] +pub struct LoadOutcome { + pub cache: Cache, + pub state: CacheLoad, +} + impl Cache { pub fn new() -> Self { Self(HashMap::new()) @@ -110,15 +153,57 @@ fn cache_path() -> PathBuf { home.join(".config").join("ccmeter").join("history.json") } -pub fn load() -> Cache { - let path = cache_path(); - if !path.exists() { - return Cache::new(); +pub fn load() -> LoadOutcome { + let raw = match std::fs::read_to_string(cache_path()) { + Ok(s) => s, + Err(e) if e.kind() == std::io::ErrorKind::NotFound => { + return LoadOutcome { + cache: Cache::new(), + state: CacheLoad::Fresh, + }; + } + // Any other filesystem error (permissions, I/O) is a recovery + // scenario — the file is there but we can't read it. + Err(_) => { + return LoadOutcome { + cache: Cache::new(), + state: CacheLoad::Recovered, + }; + } + }; + + // Path 1: current schema — clean load. + if let Ok(v) = serde_json::from_str::(&raw) { + if v.schema_version == CURRENT_SCHEMA_VERSION { + return LoadOutcome { + cache: v.data, + state: CacheLoad::Fresh, + }; + } + // Wrapped but wrong version → deliberate migration. + return LoadOutcome { + cache: Cache::new(), + state: CacheLoad::Migrated, + }; + } + + // Path 2: legacy pre-v2 cache was a bare `Cache` HashMap at the top + // level. If it parses as such, this is a planned migration from the + // pre-versioning era, not corruption. + if serde_json::from_str::(&raw).is_ok() { + return LoadOutcome { + cache: Cache::new(), + state: CacheLoad::Migrated, + }; + } + + // Path 3: file is neither a versioned cache nor a legacy one — either + // truncated, corrupted, or produced by a tool we don't recognize. + // Surface this distinctly so the user knows the cache had a real issue. + LoadOutcome { + cache: Cache::new(), + state: CacheLoad::Recovered, } - std::fs::read_to_string(&path) - .ok() - .and_then(|s| serde_json::from_str(&s).ok()) - .unwrap_or_default() } pub fn save(cache: &Cache) { @@ -126,7 +211,11 @@ pub fn save(cache: &Cache) { if let Some(parent) = path.parent() { let _ = std::fs::create_dir_all(parent); } - if let Ok(json) = serde_json::to_string_pretty(cache) { + let wrapped = VersionedCacheRef { + schema_version: CURRENT_SCHEMA_VERSION, + data: cache, + }; + if let Ok(json) = serde_json::to_string_pretty(&wrapped) { let tmp = path.with_extension("json.tmp"); if std::fs::write(&tmp, &json).is_ok() && std::fs::rename(&tmp, &path).is_err() { let _ = std::fs::write(&path, &json); @@ -547,6 +636,9 @@ mod tests { lines_added: 5, lines_deleted: 3, session_file: "session1.jsonl".into(), + request_id: None, + raw_cost_usd: None, + line_uuid: None, }, Event { timestamp: Utc.with_ymd_and_hms(2026, 1, 15, 12, 0, 0).unwrap(), @@ -561,6 +653,9 @@ mod tests { lines_added: 0, lines_deleted: 0, session_file: "session2.jsonl".into(), + request_id: None, + raw_cost_usd: None, + line_uuid: None, }, ]; @@ -591,6 +686,9 @@ mod tests { lines_added: 0, lines_deleted: 0, session_file: "unknown.jsonl".into(), + request_id: None, + raw_cost_usd: None, + line_uuid: None, }]; let cache = from_events(&events, &session_info); From 7e8f8803877e9a8d93fc42e15ee2c307599aede4 Mon Sep 17 00:00:00 2001 From: hmenzagh Date: Mon, 13 Apr 2026 22:14:31 +0200 Subject: [PATCH 3/4] feat(ui): add cache-state banner and update dashboard styling - Display cache state banner on startup (rebuilt or unreadable) - Add CCMETER_FORCE_BANNER env var for testing - Update dashboard styling for rate tracking components - Include new rate-tracking asset --- assets/rate-tracking.png | Bin 0 -> 332952 bytes src/ui/dashboard.rs | 104 +++++++++++++++++++++++++++++++-------- 2 files changed, 84 insertions(+), 20 deletions(-) create mode 100644 assets/rate-tracking.png diff --git a/assets/rate-tracking.png b/assets/rate-tracking.png new file mode 100644 index 0000000000000000000000000000000000000000..fc07b83bee57ef658a7a8eea3298798a805253ad GIT binary patch literal 332952 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, c: Constraint) -> usize { + cs.push(c); + cs.len() - 1 + } + let mut constraints = vec![Constraint::Length(1)]; + let update_idx = self + .update_info + .is_some() + .then(|| push(&mut constraints, Constraint::Length(1))); + // 4 rows: top border + title + hint + bottom border. + let cache_idx = (self.cache_load_state != crate::data::cache::CacheLoad::Fresh) + .then(|| push(&mut constraints, Constraint::Length(4))); + let content_idx = push(&mut constraints, Constraint::Min(1)); + let footer_idx = push(&mut constraints, Constraint::Length(1)); + let outer = Layout::default() .direction(Direction::Vertical) - .constraints(if has_update { - vec![ - Constraint::Length(1), - Constraint::Length(1), - Constraint::Min(1), - Constraint::Length(1), - ] - } else { - vec![ - Constraint::Length(1), - Constraint::Length(0), - Constraint::Min(1), - Constraint::Length(1), - ] - }) + .constraints(constraints) .split(area); - self.draw_footer(frame, outer[3]); + self.draw_footer(frame, outer[footer_idx]); - if let Some(info) = &self.update_info { - self.draw_update_banner(frame, outer[1], info); + if let (Some(idx), Some(info)) = (update_idx, &self.update_info) { + self.draw_update_banner(frame, outer[idx], info); + } + if let Some(idx) = cache_idx { + self.draw_cache_state_banner(frame, outer[idx]); } // Replace time-filter / source tabs with a plain title in settings view @@ -92,7 +95,7 @@ impl App { self.draw_header(frame, &top_cols); } - let content_area = outer[2]; + let content_area = outer[content_idx]; if content_area.width < MIN_WIDTH || content_area.height < MIN_HEIGHT { self.draw_too_small_popup(frame, content_area, MIN_WIDTH, MIN_HEIGHT); } else { @@ -219,6 +222,67 @@ impl App { frame.render_widget(Paragraph::new(line).alignment(Alignment::Center), area); } + fn draw_cache_state_banner(&self, frame: &mut Frame, area: Rect) { + use crate::data::cache::CacheLoad; + let t = theme(); + let tick = self.start_time.elapsed().as_millis() / 400; + + // Migration vs corruption get different colors, icons, and copy so + // the user can tell a planned schema bump apart from a cache that + // genuinely failed to load. + let (icon, accent, title_text, body_text) = match self.cache_load_state { + CacheLoad::Fresh => return, + CacheLoad::Migrated => ( + if tick.is_multiple_of(2) { + "\u{21bb}" + } else { + "\u{2022}" + }, + t.warning, + "Cache rebuilt", + " — duplicate sub-agent events are no longer counted; historical totals may shift", + ), + CacheLoad::Recovered => ( + if tick.is_multiple_of(2) { + "\u{26a0}" + } else { + "\u{2022}" + }, + t.error, + "Cache was unreadable", + " — rebuilt from scratch; if this keeps happening, delete ~/.config/ccmeter/history.json", + ), + }; + + let title = Line::from(vec![ + Span::styled( + format!(" {icon} "), + Style::default().fg(accent).add_modifier(Modifier::BOLD), + ), + Span::styled( + title_text, + Style::default().fg(accent).add_modifier(Modifier::BOLD), + ), + Span::styled(body_text, Style::default().fg(t.text_primary)), + ]); + let hint = Line::from(Span::styled( + "press any key to dismiss", + Style::default() + .fg(t.text_dim) + .add_modifier(Modifier::ITALIC), + )); + + let block = Block::default() + .borders(Borders::ALL) + .border_type(ratatui::widgets::BorderType::Rounded) + .border_style(Style::default().fg(accent)); + + let paragraph = Paragraph::new(vec![title, hint]) + .alignment(Alignment::Center) + .block(block); + frame.render_widget(paragraph, area); + } + fn draw_too_small_popup(&self, frame: &mut Frame, area: Rect, min_w: u16, min_h: u16) { let t = theme(); let msg = format!( From e860f9e457ec111c2d11854712b365c9969ef070 Mon Sep 17 00:00:00 2001 From: hmenzagh Date: Mon, 13 Apr 2026 22:14:33 +0200 Subject: [PATCH 4/4] docs: document accurate token counting methodology in README - Add 'Accurate token counting' section explaining dedup approach - Update version to 2.0.0-beta.3 - Document all fixes and new features in CHANGELOG --- CHANGELOG.md | 21 +++++++++++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 65 ++++++++++++++++++++++++++++++++++++++++++---------- 4 files changed, 76 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 89fd3c4..0745f60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## [2.0.0-beta.3] - 2026-04-13 + +### Fixed +- **Token & cost accuracy** — Claude Code logs the same API response in multiple places (streaming chunks, sub-agent mirrors, `/compact` retries). CCMeter now dedupes by `requestId` (Anthropic's billing unit), eliminating the 2–3× over-counting previously observed on days with heavy sub-agent activity. Totals now match what Anthropic actually billed. +- **Multi-minute timeline accuracy** — long streaming responses (extended thinking + large outputs) now correctly distribute their tokens across the minutes they actually spanned, instead of collapsing onto the final completion minute. `active_minutes` clustering, the minute-level heatmap, and rate-limit forecasts are all more accurate. +- **Code metrics on partial-overlap streams** — when a non-canonical stream carries a unique `Edit`/`Write` block, its `lines_suggested` / `lines_added` / `lines_deleted` are preserved via zero-billing ghost markers, avoiding silent under-counting of code activity. Ghosts are deduped across multiple mirror files by timestamp so a 3-file (canonical + 2 mirrors) layout doesn't double-count line metrics. +- **Ghost events no longer leak into model breakdowns** — zero-billing markers now carry an empty `model` field, so they fall through to `ModelId::Other` and are filtered out of model-share aggregations instead of producing phantom slices. +- **User-side patch dedup** — patches replayed into sub-agent transcripts (Edit/Write acceptances) are now deduped by line `uuid`, fixing inflated `lines_added` and skewed efficiency scores on sub-agent–heavy days. +- **Cost fallback includes `cache_creation`** — token-based cost estimation (used when raw `costUSD` is absent, i.e. Pro plans) now bills `cache_creation` at `input_price × 1.25` instead of ignoring it. Closes a 5–15 % under-estimate on cache-heavy sessions. + +### Added +- **Versioned cache schema** with automatic invalidation. `~/.config/ccmeter/history.json` carries a `schema_version`; mismatches trigger a clean rebuild on next launch so accuracy fixes propagate without manual intervention. +- **One-time cache-state banner** at the top of the dashboard: + - "Cache rebuilt" (warning color) when a schema migration occurs. + - "Cache was unreadable" (error color) when the on-disk file couldn't be read or parsed, with a hint to delete it if the issue persists. + - Both dismiss on any keypress. +- **`CCMETER_FORCE_BANNER` env var** for testing the banners after migration has already happened. Set to `recovered` for the corruption banner, anything else for the migration banner. + +### Documentation +- README: new "Accurate token counting" section explaining the dedup methodology and what users should expect when upgrading from a pre-dedup version. + ## [2.0.0-beta.2] - 2026-04-13 ### Added diff --git a/Cargo.lock b/Cargo.lock index 14539d0..c9231e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -184,7 +184,7 @@ dependencies = [ [[package]] name = "ccmeter" -version = "2.0.0-beta.2" +version = "2.0.0-beta.3" dependencies = [ "chrono", "clap", diff --git a/Cargo.toml b/Cargo.toml index 71bb897..1e54024 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ccmeter" -version = "2.0.0-beta.2" +version = "2.0.0-beta.3" edition = "2024" description = "A meter for Claude Code usage" repository = "https://github.com/hmenzagh/CCMeter" diff --git a/README.md b/README.md index 2773000..e9a027e 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,13 @@ CCMeter reads your local Claude Code session data and renders an interactive TUI - **Per-project detail** — dedicated charts, model distribution, cost sparklines, and estimated active time - **Time filters** — 1h, 12h, Today, Last week, Last month, All +**Rate limit tracking** (press `` ` `` to toggle) +- **Live usage monitor** — polls `/api/oauth/usage` for each Claude OAuth account and shows 5h, 7d, Opus, Sonnet, and Cowork window utilization in real time +- **Credential cards** — one per source root with subscription tier, expiry, and current usage bars +- **Session forecast** — extrapolates when you'll hit each rate limit window based on current token velocity +- **Session chart & timeline** — historical rate-limit hits per source, plus minute-level token usage over the active window +- **Overage tracking** — surfaces `extra_usage` credits and monthly limits when enabled + **Project handling & performance** - **Auto-discovery & grouping** — finds Claude projects and groups them by git repository - **Multi-source roots** — switch between Claude config directories with `Shift+Tab` @@ -95,8 +102,9 @@ ccmeter |-----|--------| | `Tab` | Cycle time filter | | `Shift+Tab` | Switch source root | +| `` ` `` | Toggle rate limit tracking view | | `j` / `k` or `Up` / `Down` | Scroll projects | -| `h` / `l` or `Left` / `Right` | Navigate between projects | +| `h` / `l` or `Left` / `Right` | Navigate between projects (or credentials in rate tracking) | | `Esc` | Deselect project | | `.` | Open settings panel | | `r` | Reload data | @@ -120,9 +128,21 @@ CCMeter discovers Claude Code sessions by scanning your home directory for any f Session JSONL → parallel parse → daily aggregates → cached history → TUI render ``` +### Accurate token counting + +Claude Code logs the same API response in several places — once per streaming chunk, again in every sub-agent's transcript, again in any `/compact` retry. Summing every line naïvely inflates tokens by 2–3× on busy days. + +CCMeter dedupes by `requestId` (Anthropic's billing unit: one request = one invoice line). For each request it picks the most complete log, then re-emits it as per-chunk deltas so multi-minute streams keep their real timestamps. Activity from non-canonical mirror logs survives as zero-billing "ghost" markers, so `active_minutes` and code metrics stay accurate even when the canonical log is just a terminal snapshot. User-side patches (Edit/Write acceptances) are deduped by line `uuid` for the same reason. + +Result: totals match what Anthropic actually billed, and the minute-level timeline reflects real activity. + ### Cache -Parsed metrics are persisted to `~/.config/ccmeter/history.json`. On subsequent launches, only new or modified session files are parsed, everything else is served from cache, making startup near-instant even with thousands of sessions. +Parsed metrics are persisted to `~/.config/ccmeter/history.json` so subsequent launches only re-parse new or modified session files. + +The cache is versioned. When CCMeter ships a change that would make pre-existing aggregates wrong (e.g. the dedup work above), the schema is bumped and any older cache is rebuilt from scratch on next launch — a one-time banner explains why historical totals may have shifted. A second banner appears if the cache was unreadable (corruption, disk error). Both dismiss on any keypress. + +**Upgrading from before the dedup fix?** Expect your historical numbers to drop on days with heavy sub-agent or `/compact` activity. That's the over-counting going away, not data loss. ### Per-project view @@ -139,6 +159,24 @@ Press `Esc` to go back to the global overview. CCMeter per-project view

+### Rate limit tracking + +Press `` ` `` (backtick) to switch to the rate limit tracking view. CCMeter reads your Claude OAuth credentials and polls `/api/oauth/usage` at randomized intervals (5–10 min per account) to show real-time utilization of each rate limit window. + +- **Credential cards** — one per source root, with subscription tier, token expiry, and usage bars for the 5h, 7d, Opus, Sonnet, and Cowork windows +- **Live summary & KPI bar** — currently selected account's status at a glance +- **Session forecast** — projects when you'll hit each limit based on recent token velocity +- **Usage timeline & session chart** — minute-level token usage for the active 5h window and historical rate-limit hits per source +- **Overages** — surfaces `extra_usage` credits and monthly limits when enabled on your plan + +Navigate between accounts with `←` / `→` (or `h` / `l`), refresh with `r`, and press `` ` `` again to return to the main dashboard. + +CCMeter only sees tokens from Claude Code sessions (local JSONL logs). Tokens consumed through the Claude chat (claude.ai web/desktop) count against the same rate limits but are not visible to CCMeter, so forecasts and utilization bars may under-report actual usage when you also chat with Claude alongside coding. Rate limit history is persisted locally at `~/.config/ccmeter/rate-history.json` and `~/.config/ccmeter/usage-hit-history.json` so session charts and hit timelines survive restarts — delete these files to reset the tracking history. + +

+ CCMeter rate limit tracking view +

+ ## Configuration User overrides are stored at `~/.config/ccmeter/overrides.json` and can be edited through the settings panel or manually. @@ -160,28 +198,31 @@ User overrides are stored at `~/.config/ccmeter/overrides.json` and can be edite ``` src/ ├── main.rs # Entry point & event loop -├── app.rs # Core application state +├── app.rs # Core application state & view routing +├── update_check.rs # GitHub release version check ├── config/ -│ ├── mod.rs │ ├── discovery.rs # Project auto-discovery -│ └── overrides.rs # User configuration & merges +│ ├── overrides.rs # User configuration & merges +│ └── settings.rs # Persistent user preferences ├── data/ -│ ├── mod.rs │ ├── parser.rs # JSONL session parsing │ ├── cache.rs # Persistent metric cache +│ ├── index.rs # Compact event index │ ├── tokens.rs # Daily token aggregation -│ └── models.rs # Model pricing tables +│ ├── models.rs # Model pricing tables +│ ├── oauth.rs # OAuth credential loading & async usage polling +│ ├── rate_limits.rs # Rate-limit hit parsing +│ ├── rate_history.rs # Persisted rate-limit history +│ └── hit_history.rs # Historical hit aggregation └── ui/ - ├── mod.rs ├── dashboard.rs # Main layout ├── heatmap.rs # Heatmap rendering + ├── loading.rs # Startup loading screen ├── theme.rs # Color theme ├── time_filter.rs # Time range logic ├── settings_view.rs # Settings panel - └── cards/ - ├── mod.rs - ├── data.rs # Card data aggregation - └── render.rs # Card rendering + ├── cards/ # Per-project cards + └── rate_tracking/ # Rate limit tracking view (13 modules) ``` ## License