fix(codex): current client_version + refresh-aware model sync

Bump client_version to 0.144.6 (above the 0.144.0 gate in codex CLI's
manifest) so /codex/models no longer returns 200 with newest entries
silently filtered out. Add the originator: codex_cli_rs header used by
every other codex call site, and move the entry onto buildOAuthResolver
so token refresh on 401/403 and a warning field on empty results are
wired in, matching gemini-cli and grok-cli.
This commit is contained in:
Nur Ad-Duja
2026-07-20 10:53:16 +07:00
committed by decolua
parent 7c7fae3955
commit d587b2a487

View File

@@ -2,7 +2,7 @@ import { NextResponse } from "next/server";
import { getProviderConnectionById } from "@/models";
import { isOpenAICompatibleProvider, isAnthropicCompatibleProvider } from "@/shared/constants/providers";
import { GEMINI_CONFIG } from "@/lib/oauth/constants/oauth";
import { refreshGoogleToken, updateProviderCredentials } from "@/sse/services/tokenRefresh";
import { refreshGoogleToken, refreshCodexToken, updateProviderCredentials } from "@/sse/services/tokenRefresh";
import { resolveOllamaLocalHost } from "open-sse/config/providers.js";
import { getModelsByProviderId } from "open-sse/config/providerModels.js";
import { resolveKiroModels } from "open-sse/services/kiroModels.js";
@@ -13,6 +13,13 @@ import { resolveConnectionProxyConfig } from "@/lib/network/connectionProxy";
const GEMINI_CLI_MODELS_URL = "https://cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels";
// The /codex/models endpoint gates each entry by minimal_client_version against this
// value, and codex CLI's own manifest (openai/codex codex-rs/models-manager/models.json)
// already requires 0.144.0 for its newest models, so a stale client_version here comes
// back 200 with those entries quietly missing instead of erroring.
const CODEX_CLIENT_VERSION = "0.144.6";
const CODEX_MODELS_URL = `https://chatgpt.com/backend-api/codex/models?client_version=${CODEX_CLIENT_VERSION}`;
const parseOpenAIStyleModels = (data) => {
if (Array.isArray(data)) return data;
return data?.data || data?.models || data?.results || [];
@@ -157,12 +164,20 @@ const PROVIDER_MODELS_CONFIG = {
parseResponse: (data) => data.data || []
},
codex: {
url: "https://chatgpt.com/backend-api/codex/models?client_version=1.0.0",
method: "GET",
headers: { "Content-Type": "application/json", "Accept": "application/json" },
authHeader: "Authorization",
authPrefix: "Bearer ",
parseResponse: parseCodexModels
customResolver: buildOAuthResolver({
refreshFn: (conn) => refreshCodexToken(conn.refreshToken),
fetchFn: (token) => fetch(CODEX_MODELS_URL, {
method: "GET",
headers: {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": `Bearer ${token}`,
"originator": "codex_cli_rs"
}
}),
parseFn: parseCodexModels,
errorLabel: "Failed to fetch Codex models"
})
},
antigravity: {
url: "https://daily-cloudcode-pa.sandbox.googleapis.com/v1internal:models",