Files
orca/src/main/opencode/opencode-launch-model-config.test.ts
T
Brennan Benson 0266b5f95f fix(opencode): allow model picks when discovery is unavailable (#31985)
* fix(opencode): allow picked models across CLI updates

* test(opencode): prune obsolete timeout ratchet allowance

* fix(opencode): use resolved agents and refuse unsafe workers upfront

* fix(i18n): include OpenCode refusal messages in runtime catalog
2026-10-26 13:12:53 -07:00

77 lines
2.4 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { resolveOpenCodeLaunchModelConfig } from './opencode-launch-model-config'
describe('per-launch OpenCode model config', () => {
it('retains credentials, permissions and other agents while overriding the resolved primary model', () => {
const original = {
model: 'provider/old',
default_agent: 'reviewer',
providers: {
custom: { apiKey: 'placeholder-key', models: { preferred: { name: 'Preferred' } } }
},
permissions: [{ tool: 'shell', action: 'ask' }],
agents: {
reviewer: { model: 'provider/agent-old', system: 'Review only', permissions: [] },
build: { model: 'provider/build', steps: 5 },
nested: { mode: 'subagent', model: 'provider/nested' }
}
}
const configContent = JSON.stringify(original)
const merged = resolveOpenCodeLaunchModelConfig({
configContent,
primaryAgent: 'reviewer',
model: 'provider/preferred'
})
expect(merged).not.toBeNull()
expect(JSON.parse(merged ?? 'null')).toEqual({
...original,
model: 'provider/preferred',
agents: {
...original.agents,
reviewer: { ...original.agents.reviewer, model: 'provider/preferred' }
}
})
expect(configContent).toBe(JSON.stringify(original))
})
it('adds an override for the externally resolved built-in primary agent without guessing its name', () => {
expect(
resolveOpenCodeLaunchModelConfig({
configContent: undefined,
primaryAgent: 'plan',
model: 'provider/preferred'
})
).toBe('{"model":"provider/preferred","agents":{"plan":{"model":"provider/preferred"}}}')
})
it.each(['{', 'null', '[]', '{"agents":[]}', '{"agents":{"build":null}}'])(
'refuses malformed inline config %s',
(configContent) => {
expect(
resolveOpenCodeLaunchModelConfig({
configContent,
primaryAgent: 'build',
model: 'provider/a'
})
).toBeNull()
}
)
it('refuses oversized config and a missing requested model', () => {
expect(
resolveOpenCodeLaunchModelConfig({
configContent: ' '.repeat(1_048_577),
primaryAgent: 'build',
model: 'provider/a'
})
).toBeNull()
expect(
resolveOpenCodeLaunchModelConfig({
configContent: '{}',
primaryAgent: 'build',
model: ''
})
).toBeNull()
})
})