mirror of
https://github.com/stablyai/orca.git
synced 2026-11-02 18:17:36 +00:00
120 lines
4.3 KiB
TypeScript
120 lines
4.3 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { resolveAgentLaunchCommand } from './tui-agent-launch-command'
|
|
|
|
function launch(args: Partial<Parameters<typeof resolveAgentLaunchCommand>[0]>) {
|
|
const result = resolveAgentLaunchCommand({
|
|
agent: 'claude',
|
|
cmdOverrides: {},
|
|
platform: 'linux',
|
|
shell: 'posix',
|
|
...args
|
|
})
|
|
if (!result.ok) {
|
|
throw new Error(result.error)
|
|
}
|
|
return result
|
|
}
|
|
|
|
describe('one copy of each chat-picked flag', () => {
|
|
it.each(['-c model=o3', '--config model=o3', '-c=model=o3', '-cmodel=o3', '--config=model=o3'])(
|
|
'yields the picked Codex model and its effort to configured %s',
|
|
(agentArgs) => {
|
|
const result = launch({
|
|
agent: 'codex',
|
|
sessionOptions: { model: 'gpt-5.5', effort: 'high' },
|
|
agentArgs
|
|
})
|
|
const expectedArgs = agentArgs
|
|
.split(' ')
|
|
.map((token) => `'${token}'`)
|
|
.join(' ')
|
|
expect(result.command).toBe(`codex ${expectedArgs}`)
|
|
expect(result.appliedSessionOptions).toEqual({})
|
|
}
|
|
)
|
|
|
|
it('treats spaced Codex config model and effort as raw pins or removes them when overridden', () => {
|
|
const agentArgs = '-c " model = o3" -c " model_reasoning_effort = low" -c model_verbosity=low'
|
|
const inputs = {
|
|
agent: 'codex' as const,
|
|
agentArgs,
|
|
sessionOptions: { model: 'gpt-5.5', effort: 'high' }
|
|
}
|
|
expect(launch(inputs).appliedSessionOptions).toEqual({})
|
|
const saved = launch({ ...inputs, sessionOptionsOverrideAgentArgs: true })
|
|
expect(saved.appliedSessionOptions).toEqual(inputs.sessionOptions)
|
|
expect(saved.resumeLaunch).toEqual({
|
|
agentCommand: "codex '-c' 'model_verbosity=low'",
|
|
agentArgs: "'-c' 'model_verbosity=low'"
|
|
})
|
|
})
|
|
|
|
it.each([
|
|
['claude', 'opus', '--model=haiku', "claude '--model=haiku'"],
|
|
['codex', 'gpt-5.5', '-mo3', "codex '-mo3'"]
|
|
] as const)(
|
|
'sends one model flag for %s with a configured %s',
|
|
(agent, model, agentArgs, command) => {
|
|
const result = launch({ agent, sessionOptions: { model }, agentArgs })
|
|
expect(result.command).toBe(command)
|
|
expect(result.appliedSessionOptions).toEqual({})
|
|
}
|
|
)
|
|
|
|
it('sends one --effort for Claude with a configured --effort', () => {
|
|
const result = launch({
|
|
sessionOptions: { model: 'opus', effort: 'xhigh' },
|
|
agentArgs: '--effort low'
|
|
})
|
|
expect(result.command).toBe("claude '--model' 'opus' '--effort' 'low'")
|
|
expect(result.appliedSessionOptions).toEqual({ model: 'opus' })
|
|
})
|
|
|
|
it('keeps the catalog default for options the configured args do not set', () => {
|
|
const result = launch({ sessionOptions: { model: 'opus' }, agentArgs: '--add-dir x' })
|
|
expect(result.command).toBe("claude '--model' 'opus' '--effort' 'high' '--add-dir' 'x'")
|
|
})
|
|
|
|
it('preserves picks when configured arguments contain flags after --', () => {
|
|
const result = launch({
|
|
agentArgs: '-- --model haiku',
|
|
sessionOptions: { model: 'opus', effort: 'high' }
|
|
})
|
|
expect(result.command).toBe("claude '--model' 'opus' '--effort' 'high' '--' '--model' 'haiku'")
|
|
expect(result.appliedSessionOptions).toEqual({ model: 'opus', effort: 'high' })
|
|
})
|
|
|
|
it('checks configured args without parsing an unparseable command override', () => {
|
|
const result = launch({
|
|
agent: 'codex',
|
|
cmdOverrides: { codex: "codex -c 'x" },
|
|
sessionOptions: { model: 'gpt-5.5' },
|
|
agentArgs: '-m o3'
|
|
})
|
|
expect(result.command).toBe("codex -c 'x '-m' 'o3'")
|
|
expect(result.command).not.toContain('gpt-5.5')
|
|
})
|
|
|
|
it('sends the picked Codex model when the configured args set only the effort', () => {
|
|
const result = launch({
|
|
agent: 'codex',
|
|
sessionOptions: { model: 'gpt-5.5', effort: 'high' },
|
|
agentArgs: '-c model_reasoning_effort=low'
|
|
})
|
|
expect(result.command).toBe("codex '-m' 'gpt-5.5' '-c' 'model_reasoning_effort=low'")
|
|
expect(result.appliedSessionOptions).toEqual({ model: 'gpt-5.5' })
|
|
})
|
|
})
|
|
|
|
describe('a saved permission mode on terminals', () => {
|
|
it('yields to a permission flag the caller keeps', () => {
|
|
const result = launch({
|
|
agent: 'claude',
|
|
agentArgs: '--dangerously-skip-permissions',
|
|
sessionOptions: { permissionMode: 'ask' }
|
|
})
|
|
expect(result.command).toBe("claude '--dangerously-skip-permissions'")
|
|
expect(result.appliedSessionOptions).toEqual({})
|
|
})
|
|
})
|