fix: movement provider override precedence in AgentRunner

This commit is contained in:
nrslib 2026-02-23 15:18:32 +09:00
parent 95cd36037a
commit 69f13283a2
2 changed files with 6 additions and 6 deletions

View File

@ -62,7 +62,7 @@ describe('option resolution order', () => {
loadTemplateMock.mockReturnValue('template'); loadTemplateMock.mockReturnValue('template');
}); });
it('should resolve provider in order: CLI > Config(project??global) > stepProvider > default', async () => { it('should resolve provider in order: CLI > stepProvider > Config(project??global) > default', async () => {
// Given // Given
loadConfigMock.mockReturnValue({ loadConfigMock.mockReturnValue({
project: { provider: 'opencode' }, project: { provider: 'opencode' },
@ -79,14 +79,14 @@ describe('option resolution order', () => {
// Then // Then
expect(getProviderMock).toHaveBeenLastCalledWith('codex'); expect(getProviderMock).toHaveBeenLastCalledWith('codex');
// When: CLI 指定なし(project provider が有効: resolveConfigValues は project.provider ?? global.provider を返す // When: CLI 指定なし(stepProvider が優先される
await runAgent(undefined, 'task', { await runAgent(undefined, 'task', {
cwd: '/repo', cwd: '/repo',
stepProvider: 'claude', stepProvider: 'claude',
}); });
// Then // Then
expect(getProviderMock).toHaveBeenLastCalledWith('opencode'); expect(getProviderMock).toHaveBeenLastCalledWith('claude');
// When: project なし → resolveConfigValues は global.provider を返す(フラットマージ) // When: project なし → resolveConfigValues は global.provider を返す(フラットマージ)
loadConfigMock.mockReturnValue({ loadConfigMock.mockReturnValue({
@ -98,8 +98,8 @@ describe('option resolution order', () => {
stepProvider: 'claude', stepProvider: 'claude',
}); });
// Then: resolveConfigValues returns 'mock' (global fallback), so stepProvider is not reached // Then: stepProvider が global fallback より優先される
expect(getProviderMock).toHaveBeenLastCalledWith('mock'); expect(getProviderMock).toHaveBeenLastCalledWith('claude');
// When: stepProvider もなし → 同様に global.provider // When: stepProvider もなし → 同様に global.provider
await runAgent(undefined, 'task', { cwd: '/repo' }); await runAgent(undefined, 'task', { cwd: '/repo' });

View File

@ -29,9 +29,9 @@ export class AgentRunner {
agentConfig?: CustomAgentConfig, agentConfig?: CustomAgentConfig,
): ProviderType { ): ProviderType {
if (options?.provider) return options.provider; if (options?.provider) return options.provider;
if (options?.stepProvider) return options.stepProvider;
const config = resolveConfigValues(cwd, ['provider']); const config = resolveConfigValues(cwd, ['provider']);
if (config.provider) return config.provider; if (config.provider) return config.provider;
if (options?.stepProvider) return options.stepProvider;
if (agentConfig?.provider) return agentConfig.provider; if (agentConfig?.provider) return agentConfig.provider;
return 'claude'; return 'claude';
} }