From 9e42799a85fae59b5797dfc7a3421903f5a40a17 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Apr 2026 01:25:28 +0000 Subject: [PATCH] fix(daemon): capture additional_rate_limits from codex wham API The wham usage API can return additional rate limit categories via the additional_rate_limits field which was previously ignored, causing data loss during sync. https://claude.ai/code/session_017aLMXajKTAGqTgYimP7UXk --- daemon/codex_ratelimit.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/daemon/codex_ratelimit.go b/daemon/codex_ratelimit.go index b570ac1..64c9d07 100644 --- a/daemon/codex_ratelimit.go +++ b/daemon/codex_ratelimit.go @@ -162,9 +162,10 @@ func loadCodexAuth() (*codexAuthData, error) { // whamUsageResponse maps the response from chatgpt.com/backend-api/wham/usage type whamUsageResponse struct { - PlanType string `json:"plan_type"` - RateLimit *whamRateLimitCategory `json:"rate_limit"` - CodeReviewRateLimit *whamRateLimitCategory `json:"code_review_rate_limit"` + PlanType string `json:"plan_type"` + RateLimit *whamRateLimitCategory `json:"rate_limit"` + CodeReviewRateLimit *whamRateLimitCategory `json:"code_review_rate_limit"` + AdditionalRateLimits map[string]*whamRateLimitCategory `json:"additional_rate_limits"` } type whamRateLimitCategory struct { @@ -230,6 +231,18 @@ func fetchCodexUsage(ctx context.Context, auth *codexAuthData) (*CodexRateLimitD } } + for name, cat := range usage.AdditionalRateLimits { + if cat == nil { + continue + } + if w := cat.PrimaryWindow; w != nil { + windows = append(windows, mapWhamWindow(name, "primary", w)) + } + if w := cat.SecondaryWindow; w != nil { + windows = append(windows, mapWhamWindow(name, "secondary", w)) + } + } + return &CodexRateLimitData{ Plan: usage.PlanType, Windows: windows,