All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- Tooltip now shows the additional usage budget when GitHub returns
overage_entitlement, e.g.Additional credits: 5 / 50, while preserving the previous display for older API responses.
- Free token-based Copilot accounts now show their Credits usage instead of
—. GitHub can report these accounts ascopilot_plan=individualwithaccess_type_sku=free_limited_copilot, while the usable Credits quota lives inquota_snapshots.chatinstead ofquota_snapshots.premium_interactions.
- Token-based billing (UBB) support: auto-detects GitHub's new credit-based billing mode via the
token_based_billingfield. The tooltip title switches between Copilot Premium Requests (legacy) and Copilot Credits (UBB), so the count line stays a familiarUsed: 90 / 300 (30%). Overage line still labels its unit (Overage: 5 requestsvsAdditional credits: 5). individual_max(Max) andindividual_edu(Student) plans in the plan-name map.- Per-snapshot
quota_reset_at(Unix seconds) read with top priority under UBB; falls back toquota_reset_date_utcthenquota_reset_date. Shared by all return paths so pooled-exhausted users still see real reset times. - Precise
usedcalculation viaquota_remainingwhen present (avoids float precision loss from percentage-based reverse calculation). Tooltip formatsused,quota, and overage values withIntl.NumberFormat({ maximumFractionDigits: 2 })to preserve fractional precision (e.g.195.9instead of196), matching upstream'squotaCreditsFormatter. - Pooled entitlement exhaustion: enterprise unlimited plans signaling
has_quota=false(without overage) now display100%red instead of misleadingly showing∞. Tooltip surfaces "Quota: Unlimited · pool exhausted" with the reset date.
entitlementparse handles string values ('300') emitted under UBB;entitlement: '0'(not unlimited) now correctly routes to the no-data state, matching upstreamparseQuotasbehavior. Missingentitlement(undefined) is preserved as a distinct case and stays on the normal path.
- README: use Marketplace links in "You may also like" section
- Status bar refresh deadlock when the API response body stalls: the 15s timeout now covers
res.json()body reading, not only the headers. Previously a hung response body could leaverefreshInFlightstucktrue, blocking all subsequent manual and automatic refreshes until VS Code reload.
- Overage percentage in status bar: when quota is exceeded and overage is active, the status bar now shows the actual usage percentage (e.g.
111%) instead of100%, making overage visible at a glance without opening the tooltip.
- Automatic offline recovery: when a network error or timeout occurs, a 10-second polling loop retries the API automatically. Once connectivity is restored, the normal refresh schedule resumes — no manual intervention required.
- Offline graceful degradation: when the network is unavailable, the last known usage data is preserved in the status bar instead of showing an error icon
- Stale data indicator: a
$(warning)suffix is appended to the status bar text after 1 hour offline (e.g.25% ⚠), signalling that cached data may be outdated - Rate-limit resilience: when rate-limited by the API, last known data is likewise preserved with a tooltip notice instead of showing a red error icon
$(alert)icon when offline or rate-limited with no cached data available (consistent with VS Code's own offline status bar behaviour)
- Tooltip notices ("Offline · data may be outdated", "Rate limit · data may be outdated") are now plain text, positioned as the last line of the tooltip
- Unlimited plan tooltip now includes a link to Premium request analytics
- README: updated status bar states table with the new states and Unicode icon representations
- Standardized icon spec
- Synced config and docs from template
- Update icon image to a clearer version
- Fix:
threshold.warning/threshold.criticalvalues now coerced to numbers — non-numeric config strings (e.g."off") no longer produceNaNand silently break status bar coloring - Fix: rate-limit handler no longer lets
updateStatusBarerrors escape as unhandled promise rejections - Add unit tests for
formatTimestamp,getConfig, andbuildTooltip
- Packaging: exclude dev files (tests, configs, dotfiles) from the published extension
- ⏱️ Show last-updated timestamp in tooltip (
Updated at HH:mm:ss, or full date across days) - 📊 Add link icon in tooltip to open Premium request analytics on GitHub
- ⚙️ Reorganize threshold settings under
threshold.*namespace (threshold.enabled,threshold.warning,threshold.critical) - 🔕 Add
threshold.enabledtoggle to disable status bar coloring - 💫 Show loading spinner only on manual refresh (auto-refresh updates silently)
- 📊 Show GitHub Copilot Premium requests usage in the VS Code status bar
- 🔄 Auto-refresh with configurable interval (default: 5 minutes)
- 🟡 Warning threshold indicator (default: 75%)
- 🔴 Critical threshold indicator (default: 90%)
- 🔐 GitHub OAuth authentication via VS Code built-in auth provider
- ⚡ Manual refresh command: "Copilot Usage: Refresh Now"