use dirigent_anth::anth_usage::process_usage_screen; const SAMPLE: &str = r#" ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Status Config Usage Stats Session Total cost: $0.0000 Total duration (API): 0s Total duration (wall): 4s Total code changes: 0 lines added, 0 lines removed Usage: 0 input, 0 output, 0 cache read, 0 cache write Current session ███████ 14% used Resets 12:30pm (Europe/Vienna) Current week (all models) ██████ 12% used Resets May 12, 9am (Europe/Vienna) Current week (Sonnet only) 0% used Resets May 12, 9am (Europe/Vienna) What's contributing to your limits usage? Approximate, based on local sessions on this machine — does not include other devices or claude.ai Last 24h · these are independent characteristics of your usage, not a breakdown 97% of your usage came from subagent-heavy sessions Each subagent runs its own requests. Be deliberate about spawning them — and consider configuring a cheaper model for simpler subagents. 16% of your usage was at >150k context Longer sessions are more expensive even when cached. /compact mid-task, /clear when switches to new tasks. Subagents % of usage Explore 3% claude-code-guide 2% d to day · w to week Esc to cancel "#; #[test] fn parses_gauges() { let result = process_usage_screen(SAMPLE); assert_eq!(result.data.gauges.len(), 3); assert_eq!(result.data.gauges[0].name, "Current session"); assert_eq!(result.data.gauges[0].percent_used, 14); assert_eq!( result.data.gauges[0].resets.as_deref(), Some("12:30pm (Europe/Vienna)") ); assert_eq!(result.data.gauges[1].name, "Current week (all models)"); assert_eq!(result.data.gauges[1].percent_used, 12); assert_eq!( result.data.gauges[1].resets.as_deref(), Some("May 12, 9am (Europe/Vienna)") ); assert_eq!(result.data.gauges[2].name, "Current week (Sonnet only)"); assert_eq!(result.data.gauges[2].percent_used, 0); // resets_iso should be present for all gauges with reset info assert!(result.data.gauges[0].resets_iso.is_some()); assert!(result.data.gauges[1].resets_iso.is_some()); assert!(result.data.gauges[2].resets_iso.is_some()); // Week resets should contain the right date let week_iso = result.data.gauges[1].resets_iso.as_ref().unwrap(); assert!(week_iso.starts_with("2026-05-12") || week_iso.contains("05-12")); } #[test] fn parses_contributions() { let result = process_usage_screen(SAMPLE); let contrib = result.data.contributions.as_ref().unwrap(); assert_eq!(contrib.factors.len(), 2); assert_eq!(contrib.factors[0].percent, 97); assert!(contrib.factors[0].description.contains("subagent-heavy")); assert_eq!(contrib.factors[1].percent, 16); assert_eq!(contrib.subagents.len(), 2); assert_eq!(contrib.subagents[0].name, "Explore"); assert_eq!(contrib.subagents[0].percent, 3); assert_eq!(contrib.subagents[1].name, "claude-code-guide"); assert_eq!(contrib.subagents[1].percent, 2); } #[test] fn raw_screen_starts_with_rule() { let result = process_usage_screen(SAMPLE); assert!(result.raw_screen.starts_with('─')); }