From 708891dabe5d4f37c76a0de63dc353cdf05902b0 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 24 Apr 2026 16:17:44 +0900 Subject: [PATCH] test: fix stale expectations after gpt-5.5 model promotion Updates test expectations across agent, cli, shared, plugin, and tools tests to match gpt-5.5 as the new default for oracle, hephaestus, and deep agents. Includes snapshot updates for model-fallback tests. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/agents/hephaestus/agent.test.ts | 14 +- src/agents/utils.test.ts | 14 +- .../__snapshots__/model-fallback.test.ts.snap | 126 +++++++++--------- .../generate-omo-config.test.ts | 4 +- src/cli/model-fallback.test.ts | 12 +- src/plugin-config.test.ts | 34 ++--- src/plugin-handlers/config-handler.test.ts | 8 +- src/shared/agent-variant.test.ts | 6 +- src/shared/migration.test.ts | 16 +-- src/shared/model-requirements.test.ts | 14 +- src/tools/delegate-task/tools.test.ts | 13 +- 11 files changed, 129 insertions(+), 132 deletions(-) diff --git a/src/agents/hephaestus/agent.test.ts b/src/agents/hephaestus/agent.test.ts index 0ba99ce9d..f7d1087f6 100644 --- a/src/agents/hephaestus/agent.test.ts +++ b/src/agents/hephaestus/agent.test.ts @@ -23,7 +23,7 @@ describe("getHephaestusPromptSource", () => { expect(source3).toBe("gpt-5-4"); }); - test("returns 'gpt-5-4' for gpt-5.5 models", () => { + test("returns 'gpt-5-5' for gpt-5.5 models", () => { // given const model1 = "openai/gpt-5.5"; const model2 = "openai/gpt-5-5"; @@ -35,9 +35,9 @@ describe("getHephaestusPromptSource", () => { const source3 = getHephaestusPromptSource(model3); // then - expect(source1).toBe("gpt-5-4"); - expect(source2).toBe("gpt-5-4"); - expect(source3).toBe("gpt-5-4"); + expect(source1).toBe("gpt-5-5"); + expect(source2).toBe("gpt-5-5"); + expect(source3).toBe("gpt-5-5"); }); test("returns 'gpt-5-3-codex' for GPT 5.3 Codex models", () => { @@ -113,7 +113,7 @@ describe("getHephaestusPrompt", () => { expect(prompt).toContain(""); }); - test("GPT 5.5 model returns GPT-5.4 optimized prompt", () => { + test("GPT 5.5 model returns GPT-5.5 optimized prompt", () => { // given const model = "openai/gpt-5.5"; @@ -122,8 +122,8 @@ describe("getHephaestusPrompt", () => { // then expect(prompt).toContain("You build context by examining"); - expect(prompt).toContain("Never chain together bash commands"); - expect(prompt).toContain(""); + expect(prompt).toContain("Forbidden stops"); + expect(prompt).toContain("Three-attempt failure protocol"); }); test("GPT 5.3-codex model returns GPT-5.3 prompt", () => { diff --git a/src/agents/utils.test.ts b/src/agents/utils.test.ts index bd8bb5740..74e1145b3 100644 --- a/src/agents/utils.test.ts +++ b/src/agents/utils.test.ts @@ -196,8 +196,8 @@ describe("createBuiltinAgents with model overrides", () => { // #when const agents = await createBuiltinAgents([], {}, undefined, TEST_DEFAULT_MODEL, undefined, undefined, [], undefined, undefined) - // #then - oracle resolves via connected cache fallback to openai/gpt-5.4 (not system default) - expect(agents.oracle.model).toBe("openai/gpt-5.4") + // #then - oracle resolves via connected cache fallback to openai/gpt-5.5 (not system default) + expect(agents.oracle.model).toBe("openai/gpt-5.5") expect(agents.oracle.reasoningEffort).toBe("medium") expect(agents.oracle.thinking).toBeUndefined() cacheSpy.mockRestore?.() @@ -223,14 +223,14 @@ describe("createBuiltinAgents with model overrides", () => { const providerModelsSpy = spyOn(connectedProvidersCache, "readProviderModelsCache").mockReturnValue(null) const fetchSpy = spyOn(shared, "fetchAvailableModels").mockResolvedValue(new Set()) const overrides = { - oracle: { model: "openai/gpt-5.4" }, + oracle: { model: "openai/gpt-5.5" }, } // #when const agents = await createBuiltinAgents([], overrides, undefined, TEST_DEFAULT_MODEL, undefined, undefined, [], undefined, undefined) // #then - expect(agents.oracle.model).toBe("openai/gpt-5.4") + expect(agents.oracle.model).toBe("openai/gpt-5.5") expect(agents.oracle.reasoningEffort).toBe("medium") expect(agents.oracle.textVerbosity).toBe("high") expect(agents.oracle.thinking).toBeUndefined() @@ -524,7 +524,7 @@ describe("createBuiltinAgents without systemDefaultModel", () => { // #then - connected cache enables model resolution despite no systemDefaultModel expect(agents.oracle).toBeDefined() - expect(agents.oracle.model).toBe("openai/gpt-5.4") + expect(agents.oracle.model).toBe("openai/gpt-5.5") cacheSpy.mockRestore?.() providerModelsSpy.mockRestore() fetchSpy.mockRestore() @@ -541,7 +541,7 @@ describe("createBuiltinAgents without systemDefaultModel", () => { // #then expect(agents.oracle).toBeDefined() - expect(agents.oracle.model).toBe("openai/gpt-5.4") + expect(agents.oracle.model).toBe("openai/gpt-5.5") } finally { fetchSpy.mockRestore() cacheSpy.mockRestore() @@ -689,7 +689,7 @@ describe("createBuiltinAgents with requiresProvider gating (hephaestus)", () => // #then expect(agents.hephaestus).toBeDefined() - expect(agents.hephaestus.model).toBe("openai/gpt-5.4") + expect(agents.hephaestus.model).toBe("openai/gpt-5.5") } finally { cacheSpy.mockRestore() fetchSpy.mockRestore() diff --git a/src/cli/__snapshots__/model-fallback.test.ts.snap b/src/cli/__snapshots__/model-fallback.test.ts.snap index ddc9a60a0..04199a607 100644 --- a/src/cli/__snapshots__/model-fallback.test.ts.snap +++ b/src/cli/__snapshots__/model-fallback.test.ts.snap @@ -209,7 +209,7 @@ exports[`generateModelConfig single native provider uses OpenAI models when only "model": "openai/gpt-5.4-mini-fast", }, "hephaestus": { - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "librarian": { @@ -233,7 +233,7 @@ exports[`generateModelConfig single native provider uses OpenAI models when only "variant": "medium", }, "oracle": { - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "high", }, "prometheus": { @@ -255,7 +255,7 @@ exports[`generateModelConfig single native provider uses OpenAI models when only "variant": "xhigh", }, "deep": { - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "quick": { @@ -297,7 +297,7 @@ exports[`generateModelConfig single native provider uses OpenAI models with isMa "model": "openai/gpt-5.4-mini-fast", }, "hephaestus": { - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "librarian": { @@ -321,7 +321,7 @@ exports[`generateModelConfig single native provider uses OpenAI models with isMa "variant": "medium", }, "oracle": { - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "high", }, "prometheus": { @@ -343,7 +343,7 @@ exports[`generateModelConfig single native provider uses OpenAI models with isMa "variant": "xhigh", }, "deep": { - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "quick": { @@ -526,7 +526,7 @@ exports[`generateModelConfig all native providers uses preferred models from fal "model": "openai/gpt-5.4-mini-fast", }, "hephaestus": { - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "librarian": { @@ -584,7 +584,7 @@ exports[`generateModelConfig all native providers uses preferred models from fal "variant": "max", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "high", }, "prometheus": { @@ -645,7 +645,7 @@ exports[`generateModelConfig all native providers uses preferred models from fal "variant": "high", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "quick": { @@ -744,7 +744,7 @@ exports[`generateModelConfig all native providers uses preferred models with isM "model": "openai/gpt-5.4-mini-fast", }, "hephaestus": { - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "librarian": { @@ -802,7 +802,7 @@ exports[`generateModelConfig all native providers uses preferred models with isM "variant": "max", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "high", }, "prometheus": { @@ -863,7 +863,7 @@ exports[`generateModelConfig all native providers uses preferred models with isM "variant": "high", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "quick": { @@ -957,7 +957,7 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models when on "model": "opencode/claude-haiku-4-5", }, "hephaestus": { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, "metis": { @@ -1004,7 +1004,7 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models when on "variant": "max", }, ], - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "high", }, "prometheus": { @@ -1077,7 +1077,7 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models when on "variant": "high", }, ], - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, "quick": { @@ -1179,7 +1179,7 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models with is "model": "opencode/claude-haiku-4-5", }, "hephaestus": { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, "metis": { @@ -1226,7 +1226,7 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models with is "variant": "max", }, ], - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "high", }, "prometheus": { @@ -1299,7 +1299,7 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models with is "variant": "high", }, ], - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, "quick": { @@ -1400,7 +1400,7 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models when "model": "github-copilot/gpt-5-mini", }, "hephaestus": { - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, "metis": { @@ -1441,7 +1441,7 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models when "variant": "max", }, ], - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "high", }, "prometheus": { @@ -1502,7 +1502,7 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models when "variant": "high", }, ], - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, "quick": { @@ -1581,7 +1581,7 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models with "model": "github-copilot/gpt-5-mini", }, "hephaestus": { - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, "metis": { @@ -1622,7 +1622,7 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models with "variant": "max", }, ], - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "high", }, "prometheus": { @@ -1683,7 +1683,7 @@ exports[`generateModelConfig fallback providers uses GitHub Copilot models with "variant": "high", }, ], - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, "quick": { @@ -1897,7 +1897,7 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + OpenCode Zen "model": "anthropic/claude-haiku-4-5", }, "hephaestus": { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, "metis": { @@ -1956,7 +1956,7 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + OpenCode Zen "variant": "max", }, ], - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "high", }, "prometheus": { @@ -2048,7 +2048,7 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + OpenCode Zen "variant": "high", }, ], - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, "quick": { @@ -2176,11 +2176,11 @@ exports[`generateModelConfig mixed provider scenarios uses OpenAI + Copilot comb "hephaestus": { "fallback_models": [ { - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "librarian": { @@ -2238,7 +2238,7 @@ exports[`generateModelConfig mixed provider scenarios uses OpenAI + Copilot comb "oracle": { "fallback_models": [ { - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "high", }, { @@ -2250,7 +2250,7 @@ exports[`generateModelConfig mixed provider scenarios uses OpenAI + Copilot comb "variant": "max", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "high", }, "prometheus": { @@ -2318,7 +2318,7 @@ exports[`generateModelConfig mixed provider scenarios uses OpenAI + Copilot comb "deep": { "fallback_models": [ { - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, { @@ -2330,7 +2330,7 @@ exports[`generateModelConfig mixed provider scenarios uses OpenAI + Copilot comb "variant": "high", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "quick": { @@ -2653,11 +2653,11 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider "hephaestus": { "fallback_models": [ { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, ], - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, "librarian": { @@ -2733,7 +2733,7 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider "oracle": { "fallback_models": [ { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "high", }, { @@ -2753,7 +2753,7 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider "variant": "max", }, ], - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "high", }, "prometheus": { @@ -2858,7 +2858,7 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider "deep": { "fallback_models": [ { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, { @@ -2878,7 +2878,7 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider "variant": "high", }, ], - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, "quick": { @@ -3051,15 +3051,15 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe "hephaestus": { "fallback_models": [ { - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "librarian": { @@ -3168,11 +3168,11 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe "oracle": { "fallback_models": [ { - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "high", }, { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "high", }, { @@ -3200,7 +3200,7 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe "variant": "max", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "high", }, "prometheus": { @@ -3342,11 +3342,11 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe "deep": { "fallback_models": [ { - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, { @@ -3374,7 +3374,7 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe "variant": "high", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "quick": { @@ -3602,15 +3602,15 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is "hephaestus": { "fallback_models": [ { - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "librarian": { @@ -3719,11 +3719,11 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is "oracle": { "fallback_models": [ { - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "high", }, { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "high", }, { @@ -3751,7 +3751,7 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is "variant": "max", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "high", }, "prometheus": { @@ -3893,11 +3893,11 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is "deep": { "fallback_models": [ { - "model": "github-copilot/gpt-5.4", + "model": "github-copilot/gpt-5.5", "variant": "medium", }, { - "model": "opencode/gpt-5.4", + "model": "opencode/gpt-5.5", "variant": "medium", }, { @@ -3925,7 +3925,7 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is "variant": "high", }, ], - "model": "openai/gpt-5.4", + "model": "openai/gpt-5.5", "variant": "medium", }, "quick": { @@ -4147,7 +4147,7 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin "model": "vercel/minimax/minimax-m2.7-highspeed", }, "hephaestus": { - "model": "vercel/openai/gpt-5.4", + "model": "vercel/openai/gpt-5.5", "variant": "medium", }, "librarian": { @@ -4223,7 +4223,7 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin "model": "vercel/zai/glm-5", }, ], - "model": "vercel/openai/gpt-5.4", + "model": "vercel/openai/gpt-5.5", "variant": "high", }, "prometheus": { @@ -4299,7 +4299,7 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin "variant": "high", }, ], - "model": "vercel/openai/gpt-5.4", + "model": "vercel/openai/gpt-5.5", "variant": "medium", }, "quick": { @@ -4437,7 +4437,7 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin "model": "vercel/minimax/minimax-m2.7-highspeed", }, "hephaestus": { - "model": "vercel/openai/gpt-5.4", + "model": "vercel/openai/gpt-5.5", "variant": "medium", }, "librarian": { @@ -4513,7 +4513,7 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin "model": "vercel/zai/glm-5", }, ], - "model": "vercel/openai/gpt-5.4", + "model": "vercel/openai/gpt-5.5", "variant": "high", }, "prometheus": { @@ -4589,7 +4589,7 @@ exports[`generateModelConfig Vercel AI Gateway provider uses vercel/ model strin "variant": "high", }, ], - "model": "vercel/openai/gpt-5.4", + "model": "vercel/openai/gpt-5.5", "variant": "medium", }, "quick": { diff --git a/src/cli/config-manager/generate-omo-config.test.ts b/src/cli/config-manager/generate-omo-config.test.ts index 8b4a1dde1..bebf2f94a 100644 --- a/src/cli/config-manager/generate-omo-config.test.ts +++ b/src/cli/config-manager/generate-omo-config.test.ts @@ -98,7 +98,7 @@ describe("generateOmoConfig - model fallback system", () => { //#then expect((result.agents as Record).sisyphus.model).toBe("openai/gpt-5.4") expect((result.agents as Record).sisyphus.variant).toBe("medium") - expect((result.agents as Record).oracle.model).toBe("openai/gpt-5.4") + expect((result.agents as Record).oracle.model).toBe("openai/gpt-5.5") expect((result.agents as Record)['multimodal-looker'].model).toBe("openai/gpt-5.4") }) @@ -138,7 +138,7 @@ describe("generateOmoConfig - model fallback system", () => { variant: "medium", }, ]) - expect(categories.deep.model).toBe("openai/gpt-5.4") + expect(categories.deep.model).toBe("openai/gpt-5.5") expect(categories.deep.fallback_models).toEqual([ { model: "anthropic/claude-opus-4-7", diff --git a/src/cli/model-fallback.test.ts b/src/cli/model-fallback.test.ts index ec27d40c6..93ef1677b 100644 --- a/src/cli/model-fallback.test.ts +++ b/src/cli/model-fallback.test.ts @@ -461,11 +461,11 @@ describe("generateModelConfig", () => { const result = generateModelConfig(config) // #then - expect(result.agents?.hephaestus?.model).toBe("openai/gpt-5.4") + expect(result.agents?.hephaestus?.model).toBe("openai/gpt-5.5") expect(result.agents?.hephaestus?.variant).toBe("medium") }) - test("Hephaestus falls back to Copilot GPT-5.4 when only Copilot is available", () => { + test("Hephaestus falls back to Copilot GPT-5.5 when only Copilot is available", () => { // #given const config = createConfig({ hasCopilot: true }) @@ -474,7 +474,7 @@ describe("generateModelConfig", () => { // #then expect(result.agents?.hephaestus).toEqual({ - model: "github-copilot/gpt-5.4", + model: "github-copilot/gpt-5.5", variant: "medium", }) }) @@ -487,7 +487,7 @@ describe("generateModelConfig", () => { const result = generateModelConfig(config) // #then - expect(result.agents?.hephaestus?.model).toBe("opencode/gpt-5.4") + expect(result.agents?.hephaestus?.model).toBe("opencode/gpt-5.5") expect(result.agents?.hephaestus?.variant).toBe("medium") }) @@ -656,8 +656,8 @@ describe("generateModelConfig", () => { // #when generateModelConfig is called const result = generateModelConfig(config) - // #then hephaestus should be created with gateway-routed gpt-5.4 - expect(result.agents?.hephaestus?.model).toBe("vercel/openai/gpt-5.4") + // #then hephaestus should be created with gateway-routed gpt-5.5 + expect(result.agents?.hephaestus?.model).toBe("vercel/openai/gpt-5.5") }) test("native providers take priority over gateway", () => { diff --git a/src/plugin-config.test.ts b/src/plugin-config.test.ts index 70cee2fce..62de92458 100644 --- a/src/plugin-config.test.ts +++ b/src/plugin-config.test.ts @@ -103,7 +103,7 @@ describe("mergeConfigs", () => { it("should deep merge agents", () => { const base = createConfig({ agents: { - oracle: { model: "openai/gpt-5.4" }, + oracle: { model: "openai/gpt-5.5" }, }, }); @@ -116,7 +116,7 @@ describe("mergeConfigs", () => { const result = mergeConfigs(base, override); - expect(result.agents?.oracle).toMatchObject({ model: "openai/gpt-5.4" }); + expect(result.agents?.oracle).toMatchObject({ model: "openai/gpt-5.5" }); expect(result.agents?.oracle?.temperature).toBe(0.5); expect(result.agents?.explore).toMatchObject({ model: "anthropic/claude-haiku-4-5" }); }); @@ -183,7 +183,7 @@ describe("parseConfigPartially", () => { it("should return the full config when everything is valid", () => { const rawConfig = { agents: { - oracle: { model: "openai/gpt-5.4" }, + oracle: { model: "openai/gpt-5.5" }, momus: { model: "openai/gpt-5.4" }, }, disabled_hooks: ["comment-checker"], @@ -192,7 +192,7 @@ describe("parseConfigPartially", () => { const result = parseConfigPartially(rawConfig); expect(result).not.toBeNull(); - expect(result!.agents?.oracle).toMatchObject({ model: "openai/gpt-5.4" }); + expect(result!.agents?.oracle).toMatchObject({ model: "openai/gpt-5.5" }); expect(result!.agents?.momus).toMatchObject({ model: "openai/gpt-5.4" }); expect(result!.disabled_hooks).toEqual(["comment-checker"]); }); @@ -206,7 +206,7 @@ describe("parseConfigPartially", () => { it("should preserve valid agent overrides when another section is invalid", () => { const rawConfig = { agents: { - oracle: { model: "openai/gpt-5.4" }, + oracle: { model: "openai/gpt-5.5" }, momus: { model: "openai/gpt-5.4" }, prometheus: { permission: { @@ -227,7 +227,7 @@ describe("parseConfigPartially", () => { it("should preserve valid agents when a non-agent section is invalid", () => { const rawConfig = { agents: { - oracle: { model: "openai/gpt-5.4" }, + oracle: { model: "openai/gpt-5.5" }, }, disabled_hooks: ["not-a-real-hook"], }; @@ -235,7 +235,7 @@ describe("parseConfigPartially", () => { const result = parseConfigPartially(rawConfig); expect(result).not.toBeNull(); - expect(result!.agents?.oracle).toMatchObject({ model: "openai/gpt-5.4" }); + expect(result!.agents?.oracle).toMatchObject({ model: "openai/gpt-5.5" }); expect(result!.disabled_hooks).toEqual(["not-a-real-hook"]); }); }); @@ -286,7 +286,7 @@ describe("parseConfigPartially", () => { it("should ignore unknown keys and return valid sections", () => { const rawConfig = { agents: { - oracle: { model: "openai/gpt-5.4" }, + oracle: { model: "openai/gpt-5.5" }, }, some_future_key: { foo: "bar" }, }; @@ -294,7 +294,7 @@ describe("parseConfigPartially", () => { const result = parseConfigPartially(rawConfig); expect(result).not.toBeNull(); - expect(result!.agents?.oracle).toMatchObject({ model: "openai/gpt-5.4" }); + expect(result!.agents?.oracle).toMatchObject({ model: "openai/gpt-5.5" }); expect((result as Record)["some_future_key"]).toBeUndefined(); }); }); @@ -344,7 +344,7 @@ describe("loadPluginConfig", () => { tempDirs.push(rootDir) mkdirSync(userConfigDir, { recursive: true }) mkdirSync(projectConfigDir, { recursive: true }) - writeFileSync(legacyConfigPath, JSON.stringify({ agents: { oracle: { model: "openai/gpt-5.4" } } })) + writeFileSync(legacyConfigPath, JSON.stringify({ agents: { oracle: { model: "openai/gpt-5.5" } } })) process.env.OPENCODE_CONFIG_DIR = userConfigDir @@ -357,8 +357,8 @@ describe("loadPluginConfig", () => { // then expect(existsSync(legacyConfigPath)).toBe(false) expect(existsSync(backupConfigPath)).toBe(true) - expect(readFileSync(canonicalConfigPath, "utf-8")).toContain('"openai/gpt-5.4"') - expect(reloadedConfig.agents?.oracle?.model).toBe("openai/gpt-5.4") + expect(readFileSync(canonicalConfigPath, "utf-8")).toContain('"openai/gpt-5.5"') + expect(reloadedConfig.agents?.oracle?.model).toBe("openai/gpt-5.5") }) it("should still load config from legacy path when migration fails", async () => { @@ -372,7 +372,7 @@ describe("loadPluginConfig", () => { tempDirs.push(rootDir) mkdirSync(userConfigDir, { recursive: true }) mkdirSync(projectConfigDir, { recursive: true }) - writeFileSync(legacyConfigPath, JSON.stringify({ agents: { oracle: { model: "openai/gpt-5.4" } } })) + writeFileSync(legacyConfigPath, JSON.stringify({ agents: { oracle: { model: "openai/gpt-5.5" } } })) // Make the directory read-only so migration write fails // (simulates Windows file lock / permission issues) @@ -395,7 +395,7 @@ describe("loadPluginConfig", () => { } // then - should still load the config from legacy path - expect(config.agents?.oracle?.model).toBe("openai/gpt-5.4") + expect(config.agents?.oracle?.model).toBe("openai/gpt-5.5") }) it("should load migrated legacy project config on the first load", async () => { @@ -410,7 +410,7 @@ describe("loadPluginConfig", () => { tempDirs.push(rootDir) mkdirSync(userConfigDir, { recursive: true }) mkdirSync(projectConfigDir, { recursive: true }) - writeFileSync(legacyConfigPath, JSON.stringify({ agents: { oracle: { model: "openai/gpt-5.4" } } })) + writeFileSync(legacyConfigPath, JSON.stringify({ agents: { oracle: { model: "openai/gpt-5.5" } } })) process.env.OPENCODE_CONFIG_DIR = userConfigDir @@ -421,7 +421,7 @@ describe("loadPluginConfig", () => { // then expect(existsSync(legacyConfigPath)).toBe(false) expect(existsSync(canonicalConfigPath)).toBe(true) - expect(config.agents?.oracle?.model).toBe("openai/gpt-5.4") + expect(config.agents?.oracle?.model).toBe("openai/gpt-5.5") }) it("should preserve explicit user git_master settings when project config omits git_master", async () => { @@ -449,7 +449,7 @@ describe("loadPluginConfig", () => { join(projectConfigDir, "oh-my-openagent.jsonc"), JSON.stringify({ agents: { - hephaestus: { model: "openai/gpt-5.4" }, + hephaestus: { model: "openai/gpt-5.5" }, }, }) ) diff --git a/src/plugin-handlers/config-handler.test.ts b/src/plugin-handlers/config-handler.test.ts index 629f97796..344dba4c3 100644 --- a/src/plugin-handlers/config-handler.test.ts +++ b/src/plugin-handlers/config-handler.test.ts @@ -1557,9 +1557,7 @@ describe("disable_omo_env pass-through", () => { const lastCall = createBuiltinAgentsMock.mock.calls[createBuiltinAgentsMock.mock.calls.length - 1] expect(lastCall).toBeDefined() - const disableOmoEnv = Array.isArray(lastCall) - ? lastCall[lastCall.length - 1] - : undefined + const disableOmoEnv = Array.isArray(lastCall) ? lastCall[12] : undefined expect(disableOmoEnv).toBe(true) }) @@ -1594,9 +1592,7 @@ describe("disable_omo_env pass-through", () => { const lastCall = createBuiltinAgentsMock.mock.calls[createBuiltinAgentsMock.mock.calls.length - 1] expect(lastCall).toBeDefined() - const disableOmoEnv = Array.isArray(lastCall) - ? lastCall[lastCall.length - 1] - : undefined + const disableOmoEnv = Array.isArray(lastCall) ? lastCall[12] : undefined expect(disableOmoEnv).toBe(false) }) }) diff --git a/src/shared/agent-variant.test.ts b/src/shared/agent-variant.test.ts index 58bdd193b..963b6c3e6 100644 --- a/src/shared/agent-variant.test.ts +++ b/src/shared/agent-variant.test.ts @@ -113,9 +113,9 @@ describe("resolveVariantForModel", () => { }) test("returns correct variant for openai provider (hephaestus agent)", () => { - // #given hephaestus has openai/gpt-5.4 with variant "medium" in its chain + // #given hephaestus has openai/gpt-5.5 with variant "medium" in its chain const config = {} as OhMyOpenCodeConfig - const model = { providerID: "openai", modelID: "gpt-5.4" } + const model = { providerID: "openai", modelID: "gpt-5.5" } // #when const variant = resolveVariantForModel(config, "hephaestus", model) @@ -191,7 +191,7 @@ describe("resolveVariantForModel", () => { test("returns correct variant for oracle agent with openai", () => { // given const config = {} as OhMyOpenCodeConfig - const model = { providerID: "openai", modelID: "gpt-5.4" } + const model = { providerID: "openai", modelID: "gpt-5.5" } // when const variant = resolveVariantForModel(config, "oracle", model) diff --git a/src/shared/migration.test.ts b/src/shared/migration.test.ts index 072858d7c..290e43838 100644 --- a/src/shared/migration.test.ts +++ b/src/shared/migration.test.ts @@ -39,7 +39,7 @@ describe("migrateAgentNames", () => { test("preserves current agent names unchanged", () => { // given: Config with current agent names const agents = { - oracle: { model: "openai/gpt-5.4" }, + oracle: { model: "openai/gpt-5.5-preview" }, librarian: { model: "google/gemini-3-flash" }, explore: { model: "opencode/gpt-5-nano" }, } @@ -49,7 +49,7 @@ describe("migrateAgentNames", () => { // then: Current names should remain unchanged expect(changed).toBe(false) - expect(migrated["oracle"]).toEqual({ model: "openai/gpt-5.4" }) + expect(migrated["oracle"]).toEqual({ model: "openai/gpt-5.5-preview" }) expect(migrated["librarian"]).toEqual({ model: "google/gemini-3-flash" }) expect(migrated["explore"]).toEqual({ model: "opencode/gpt-5-nano" }) }) @@ -620,7 +620,7 @@ describe("migrateModelVersions", () => { test("leaves unknown model strings untouched", () => { // given: Agent config with unknown model const agents = { - oracle: { model: "openai/gpt-5.4", temperature: 0.5 }, + oracle: { model: "openai/gpt-5.5-preview", temperature: 0.5 }, } // when: Migrate model versions @@ -629,7 +629,7 @@ describe("migrateModelVersions", () => { // then: Config should remain unchanged expect(changed).toBe(false) const oracle = migrated["oracle"] as Record - expect(oracle.model).toBe("openai/gpt-5.4") + expect(oracle.model).toBe("openai/gpt-5.5-preview") }) test("handles agent config with no model field", () => { @@ -665,7 +665,7 @@ describe("migrateModelVersions", () => { const agents = { sisyphus: { model: "openai/gpt-5.4-codex" }, prometheus: { model: "anthropic/claude-opus-4-5" }, - oracle: { model: "openai/gpt-5.4" }, + oracle: { model: "openai/gpt-5.5-preview" }, } // when: Migrate model versions @@ -675,7 +675,7 @@ describe("migrateModelVersions", () => { expect(changed).toBe(true) expect((migrated["sisyphus"] as Record).model).toBe("openai/gpt-5.4-codex") expect((migrated["prometheus"] as Record).model).toBe("anthropic/claude-opus-4-7") - expect((migrated["oracle"] as Record).model).toBe("openai/gpt-5.4") + expect((migrated["oracle"] as Record).model).toBe("openai/gpt-5.5-preview") }) test("handles empty object", () => { @@ -1083,7 +1083,7 @@ describe("migrateConfigFile with backup", () => { const rawConfig: Record = { agents: { "multimodal-looker": { model: "anthropic/claude-haiku-4-5" }, - oracle: { model: "openai/gpt-5.4" }, + oracle: { model: "openai/gpt-5.5-preview" }, "my-custom-agent": { model: "google/gemini-3.1-pro" }, }, } @@ -1099,7 +1099,7 @@ describe("migrateConfigFile with backup", () => { const agents = rawConfig.agents as Record> expect(agents["multimodal-looker"].model).toBe("anthropic/claude-haiku-4-5") - expect(agents.oracle.model).toBe("openai/gpt-5.4") + expect(agents.oracle.model).toBe("openai/gpt-5.5-preview") expect(agents["my-custom-agent"].model).toBe("google/gemini-3.1-pro") }) diff --git a/src/shared/model-requirements.test.ts b/src/shared/model-requirements.test.ts index 258beb1a3..b62366b76 100644 --- a/src/shared/model-requirements.test.ts +++ b/src/shared/model-requirements.test.ts @@ -7,19 +7,19 @@ import { } from "./model-requirements" describe("AGENT_MODEL_REQUIREMENTS", () => { - test("oracle has valid fallbackChain with gpt-5.4 as primary", () => { + test("oracle has valid fallbackChain with gpt-5.5 as primary", () => { // given - oracle agent requirement const oracle = AGENT_MODEL_REQUIREMENTS["oracle"] // when - accessing oracle requirement - // then - fallbackChain exists with gpt-5.4 as first entry + // then - fallbackChain exists with gpt-5.5 as first entry expect(oracle).toBeDefined() expect(oracle.fallbackChain).toBeArray() expect(oracle.fallbackChain.length).toBeGreaterThan(0) const primary = oracle.fallbackChain[0] expect(primary.providers).toContain("openai") - expect(primary.model).toBe("gpt-5.4") + expect(primary.model).toBe("gpt-5.5") expect(primary.variant).toBe("high") }) @@ -323,19 +323,19 @@ describe("CATEGORY_MODEL_REQUIREMENTS", () => { expect(primary.providers[0]).toBe("openai") }) - test("deep has valid fallbackChain with gpt-5.4 as primary", () => { + test("deep has valid fallbackChain with gpt-5.5 as primary", () => { // given - deep category requirement const deep = CATEGORY_MODEL_REQUIREMENTS["deep"] // when - accessing deep requirement - // then - fallbackChain exists with gpt-5.4 as first entry, medium variant + // then - fallbackChain exists with gpt-5.5 as first entry, medium variant expect(deep).toBeDefined() expect(deep.fallbackChain).toBeArray() expect(deep.fallbackChain.length).toBeGreaterThan(0) const primary = deep.fallbackChain[0] expect(primary.variant).toBe("medium") - expect(primary.model).toBe("gpt-5.4") + expect(primary.model).toBe("gpt-5.5") expect(primary.providers).toContain("openai") expect(primary.providers).toContain("github-copilot") }) @@ -597,7 +597,7 @@ describe("ModelRequirement type", () => { }) describe("requiresModel field in categories", () => { - test("deep category no longer has requiresModel (gpt-5.4 is widely available)", () => { + test("deep category no longer has requiresModel (gpt-5.5 is widely available)", () => { // given const deep = CATEGORY_MODEL_REQUIREMENTS["deep"] diff --git a/src/tools/delegate-task/tools.test.ts b/src/tools/delegate-task/tools.test.ts index 2f703fa47..2d7006ff7 100644 --- a/src/tools/delegate-task/tools.test.ts +++ b/src/tools/delegate-task/tools.test.ts @@ -33,6 +33,7 @@ const TEST_AVAILABLE_MODELS = new Set([ "anthropic/claude-haiku-4-5", "google/gemini-3.1-pro", "google/gemini-3-flash", + "openai/gpt-5.5", "openai/gpt-5.4", "openai/gpt-5.3-codex", ]) @@ -68,7 +69,7 @@ describe("sisyphus-task", () => { models: { anthropic: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5"], google: ["gemini-3.1-pro", "gemini-3-flash"], - openai: ["gpt-5.4", "gpt-5.3-codex"], + openai: ["gpt-5.5", "gpt-5.4", "gpt-5.3-codex"], }, connected: ["anthropic", "google", "openai"], updatedAt: "2026-01-01T00:00:00.000Z", @@ -108,7 +109,7 @@ describe("sisyphus-task", () => { // when / #then expect(category).toBeDefined() - expect(category.model).toBe("openai/gpt-5.4") + expect(category.model).toBe("openai/gpt-5.5") expect(category.variant).toBe("medium") }) @@ -2553,7 +2554,7 @@ describe("sisyphus-task", () => { models: { anthropic: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5"], google: ["gemini-3.1-pro", "gemini-3-flash"], - openai: ["gpt-5.4", "gpt-5.3-codex"], + openai: ["gpt-5.5", "gpt-5.4", "gpt-5.3-codex"], "kimi-for-coding": ["k2p5"], }, connected: ["anthropic", "google", "openai", "kimi-for-coding"], @@ -4111,11 +4112,11 @@ describe("sisyphus-task", () => { ) // then - should resolve via AGENT_MODEL_REQUIREMENTS fallback chain for oracle - // oracle fallback chain: gpt-5.4 (openai) > gemini-3.1-pro (google) > claude-opus-4-7 (anthropic) - // Since openai is in connectedProviders, should resolve to openai/gpt-5.4 + // oracle fallback chain: gpt-5.5 (openai) > gemini-3.1-pro (google) > claude-opus-4-7 (anthropic) + // Since openai is in connectedProviders, should resolve to openai/gpt-5.5 expect(promptBody.model).toBeDefined() expect(promptBody.model.providerID).toBe("openai") - expect(promptBody.model.modelID).toContain("gpt-5.4") + expect(promptBody.model.modelID).toContain("gpt-5.5") }, { timeout: 20000 }) })