You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Feature]: show the configured Codex usage-switch threshold beside the pool strategy #4524
Understand the effective Codex account-pool routing policy from the normal Providers view, including the configured usage-switch threshold.
For example, when the rotation strategy is Quota and the threshold is 80%, the visible summary should communicate both values.
What prevents this today?
The account-pool card visibly shows Rotation strategy: Quota, but the configured threshold is only available inside the collapsed Advanced settings section.
The threshold materially changes routing: it determines when an account is treated as drained for proactive switching and when an existing task may be rebound. Without the numeric value in the normal view, the visible priority list and strategy do not fully explain why a different account was selected.
Quota-bar styling can hint that a threshold exists, but it does not state the configured value or whether proactive switching is disabled.
What should OpenCodex do?
Show a compact, read-only summary of the configured threshold beside the visible rotation strategy. Keep the existing control for editing the value under Advanced settings.
Suggested states:
Quota · switch at 80%
Fill-first · drain at 80%
Round-robin · threshold not used
Quota · proactive switching off
The exact wording can follow the semantics of each strategy, but the effective configured value should be visible without expanding Advanced settings.
Rotation strategy Quota · switch at 80%
Advanced settings (edit)
Alternatives or workarounds
Expand Advanced settings whenever the value needs to be checked, or inspect it with ocx account current openai --json or the account auto-switch status command. Neither workaround exposes the effective threshold in the normal Providers view where routing decisions are being interpreted.
Additional context
This is separate from #806, which discussed strategy semantics and wording, and #4521, which reports manual selection of an account that the active threshold immediately rejects.
Observed in 2.53.0 and still present on the current development branch at the time of filing.
Checks
I searched existing issues and documentation.
This request describes a concrete OpenCodex workflow rather than merely naming a desired technology.
설명
이 이슈는 Providers 화면에서 Codex 계정 풀의 “회전 전략”만 보이고, 실제로 라우팅을 바꾸는 usage-switch threshold 숫자는 Advanced 안에 숨겨져 있다는 UX 불만입니다. 예를 들어 전략이 Quota이고 임계값이 80%여도, 접기 전에는 Rotation strategy: Quota만 보여서, 왜 다른 계정으로 넘어갔는지·왜 핀이 풀렸는지를 한 화면에서 설명하기 어렵습니다. 본문이 제안한 요약(Quota · switch at 80%, Fill-first · drain at 80%, Round-robin · threshold not used, Quota · proactive switching off)은 전략별 의미를 짧게 드러내는 방향이라 제품 언어로도 맞습니다.
지금 dev(HEAD df7dc1be5, package 2.54.0) 코드도 그 구조를 그대로 갖고 있습니다. gui/src/components/CodexPoolStrategySetting.tsx → AccountPoolStrategyControls가 전략 select와 힌트를 기본 카드에 보여주고, threshold 편집 UI는 gui/src/components/CodexAccountPool.tsx 안에서 CodexAuthAdvancedSettings 접힌 영역의 CodexAutoSwitchSetting에 있습니다. i18n에도 전략별 설명(accountPool.strategyHintQuota 등)과 Advanced용 codexAuth.autoSwitchQuotaDesc(threshold 포함)가 이미 갈라져 있어서, “편집은 Advanced, 요약은 기본 면”으로 나누는 구현이 자연스럽습니다. CLI(ocx account current openai --json 등)로 값을 보는 우회는 본문 말대로 Providers에서 해석하는 작업과 화면이 다릅니다.
이 요청은 #806(전략 의미/카피)과는 별개로, “유효 설정 값이 기본 면에 안 보인다”는 좁은 가시성 이슈입니다. 같은 날 열린 #4521(임계값을 이미 넘긴 계정에 “이 계정을 다음에 사용”이 받아들여졌다가 라우팅이 바로 버리는 문제)과도 맞닿아 있습니다. #4521 리뷰에서도 Quota · 80% 요약을 기본 면에 두자고 적어 두었고, 이 이슈가 그 UX 조각을 정식 티켓으로 분리한 형태입니다. types/config 분할과는 무관합니다.
제품 우선순위는 “데이터가 틀렸다”보다 “운영자가 정책을 읽기 어렵다” 쪽입니다. 막힌 장애는 아니고, 다만 threshold를 자주 만지는 풀 운영에서는 반복 비용이 있습니다. 구현 범위는 GUI 요약 한 줄 + i18n이면 충분해 보이고, 편집 컨트롤을 Advanced 밖으로 꺼낼 필요는 본문도 없다고 합니다.
라인 - gui/src/components/AccountPoolStrategyControls.tsx - 전략 이름·힌트만 기본 면에 있다. threshold 숫자는 props로 받지 않는다.
라인 - gui/src/components/CodexAccountPool.tsxCodexAuthAdvancedSettings - CodexAutoSwitchSetting(threshold)이 접힌 영역에만 있다. 본문 관찰과 일치한다.
경로/심볼 - gui/src/components/CodexAutoSwitchSetting.tsx - 전략별 on/off 카피와 threshold 편집이 이미 있다. 기본 면 요약은 여기 문장을 짧게 재사용하면 된다.
경로/심볼 - #4521 - 같은 threshold 가시성/정합성 축. 요약 UI를 그 수정 PR에 같이 넣어도 되고, 이 이슈만의 작은 후속 PR로 잘라도 된다.
경로/심볼 - #806 - 닫힌 전략 카피 이슈. 중복 닫지 말고 “가시성 후속”으로 링크만 유지하는 편이 맞다.
메인테이너의 판단이 필요한 지점
요약을 전략 행 오른쪽 고정 텍스트로 둘지, 전략 힌트 문장을 threshold 포함형으로 바꿀지
Anthropic 풀 카드에도 같은 요약을 대칭으로 넣을지, Codex Providers만 할지
너의 추천 enhancement/account-pool로 유지하고 받는다. 카피는 본문 초안을 출발점으로 하되 기존 i18n 키 의미에 맞출 것. #4521을 고치는 PR이 곧 있으면 그 GUI 변경에 요약을 같이 넣고 이 이슈를 close하고, 아니면 Providers 요약만의 작은 PR로 먼저 랜딩해도 된다.
Tracking: draft PR #4567 covers this together with #4521.
Still present on dev: gui/src/components/AccountPoolStrategyControls.tsx:24-40 takes no threshold prop, so the strategy control has nothing to display beside it.
Confirmed still reproducing on dev@61ee64747b, on both surfaces, and #4567 by @maoxin1234 already implements it -- that is the PR that should close this issue.
Where it reproduces today. In the dashboard, AccountPoolStrategyControls has no threshold prop at all and the strategy row renders only the label, description, hint and selector (gui/src/components/AccountPoolStrategyControls.tsx:24 and :73); CodexPoolStrategySetting projects only strategy and sticky limit out of /api/codex-auth/active (gui/src/components/CodexPoolStrategySetting.tsx:16), even though that response already carries autoSwitchThreshold. The configured value is rendered only inside the collapsed Advanced disclosure (gui/src/components/CodexAccountPool.tsx:551 into CodexAutoSwitchSetting.tsx:107), which is exactly the layout the report describes. In the CLI, ocx account strategy reads /api/pool/settings -- a response that does carry the threshold (src/oauth/pool-settings-capability.ts:147) -- and then discards it, printing only strategy or sticky limit (src/cli/account-extended.ts:926). So the value is already on the wire on both paths; only the presentation drops it.
The management API is the one surface that is already correct. The canonical /api/pool/settings contract co-locates strategy, stickyLimit and autoSwitchThreshold on GET, PUT and PATCH (src/server/management/oauth-account-routes.ts:385, :464), and tests/server/account-pool-management-api.test.ts:740 pins that uniform key set.
Two notes for whoever reviews #4567, neither blocking:
One residual it does not cover. The legacy compatibility write PUT/PATCH /api/codex-auth/pool-strategy returns strategy and sticky limit but no threshold (src/codex/auth-api/routes.ts:304), so it is the last response on this path that is inconsistent with the canonical contract. Adding autoSwitchThreshold: runtimeConfig.autoSwitchThreshold ?? 80 there would finish the job; it is additive.
One hazard to check in review. The GUI seeds DEFAULT_AUTO_SWITCH_THRESHOLD = 80 before hydration (gui/src/hooks/useCodexAutoSwitch.ts:42), so a summary that renders the value must respect autoSwitch.hydrated or it will confidently display 80% during loading on an install configured to 0 or another number. And AccountPoolStrategyControls is shared with Anthropic (gui/src/components/provider-workspace/AnthropicAccountPoolSettings.tsx:249), so the threshold prop has to stay optional or both callers must pass it.
On whether one PR can honestly close this and #4521 together: #4567 can, and mostly does. Both issues are the same operator confusion -- the threshold is invisible where the strategy is visible, and it silently overrides an action the UI offered. #4567's own description says it only partially addresses #4521, and the part it leaves is the non-dashboard surfaces, which is #4970. Neither of those claims this issue; #4567 should.
Activity
lidge-jun commentedon Sep 13, 2026
리뷰 · 우선순위 46 / 80
설명
이 이슈는 Providers 화면에서 Codex 계정 풀의 “회전 전략”만 보이고, 실제로 라우팅을 바꾸는 usage-switch threshold 숫자는 Advanced 안에 숨겨져 있다는 UX 불만입니다. 예를 들어 전략이 Quota이고 임계값이 80%여도, 접기 전에는
Rotation strategy: Quota만 보여서, 왜 다른 계정으로 넘어갔는지·왜 핀이 풀렸는지를 한 화면에서 설명하기 어렵습니다. 본문이 제안한 요약(Quota · switch at 80%,Fill-first · drain at 80%,Round-robin · threshold not used,Quota · proactive switching off)은 전략별 의미를 짧게 드러내는 방향이라 제품 언어로도 맞습니다.지금
dev(HEADdf7dc1be5, package 2.54.0) 코드도 그 구조를 그대로 갖고 있습니다.gui/src/components/CodexPoolStrategySetting.tsx→AccountPoolStrategyControls가 전략 select와 힌트를 기본 카드에 보여주고, threshold 편집 UI는gui/src/components/CodexAccountPool.tsx안에서CodexAuthAdvancedSettings접힌 영역의CodexAutoSwitchSetting에 있습니다. i18n에도 전략별 설명(accountPool.strategyHintQuota등)과 Advanced용codexAuth.autoSwitchQuotaDesc(threshold 포함)가 이미 갈라져 있어서, “편집은 Advanced, 요약은 기본 면”으로 나누는 구현이 자연스럽습니다. CLI(ocx account current openai --json등)로 값을 보는 우회는 본문 말대로 Providers에서 해석하는 작업과 화면이 다릅니다.이 요청은 #806(전략 의미/카피)과는 별개로, “유효 설정 값이 기본 면에 안 보인다”는 좁은 가시성 이슈입니다. 같은 날 열린 #4521(임계값을 이미 넘긴 계정에 “이 계정을 다음에 사용”이 받아들여졌다가 라우팅이 바로 버리는 문제)과도 맞닿아 있습니다. #4521 리뷰에서도
Quota · 80%요약을 기본 면에 두자고 적어 두었고, 이 이슈가 그 UX 조각을 정식 티켓으로 분리한 형태입니다. types/config 분할과는 무관합니다.제품 우선순위는 “데이터가 틀렸다”보다 “운영자가 정책을 읽기 어렵다” 쪽입니다. 막힌 장애는 아니고, 다만 threshold를 자주 만지는 풀 운영에서는 반복 비용이 있습니다. 구현 범위는 GUI 요약 한 줄 + i18n이면 충분해 보이고, 편집 컨트롤을 Advanced 밖으로 꺼낼 필요는 본문도 없다고 합니다.
라인 -
gui/src/components/AccountPoolStrategyControls.tsx- 전략 이름·힌트만 기본 면에 있다. threshold 숫자는 props로 받지 않는다.라인 -
gui/src/components/CodexAccountPool.tsxCodexAuthAdvancedSettings-CodexAutoSwitchSetting(threshold)이 접힌 영역에만 있다. 본문 관찰과 일치한다.경로/심볼 -
gui/src/components/CodexAutoSwitchSetting.tsx- 전략별 on/off 카피와 threshold 편집이 이미 있다. 기본 면 요약은 여기 문장을 짧게 재사용하면 된다.경로/심볼 -
#4521- 같은 threshold 가시성/정합성 축. 요약 UI를 그 수정 PR에 같이 넣어도 되고, 이 이슈만의 작은 후속 PR로 잘라도 된다.경로/심볼 -
#806- 닫힌 전략 카피 이슈. 중복 닫지 말고 “가시성 후속”으로 링크만 유지하는 편이 맞다.메인테이너의 판단이 필요한 지점
너의 추천
enhancement/account-pool로 유지하고 받는다. 카피는 본문 초안을 출발점으로 하되 기존 i18n 키 의미에 맞출 것. #4521을 고치는 PR이 곧 있으면 그 GUI 변경에 요약을 같이 넣고 이 이슈를 close하고, 아니면 Providers 요약만의 작은 PR로 먼저 랜딩해도 된다.이 댓글은 grok-bot이 작성했습니다
feat(account-pool): display threshold summary with strategy and warn …
feat(account-pool): display threshold summary with strategy and warn …
feat(account-pool): display threshold summary with strategy and warn …
lidge-jun commentedon Sep 16, 2026
Tracking: draft PR #4567 covers this together with #4521.
Still present on
dev:gui/src/components/AccountPoolStrategyControls.tsx:24-40takes no threshold prop, so the strategy control has nothing to display beside it.lidge-jun commentedon Sep 17, 2026
Confirmed still reproducing on
dev@61ee64747b, on both surfaces, and #4567 by @maoxin1234 already implements it -- that is the PR that should close this issue.Where it reproduces today. In the dashboard,
AccountPoolStrategyControlshas no threshold prop at all and the strategy row renders only the label, description, hint and selector (gui/src/components/AccountPoolStrategyControls.tsx:24and:73);CodexPoolStrategySettingprojects only strategy and sticky limit out of/api/codex-auth/active(gui/src/components/CodexPoolStrategySetting.tsx:16), even though that response already carriesautoSwitchThreshold. The configured value is rendered only inside the collapsed Advanced disclosure (gui/src/components/CodexAccountPool.tsx:551intoCodexAutoSwitchSetting.tsx:107), which is exactly the layout the report describes. In the CLI,ocx account strategyreads/api/pool/settings-- a response that does carry the threshold (src/oauth/pool-settings-capability.ts:147) -- and then discards it, printing only strategy or sticky limit (src/cli/account-extended.ts:926). So the value is already on the wire on both paths; only the presentation drops it.The management API is the one surface that is already correct. The canonical
/api/pool/settingscontract co-locatesstrategy,stickyLimitandautoSwitchThresholdonGET,PUTandPATCH(src/server/management/oauth-account-routes.ts:385,:464), andtests/server/account-pool-management-api.test.ts:740pins that uniform key set.Two notes for whoever reviews #4567, neither blocking:
One residual it does not cover. The legacy compatibility write
PUT/PATCH /api/codex-auth/pool-strategyreturns strategy and sticky limit but no threshold (src/codex/auth-api/routes.ts:304), so it is the last response on this path that is inconsistent with the canonical contract. AddingautoSwitchThreshold: runtimeConfig.autoSwitchThreshold ?? 80there would finish the job; it is additive.One hazard to check in review. The GUI seeds
DEFAULT_AUTO_SWITCH_THRESHOLD = 80before hydration (gui/src/hooks/useCodexAutoSwitch.ts:42), so a summary that renders the value must respectautoSwitch.hydratedor it will confidently display80%during loading on an install configured to0or another number. AndAccountPoolStrategyControlsis shared with Anthropic (gui/src/components/provider-workspace/AnthropicAccountPoolSettings.tsx:249), so the threshold prop has to stay optional or both callers must pass it.On whether one PR can honestly close this and #4521 together: #4567 can, and mostly does. Both issues are the same operator confusion -- the threshold is invisible where the strategy is visible, and it silently overrides an action the UI offered. #4567's own description says it only partially addresses #4521, and the part it leaves is the non-dashboard surfaces, which is #4970. Neither of those claims this issue; #4567 should.
feat(account-pool): show what the usage threshold means per strategy (#…
lidge-jun commentedon Sep 18, 2026
Shipped via #4982 at 302c4c3 (carry of #4567). Strategy panel and CLI now show what the usage threshold means per strategy.