From 5f4a52929b001eb00f460a089c8d322498a22e56 Mon Sep 17 00:00:00 2001 From: lacvet Date: Wed, 15 Apr 2026 20:23:02 +0900 Subject: [PATCH] =?UTF-8?q?AX=20Agent=20=EC=B5=9C=EB=8C=80=20=EB=B0=98?= =?UTF-8?q?=EB=B3=B5=20=ED=9A=9F=EC=88=98=20=EC=83=81=ED=95=9C=EC=9D=84=20?= =?UTF-8?q?500=EC=9C=BC=EB=A1=9C=20=ED=99=95=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 변경 목적:\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 --- README.md | 4 ++++ docs/DEVELOPMENT.md | 7 ++++++- src/AxCopilot/ViewModels/SettingsViewModel.cs | 2 +- src/AxCopilot/Views/AgentSettingsWindow.xaml.cs | 4 ++-- .../Views/ChatWindow.OverlaySettingsPresentation.cs | 12 ++++++------ src/AxCopilot/Views/ChatWindow.xaml | 2 +- src/AxCopilot/Views/SettingsWindow.xaml | 10 +++++----- 7 files changed, 25 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index d0c8cb1..554ef36 100644 --- a/README.md +++ b/README.md @@ -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`)와 같은 행에서 분리했습니다. 이제 왼쪽 진행 안내가 여러 줄로 커져도 시간·토큰은 입력창 바로 위 오른쪽에 고정됩니다. diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 8cd5aa6..03e5dfb 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -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`에는 워크스페이스 복원 속도 제어 설정(`복원 속도 자동 조절`, `복원 기본 간격`, `복원 최대 간격`)을 추가했습니다. diff --git a/src/AxCopilot/ViewModels/SettingsViewModel.cs b/src/AxCopilot/ViewModels/SettingsViewModel.cs index ae4f5a9..8c23cc9 100644 --- a/src/AxCopilot/ViewModels/SettingsViewModel.cs +++ b/src/AxCopilot/ViewModels/SettingsViewModel.cs @@ -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; diff --git a/src/AxCopilot/Views/AgentSettingsWindow.xaml.cs b/src/AxCopilot/Views/AgentSettingsWindow.xaml.cs index 3202063..2f66b50 100644 --- a/src/AxCopilot/Views/AgentSettingsWindow.xaml.cs +++ b/src/AxCopilot/Views/AgentSettingsWindow.xaml.cs @@ -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; diff --git a/src/AxCopilot/Views/ChatWindow.OverlaySettingsPresentation.cs b/src/AxCopilot/Views/ChatWindow.OverlaySettingsPresentation.cs index c98d50c..4d04841 100644 --- a/src/AxCopilot/Views/ChatWindow.OverlaySettingsPresentation.cs +++ b/src/AxCopilot/Views/ChatWindow.OverlaySettingsPresentation.cs @@ -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); } diff --git a/src/AxCopilot/Views/ChatWindow.xaml b/src/AxCopilot/Views/ChatWindow.xaml index 9199af1..60fe122 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml +++ b/src/AxCopilot/Views/ChatWindow.xaml @@ -4769,7 +4769,7 @@ - + - + FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}" + Width="40" TextAlignment="Center" VerticalAlignment="Center" + Margin="8,0,0,0"/>