fix(models): prevent /models crash from non-string saved model values (#691)

* fix(models): guard GitHub default model setting against non-string values

* test(models): avoid brittle GitHub default assertion in model guard test
This commit is contained in:
Jeevan Mohan Pawar
2026-04-15 12:47:02 +01:00
committed by GitHub
parent c207cdbdcc
commit 6b2121da12
2 changed files with 74 additions and 3 deletions

View File

@@ -0,0 +1,57 @@
import { afterEach, beforeEach, expect, test } from 'bun:test'
import { saveGlobalConfig } from '../config.js'
import { getDefaultMainLoopModelSetting, getUserSpecifiedModelSetting } from './model.js'
const env = {
CLAUDE_CODE_USE_GITHUB: process.env.CLAUDE_CODE_USE_GITHUB,
CLAUDE_CODE_USE_OPENAI: process.env.CLAUDE_CODE_USE_OPENAI,
CLAUDE_CODE_USE_GEMINI: process.env.CLAUDE_CODE_USE_GEMINI,
CLAUDE_CODE_USE_BEDROCK: process.env.CLAUDE_CODE_USE_BEDROCK,
CLAUDE_CODE_USE_VERTEX: process.env.CLAUDE_CODE_USE_VERTEX,
CLAUDE_CODE_USE_FOUNDRY: process.env.CLAUDE_CODE_USE_FOUNDRY,
OPENAI_MODEL: process.env.OPENAI_MODEL,
}
beforeEach(() => {
process.env.CLAUDE_CODE_USE_GITHUB = '1'
delete process.env.CLAUDE_CODE_USE_OPENAI
delete process.env.CLAUDE_CODE_USE_GEMINI
delete process.env.CLAUDE_CODE_USE_BEDROCK
delete process.env.CLAUDE_CODE_USE_VERTEX
delete process.env.CLAUDE_CODE_USE_FOUNDRY
delete process.env.OPENAI_MODEL
saveGlobalConfig(current => ({
...current,
model: ({ bad: true } as unknown) as string,
}))
})
afterEach(() => {
process.env.CLAUDE_CODE_USE_GITHUB = env.CLAUDE_CODE_USE_GITHUB
process.env.CLAUDE_CODE_USE_OPENAI = env.CLAUDE_CODE_USE_OPENAI
process.env.CLAUDE_CODE_USE_GEMINI = env.CLAUDE_CODE_USE_GEMINI
process.env.CLAUDE_CODE_USE_BEDROCK = env.CLAUDE_CODE_USE_BEDROCK
process.env.CLAUDE_CODE_USE_VERTEX = env.CLAUDE_CODE_USE_VERTEX
process.env.CLAUDE_CODE_USE_FOUNDRY = env.CLAUDE_CODE_USE_FOUNDRY
process.env.OPENAI_MODEL = env.OPENAI_MODEL
saveGlobalConfig(current => ({
...current,
model: undefined,
}))
})
test('github default model setting ignores non-string saved model', () => {
const model = getDefaultMainLoopModelSetting()
expect(typeof model).toBe('string')
expect(model).not.toBe('[object Object]')
expect(model.length).toBeGreaterThan(0)
})
test('user specified model ignores non-string saved model', () => {
const model = getUserSpecifiedModelSetting()
if (model !== undefined && model !== null) {
expect(typeof model).toBe('string')
expect(model).not.toBe('[object Object]')
}
})