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 <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -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("<tool_usage_rules>");
|
||||
});
|
||||
|
||||
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("<tool_usage_rules>");
|
||||
expect(prompt).toContain("Forbidden stops");
|
||||
expect(prompt).toContain("Three-attempt failure protocol");
|
||||
});
|
||||
|
||||
test("GPT 5.3-codex model returns GPT-5.3 prompt", () => {
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -98,7 +98,7 @@ describe("generateOmoConfig - model fallback system", () => {
|
||||
//#then
|
||||
expect((result.agents as Record<string, { model: string; variant?: string }>).sisyphus.model).toBe("openai/gpt-5.4")
|
||||
expect((result.agents as Record<string, { model: string; variant?: string }>).sisyphus.variant).toBe("medium")
|
||||
expect((result.agents as Record<string, { model: string }>).oracle.model).toBe("openai/gpt-5.4")
|
||||
expect((result.agents as Record<string, { model: string }>).oracle.model).toBe("openai/gpt-5.5")
|
||||
expect((result.agents as Record<string, { model: string }>)['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",
|
||||
|
||||
@@ -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", () => {
|
||||
|
||||
+17
-17
@@ -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<string, unknown>)["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" },
|
||||
},
|
||||
})
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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<string, unknown>
|
||||
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<string, unknown>).model).toBe("openai/gpt-5.4-codex")
|
||||
expect((migrated["prometheus"] as Record<string, unknown>).model).toBe("anthropic/claude-opus-4-7")
|
||||
expect((migrated["oracle"] as Record<string, unknown>).model).toBe("openai/gpt-5.4")
|
||||
expect((migrated["oracle"] as Record<string, unknown>).model).toBe("openai/gpt-5.5-preview")
|
||||
})
|
||||
|
||||
test("handles empty object", () => {
|
||||
@@ -1083,7 +1083,7 @@ describe("migrateConfigFile with backup", () => {
|
||||
const rawConfig: Record<string, unknown> = {
|
||||
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<string, Record<string, unknown>>
|
||||
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")
|
||||
})
|
||||
|
||||
|
||||
@@ -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"]
|
||||
|
||||
|
||||
@@ -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 })
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user