feat(app): Add OAuth rate limits and usage dashboard
Summary
Adds visibility into OAuth rate limits and usage information for authenticated providers, particularly useful for Claude Max users to monitor their 5-hour and 7-day usage limits.
Closes #8911
Changes
Backend (packages/opencode)
-
src/auth/index.ts: AddgetUsage()andfetchAnthropicUsage()functions to OAuthPool -
src/server/server.ts: AddGET /auth/usageAPI endpoint -
src/cli/cmd/auth.ts: Addopencode auth usageCLI command
Frontend (packages/app)
-
src/components/dialog-auth-usage.tsx: New dialog component with:- Provider list with account counts
- Anthropic usage limits visualization (5-hour, 7-day)
- Color-coded progress bars (green/yellow/red)
- Account status with cooldown indicators
- Refresh button
-
src/pages/layout.tsx: Add sidebar button to open usage dialog
Screenshots
The dialog displays:
- Usage bars showing utilization percentage
- Reset time countdown
- Active account indicator
- Cooldown status when rate-limited
Testing
- [x] Tested with Claude Max account
- [x] CLI command works correctly
- [x] API endpoint returns expected data
Note
This PR includes the OAuth multi-account failover commits from @gwizz as a foundation, since the usage dashboard builds on that infrastructure. Credit to gwizz for the excellent OAuth rotation system!
The following comment was made by an LLM, it may be inaccurate:
Based on my search results, I found one potentially related PR:
Related PR:
This PR is related because the current PR (#8912) explicitly mentions that it builds on the OAuth multi-account failover infrastructure, likely from this OAuth Marathon implementation. However, they serve different purposes - #8590 appears to handle the credential rotation logic, while #8912 adds the usage monitoring dashboard on top of that infrastructure.
This is not a duplicate but rather a dependent feature. No exact duplicates found.
@mguttmann screenshots please
Closing to rework - will resubmit with improved documentation covering both features (multi-account OAuth rotation + usage dashboard)