diff --git a/extensions/codex/provider-catalog.ts b/extensions/codex/provider-catalog.ts index 33b6e0442b9..76a4ac4df2b 100644 --- a/extensions/codex/provider-catalog.ts +++ b/extensions/codex/provider-catalog.ts @@ -13,9 +13,9 @@ const DEFAULT_MAX_TOKENS = 128_000; export const FALLBACK_CODEX_MODELS = [ { - id: "gpt-5.4", - model: "gpt-5.4", - displayName: "gpt-5.4", + id: "gpt-5.5", + model: "gpt-5.5", + displayName: "gpt-5.5", description: "Latest frontier agentic coding model.", isDefault: true, inputModalities: ["text", "image"], diff --git a/extensions/codex/provider.test.ts b/extensions/codex/provider.test.ts index 773cc569c7e..71571cab11b 100644 --- a/extensions/codex/provider.test.ts +++ b/extensions/codex/provider.test.ts @@ -17,7 +17,7 @@ function expectStaticFallbackCatalog( result: Awaited>, ) { expect(result.provider.models.map((model) => model.id)).toEqual([ - "gpt-5.4", + "gpt-5.5", "gpt-5.4-mini", "gpt-5.2", ]); @@ -241,7 +241,7 @@ describe("codex provider", () => { expect( result && "provider" in result ? result.provider.models.map((model) => model.id) : [], - ).toEqual(["gpt-5.4", "gpt-5.4-mini", "gpt-5.2"]); + ).toEqual(["gpt-5.5", "gpt-5.4-mini", "gpt-5.2"]); }); it("adds the GPT-5 prompt overlay to Codex provider runs", () => { diff --git a/extensions/codex/provider.ts b/extensions/codex/provider.ts index 6e8e1b40a1f..1c4cf0ee9a8 100644 --- a/extensions/codex/provider.ts +++ b/extensions/codex/provider.ts @@ -110,7 +110,7 @@ export async function buildCodexProviderCatalog( }; } -function resolveCodexDynamicModel(modelId: string): ProviderRuntimeModel | undefined { +function resolveCodexDynamicModel(modelId: string) { const id = modelId.trim(); if (!id) { return undefined; @@ -191,5 +191,7 @@ function isKnownXHighCodexModel(modelId: string): boolean { function isModernCodexModel(modelId: string): boolean { const lower = modelId.trim().toLowerCase(); - return lower === "gpt-5.4" || lower === "gpt-5.4-mini" || lower === "gpt-5.2"; + return ( + lower === "gpt-5.5" || lower === "gpt-5.4" || lower === "gpt-5.4-mini" || lower === "gpt-5.2" + ); } diff --git a/extensions/openai/openai-provider.ts b/extensions/openai/openai-provider.ts index 67adb2f7c91..0eb75ee6dbc 100644 --- a/extensions/openai/openai-provider.ts +++ b/extensions/openai/openai-provider.ts @@ -114,9 +114,7 @@ function normalizeOpenAITransport(model: ProviderRuntimeModel): ProviderRuntimeM }; } -function resolveOpenAIGptForwardCompatModel( - ctx: ProviderResolveDynamicModelContext, -): ProviderRuntimeModel | undefined { +function resolveOpenAIGptForwardCompatModel(ctx: ProviderResolveDynamicModelContext) { const trimmedModelId = ctx.modelId.trim(); const lower = normalizeLowercaseStringOrEmpty(trimmedModelId); let templateIds: readonly string[]; @@ -286,7 +284,7 @@ export function buildOpenAIProvider(): ProviderPlugin { } return { suppress: true, - errorMessage: `Unknown model: ${ctx.provider}/${OPENAI_DIRECT_SPARK_MODEL_ID}. ${OPENAI_DIRECT_SPARK_MODEL_ID} is only supported via openai-codex OAuth. Use openai-codex/${OPENAI_DIRECT_SPARK_MODEL_ID}.`, + errorMessage: `Unknown model: ${ctx.provider}/${OPENAI_DIRECT_SPARK_MODEL_ID}. ${OPENAI_DIRECT_SPARK_MODEL_ID} is only supported through Codex OAuth. Use openai/${OPENAI_DIRECT_SPARK_MODEL_ID} with the Codex OAuth profile.`, }; }, augmentModelCatalog: (ctx) => { diff --git a/src/agents/pi-embedded-runner/model.forward-compat.errors-and-overrides.test.ts b/src/agents/pi-embedded-runner/model.forward-compat.errors-and-overrides.test.ts index 63837087938..ed564cb7e85 100644 --- a/src/agents/pi-embedded-runner/model.forward-compat.errors-and-overrides.test.ts +++ b/src/agents/pi-embedded-runner/model.forward-compat.errors-and-overrides.test.ts @@ -31,7 +31,7 @@ vi.mock("../model-suppression.js", () => ({ ) { return undefined; } - return `Unknown model: ${provider}/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.`; + return `Unknown model: ${provider}/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.`; }, })); @@ -140,7 +140,7 @@ describe("resolveModel forward-compat errors and overrides", () => { expect(result.model).toBeUndefined(); expect(result.error).toBe( - "Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.", + "Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.", ); }); @@ -161,7 +161,7 @@ describe("resolveModel forward-compat errors and overrides", () => { expect(result.model).toBeUndefined(); expect(result.error).toBe( - "Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.", + "Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.", ); }); @@ -174,7 +174,7 @@ describe("resolveModel forward-compat errors and overrides", () => { expect(result.model).toBeUndefined(); expect(result.error).toBe( - "Unknown model: azure-openai-responses/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.", + "Unknown model: azure-openai-responses/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.", ); }); diff --git a/src/agents/pi-embedded-runner/model.test.ts b/src/agents/pi-embedded-runner/model.test.ts index 6c3472177bb..2a3f18a4f30 100644 --- a/src/agents/pi-embedded-runner/model.test.ts +++ b/src/agents/pi-embedded-runner/model.test.ts @@ -13,7 +13,7 @@ vi.mock("../model-suppression.js", () => ({ ) { return undefined; } - return `Unknown model: ${provider}/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.`; + return `Unknown model: ${provider}/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.`; }, })); @@ -1260,7 +1260,7 @@ describe("resolveModel", () => { expect(result.model).toBeUndefined(); expect(result.error).toBe( - "Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported via openai-codex OAuth. Use openai-codex/gpt-5.3-codex-spark.", + "Unknown model: openai/gpt-5.3-codex-spark. gpt-5.3-codex-spark is only supported through Codex OAuth. Use openai/gpt-5.3-codex-spark with the Codex OAuth profile.", ); }); diff --git a/src/plugins/provider-runtime.test-support.ts b/src/plugins/provider-runtime.test-support.ts index b2c9a26e645..3fd7485557f 100644 --- a/src/plugins/provider-runtime.test-support.ts +++ b/src/plugins/provider-runtime.test-support.ts @@ -77,7 +77,9 @@ export function expectCodexBuiltInSuppression( }), ).toMatchObject({ suppress: true, - errorMessage: expect.stringContaining("openai-codex/gpt-5.3-codex-spark"), + errorMessage: expect.stringContaining( + "openai/gpt-5.3-codex-spark with the Codex OAuth profile", + ), }); } diff --git a/src/plugins/provider-runtime.test.ts b/src/plugins/provider-runtime.test.ts index d9e65f5f9a9..da9ffcc75ae 100644 --- a/src/plugins/provider-runtime.test.ts +++ b/src/plugins/provider-runtime.test.ts @@ -134,7 +134,10 @@ function createOpenAiCatalogProviderPlugin( suppressBuiltInModel: ({ provider, modelId }) => (provider === "openai" || provider === "azure-openai-responses") && modelId === "gpt-5.3-codex-spark" - ? { suppress: true, errorMessage: "openai-codex/gpt-5.3-codex-spark" } + ? { + suppress: true, + errorMessage: "openai/gpt-5.3-codex-spark with the Codex OAuth profile", + } : undefined, augmentModelCatalog: () => [ { provider: "openai", id: "gpt-5.4", name: "gpt-5.4" },