sync from monorepo @ 2452e92e
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
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('─'));
|
||||
}
|
||||
Reference in New Issue
Block a user