fix(coding-agent): prefer codex default auth

Route stale OpenAI GPT default roles through canonical Codex selection when the catalog prefers the Codex OAuth transport, and rank shared provider defaults by canonical provider priority.\n\nFixes #2807
This commit is contained in:
roboomp
2026-06-16 23:01:57 +00:00
parent dc14689fc1
commit aec9355b26
5 changed files with 153 additions and 34 deletions
@@ -283,6 +283,45 @@ describe("createAgentSession deferred model pattern resolution", () => {
}
});
test("prefers Codex OAuth over plain OpenAI for the shared startup default", async () => {
const openaiDefault = getBundledModel("openai", "gpt-5.5");
const codexDefault = getBundledModel("openai-codex", "gpt-5.5");
if (!openaiDefault || !codexDefault) {
throw new Error("Expected bundled OpenAI and Codex GPT-5.5 defaults");
}
const authStorage = await AuthStorage.create(path.join(tempDir, "codex-fallback-auth.db"));
authStoragesToClose.push(authStorage);
authStorage.setRuntimeApiKey("openai", "sk-or-v1-invalid-openai-key");
authStorage.setRuntimeApiKey("openai-codex", "codex-oauth-token");
const modelRegistry = new ModelRegistry(authStorage, path.join(tempDir, "models.yml"));
const { session } = await createAgentSession({
cwd: tempDir,
agentDir: tempDir,
authStorage,
modelRegistry,
settings: Settings.isolated(),
sessionManager: SessionManager.inMemory(),
disableExtensionDiscovery: true,
skills: [],
contextFiles: [],
promptTemplates: [],
slashCommands: [],
enableMCP: false,
enableLsp: false,
skipPythonPreflight: true,
});
try {
expect(session.model?.provider).toBe("openai-codex");
expect(session.model?.id).toBe(codexDefault.id);
expect(session.model?.id).toBe(openaiDefault.id);
} finally {
await session.dispose();
}
});
test("restores role model from extension provider after startup resume", async () => {
const defaultModel = getBundledModel("anthropic", "claude-sonnet-4-5");
if (!defaultModel) {