Skip to content

[WRONG BRANCH] feat(gui): account pool card for generic OAuth providers (carry #5408) - #7168

Closed
lidge-jun wants to merge 3 commits into
carry/5408-reset-firstfrom
carry/5408-pool-controls
Closed

lidge-jun wants to merge 3 commits into
carry/5408-reset-firstfrom
carry/5408-pool-controls

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

Summary

The second of three slices carried from #5408 by @agentHits (source head 2db983800a02785250cc3ebed86f399bc772303e). It is stacked on #7167 (generic reset-first) and targets that branch.

Generic OAuth pools (Google Antigravity, xAI, Kiro, Cursor and the rest) had no pool controls in the dashboard. Only Codex and Anthropic did. The Anthropic pool card (AnthropicAccountPoolSettings) now also serves generic pools, and ProviderAuthPanel mounts it for every OAuth provider with an account that is neither the Codex pool nor an Anthropic row. #5408 generalized this card but only ever mounted it for Anthropic. Its generic pool controls lived in the new toolbar, which ships in slice 3, so here they are reachable from today's account list. Slice 3 keeps this card and drops the duplicate toolbar switch.

For a generic pool the card:

  • offers reset-first and hides the Anthropic-only quota window, notice and disclosure;
  • shows the strategy as Saved, not live, with the select disabled, while pool.kernel is off. It reads this from a new generic-only inert field on /api/pool/settings (the legacy route already had it, and the CLI schema already allowed it);
  • shows the threshold field only for fill-first, the one strategy that reads it.

Changes from the source PR:

  • Kiro least-loaded is no longer overwritten. The card's toggle wrote the whole state back with the strategy normalized to quota. feat(gui): unified provider workspace with pool controls and reset-first rotation #5408 guarded this only in its toolbar. The card now shows a stored strategy it does not model by name and leaves strategy out of writes that do not change it. A test covers this and fails without the guard (10 pass / 1 fail).
  • The generic status line no longer promises a threshold switch. "New sessions prefer remaining quota under {threshold}%" described something the generic quota path never does, since only fill-first reads the threshold. It now says what the switch changes. The line is re-translated in all 11 locales; the other 10 genericPool.* strings are the author's.
  • The strategy preview (AccountPoolStrategyPreview) is left out. It rendered only on the Anthropic card, and its quota caption ("the threshold does not switch earlier") contradicted the chart beside it, which switched at the threshold. It can come back with copy written per kind.

Independent review round 1 fixed explicit least-loaded → quota selection. Incidental saves still preserve an unmodeled strategy, but choosing a strategy now explicitly writes it instead of comparing against its normalized fallback. The new case failed before the fix (11 pass / 1 fail) and passes after it. The refreshed #7167 head is merged into this layer without rewriting history.

Screenshots

Real GUI builds served by sandboxed proxies, three synthetic Antigravity accounts without quota readings. Google Chrome/Playwright startup timed out on this machine (even Google Chrome --version hung at process startup); these replacement captures use GOAT's shared Chromium browser. No screenshot files are committed to a PR branch.

Before (origin/dev 7640a94) After (reviewed branch build)
before after

Co-authored-by: agentHits 140916359+agentHits@users.noreply.github.com

Verification

Fresh review runs with temporary homes:

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.

Google Antigravity, xAI, Kiro, Cursor and the other generic OAuth pools had
no dashboard pool controls. The Anthropic pool card now serves them too and
is mounted for every non-Codex, non-Anthropic OAuth provider with an
account. It offers reset-first, hides the Anthropic-only quota window and
notice, and shows the strategy as "Saved, not live" with the select
disabled while pool.kernel is off, read from a new generic-only inert field
on /api/pool/settings.

A strategy the dashboard does not model (Kiro's CLI-only least-loaded) is
shown verbatim and left out of writes that do not change it, so toggling the
pool no longer overwrites it with the normalized default. The generic status
line no longer claims a threshold switch the quota path never makes.

Carried from #5408 (source head 2db9838).

Co-authored-by: agentHits <140916359+agentHits@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

🗂️ Base branches to auto review: 2
  • ^dev$
  • ^preview$

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: lidge-jun/opencodex/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 943dda5b-52a1-4a4a-b9df-01eff350447f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@lidge-jun
lidge-jun marked this pull request as ready for review October 15, 2026 10:20
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner October 15, 2026 10:20
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-15T10:24:00.903571Z 4f701a7 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4f701a7cb4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

const nextSticky = normalizeAccountPoolStickyLimit(json.stickyLimit);
setState({
enabled: json.enabled === true,
enabled: json.enabled === true || json.enabledEffective === true,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve inherited enablement when saving another field

When a generic provider has no per-provider enabled override but inherits global oauthAccountFailover.enabled: true, this collapses enabled: null and enabledEffective: true into a single true. Any subsequent strategy, threshold, or sticky-limit edit sends that value as enabled: true in the PUT, unintentionally creating a permanent provider override; turning the global setting off later will therefore leave this provider enabled. Keep the nullable stored value separately and omit enabled from non-toggle saves so edits preserve inheritance.

AGENTS.md reference: gui/AGENTS.md:L10-L10

Useful? React with 👍 / 👎.

@github-actions

Copy link
Copy Markdown
Contributor

✅ Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the enhancement New feature or request label Oct 15, 2026
@lidge-jun

Copy link
Copy Markdown
Owner Author

Closing at the maintainer's request together with #7169: we are not taking the new generic account pool card UI from #5408. The backend reset-first slice continues separately in #7167. The branch is kept, so this can be reopened if the direction changes.

@lidge-jun lidge-jun closed this Oct 15, 2026
@github-actions github-actions Bot changed the title feat(gui): account pool card for generic OAuth providers (carry #5408) [WRONG BRANCH] feat(gui): account pool card for generic OAuth providers (carry #5408) Oct 15, 2026
@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • wrong target branch (carry/5408-reset-first); retarget to dev.

What to do

  • Retarget this PR to dev — all contributions go to dev.

Its title has been prefixed with [WRONG BRANCH].
Automatic draft conversion failed (token cannot change draft status). Please convert this pull request to a draft manually. The required enforce-target check will keep failing until every issue above is resolved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant