From a3e81d2b46c63799bd52c3c5687c422ce7782173 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 22 Aug 2026 21:50:16 +0900 Subject: [PATCH 1/5] fix(coding-agent): retarget OpenAI automatic defaults --- packages/coding-agent/changes.md | 19 ++++++++++++++++ .../coding-agent/src/core/model-resolver.ts | 4 ++-- .../coding-agent/test/model-resolver.test.ts | 22 +++++++++++++------ 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/packages/coding-agent/changes.md b/packages/coding-agent/changes.md index 1817014204..7ee36a073a 100644 --- a/packages/coding-agent/changes.md +++ b/packages/coding-agent/changes.md @@ -1,5 +1,24 @@ # Local fork changes +## Retarget OpenAI automatic defaults to GPT-5.6 Sol (2026-08-22) + +### What changed + +- `packages/coding-agent/src/core/model-resolver.ts`: retargeted the `openai` and `openai-codex` provider defaults from `gpt-5.5` to `gpt-5.6-sol` while retaining GPT-5.5 in catalogs and explicit settings resolution. + +### Why + +- Automatic startup recommendation should follow the current recommended GPT-5.6 Sol model; saved GPT-5.5 selections remain explicitly selectable. + +### Why an extension could not handle it + +- `defaultModelPerProvider` is consumed by core initial-model resolution before extension recommendations are applied. + +### Expected merge conflict zones + +- LOW: the OpenAI provider entries in `packages/coding-agent/src/core/model-resolver.ts`. + + ## Coding-agent dependency refresh and generated install-lock update (2026-08-20) ### What changed diff --git a/packages/coding-agent/src/core/model-resolver.ts b/packages/coding-agent/src/core/model-resolver.ts index 26bf95dff0..0c3f3f43c2 100644 --- a/packages/coding-agent/src/core/model-resolver.ts +++ b/packages/coding-agent/src/core/model-resolver.ts @@ -39,9 +39,9 @@ export const defaultModelPerProvider: Record = { "amazon-bedrock": "us.anthropic.claude-opus-4-6-v1", "ant-ling": "Ring-2.6-1T", anthropic: "claude-opus-4-8", - openai: "gpt-5.5", + openai: "gpt-5.6-sol", "azure-openai-responses": "gpt-5.4", - "openai-codex": "gpt-5.5", + "openai-codex": "gpt-5.6-sol", ollama: "qwen3.5:397b", // Cursor ships no models until its chat protocol is ported; "auto" matches // the Cursor agent's native model auto-selection once models exist. diff --git a/packages/coding-agent/test/model-resolver.test.ts b/packages/coding-agent/test/model-resolver.test.ts index a4a3d8e639..370b95a5e0 100644 --- a/packages/coding-agent/test/model-resolver.test.ts +++ b/packages/coding-agent/test/model-resolver.test.ts @@ -697,8 +697,8 @@ describe("resolveCliModel", () => { describe("default model selection", () => { test("openai defaults track current models", () => { - expect(defaultModelPerProvider.openai).toBe("gpt-5.5"); - expect(defaultModelPerProvider["openai-codex"]).toBe("gpt-5.5"); + expect(defaultModelPerProvider.openai).toBe("gpt-5.6-sol"); + expect(defaultModelPerProvider["openai-codex"]).toBe("gpt-5.6-sol"); }); test("zai, minimax, cerebras, and ant-ling defaults track current models", () => { @@ -929,17 +929,23 @@ describe("default model selection", () => { contextWindow: 128000, maxTokens: 8192, }; + const openAiRecommended = { + ...openAiDefault, + id: "gpt-5.6-sol", + }; const custom: Model<"anthropic-messages"> = { ...openAiDefault, id: "custom-model", provider: "custom", }; const runtime = { - getModels: () => [openAiDefault, custom], + getModels: () => [openAiDefault, openAiRecommended, custom], getModel: (provider: string, modelId: string) => - [openAiDefault, custom].find((candidate) => candidate.provider === provider && candidate.id === modelId), + [openAiDefault, openAiRecommended, custom].find( + (candidate) => candidate.provider === provider && candidate.id === modelId, + ), hasConfiguredAuth: () => true, - getAvailable: async () => [openAiDefault, custom], + getAvailable: async () => [openAiDefault, openAiRecommended, custom], } as unknown as Parameters[0]["modelRuntime"]; const cli = await findInitialModel({ @@ -957,8 +963,8 @@ describe("default model selection", () => { const settings = await findInitialModel({ scopedModels: [], isContinuing: false, - defaultProvider: "custom", - defaultModelId: "custom-model", + defaultProvider: "openai", + defaultModelId: "gpt-5.5", modelRuntime: runtime, }); const providerDefault = await findInitialModel({ @@ -978,7 +984,9 @@ describe("default model selection", () => { expect(cli.provenance).toBe("cli"); expect(scoped.provenance).toBe("scoped"); + expect(settings.model?.id).toBe("gpt-5.5"); expect(settings.provenance).toBe("settings"); + expect(providerDefault.model?.id).toBe("gpt-5.6-sol"); expect(providerDefault.provenance).toBe("provider-default"); expect(firstAvailable.provenance).toBe("first-available"); }); From 17a23392a68f296c3ca8e24fb71987562289a625 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 22 Aug 2026 21:53:25 +0900 Subject: [PATCH 2/5] docs(coding-agent): track OpenAI default retarget --- packages/coding-agent/changes.md | 19 ------------------- packages/coding-agent/src/core/changes.md | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/packages/coding-agent/changes.md b/packages/coding-agent/changes.md index 7ee36a073a..1817014204 100644 --- a/packages/coding-agent/changes.md +++ b/packages/coding-agent/changes.md @@ -1,24 +1,5 @@ # Local fork changes -## Retarget OpenAI automatic defaults to GPT-5.6 Sol (2026-08-22) - -### What changed - -- `packages/coding-agent/src/core/model-resolver.ts`: retargeted the `openai` and `openai-codex` provider defaults from `gpt-5.5` to `gpt-5.6-sol` while retaining GPT-5.5 in catalogs and explicit settings resolution. - -### Why - -- Automatic startup recommendation should follow the current recommended GPT-5.6 Sol model; saved GPT-5.5 selections remain explicitly selectable. - -### Why an extension could not handle it - -- `defaultModelPerProvider` is consumed by core initial-model resolution before extension recommendations are applied. - -### Expected merge conflict zones - -- LOW: the OpenAI provider entries in `packages/coding-agent/src/core/model-resolver.ts`. - - ## Coding-agent dependency refresh and generated install-lock update (2026-08-20) ### What changed diff --git a/packages/coding-agent/src/core/changes.md b/packages/coding-agent/src/core/changes.md index c1bc29b7b6..f2456f767c 100644 --- a/packages/coding-agent/src/core/changes.md +++ b/packages/coding-agent/src/core/changes.md @@ -1,5 +1,23 @@ # changes +## 2026-08-22 - Retarget OpenAI automatic defaults to GPT-5.6 Sol + +### What changed + +- `packages/coding-agent/src/core/model-resolver.ts`: retargeted the `openai` and `openai-codex` provider defaults from `gpt-5.5` to `gpt-5.6-sol` while retaining GPT-5.5 in catalogs and explicit settings resolution. + +### Why + +- Automatic startup recommendation should follow the current recommended GPT-5.6 Sol model; saved GPT-5.5 selections remain explicitly selectable. + +### Why an extension could not handle it + +- `defaultModelPerProvider` is consumed by core initial-model resolution before extension recommendations are applied. + +### Expected merge conflict zones + +- LOW: the OpenAI provider entries in `packages/coding-agent/src/core/model-resolver.ts`. + ## 2026-08-22 - emit agent_idle after settlement-deferred turns resolve ### What changed From 6698c0f077e4227045957fe0d4c736c6f8f9630d Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 22 Aug 2026 21:54:21 +0900 Subject: [PATCH 3/5] docs(changelog): note OpenAI default retarget --- packages/coding-agent/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 629ab2abf3..2b77152c24 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -16,6 +16,8 @@ ### Changed +- Automatic startup selection for the built-in OpenAI and Codex providers now defaults to GPT-5.6 Sol instead of GPT-5.5. Explicitly saved GPT-5.5 selections remain supported. + ### Removed ## [2026.8.22] - 2026-08-22 From 6b5d0214e03ba3a74f4afca8f5d9c10d89aefcf7 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 22 Aug 2026 21:57:34 +0900 Subject: [PATCH 4/5] test(coding-agent): isolate provider-default regression --- .../coding-agent/test/model-resolver.test.ts | 24 +++++-------- .../provider-default-model-selection.test.ts | 35 +++++++++++++++++++ 2 files changed, 43 insertions(+), 16 deletions(-) create mode 100644 packages/coding-agent/test/provider-default-model-selection.test.ts diff --git a/packages/coding-agent/test/model-resolver.test.ts b/packages/coding-agent/test/model-resolver.test.ts index 370b95a5e0..e9cf00a127 100644 --- a/packages/coding-agent/test/model-resolver.test.ts +++ b/packages/coding-agent/test/model-resolver.test.ts @@ -929,23 +929,17 @@ describe("default model selection", () => { contextWindow: 128000, maxTokens: 8192, }; - const openAiRecommended = { - ...openAiDefault, - id: "gpt-5.6-sol", - }; const custom: Model<"anthropic-messages"> = { ...openAiDefault, - id: "custom-model", - provider: "custom", + id: "grok-4.5", + provider: "xai", }; const runtime = { - getModels: () => [openAiDefault, openAiRecommended, custom], + getModels: () => [openAiDefault, custom], getModel: (provider: string, modelId: string) => - [openAiDefault, openAiRecommended, custom].find( - (candidate) => candidate.provider === provider && candidate.id === modelId, - ), + [openAiDefault, custom].find((candidate) => candidate.provider === provider && candidate.id === modelId), hasConfiguredAuth: () => true, - getAvailable: async () => [openAiDefault, openAiRecommended, custom], + getAvailable: async () => [openAiDefault, custom], } as unknown as Parameters[0]["modelRuntime"]; const cli = await findInitialModel({ @@ -963,8 +957,8 @@ describe("default model selection", () => { const settings = await findInitialModel({ scopedModels: [], isContinuing: false, - defaultProvider: "openai", - defaultModelId: "gpt-5.5", + defaultProvider: "xai", + defaultModelId: "grok-4.5", modelRuntime: runtime, }); const providerDefault = await findInitialModel({ @@ -974,7 +968,7 @@ describe("default model selection", () => { }); const firstAvailableRuntime = { ...runtime, - getAvailable: async () => [custom], + getAvailable: async () => [openAiDefault], } as unknown as Parameters[0]["modelRuntime"]; const firstAvailable = await findInitialModel({ scopedModels: [], @@ -984,9 +978,7 @@ describe("default model selection", () => { expect(cli.provenance).toBe("cli"); expect(scoped.provenance).toBe("scoped"); - expect(settings.model?.id).toBe("gpt-5.5"); expect(settings.provenance).toBe("settings"); - expect(providerDefault.model?.id).toBe("gpt-5.6-sol"); expect(providerDefault.provenance).toBe("provider-default"); expect(firstAvailable.provenance).toBe("first-available"); }); diff --git a/packages/coding-agent/test/provider-default-model-selection.test.ts b/packages/coding-agent/test/provider-default-model-selection.test.ts new file mode 100644 index 0000000000..fb7abe31cb --- /dev/null +++ b/packages/coding-agent/test/provider-default-model-selection.test.ts @@ -0,0 +1,35 @@ +import { getModels } from "@earendil-works/pi-ai/compat"; +import { describe, expect, test } from "vitest"; +import { findInitialModel } from "../src/core/model-resolver.ts"; + +describe("OpenAI provider defaults", () => { + test("prefers GPT-5.6 Sol automatically while preserving explicit GPT-5.5", async () => { + const openAiModels = getModels("openai"); + const codexModels = getModels("openai-codex"); + const availableModels = [ + openAiModels.find((model) => model.id === "gpt-5.6-sol"), + codexModels.find((model) => model.id === "gpt-5.6-sol"), + codexModels.find((model) => model.id === "gpt-5.5"), + ].filter((model) => model !== undefined); + const runtime = { + getAvailableSnapshot: () => availableModels, + getModel: (provider: string, modelId: string) => + availableModels.find((model) => model.provider === provider && model.id === modelId), + hasConfiguredAuth: () => true, + } as unknown as Parameters[0]["modelRuntime"]; + + const automatic = await findInitialModel({ scopedModels: [], isContinuing: false, modelRuntime: runtime }); + const explicit = await findInitialModel({ + scopedModels: [], + isContinuing: false, + defaultProvider: "openai-codex", + defaultModelId: "gpt-5.5", + modelRuntime: runtime, + }); + + expect(automatic.model?.id).toBe("gpt-5.6-sol"); + expect(automatic.provenance).toBe("provider-default"); + expect(explicit.model?.id).toBe("gpt-5.5"); + expect(explicit.provenance).toBe("settings"); + }); +}); From dda31057dfd130a89231002f4a2ee2b573a7c758 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 22 Aug 2026 22:06:42 +0900 Subject: [PATCH 5/5] test(coding-agent): update post-auth OpenAI default --- .../test/suite/interactive-mode-scoped-settings.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/coding-agent/test/suite/interactive-mode-scoped-settings.test.ts b/packages/coding-agent/test/suite/interactive-mode-scoped-settings.test.ts index 32f6c40e8b..742e11729b 100644 --- a/packages/coding-agent/test/suite/interactive-mode-scoped-settings.test.ts +++ b/packages/coding-agent/test/suite/interactive-mode-scoped-settings.test.ts @@ -117,7 +117,7 @@ describe("InteractiveMode scoped-setting caller compatibility", () => { it("keeps post-auth default model selection on the global-setting setter", async () => { // Given: authentication completes while the session still has the unknown placeholder model. - const defaultModel = { provider: "openai", id: "gpt-5.5" }; + const defaultModel = { provider: "openai", id: "gpt-5.6-sol" }; const setModel = vi.fn(async () => undefined); const setSessionModel = vi.fn(async () => undefined); const fakeThis = {