1. 21 Mar, 2026 9 commits
  2. 20 Mar, 2026 29 commits
  3. 19 Mar, 2026 2 commits
    • erio's avatar
      fix(antigravity): correctly mark credits exhausted on "Resource has been exhausted" 429 · 21b6f2d5
      erio authored
      shouldMarkCreditsExhausted was blocked by isURLLevelRateLimit check when
      credit overages retry returned "Resource has been exhausted (e.g. check quota).",
      causing credits to never be marked as exhausted. This led to an infinite loop
      where each request injected credits, bypassed model rate limits, and failed again.
      
      - Remove isURLLevelRateLimit guard from shouldMarkCreditsExhausted (only called
        for credit retry responses — if credits retry fails, mark exhausted)
      - Add "resource has been exhausted" to creditsExhaustedKeywords
      - Update tests to match corrected behavior
      21b6f2d5
    • erio's avatar
      fix(antigravity): fast-fail on proxy unavailable, temp-unschedule account · 528ff5d2
      erio authored
      ## Problem
      
      When a proxy is unreachable, token refresh retries up to 4 times with
      30s timeout each, causing requests to hang for ~2 minutes before
      failing with a generic 502 error. The failed account is not marked,
      so subsequent requests keep hitting it.
      
      ## Changes
      
      ### Proxy connection fast-fail
      - Set TCP dial timeout to 5s and TLS handshake timeout to 5s on
        antigravity client, so proxy connectivity issues fail within 5s
        instead of 30s
      - Reduce overall HTTP client timeout from 30s to 10s
      - Export `IsConnectionError` for service-layer use
      - Detect proxy connection errors in `RefreshToken` and return
        immediately with "proxy unavailable" error (no retries)
      
      ### Token refresh temp-unschedulable
      - Add 8s context timeout for token refresh on request path
      - Mark account as temp-unschedulable for 10min when refresh fails
        (both background `TokenRefreshService` and request-path
        `GetAccessToken`)
      - Sync temp-unschedulable state to Redis cache for immediate
        scheduler effect
      - Inject `TempUnschedCache` into `AntigravityTokenProvider`
      
      ### Account failover
      - Return `UpstreamFailoverError` on `GetAccessToken` failure in
        `Forward`/`ForwardGemini` to trigger handler-level account switch
        instead of returning 502 directly
      
      ### Proxy probe alignment
      - Apply same 5s dial/TLS timeout to shared `httpclient` pool
      - Reduce proxy probe timeout from 30s to 10s
      528ff5d2