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:
@@ -1,5 +1,9 @@
|
||||
# AX Commander
|
||||
|
||||
- 업데이트: 2026-04-15 20:19 (KST)
|
||||
- AX Agent 내부 설정의 `최대 에이전트 패스` 상한을 100에서 500으로 확장했습니다. `src/AxCopilot/ViewModels/SettingsViewModel.cs`, `src/AxCopilot/Views/SettingsWindow.xaml`, `src/AxCopilot/Views/ChatWindow.xaml`, `src/AxCopilot/Views/ChatWindow.OverlaySettingsPresentation.cs`, `src/AxCopilot/Views/AgentSettingsWindow.xaml.cs`를 함께 조정해 일반 설정창, Code 탭 오버레이, 별도 에이전트 설정창에서 모두 같은 1~500 범위를 사용하도록 맞췄습니다.
|
||||
- 검증: `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\\` 경고 0 / 오류 0
|
||||
|
||||
- 업데이트: 2026-04-15 20:16 (KST)
|
||||
- AX Agent 입력창 위 시간·토큰 표시(`StreamMetricsLabel`)를 라이브 진행 문구(`PulseDotBar`)와 같은 행에서 분리했습니다. 이제 왼쪽 진행 안내가 여러 줄로 커져도 시간·토큰은 입력창 바로 위 오른쪽에 고정됩니다.
|
||||
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
업데이트: 2026-04-15 17:41 (KST)
|
||||
업데이트: 2026-04-15 20:19 (KST)
|
||||
- AX Agent 반복 상한을 500으로 확장했습니다. `src/AxCopilot/ViewModels/SettingsViewModel.cs`의 `MaxAgentIterations` 클램프를 `1~500`으로 올리고, `src/AxCopilot/Views/SettingsWindow.xaml`의 슬라이더/힌트 문구도 같은 범위로 맞췄습니다.
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml`, `src/AxCopilot/Views/ChatWindow.OverlaySettingsPresentation.cs`, `src/AxCopilot/Views/AgentSettingsWindow.xaml.cs`도 함께 수정해 Code 탭 오버레이와 별도 에이전트 설정창이 여전히 100 또는 200에 묶이지 않도록 범위를 통일했습니다.
|
||||
- 검증: `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\\` 경고 0 / 오류 0
|
||||
|
||||
업데이트: 2026-04-15 17:41 (KST)
|
||||
- 워크스페이스 저장/복원 경로를 확장했습니다. `src/AxCopilot/Core/AppWorkspaceStateHelper.cs`는 파일 탐색기 현재 폴더 경로와 메모장 열린 파일 경로를 best-effort로 저장하고, `src/AxCopilot/Core/ProcessCommandLineHelper.cs`는 브라우저/메모장 공용 프로세스 명령줄 파싱을 담당합니다.
|
||||
- `src/AxCopilot/Core/ContextManager.cs`는 브라우저 외에도 탐색기/메모장 상태가 저장된 창을 새로 실행해 해당 경로/파일을 다시 열 수 있게 했고, 복원 중 새 창을 연속 실행할 때는 CPU 사용률·메모리 사용률·이미 실행한 창 수를 반영한 적응형 지연을 넣어 저사양 PC에서 복원 폭주를 줄이도록 했습니다.
|
||||
- `src/AxCopilot/Models/AppSettings.cs`, `src/AxCopilot/ViewModels/SettingsViewModel.cs`, `src/AxCopilot/Views/SettingsWindow.xaml`에는 워크스페이스 복원 속도 제어 설정(`복원 속도 자동 조절`, `복원 기본 간격`, `복원 최대 간격`)을 추가했습니다.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -4769,7 +4769,7 @@
|
||||
<Slider x:Name="SldOverlayMaxAgentIterations"
|
||||
Width="150"
|
||||
Minimum="1"
|
||||
Maximum="100"
|
||||
Maximum="500"
|
||||
TickFrequency="1"
|
||||
IsSnapToTickEnabled="True"
|
||||
ValueChanged="SldOverlayMaxAgentIterations_ValueChanged"
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user