Bug Fixes
Manual Code Input disabled during OAuth polling (#201)
The manual code input field — the fallback for when deep-link redirect fails (e.g., Gemini Pro accounts) — was completely non-functional. Both the input field and submit button were gated by the OAuth polling loading state, which stays true for the entire 120-second polling loop. The manual input now uses its own independent loading state and is always usable when visible.
OAuth completion race conditions (#201)
Fixed a race condition where multiple OAuth completion paths (deep-link callback, polling, manual code submit, "already authorized" button) could execute simultaneously, causing double completeOAuth calls and inflated auth counts. Added a completion guard so the first path to finish wins and others bail out. Also removed a duplicate onOAuthCallback listener in the app store that was firing alongside the Dashboard listener.
Wrong test connection model for Qwen (#202)
The "Test Connection" button for Qwen auth files was sending requests with glm-4.5 (a Zhipu GLM model routed via iFlow), causing 502 Bad Gateway. The Qwen and iFlow test models were swapped. Fixed by correcting the mapping: Qwen now uses qwen3-coder-plus, iFlow uses glm-4.5.
Improvements
Provider test model mapping refactored (#202)
Replaced the fragile if/else if chain for test connection model selection with a declarative Record<string, string> map keyed by CLIProxyAPI's canonical provider values. Easier to audit, extend, and prevents future mismatches.