Skip to content

Preserve Claude usage source after login#8

Closed
Yuxin-Qiao wants to merge 122 commits into
mainfrom
cursor/claude-login-preserve-auto-4adc
Closed

Preserve Claude usage source after login#8
Yuxin-Qiao wants to merge 122 commits into
mainfrom
cursor/claude-login-preserve-auto-4adc

Conversation

@Yuxin-Qiao

@Yuxin-Qiao Yuxin-Qiao commented Jul 7, 2026

Copy link
Copy Markdown
Owner

Fixes steipete#1970.

Summary

  • Stop pinning Claude's usage source to oauth after a successful Claude login flow.
  • Preserve the user's selected source so default Auto keeps OAuth → CLI → Web fallback when OAuth credentials are not readable after setup.
  • Add a focused regression test (ClaudeLoginFlowPolicyTests) and update docs/claude.md.

Root cause

runClaudeLoginFlow() unconditionally set claudeUsageDataSource = .oauth on success. Explicit OAuth mode has no fallback in ClaudeSourcePlanner, so users who completed login but could not read OAuth credentials from Keychain were stuck in a credential prompt loop. Switching config back to auto was the reported workaround.

Approach

Introduce ClaudeLoginFlowPolicy.usageDataSourceAfterSuccessfulLogin(previous:) so successful login preserves the prior source (default Auto stays Auto; explicit CLI/Web/OAuth choices stay explicit). Auto still prefers OAuth when readable.

Related

Upstream PR

This branch is intended for a PR to steipete/CodexBar main. Cloud agent token cannot open cross-repo PRs on the upstream repo; please open from fork branch cursor/claude-login-preserve-auto-4adc if needed.

Commands run

  • Source-level verification against steipete/CodexBar main (aa401f1d).
  • Swift tests not run locally (Linux cloud agent has no Swift toolchain); CI should cover:
    • swift test --filter ClaudeLoginFlowPolicyTests
    • swift test --filter ClaudeSourcePlannerTests
    • make check

Live proof

Not run — AGENTS.md forbids live Claude/OAuth/Keychain probes without explicit request. The linked issue includes reporter proof that restoring auto stopped the prompt loop.

Open in Web Open in Cursor 

joeVenner and others added 30 commits July 3, 2026 13:40
The Poe logo used a garbled SVG path (a self-intersecting scribble
inside a circle) instead of the actual Poe speech-bubble mark, and the
brand color was green (#26AD61) rather than Poe's official purple.

- Replace docs/logos/poe.svg with the correct Poe mark in #5D5CDE
- Apply the same path fix to the app resource ProviderIcon-poe.svg
- Update the Poe card --brand color in docs/index.html to #5D5CDE

#5D5CDE is Poe's official primary brand color ("Poe purple").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Address PR feedback: the descriptor color drives progress bars, the
dashboard, charts, and switcher tabs, and the widget has its own Poe
color case — both still used the old green (#26AD61 normalized).

- PoeProviderDescriptor.branding.color -> 93/92/222 (#5D5CDE)
- CodexBarWidgetViews poe case -> same, matching sibling style

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…inite-cost

Reject nonfinite OpenAI cost values
Co-authored-by: Alberto Xosé Méndez Taboada <contacto@albertomendez.gal>
…-guard

Guard repository size and document history cleanup
fix: correct Poe provider logo and brand color
…e-reset

Prevent OpenCode reset timestamp overflow
* Add Russian localization

* feat: complete Russian localization

* test: account for Russian language label

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
* fix: make Gemini helper deadlines reliable

* ci: allow macOS shards to finish

* test: tighten Gemini helper timeout fix

* ci: preserve macOS test headroom

* fix: make Gemini helper waits deterministic

* fix: harden Gemini helper completion

* docs: clarify Gemini helper fix

* fix: make Gemini helper waits deterministic
Yuxin-Qiao and others added 29 commits July 6, 2026 09:31
* Cap Codex session display when weekly quota is exhausted.

When the weekly lane is the binding cap, show 0% session remaining and the weekly reset time so the menu card and menu bar do not imply usable 5-hour quota.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Address weekly-cap review feedback for Codex session display.

Retarget the session reset whenever the weekly cap is active, omit the 5h reset when weekly reset metadata is missing, and evaluate cap expiry against render time.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: cap Codex session by weekly quota

Co-authored-by: Yuxin Qiao <104957188+Yuxin-Qiao@users.noreply.github.com>

* fix: refresh Codex fallbacks after resets

Co-authored-by: Yuxin Qiao <104957188+Yuxin-Qiao@users.noreply.github.com>

* fix: ignore expired Codex limits in menu bar

Co-authored-by: Yuxin Qiao <104957188+Yuxin-Qiao@users.noreply.github.com>

* fix: hide expired Codex quota lanes

Co-authored-by: Yuxin Qiao <104957188+Yuxin-Qiao@users.noreply.github.com>

* fix: observe merged Codex reset transitions

Co-authored-by: Yuxin Qiao <104957188+Yuxin-Qiao@users.noreply.github.com>

* fix: exclude weekly-capped Codex from ranking

Co-authored-by: Yuxin Qiao <104957188+Yuxin-Qiao@users.noreply.github.com>

* fix: preserve later Codex quota reset

Co-authored-by: Yuxin Qiao <104957188+Yuxin-Qiao@users.noreply.github.com>

* fix: project legacy Codex widget quotas

Co-authored-by: Yuxin Qiao <104957188+Yuxin-Qiao@users.noreply.github.com>

* test: split legacy Codex widget regression

Co-authored-by: Yuxin Qiao <104957188+Yuxin-Qiao@users.noreply.github.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
* Reject nonfinite Kimi K2 usage

* fix: harden Kimi K2 numeric parsing

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Reject non-finite, non-positive, and out-of-range numeric timestamps while preserving valid Unix seconds and milliseconds, including the exact cutoff.

Make fallback-time coverage deterministic and retain contributor changelog credit.

Co-authored-by: JoeVenner <ylafrimi@gmail.com>
Point Amp's Usage Dashboard action at the current usage route while leaving fetch, sign-in, and cookie URLs unchanged.

Add exact metadata regression coverage and contributor changelog credit.

Co-authored-by: Echo <github@3kh0.net>
Show every positive usage value below one percent as `<1%` before integer rounding, and lock both prefix-first and suffix-first localized formatting with focused regression coverage.

Co-authored-by: Yash Raj Pandey <yashpn62@gmail.com>
Roll yearless Claude quota reset dates into the next year when their current-year interpretation is already past, covering both minute-bearing and hour-only formats.

Co-authored-by: Yash Raj Pandey <yashpn62@gmail.com>
Preserve fractional Claude web session and weekly utilization by routing both fields through the established numeric parser, with regression coverage through the downstream session window.

Co-authored-by: Yash Raj Pandey <yashpn62@gmail.com>
Keep Gemini's Pro lane absent when no Pro quota is reported so menu-bar metric selection falls back to the real Flash usage, with direct resolver regression coverage.

Co-authored-by: Yash Raj Pandey <yashpn62@gmail.com>
Correct Devin's mixed-scale top-level percentage boundary so exact one means 1% while preserving fractional fallback quota-object semantics.

Co-authored-by: Lex <summarit2.5@gmail.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Update Kimi membership quota enrichment to the current endpoint, add the Code 7-day quota, harden ratio validation, and preserve compact widget fit.

Co-authored-by: skyzer <skyzer@gmail.com>
…teipete#1934)

* Fix Alibaba Token Plan for Model Studio region

The Token Plan provider was hardcoded to bailian.console.aliyun.com
(China mainland). International users are now on modelstudio.console.
alibabacloud.com, so their cookies never matched and usage never loaded.

Add AlibabaTokenPlanAPIRegion following the same pattern as the Coding
Plan provider, defaulting to International (modelstudio).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* fix: harden Alibaba Token Plan regions

---------

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
…#1931)

* Guide Gemini users to Antigravity on consumer-tier shutdown.

Detect Google's unsupported-client migration responses during quota,
loadCodeAssist, and token refresh so individual accounts see actionable
Antigravity setup guidance instead of generic auth failures.

Fixes steipete#1929

Co-authored-by: Cursor <cursoragent@cursor.com>

* Complete Gemini-to-Antigravity migration UX for consumer tiers.

Surface migration guidance at login, in not-logged-in and Antigravity setup
errors, and via a Settings action to enable Antigravity when Google returns
the unsupported-client shutdown signal.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Clarify gemini migration docs for signal-gated vs proactive copy.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Key Settings Antigravity action off typed deprecation state.

Replace user-facing error string matching with a Gemini refresh sentinel
set only when consumerTierDeprecated is observed.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: gate Gemini migration guidance

* test: clarify fake Gemini refresh token

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
* Add Antigravity pace

* Limit Antigravity session pace

* fix: preserve Antigravity icon semantics

---------

Co-authored-by: Zihaoqi <Zihao-Qi@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Adds responsive codexbar cards and brief views with bounded terminal rendering, correct reset semantics, partial-success handling, and focused regression coverage.

Co-authored-by: Donnie Fiander <44792682+DonnieFi@users.noreply.github.com>
…ete#1932)

* feat(claude): show Max usage multiplier (5x/20x) in plan label

Anthropic encodes the Max tier in the rate-limit tier string
(default_claude_max_5x / default_claude_max_20x), but the plan resolver
matched on "max" and dropped the multiplier, so every Max subscription
showed as plain "Max". Surface it as "Claude Max 5x" / "Claude Max 20x".

The multiplier is only appended when the tier string names the resolved
plan, so a mismatched subscription type never inherits a stray multiplier
and Pro/Team/Enterprise labels are unchanged.

* fix: tighten Claude multiplier labels

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
* Describe revoked Ollama API keys accurately

* Test Ollama revoked key guidance

* Document Ollama API key lifecycle

* Add screenshot proof

* chore: drop placeholder proof image

The committed proof image was a 1x1 placeholder, not real evidence.
Executable test output in the PR description replaces it.

* test: cover rejected Ollama key guidance

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
* Point Ollama login recovery to sign-in page

* Test Ollama sign-in recovery links

* Document current Ollama sign-in recovery

* fix: align Ollama session recovery guidance

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
…ipete#1968)

* feat: track live Codex and Claude agent sessions across Macs

Adds an Agent Sessions section to the menu: local sessions discovered via
process scan correlated with Codex rollout and Claude project JSONL metadata,
remote Macs discovered via Tailscale (plus manual SSH hosts) and fetched over
ssh with the bundled CLI. Click a session to focus its terminal window via
Accessibility. New 'codexbar sessions' CLI (table/JSON) and 'sessions focus'.
Design notes in docs/agent-sessions-design.md, user docs in docs/sessions.md.

* refactor: collapse sessions settings to a single toggle

Tailscale discovery now runs automatically whenever Agent Sessions is
enabled; drops the separate auto-discover toggle and its setting.
* Recognize Ollama WorkOS session cookies

* Test Ollama WorkOS cookie selection

* Document Ollama WorkOS cookie support

* Add screenshot proof

* chore: drop placeholder proof image

The committed proof image was a 1x1 placeholder, not real evidence.
Executable test output in the PR description replaces it.

* docs: note Ollama WorkOS sessions

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
* Detect Ollama WorkOS sign-in redirects

* Test Ollama WorkOS redirect detection

* Document Ollama WorkOS redirect handling

* Add screenshot proof

* chore: drop placeholder proof image

The committed proof image was a 1x1 placeholder, not real evidence.
Executable test output in the PR description replaces it.

* fix: detect WorkOS sign-in redirects across all WorkOS hosts

WorkOS AuthKit serves the hosted authorize flow from auth.workos.com (and
historically api.workos.com). Matching only api.workos.com misses the
canonical auth.workos.com redirect, so an expired session would fall through
to a parse failure instead of sign-in recovery. Match any *.workos.com host
carrying the /user_management/authorize path, and cover auth.workos.com plus a
non-WorkOS negative case in the test.

* fix(ollama): treat the WorkOS-hosted signin.ollama.com landing as expired

The real unauthenticated Ollama/WorkOS redirect chain (verified live)
terminates on a hosted sign-in page at signin.ollama.com with HTTP 200,
so the final-URL sign-in check previously fell through to a parseFailed
error. Classify any landing on signin.ollama.com as a sign-in redirect
so the fetcher surfaces invalidCredentials and CodexBar can advance to
the next cookie candidate / show sign-in guidance. Add a test case for
the signin.ollama.com terminal landing.

* fix: harden Ollama sign-in classification

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Stop pinning claudeUsageDataSource to OAuth after a successful Claude
login flow. Keeping the selected source (especially default Auto)
preserves OAuth-to-CLI-to-Web fallback when OAuth credentials are not
readable after setup.

Fixes steipete#1970

Co-authored-by: Yuxin Qiao <Yuxin-Qiao@users.noreply.github.com>
@Yuxin-Qiao Yuxin-Qiao closed this Jul 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Claude login pins usage source to OAuth and disables Auto fallback