* fix(usage): count repeated tool calls in session totals
Preserve each recorded tool-call occurrence while keeping the legacy top-level
name as one mirror. Rebuild cached usage rollups so existing histories report
correct whole-session, daily, and per-tool totals.
* fix(usage): count loaded messages in selected intervals
Count timestamped user and assistant rows from the loaded conversation instead
of inferring message roles from token samples. Keep unavailable interval counts
unknown, preserve retained counts during refresh, and restore authoritative
session totals when the interval is cleared.
* fix(usage): reuse canonical tool-call classification
Use the existing chat classifier for Usage aggregation and log rendering,
preserving trimmed type inputs, raw tool names, block order, and repeated
call accounting. Cover padded and legacy toolUse spellings without a second
classification policy or duplicate export.
* refactor(usage): share range filtering and consolidate tests
Use one log-range predicate for the detail summary and conversation while
retaining undated rows and the full tool-filter options. Remove the unreachable
axis-label branch and redundant SVG assertion, then record the reduced assertion
count. Consolidate pricing, cache-upgrade, and invalid-limit fixtures without
removing their cases or changing the ordered no-append/append proof.