From 4dbe8b7bdd06d1cc818ba4745bbe3a860290e325 Mon Sep 17 00:00:00 2001 From: Freeman Date: Fri, 10 Jul 2026 14:10:21 +0100 Subject: [PATCH 1/3] fix(openai): apply codex limits to gpt-5.6 --- packages/opencode/src/plugin/openai/codex.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/opencode/src/plugin/openai/codex.ts b/packages/opencode/src/plugin/openai/codex.ts index f14d1269769e..0aad6287ca41 100644 --- a/packages/opencode/src/plugin/openai/codex.ts +++ b/packages/opencode/src/plugin/openai/codex.ts @@ -303,6 +303,12 @@ export async function CodexAuthPlugin(input: PluginInput, options: CodexAuthPlug input: 272_000, output: 128_000, } + : model.id.includes("gpt-5.6") + ? { + context: 372_000, + input: 244_000, + output: 128_000, + } : model.limit, }, ]), From 6834fbe779ff666714baa333b8a70343bb80343d Mon Sep 17 00:00:00 2001 From: Freeman Date: Fri, 10 Jul 2026 14:10:21 +0100 Subject: [PATCH 2/3] test(openai): cover codex oauth model limits --- packages/opencode/test/plugin/codex.test.ts | 24 +++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/opencode/test/plugin/codex.test.ts b/packages/opencode/test/plugin/codex.test.ts index 7142bb3e20c9..a9ae1d99125a 100644 --- a/packages/opencode/test/plugin/codex.test.ts +++ b/packages/opencode/test/plugin/codex.test.ts @@ -149,6 +149,30 @@ describe("plugin.codex", () => { await enabled.dispose?.() }) + test("uses Codex context limits for OAuth GPT models", async () => { + const hooks = await CodexAuthPlugin({} as never) + const limit = { context: 1_050_000, input: 922_000, output: 128_000 } + const provider = { + models: Object.fromEntries( + ["gpt-5.4", "gpt-5.5", "gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"].map((id) => [ + id, + { id, api: { id }, limit, cost: {} }, + ]), + ), + } + + const models = await hooks.provider!.models!(provider as never, { auth: { type: "oauth" } } as never) + + expect(models["gpt-5.4"]?.limit).toEqual(limit) + expect(models["gpt-5.5"]?.limit).toEqual({ context: 400_000, input: 272_000, output: 128_000 }) + expect(models["gpt-5.6-sol"]?.limit).toEqual({ context: 372_000, input: 244_000, output: 128_000 }) + expect(models["gpt-5.6-terra"]?.limit).toEqual({ context: 372_000, input: 244_000, output: 128_000 }) + expect(models["gpt-5.6-luna"]?.limit).toEqual({ context: 372_000, input: 244_000, output: 128_000 }) + expect(await hooks.provider!.models!(provider as never, { auth: { type: "api" } } as never)).toBe( + provider.models as never, + ) + }) + test("deduplicates concurrent Codex token refreshes", async () => { let auth = { type: "oauth" as const, From abc5bf44f75ac5c80aced8bee931f7a3e09eebaa Mon Sep 17 00:00:00 2001 From: Freeman Date: Fri, 10 Jul 2026 14:17:03 +0100 Subject: [PATCH 3/3] fix(openai): align gpt-5.6 input budget --- packages/opencode/src/plugin/openai/codex.ts | 4 ++-- packages/opencode/test/plugin/codex.test.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/opencode/src/plugin/openai/codex.ts b/packages/opencode/src/plugin/openai/codex.ts index 0aad6287ca41..8261895e33d6 100644 --- a/packages/opencode/src/plugin/openai/codex.ts +++ b/packages/opencode/src/plugin/openai/codex.ts @@ -305,8 +305,8 @@ export async function CodexAuthPlugin(input: PluginInput, options: CodexAuthPlug } : model.id.includes("gpt-5.6") ? { - context: 372_000, - input: 244_000, + context: 500_000, + input: 372_000, output: 128_000, } : model.limit, diff --git a/packages/opencode/test/plugin/codex.test.ts b/packages/opencode/test/plugin/codex.test.ts index a9ae1d99125a..0d789bb42b5a 100644 --- a/packages/opencode/test/plugin/codex.test.ts +++ b/packages/opencode/test/plugin/codex.test.ts @@ -165,9 +165,9 @@ describe("plugin.codex", () => { expect(models["gpt-5.4"]?.limit).toEqual(limit) expect(models["gpt-5.5"]?.limit).toEqual({ context: 400_000, input: 272_000, output: 128_000 }) - expect(models["gpt-5.6-sol"]?.limit).toEqual({ context: 372_000, input: 244_000, output: 128_000 }) - expect(models["gpt-5.6-terra"]?.limit).toEqual({ context: 372_000, input: 244_000, output: 128_000 }) - expect(models["gpt-5.6-luna"]?.limit).toEqual({ context: 372_000, input: 244_000, output: 128_000 }) + expect(models["gpt-5.6-sol"]?.limit).toEqual({ context: 500_000, input: 372_000, output: 128_000 }) + expect(models["gpt-5.6-terra"]?.limit).toEqual({ context: 500_000, input: 372_000, output: 128_000 }) + expect(models["gpt-5.6-luna"]?.limit).toEqual({ context: 500_000, input: 372_000, output: 128_000 }) expect(await hooks.provider!.models!(provider as never, { auth: { type: "api" } } as never)).toBe( provider.models as never, )