fix(oauth): send Codex client version header on upstream requests
Upstream gates newer models on a version header. Attach resolve_codex_version() when non-empty so completions match /models. Fixes #1765
axelray-dev committed
Jul 16, 2026 at 03:44 UTC
01def8603ae9a3eecd3d1f50d9a1fa00bec3c54d
2 files changed
+12
-1
plugins/_oauth/helpers/codex.py
+3
@@ -599,6 +599,9 @@ def request_codex(
599
"thread-id": metadata["thread_id"],
600
}
601
)
602
+ client_version = resolve_codex_version()
603
+ if client_version:
604
+ request_headers["version"] = client_version
605
606
return requests.request(
607
method,
tests/test_oauth_codex.py
+9
-1
@@ -301,7 +301,10 @@ def test_prepare_responses_body_sends_empty_continuation_input_as_list(monkeypat
301
assert body["previous_response_id"] == "resp_1"
302
303
304
-def test_request_codex_sends_current_codex_headers_from_body(monkeypatch):
304
+@pytest.mark.parametrize("client_version", ["0.142.5", ""])
305
+def test_request_codex_sends_current_codex_headers_from_body(
306
+ monkeypatch, client_version
307
+):
308
calls = []
309
body = json.dumps(
310
{
@@ -333,6 +336,7 @@ def test_request_codex_sends_current_codex_headers_from_body(monkeypatch):
336
account_id="account-1",
337
),
338
)
339
+ monkeypatch.setattr(codex, "resolve_codex_version", lambda: client_version)
340
341
def fake_request(method, target, headers, data, params, timeout, stream):
342
calls.append(
@@ -369,6 +373,10 @@ def test_request_codex_sends_current_codex_headers_from_body(monkeypatch):
373
assert call["headers"]["session-id"] == "session-1"
374
assert call["headers"]["thread-id"] == "thread-1"
375
assert call["headers"]["x-codex-window-id"] == "agent-zero"
376
+ if client_version:
377
+ assert call["headers"]["version"] == "0.142.5"
378
+ else:
379
+ assert "version" not in call["headers"]
380
381
382
def test_chat_messages_to_response_body_preserves_image_parts_for_responses():