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:55:42 +07:00
committed by decolua
parent 7c7fae3955
commit d587b2a487
+22 -7
View File
@@ -2,7 +2,7 @@ import { NextResponse } from "next/server";
import { getProviderConnectionById } from "@/models"; import { getProviderConnectionById } from "@/models";
import { isOpenAICompatibleProvider, isAnthropicCompatibleProvider } from "@/shared/constants/providers"; import { isOpenAICompatibleProvider, isAnthropicCompatibleProvider } from "@/shared/constants/providers";
import { GEMINI_CONFIG } from "@/lib/oauth/constants/oauth"; 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 { resolveOllamaLocalHost } from "open-sse/config/providers.js";
import { getModelsByProviderId } from "open-sse/config/providerModels.js"; import { getModelsByProviderId } from "open-sse/config/providerModels.js";
import { resolveKiroModels } from "open-sse/services/kiroModels.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"; 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) => { const parseOpenAIStyleModels = (data) => {
if (Array.isArray(data)) return data; if (Array.isArray(data)) return data;
return data?.data || data?.models || data?.results || []; return data?.data || data?.models || data?.results || [];
@@ -157,12 +164,20 @@ const PROVIDER_MODELS_CONFIG = {
parseResponse: (data) => data.data || [] parseResponse: (data) => data.data || []
}, },
codex: { codex: {
url: "https://chatgpt.com/backend-api/codex/models?client_version=1.0.0", customResolver: buildOAuthResolver({
method: "GET", refreshFn: (conn) => refreshCodexToken(conn.refreshToken),
headers: { "Content-Type": "application/json", "Accept": "application/json" }, fetchFn: (token) => fetch(CODEX_MODELS_URL, {
authHeader: "Authorization", method: "GET",
authPrefix: "Bearer ", headers: {
parseResponse: parseCodexModels "Content-Type": "application/json",
"Accept": "application/json",
"Authorization": `Bearer ${token}`,
"originator": "codex_cli_rs"
}
}),
parseFn: parseCodexModels,
errorLabel: "Failed to fetch Codex models"
})
}, },
antigravity: { antigravity: {
url: "https://daily-cloudcode-pa.sandbox.googleapis.com/v1internal:models", url: "https://daily-cloudcode-pa.sandbox.googleapis.com/v1internal:models",