From f8e62bde2af88f8afc8a99bedcedc591167a960b Mon Sep 17 00:00:00 2001 From: lacvet Date: Sun, 5 Apr 2026 16:51:24 +0900 Subject: [PATCH] =?UTF-8?q?AX=20Agent=20=EA=B3=84=ED=9A=8D=20=EB=AA=A8?= =?UTF-8?q?=EB=93=9C=20=EC=9E=94=EC=9E=AC=EB=A5=BC=20=EB=8D=94=20=EA=B1=B7?= =?UTF-8?q?=EC=96=B4=EB=82=B4=EA=B3=A0=20UI=20hover=20=EC=95=88=EC=A0=95?= =?UTF-8?q?=ED=99=94\n\n-=20AgentLoop=20=EC=8B=A4=ED=96=89=20=EA=B2=BD?= =?UTF-8?q?=EB=A1=9C=EC=97=90=EC=84=9C=20=EA=B3=84=ED=9A=8D=20=EB=AA=A8?= =?UTF-8?q?=EB=93=9C=20=EB=B6=84=EA=B8=B0=EB=A5=BC=20=EB=B9=84=ED=99=9C?= =?UTF-8?q?=EC=84=B1=20=EC=A0=95=EC=B1=85=20=EA=B8=B0=EC=A4=80=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=8B=A8=EC=88=9C=ED=99=94=ED=95=B4=20=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=20=EB=9F=B0=ED=83=80=EC=9E=84=EC=9D=B4=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EA=B0=92=EC=97=90=20=ED=9D=94=EB=93=A4=EB=A6=AC?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EA=B2=8C=20=EC=A0=95=EB=A6=AC\n-=20?= =?UTF-8?q?=EB=82=B4=EB=B6=80=20=EC=84=A4=EC=A0=95=EC=9D=98=20=EC=88=A8?= =?UTF-8?q?=EA=B9=80=20=EC=83=81=ED=83=9C=20=EA=B3=84=ED=9A=8D=20=EB=AA=A8?= =?UTF-8?q?=EB=93=9C=20=EB=B2=84=ED=8A=BC=EA=B3=BC=20=EC=BD=A4=EB=B3=B4=20?= =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EC=97=B0=EA=B2=B0=20=EB=B0=8F=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20dead=20code=20=EC=A0=9C=EA=B1=B0\n-=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=EC=9C=A0=ED=98=95=20=EC=B9=B4=EB=93=9C?= =?UTF-8?q?=EC=97=90=EC=84=9C=20hover=20=EB=9D=BC=EB=B2=A8=EA=B3=BC=20Tool?= =?UTF-8?q?Tip=20=EC=B6=A9=EB=8F=8C=EB=A1=9C=20=EB=B0=9C=EC=83=9D=ED=95=98?= =?UTF-8?q?=EB=8D=98=20=EA=B9=9C=EB=B0=95=EC=9E=84=EC=9D=84=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0\n-=20README=EC=99=80=20DEVELOPMENT=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=EC=97=90=20parity=20=EC=A7=84=EC=B2=99=EC=9C=A8,=20?= =?UTF-8?q?=EB=82=A8=EC=9D=80=20=EC=9E=91=EC=97=85=EC=B6=95,=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=A0=9C=EA=B1=B0=20=ED=9B=84=EB=B3=B4=EB=A5=BC=20?= =?UTF-8?q?=EB=B0=98=EC=98=81\n\n=EA=B2=80=EC=A6=9D=20=EA=B2=B0=EA=B3=BC\n?= =?UTF-8?q?-=20dotnet=20build=20src/AxCopilot/AxCopilot.csproj=20-c=20Rele?= =?UTF-8?q?ase=20-v=20minimal=20-p:OutputPath=3Dbin\\verify\\=20-p:Interme?= =?UTF-8?q?diateOutputPath=3Dobj\\verify\\\n-=20=EA=B2=BD=EA=B3=A0=200=20/?= =?UTF-8?q?=20=EC=98=A4=EB=A5=98=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++ docs/DEVELOPMENT.md | 5 +++ .../Services/Agent/AgentLoopService.cs | 10 +++--- src/AxCopilot/Views/ChatWindow.xaml | 6 ++-- src/AxCopilot/Views/ChatWindow.xaml.cs | 34 ------------------- 5 files changed, 16 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 4be9cad..6b243d3 100644 --- a/README.md +++ b/README.md @@ -911,6 +911,10 @@ ow + toggle 시각 언어로 통일했습니다. - 같은 점검에서 작업유형 카드 hover 깜박임 원인은 `hover 라벨`과 기본 WPF `ToolTip`이 동시에 켜져 마우스가 카드 경계와 툴팁 사이를 오가며 상태가 흔들리는 구조로 확인됐습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서 프리셋/기타/프리셋 추가 카드의 기본 `ToolTip` 을 제거하고 hover 라벨만 남겨 깜박임을 줄였습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0 - 업데이트: 2026-04-05 19:42 (KST) +- `PlanMode` 잔재도 런타임 기준으로 한 단계 더 걷어냈습니다. [AgentLoopService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentLoopService.cs) 에서 실행 전 plan prelude 진입은 비활성 플래그 기준으로만 남기고, 기본 실행 경로가 `planMode` 값에 의해 흔들리지 않도록 정리했습니다. +- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 과 [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서는 숨김 상태였던 inline/overlay 계획 모드 click/selection 잔재를 제거해 dead UI code를 더 줄였습니다. 사용자 노출 정책은 그대로 `off` 고정입니다. +- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0 +- 업데이트: 2026-04-05 19:49 (KST) --- diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index fa22667..34b2f5d 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -4673,3 +4673,8 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎. - 작업유형 카드 hover 깜박임도 원인을 확인해 즉시 보정했습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `BuildTopicButtons()` 에서 프리셋/기타/프리셋 추가 카드의 기본 WPF `ToolTip` 할당을 제거해, custom hover 라벨과 기본 툴팁이 동시에 켜지며 깜박이던 구조를 정리했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0 - 업데이트: 2026-04-05 19:42 (KST) +- `PlanMode` 런타임 잔재도 추가로 정리했습니다. [AgentLoopService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentLoopService.cs) 에서 plan prelude 분기는 `shouldGeneratePlanPrelude = false` 기준의 비활성 경로로 바꿔 기본 실행 흐름이 설정값에 흔들리지 않게 했고, `requireApproval` 도 기본 false로 고정했습니다. +- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서는 이미 숨김 상태였던 `BtnInlinePlanMode`, `CmbOverlayPlanMode` 의 event 연결을 제거했고, [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서는 `NextPlanMode`, `PlanModeLabel`, `BtnInlinePlanMode_Click`, `CmbOverlayPlanMode_SelectionChanged`, 관련 quick action 갱신 코드를 걷어내 dead code를 더 줄였습니다. +- 이번 정리로 `PlanMode` 는 정책상 `off` 고정이라는 사실과 실제 런타임/UI 흐름이 더 일치하게 됐습니다. 남은 잔재는 메인 설정 구형 카드와 상태 저장 구조 쪽이라 다음 단계에서 `AppSettings / SettingsViewModel / AppStateService` 축으로 계속 줄이면 됩니다. +- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0 +- 업데이트: 2026-04-05 19:49 (KST) diff --git a/src/AxCopilot/Services/Agent/AgentLoopService.cs b/src/AxCopilot/Services/Agent/AgentLoopService.cs index 3b45347..636d402 100644 --- a/src/AxCopilot/Services/Agent/AgentLoopService.cs +++ b/src/AxCopilot/Services/Agent/AgentLoopService.cs @@ -199,8 +199,8 @@ public partial class AgentLoopService var recentTaskRetryQuality = TryGetRecentTaskRetryQuality(taskPolicy.TaskType); maxRetry = ComputeQualityAwareMaxRetry(maxRetry, recentTaskRetryQuality, taskPolicy.TaskType); - // 플랜 모드 설정 - var planMode = ResolveEffectivePlanMode(llm.PlanMode, ActiveTab, taskPolicy.TaskType); // off | always | auto + // 플랜 prelude는 현재 정책상 비활성 + var shouldGeneratePlanPrelude = false; var context = BuildContext(); InjectTaskTypeGuidance(messages, taskPolicy); @@ -282,8 +282,8 @@ public partial class AgentLoopService workFolder = context.WorkFolder })); - // ── 플랜 모드 "always": 첫 번째 호출은 계획만 생성 (도구 없이) ── - if (planMode == "always") + // ── 과거 plan mode 잔재. 현재 정책상 비활성 ── + if (shouldGeneratePlanPrelude) { iteration++; EmitEvent(AgentEventType.Thinking, "", "실행 계획 생성 중..."); @@ -637,7 +637,7 @@ public partial class AgentLoopService // 플랜 모드 "auto"에서만 승인 대기 // - auto: 계획 감지 시 승인 대기 (단, 도구 호출이 함께 있으면 이미 실행 중이므로 스킵) // - off/always: 승인창 띄우지 않음 (off=자동 진행, always=앞에서 이미 처리됨) - var requireApproval = planMode == "auto" && toolCalls.Count == 0; + const bool requireApproval = false; if (requireApproval && UserDecisionCallback != null) { diff --git a/src/AxCopilot/Views/ChatWindow.xaml b/src/AxCopilot/Views/ChatWindow.xaml index cc1ec2a..257342b 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml +++ b/src/AxCopilot/Views/ChatWindow.xaml @@ -1929,8 +1929,7 @@ Visibility="Collapsed" IsEnabled="False" Margin="0,0,6,6" - Padding="9,4" - Click="BtnInlinePlanMode_Click"/> + Padding="9,4"/>