- Removed custom OAuth token refresh logic that was inadvertently invalidating Claude Code's refresh token via token rotation
- Removed hardcoded OAuth constants (token URL, client ID, scopes) no longer needed
- Removed in-memory token cache (CachedTokens, TOKEN_CACHE) no longer needed
- Delegate token refresh to the Claude CLI (claude auth status) so it manages its own credentials and writes updated tokens to disk
- Re-read credentials file after CLI refresh to pick up the fresh access token
- Simplified Credentials struct by removing unused refresh_token field
- Seconds countdown below 61s - shows 1m at 61s, then 60, 59... 0 counting down each second, then now when reset time passes
- Fast polling at reset - when either timer shows now, polls the API every 5s to pick up fresh rate limit data
- Auto-restores normal polling - stops the 5s fast poll as soon as fresh data comes back with a new reset time
- Token auto-refresh - when the OAuth token is expired, the app uses the refresh token to get a new access token in-memory (no disk writes)
- Show '...' on error - any poll failure shows the refresh indicator instead of cryptic error text
- Exponential backoff retry - on failure, retries at 30s, 60s, 120s... up to the poll interval, then restores normal interval on success
- Countdown guard - the countdown timer no longer overwrites '...' with stale cached data during error state
- Cleaned up error handling - removed Display impl, error message formatting, extract_error_message, and simplified try_model to return Option<UsageData>