feat(usage): add official subscription quota template with unified tier rendering

Changes:
- Add official_subscription template type for Claude/Codex/Gemini
- Replace implicit 'category=official auto-query' with explicit opt-in template
- Default disabled; users enable via usage script modal with configurable interval
- Unify tier→label mapping across subscription and script paths via labeled_tier_parts()
- Fix tray rendering: week aliases (seven_day/opus/sonnet) now use highest utilization
- Add depth guard: official_subscription checks enabled flag in query_provider_usage_inner
- Add cache invalidation symmetry: invalidate_subscription() for disabled providers
- i18n: add templateOfficialSubscription + hint in zh/en/ja/zh-TW

Backend (Rust):
- provider.rs: add TEMPLATE_TYPE_OFFICIAL_SUBSCRIPTION branch, flatten SubscriptionQuota→UsageData
- tray.rs: extract labeled_tier_parts() shared by both summary functions, use max_by for multi-alias groups
- usage_cache.rs: add invalidate_subscription() method
- Test coverage: add week-alias highest-utilization tests for both paths

Frontend (TypeScript):
- UsageScriptModal: add official_subscription to templates, auto-detect for official providers
- ProviderCard: gate useUsageQuery with !isOfficialSubscriptionUsage, pass autoQueryInterval to footer
- SubscriptionQuotaFooter: accept autoQueryInterval prop, default 0 (disabled)
- constants.ts: add TEMPLATE_TYPES.OFFICIAL_SUBSCRIPTION

Fixes tier rendering regression where:
- Claude/Codex: seven_day was missed (only weekly_limit matched) → lost 7-day window in tray
- Gemini: gemini_pro/flash/flash_lite fell through to fallback → leaked machine names
- Multi-window (opus+sonnet): find() took first, not worst → underestimated utilization and emoji color

All tests pass (cargo test + cargo clippy clean).
This commit is contained in:
Jason
2026-06-05 19:02:23 +08:00
parent 03a9296c1f
commit 473f21971d
13 changed files with 459 additions and 173 deletions
+2
View File
@@ -1488,9 +1488,11 @@
"templateCopilot": "GitHub Copilot",
"templateTokenPlan": "Token Plan",
"templateBalance": "Official",
"templateOfficialSubscription": "Official Subscription",
"copilotAutoAuth": "Auto OAuth authentication, no manual credentials needed",
"tokenPlanHint": "Automatically uses the provider's API Key and Base URL to query Token Plan quota",
"balanceHint": "Automatically uses the provider's API Key to query account balance",
"officialSubscriptionHint": "Reads the local CLI OAuth credentials and calls the official API to query subscription quota. Disabled by default and only requests after you enable it.",
"resetDate": "Reset date",
"premiumRequests": "Premium Requests",
"credentialsConfig": "Credentials",
+2
View File
@@ -1488,9 +1488,11 @@
"templateCopilot": "GitHub Copilot",
"templateTokenPlan": "Token Plan",
"templateBalance": "公式",
"templateOfficialSubscription": "公式サブスクリプション",
"copilotAutoAuth": "OAuth 認証を自動使用、手動設定不要",
"tokenPlanHint": "プロバイダーのAPI KeyとBase URLを使用してToken Planクォータを自動クエリ",
"balanceHint": "プロバイダーのAPI Keyを使用してアカウント残高を自動クエリ",
"officialSubscriptionHint": "ローカル CLI の OAuth 認証情報を読み取り、公式 API でサブスクリプション枠を照会します。既定では無効で、有効化した後のみリクエストします。",
"resetDate": "リセット日",
"premiumRequests": "Premium リクエスト",
"credentialsConfig": "認証情報",
+2
View File
@@ -1434,9 +1434,11 @@
"templateCopilot": "GitHub Copilot",
"templateTokenPlan": "Token Plan",
"templateBalance": "官方",
"templateOfficialSubscription": "官方訂閱",
"copilotAutoAuth": "自動使用 OAuth 驗證,無需手動設定憑證",
"tokenPlanHint": "自動使用供應商的 API Key 和 Base URL 查詢 Token Plan 額度",
"balanceHint": "自動使用供應商的 API Key 查詢帳號餘額",
"officialSubscriptionHint": "讀取本機 CLI 的 OAuth 憑證,並呼叫官方介面查詢訂閱額度。預設關閉,只有啟用後才會請求。",
"resetDate": "重設日期",
"premiumRequests": "Premium 請求",
"credentialsConfig": "憑證設定",
+2
View File
@@ -1488,9 +1488,11 @@
"templateCopilot": "GitHub Copilot",
"templateTokenPlan": "Token Plan",
"templateBalance": "官方",
"templateOfficialSubscription": "官方订阅",
"copilotAutoAuth": "自动使用 OAuth 认证,无需手动配置凭证",
"tokenPlanHint": "自动使用供应商的 API Key 和 Base URL 查询 Token Plan 额度",
"balanceHint": "自动使用供应商的 API Key 查询账户余额",
"officialSubscriptionHint": "读取本机 CLI 的 OAuth 凭据,并调用官方接口查询订阅额度。默认关闭,只有启用后才会请求。",
"resetDate": "重置日期",
"premiumRequests": "Premium 请求",
"credentialsConfig": "凭证配置",