fix: remove github-copilot from gpt-5.3-codex provider list

gpt-5.3-codex is not available on GitHub Copilot. The fallback chains
incorrectly listed github-copilot as a valid provider for this model,
causing the doctor to report 'configured model github-copilot/gpt-5.3-codex
is not valid' for Hephaestus agent.

Affected agents: hephaestus (requiresProvider + fallbackChain)
Affected categories: ultrabrain, deep, unspecified-low

Copilot users can still use Hephaestus via openai or opencode providers.

Fixes #2047
This commit is contained in:
YeonGyu-Kim
2026-02-25 00:29:00 +09:00
parent f69ae16036
commit d3a567ee91
5 changed files with 55 additions and 40 deletions
+35 -3
View File
@@ -168,14 +168,14 @@ describe("AGENT_MODEL_REQUIREMENTS", () => {
expect(primary.providers[0]).toBe("opencode")
})
test("hephaestus requires openai/github-copilot/opencode provider", () => {
test("hephaestus requires openai/opencode provider (not github-copilot since gpt-5.3-codex unavailable there)", () => {
// #given - hephaestus agent requirement
const hephaestus = AGENT_MODEL_REQUIREMENTS["hephaestus"]
// #when - accessing hephaestus requirement
// #then - requiresProvider is set to openai, github-copilot, opencode (not requiresModel)
// #then - requiresProvider is set to openai and opencode only (github-copilot removed)
expect(hephaestus).toBeDefined()
expect(hephaestus.requiresProvider).toEqual(["openai", "github-copilot", "opencode"])
expect(hephaestus.requiresProvider).toEqual(["openai", "opencode"])
expect(hephaestus.requiresModel).toBeUndefined()
})
@@ -497,3 +497,35 @@ describe("requiresModel field in categories", () => {
expect(artistry.requiresModel).toBe("gemini-3-pro")
})
})
describe("gpt-5.3-codex provider restrictions", () => {
test("no gpt-5.3-codex entry in AGENT_MODEL_REQUIREMENTS includes github-copilot as provider", () => {
// given - all agent requirements
const allAgentEntries = Object.values(AGENT_MODEL_REQUIREMENTS).flatMap(
(req) => req.fallbackChain
)
// when - filtering entries with gpt-5.3-codex model
const codexEntries = allAgentEntries.filter((entry) => entry.model === "gpt-5.3-codex")
// then - none of them include github-copilot as a provider
for (const entry of codexEntries) {
expect(entry.providers).not.toContain("github-copilot")
}
})
test("no gpt-5.3-codex entry in CATEGORY_MODEL_REQUIREMENTS includes github-copilot as provider", () => {
// given - all category requirements
const allCategoryEntries = Object.values(CATEGORY_MODEL_REQUIREMENTS).flatMap(
(req) => req.fallbackChain
)
// when - filtering entries with gpt-5.3-codex model
const codexEntries = allCategoryEntries.filter((entry) => entry.model === "gpt-5.3-codex")
// then - none of them include github-copilot as a provider
for (const entry of codexEntries) {
expect(entry.providers).not.toContain("github-copilot")
}
})
})
+5 -5
View File
@@ -24,9 +24,9 @@ export const AGENT_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
},
hephaestus: {
fallbackChain: [
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
],
requiresProvider: ["openai", "github-copilot", "opencode"],
requiresProvider: ["openai", "opencode"],
},
oracle: {
fallbackChain: [
@@ -101,14 +101,14 @@ export const CATEGORY_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
},
ultrabrain: {
fallbackChain: [
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.3-codex", variant: "xhigh" },
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "xhigh" },
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-pro", variant: "high" },
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
],
},
deep: {
fallbackChain: [
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-pro", variant: "high" },
],
@@ -132,7 +132,7 @@ export const CATEGORY_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
"unspecified-low": {
fallbackChain: [
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
{ providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" },
],
},