Relative time goes stale on its own — nothing re-renders when a minute
passes, so a long-lived tab silently lies. The naive fix is a timer per
component, which on the quota page means one per card body.
Adds one app-wide clock instead, started on the first subscriber and
cleared on the last, exposed through useNow(). QuotaTimeline drops its
private interval and joins it, so the chart and the cards above it tick
in lockstep.
Also extracts the timeline's private relative-time formatter into a
shared, testable one. It is now signed: the old version clamped with
Math.max(0, …), so a credit that expired last week read "in 1 minute".
Duration constants and the MM-DD HH:mm shape are deduplicated into
utils/time/durations.ts and formatInstantShort, which the existing
formatQuotaResetTime / formatUnixSeconds now delegate to.
- Introduced deriveAuthFileIdentity to manage display of account email and project ID.
- Updated search logic to include account email and project ID in search criteria.
- Improved styling for file names and account display in AuthFileCard.
- Normalized email and project ID fields in API responses.
- Added tests for new identity logic and search functionalities.
- Introduced new localization strings for quota windows in English, Russian, Simplified Chinese, and Traditional Chinese.
- Enhanced quota types to include reset timestamps and period lengths for various providers (Claude, Antigravity, Codex, Kimi, Xai).
- Implemented utility functions for parsing reset instants from different formats (ISO, Unix, and offsets).
- Developed tests for new reset instant parsing utilities and timeline functionalities.
- Updated quota builders to utilize new reset instant logic and ensure accurate timeline projections.
- Removed deprecated localization keys related to excluded models in zh-TW.json.
- Introduced a new structure for excluded models with improved UI components.
- Refactored AuthFilesOAuthExcludedEditPage to utilize ExcludedModelsPicker for better handling of model exclusions.
- Consolidated styles in AuthFilesOAuthExcludedEditPage.module.scss by removing unused classes.
- Added comprehensive tests for excluded model rules and their matching logic.
- Deleted obsolete tests for OAuth excluded rules and replaced them with more relevant tests for the new structure.
- Ensured that the disabled state of providers is correctly managed and reflected in the UI.
- Implemented 'weighted-round-robin' as a new routing strategy in DashboardPage.
- Introduced weight input fields in ApiKeyEntriesEditor, BaseProviderForm, and SponsorProviderForm.
- Added validation for credential weights, including integer checks and maximum limits.
- Updated localization files to include new weight-related labels and hints.
- Created utility functions for credential weight validation and parsing.
- Added tests for credential weight handling and visual config routing strategy.