AX Agent 최대 반복 횟수 상한을 500으로 확장

변경 목적:\n- 내부 설정의 최대 에이전트 패스 상한이 100으로 묶여 긴 Code 작업에서 반복 여유가 부족한 문제를 해소합니다.\n\n핵심 수정사항:\n- SettingsViewModel의 MaxAgentIterations 클램프를 1~500으로 상향했습니다.\n- SettingsWindow의 최대 반복 횟수 슬라이더와 안내 문구를 1~500 기준으로 맞추고 값 표시 폭을 넓혔습니다.\n- ChatWindow 오버레이 설정의 슬라이더, 텍스트 입력, 동기화 클램프를 모두 500 기준으로 통일했습니다.\n- AgentSettingsWindow의 로드/저장 파싱 상한도 500으로 맞춰 설정 경로 간 불일치를 제거했습니다.\n- README와 DEVELOPMENT 문서에 2026-04-15 20:19 (KST) 기준 변경 이력과 빌드 검증 결과를 반영했습니다.\n\n검증 결과:\n- dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_max_agent_iterations_500\\ -p:IntermediateOutputPath=obj\\verify_max_agent_iterations_500\\\n- 경고 0 / 오류 0
This commit is contained in:
2026-04-15 20:23:02 +09:00
parent 939e594de8
commit 5f4a52929b
7 changed files with 25 additions and 16 deletions

View File

@@ -300,7 +300,7 @@ public class SettingsViewModel : INotifyPropertyChanged
public int MaxAgentIterations
{
get => _maxAgentIterations;
set { _maxAgentIterations = Math.Clamp(value, 1, 100); OnPropertyChanged(); }
set { _maxAgentIterations = Math.Clamp(value, 1, 500); OnPropertyChanged(); }
}
private int _maxRetryOnError;

View File

@@ -80,7 +80,7 @@ public partial class AgentSettingsWindow : Window
ChkEnableCoworkVerification.IsChecked = _llm.EnableCoworkVerification;
ChkEnableProjectRules.IsChecked = _llm.EnableProjectRules;
ChkEnableAgentMemory.IsChecked = _llm.EnableAgentMemory;
TxtMaxAgentIterations.Text = Math.Clamp(_llm.MaxAgentIterations, 1, 200).ToString();
TxtMaxAgentIterations.Text = Math.Clamp(_llm.MaxAgentIterations, 1, 500).ToString();
ChkEnableCodeVerification.IsChecked = _llm.Code.EnableCodeVerification;
ChkEnableParallelTools.IsChecked = _llm.EnableParallelTools;
ChkEnableWorktreeTools.IsChecked = _llm.Code.EnableWorktreeTools;
@@ -571,7 +571,7 @@ public partial class AgentSettingsWindow : Window
_llm.EnableCoworkVerification = ChkEnableCoworkVerification.IsChecked == true;
_llm.EnableProjectRules = ChkEnableProjectRules.IsChecked == true;
_llm.EnableAgentMemory = ChkEnableAgentMemory.IsChecked == true;
_llm.MaxAgentIterations = ParseInt(TxtMaxAgentIterations.Text, 25, 1, 200);
_llm.MaxAgentIterations = ParseInt(TxtMaxAgentIterations.Text, 25, 1, 500);
_llm.Code.EnableCodeVerification = ChkEnableCodeVerification.IsChecked == true;
_llm.EnableParallelTools = ChkEnableParallelTools.IsChecked == true;
_llm.Code.EnableWorktreeTools = ChkEnableWorktreeTools.IsChecked == true;

View File

@@ -472,7 +472,7 @@ public partial class ChatWindow
CommitOverlayNumericInput(TxtOverlayMaxContextTokens, llm.MaxContextTokens, 1024, 1_000_000, value => llm.MaxContextTokens = value, normalizeOnInvalid: true);
CommitOverlayTemperatureInput(normalizeOnInvalid: true);
CommitOverlayNumericInput(TxtOverlayMaxRetryOnError, llm.MaxRetryOnError, 0, 10, value => llm.MaxRetryOnError = value, normalizeOnInvalid: true);
CommitOverlayNumericInput(TxtOverlayMaxAgentIterations, llm.MaxAgentIterations, 1, 200, value => llm.MaxAgentIterations = value, normalizeOnInvalid: true);
CommitOverlayNumericInput(TxtOverlayMaxAgentIterations, llm.MaxAgentIterations, 1, 500, value => llm.MaxAgentIterations = value, normalizeOnInvalid: true);
CommitOverlayNumericInput(TxtOverlayFreeTierDelaySeconds, llm.FreeTierDelaySeconds, 0, 60, value => llm.FreeTierDelaySeconds = value, normalizeOnInvalid: true);
CommitOverlayNumericInput(TxtOverlayMaxSubAgents, llm.MaxSubAgents, 1, 10, value => llm.MaxSubAgents = value, normalizeOnInvalid: true);
CommitOverlayNumericInput(TxtOverlayToolHookTimeoutMs, llm.ToolHookTimeoutMs, 3000, 30000, value => llm.ToolHookTimeoutMs = value, normalizeOnInvalid: true);
@@ -599,11 +599,11 @@ public partial class ChatWindow
if (TxtOverlayMaxRetryOnErrorValue != null)
TxtOverlayMaxRetryOnErrorValue.Text = Math.Clamp(llm.MaxRetryOnError, 0, 10).ToString();
if (TxtOverlayMaxAgentIterations != null)
TxtOverlayMaxAgentIterations.Text = Math.Clamp(llm.MaxAgentIterations, 1, 200).ToString();
TxtOverlayMaxAgentIterations.Text = Math.Clamp(llm.MaxAgentIterations, 1, 500).ToString();
if (SldOverlayMaxAgentIterations != null)
SldOverlayMaxAgentIterations.Value = Math.Clamp(llm.MaxAgentIterations, 1, 100);
SldOverlayMaxAgentIterations.Value = Math.Clamp(llm.MaxAgentIterations, 1, 500);
if (TxtOverlayMaxAgentIterationsValue != null)
TxtOverlayMaxAgentIterationsValue.Text = Math.Clamp(llm.MaxAgentIterations, 1, 100).ToString();
TxtOverlayMaxAgentIterationsValue.Text = Math.Clamp(llm.MaxAgentIterations, 1, 500).ToString();
if (TxtOverlayFreeTierDelaySeconds != null)
TxtOverlayFreeTierDelaySeconds.Text = Math.Clamp(llm.FreeTierDelaySeconds, 0, 60).ToString();
if (SldOverlayFreeTierDelaySeconds != null)
@@ -1030,7 +1030,7 @@ public partial class ChatWindow
if (_isOverlaySettingsSyncing || llm == null)
return;
var value = (int)Math.Round(Math.Clamp(e.NewValue, 1, 100));
var value = (int)Math.Round(Math.Clamp(e.NewValue, 1, 500));
llm.MaxAgentIterations = value;
if (TxtOverlayMaxAgentIterations != null)
TxtOverlayMaxAgentIterations.Text = value.ToString();
@@ -1165,7 +1165,7 @@ public partial class ChatWindow
if (_isOverlaySettingsSyncing)
return;
if (CommitOverlayNumericInput(TxtOverlayMaxAgentIterations, _settings.Settings.Llm.MaxAgentIterations, 1, 200, value => _settings.Settings.Llm.MaxAgentIterations = value, normalizeOnInvalid: false))
if (CommitOverlayNumericInput(TxtOverlayMaxAgentIterations, _settings.Settings.Llm.MaxAgentIterations, 1, 500, value => _settings.Settings.Llm.MaxAgentIterations = value, normalizeOnInvalid: false))
PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
}

View File

@@ -4769,7 +4769,7 @@
<Slider x:Name="SldOverlayMaxAgentIterations"
Width="150"
Minimum="1"
Maximum="100"
Maximum="500"
TickFrequency="1"
IsSnapToTickEnabled="True"
ValueChanged="SldOverlayMaxAgentIterations_ValueChanged"

View File

@@ -5004,17 +5004,17 @@
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="최대 반복 횟수"/>
<TextBlock Style="{StaticResource RowHint}" Text="에이전트가 도구를 호출하며 반복할 수 있는 최대 횟수입니다. (1~100)"/>
<TextBlock Style="{StaticResource RowHint}" Text="에이전트가 도구를 호출하며 반복할 수 있는 최대 횟수입니다. (1~500)"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider Width="120" Minimum="1" Maximum="100" TickFrequency="1"
<Slider Width="120" Minimum="1" Maximum="500" TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding MaxAgentIterations, Mode=TwoWay}"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding MaxAgentIterations}"
FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}"
Width="32" TextAlignment="Center" VerticalAlignment="Center"
Margin="8,0,0,0"/>
FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}"
Width="40" TextAlignment="Center" VerticalAlignment="Center"
Margin="8,0,0,0"/>
</StackPanel>
</Grid>
</Border>