- AX Agent 내부 설정 오버레이에서 Plan Mode 도구 저장/노출 경로를 false 고정으로 정리 - 메인 설정에 남아 있던 플랜 모드 및 Plan Mode 도구 UI를 숨기고 카드 상태를 off 고정으로 정리 - Cowork/Code 상태바가 debug가 아닐 때 ToolCall/SkillCall/Paused/Resumed 이벤트로 과하게 흔들리지 않도록 조정 - claw-code parity 계획 문서와 README, DEVELOPMENT 이력을 현재 정책과 진척율 기준으로 갱신 - 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ 경고 0 / 오류 0
This commit is contained in:
@@ -921,6 +921,11 @@ ow + toggle 시각 언어로 통일했습니다.
|
||||
- 사이드바 하단 사용자 영역의 설정 버튼도 `32x32`, 아이콘 `15px` 기준으로 키워 너무 작게 보이던 문제를 함께 보정했습니다.
|
||||
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0
|
||||
- 업데이트: 2026-04-05 19:59 (KST)
|
||||
- AX Agent의 `PlanMode` 잔재를 실제 런타임 정책에 맞게 더 걷어냈습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서는 내부 설정 저장/로드 시 `Code.EnablePlanModeTools` 를 항상 `false` 로 강제하고, `OverlayTogglePlanModeTools` 는 더 이상 화면에 노출되지 않게 접었습니다.
|
||||
- [SettingsWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml), [SettingsWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml.cs) 에 남아 있던 메인 설정의 `플랜 모드`, `Plan Mode 도구` UI도 숨기고 카드 상태는 `off` 고정으로 맞췄습니다. 사용자에게 보이는 설정과 실제 엔진 정책을 일치시키기 위한 정리입니다.
|
||||
- Cowork/Code 상태바 소음도 줄였습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `UpdateStatusBar(...)` 는 이제 `debug` 로그가 아닐 때 `ToolCall`, `SkillCall`, `Paused`, `Resumed` 이벤트로 상태줄을 흔들지 않습니다. `claw-code`처럼 기본 transcript와 상태선이 더 차분하게 유지되도록 맞춘 변경입니다.
|
||||
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0
|
||||
- 업데이트: 2026-04-05 20:08 (KST)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -4684,3 +4684,9 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
|
||||
- 상단 탭 그룹과 사이드바 설정 버튼도 다시 키웠습니다. `TopTabBtn` 은 폰트 `14.5`, 패딩 `24x10`, 최소 너비 `78` 기준으로 키우고 선택 상태 배경을 `ItemBackground` 로 바꿨으며, 탭 래퍼도 `HintBackground + Padding=6` 으로 복구했습니다. 하단 사용자 영역의 `BtnSidebarSettings` 는 `32x32`, 아이콘 `15px` 로 키워 기존보다 접근성이 좋아졌습니다.
|
||||
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
|
||||
- 업데이트: 2026-04-05 19:59 (KST)
|
||||
- `PlanMode` 잔재를 사용자 노출/UI 저장 경로에서 한 단계 더 걷어냈습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 는 내부 설정 오버레이에서 `Code.EnablePlanModeTools` 를 항상 `false` 로 저장하고, 로드 시에도 `ChkOverlayEnablePlanModeTools` 를 `false` 로 고정하도록 바꿨습니다. `OverlayTogglePlanModeTools` 의 가시성도 무조건 `Collapsed` 로 맞췄습니다.
|
||||
- 메인 설정에 남아 있던 관련 UI도 정리했습니다. [SettingsWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml) 의 `플랜 모드`, `Plan Mode 도구` 행은 `Collapsed` 처리했고, [SettingsWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml.cs) 의 plan mode 카드 sync/체크 로직은 `off` 고정값만 반영하게 축소했습니다.
|
||||
- Cowork/Code 기본 상태 노출도 더 `claw-code` 쪽으로 조정했습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `UpdateStatusBar(AgentEvent evt)` 는 `debug` 로그가 아닐 때 `ToolCall`, `SkillCall`, `Paused`, `Resumed` 이벤트로 상태줄을 바꾸지 않습니다. 기본 상태선은 `planning / permission / step / complete / error` 중심만 유지해 긴 실행 시 화면 churn 을 더 줄였습니다.
|
||||
- 이번 묶음 후 추정 parity는 `core engine 90% / main transcript UI 96% / Cowork·Code runtime UX 94% / internal settings 91% / overall 94%` 정도로 재평가했습니다.
|
||||
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
|
||||
- 업데이트: 2026-04-05 20:08 (KST)
|
||||
|
||||
@@ -159,8 +159,11 @@
|
||||
## Settings Review
|
||||
- Remove candidate:
|
||||
- `PlanMode`
|
||||
- current state: UI에서는 사실상 제거됐지만 `AppSettings`, `SettingsViewModel`, `AppStateService`, `AgentLoopService` 잔재가 남아 있음
|
||||
- current state: 사용자 노출 UI와 저장 경로는 `off` 고정으로 정리됐지만 `AppSettings`, `SettingsViewModel`, `AppStateService` 타입 잔재가 남아 있음
|
||||
- rationale: 현재 정책이 `off` 고정이라 사용자 선택값이 엔진에 의미 있게 기여하지 않음
|
||||
- `Code.EnablePlanModeTools`
|
||||
- current state: UI/저장 경로는 `false` 고정으로 정리됐지만 모델/설정 타입에 잔재가 남아 있음
|
||||
- rationale: 현재 엔진 정책에서 실제 실행 경로를 더 이상 바꾸지 않음
|
||||
- Move to developer-only candidate:
|
||||
- `FreeTierDelaySeconds`
|
||||
- rationale: 일반 사용자가 조정할 이유가 적고 엔진 지연 정책에 직접 영향
|
||||
@@ -174,7 +177,7 @@
|
||||
- `EnableProactiveContextCompact`
|
||||
- `EnableCoworkVerification`
|
||||
- `EnableCodeVerification`
|
||||
- `Code.EnablePlanModeTools / EnableWorktreeTools / EnableTeamTools / EnableCronTools`
|
||||
- `Code.EnableWorktreeTools / EnableTeamTools / EnableCronTools`
|
||||
|
||||
## Known UX / Performance Risks
|
||||
- Topic preset hover flicker was caused by duplicate hover systems:
|
||||
|
||||
@@ -14327,7 +14327,7 @@ public partial class ChatWindow : Window
|
||||
llm.EnableParallelTools = ChkOverlayEnableParallelTools?.IsChecked == true;
|
||||
llm.EnableProjectRules = ChkOverlayEnableProjectRules?.IsChecked == true;
|
||||
llm.EnableAgentMemory = ChkOverlayEnableAgentMemory?.IsChecked == true;
|
||||
llm.Code.EnablePlanModeTools = ChkOverlayEnablePlanModeTools?.IsChecked == true;
|
||||
llm.Code.EnablePlanModeTools = false;
|
||||
llm.Code.EnableWorktreeTools = ChkOverlayEnableWorktreeTools?.IsChecked == true;
|
||||
llm.Code.EnableTeamTools = ChkOverlayEnableTeamTools?.IsChecked == true;
|
||||
llm.Code.EnableCronTools = ChkOverlayEnableCronTools?.IsChecked == true;
|
||||
@@ -14528,7 +14528,7 @@ public partial class ChatWindow : Window
|
||||
if (ChkOverlayEnableAgentMemory != null)
|
||||
ChkOverlayEnableAgentMemory.IsChecked = llm.EnableAgentMemory;
|
||||
if (ChkOverlayEnablePlanModeTools != null)
|
||||
ChkOverlayEnablePlanModeTools.IsChecked = llm.Code.EnablePlanModeTools;
|
||||
ChkOverlayEnablePlanModeTools.IsChecked = false;
|
||||
if (ChkOverlayEnableWorktreeTools != null)
|
||||
ChkOverlayEnableWorktreeTools.IsChecked = llm.Code.EnableWorktreeTools;
|
||||
if (ChkOverlayEnableTeamTools != null)
|
||||
@@ -15287,7 +15287,7 @@ public partial class ChatWindow : Window
|
||||
if (OverlayToggleAgentMemory != null)
|
||||
OverlayToggleAgentMemory.Visibility = showDev ? Visibility.Visible : Visibility.Collapsed;
|
||||
if (OverlayTogglePlanModeTools != null)
|
||||
OverlayTogglePlanModeTools.Visibility = showCode ? Visibility.Visible : Visibility.Collapsed;
|
||||
OverlayTogglePlanModeTools.Visibility = Visibility.Collapsed;
|
||||
if (OverlayToggleWorktreeTools != null)
|
||||
OverlayToggleWorktreeTools.Visibility = showCode ? Visibility.Visible : Visibility.Collapsed;
|
||||
if (OverlayToggleTeamTools != null)
|
||||
@@ -17913,6 +17913,8 @@ public partial class ChatWindow : Window
|
||||
|
||||
private void UpdateAgentProgressBar(AgentEvent evt)
|
||||
{
|
||||
var isDebugLogLevel = string.Equals(_settings.Settings.Llm.AgentLogLevel, "debug", StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
switch (evt.Type)
|
||||
{
|
||||
case AgentEventType.Planning when evt.Steps is { Count: > 0 }:
|
||||
@@ -18372,6 +18374,8 @@ public partial class ChatWindow : Window
|
||||
_ => evt.ToolName,
|
||||
};
|
||||
|
||||
var isDebugLogLevel = string.Equals(_settings.Settings.Llm.AgentLogLevel, "debug", StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
switch (evt.Type)
|
||||
{
|
||||
case AgentEventType.Thinking:
|
||||
@@ -18394,6 +18398,8 @@ public partial class ChatWindow : Window
|
||||
SetStatus(GetDecisionStatusText(evt.Summary), spinning: IsDecisionPending(evt.Summary));
|
||||
break;
|
||||
case AgentEventType.ToolCall:
|
||||
if (!isDebugLogLevel)
|
||||
break;
|
||||
SetStatus($"{toolLabel} 실행 중...", spinning: true);
|
||||
break;
|
||||
case AgentEventType.ToolResult:
|
||||
@@ -18406,6 +18412,8 @@ public partial class ChatWindow : Window
|
||||
SetStatus($"[{evt.StepCurrent}/{evt.StepTotal}] 단계 완료", spinning: true);
|
||||
break;
|
||||
case AgentEventType.SkillCall:
|
||||
if (!isDebugLogLevel)
|
||||
break;
|
||||
SetStatus($"스킬 실행 중: {TruncateForStatus(evt.Summary)}", spinning: true);
|
||||
break;
|
||||
case AgentEventType.Complete:
|
||||
@@ -18417,9 +18425,13 @@ public partial class ChatWindow : Window
|
||||
StopStatusAnimation();
|
||||
break;
|
||||
case AgentEventType.Paused:
|
||||
if (!isDebugLogLevel)
|
||||
break;
|
||||
SetStatus("⏸ 일시정지", spinning: false);
|
||||
break;
|
||||
case AgentEventType.Resumed:
|
||||
if (!isDebugLogLevel)
|
||||
break;
|
||||
SetStatus("▶ 재개됨", spinning: true);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -4697,7 +4697,7 @@
|
||||
</WrapPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
<Border Style="{StaticResource AgentSettingsRow}">
|
||||
<Border Style="{StaticResource AgentSettingsRow}" Visibility="Collapsed">
|
||||
<Grid>
|
||||
<StackPanel HorizontalAlignment="Left" Margin="0,0,180,0">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
@@ -5154,7 +5154,7 @@
|
||||
|
||||
<!-- ── Agentic 도구 설정 ── -->
|
||||
<TextBlock Style="{StaticResource SectionHeader}" Text="Agentic 도구"/>
|
||||
<Border Style="{StaticResource SettingsRow}">
|
||||
<Border Style="{StaticResource SettingsRow}" Visibility="Collapsed">
|
||||
<Grid>
|
||||
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
|
||||
<TextBlock Style="{StaticResource RowLabel}" Text="Plan Mode 도구"/>
|
||||
|
||||
@@ -126,10 +126,9 @@ public partial class SettingsWindow : Window
|
||||
if (AgentDecisionCardNormal != null) AgentDecisionCardNormal.IsChecked = decision == "normal";
|
||||
if (AgentDecisionCardDetailed != null) AgentDecisionCardDetailed.IsChecked = decision == "detailed";
|
||||
|
||||
var planMode = (_vm.PlanMode ?? "off").Trim().ToLowerInvariant();
|
||||
if (AgentPlanModeCardOff != null) AgentPlanModeCardOff.IsChecked = planMode == "off";
|
||||
if (AgentPlanModeCardAlways != null) AgentPlanModeCardAlways.IsChecked = planMode == "always";
|
||||
if (AgentPlanModeCardAuto != null) AgentPlanModeCardAuto.IsChecked = planMode == "auto";
|
||||
if (AgentPlanModeCardOff != null) AgentPlanModeCardOff.IsChecked = true;
|
||||
if (AgentPlanModeCardAlways != null) AgentPlanModeCardAlways.IsChecked = false;
|
||||
if (AgentPlanModeCardAuto != null) AgentPlanModeCardAuto.IsChecked = false;
|
||||
|
||||
var operationMode = OperationModePolicy.Normalize(_vm.OperationMode);
|
||||
if (AgentOperationModeInternal != null) AgentOperationModeInternal.IsChecked = operationMode == OperationModePolicy.InternalMode;
|
||||
@@ -2217,12 +2216,7 @@ public partial class SettingsWindow : Window
|
||||
private void AgentPlanModeCard_Checked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!IsLoaded || sender is not RadioButton rb || rb.IsChecked != true) return;
|
||||
_vm.PlanMode = rb.Name switch
|
||||
{
|
||||
"AgentPlanModeCardAlways" => "always",
|
||||
"AgentPlanModeCardAuto" => "auto",
|
||||
_ => "off",
|
||||
};
|
||||
_vm.PlanMode = "off";
|
||||
}
|
||||
|
||||
private void AgentOperationModeCard_Checked(object sender, RoutedEventArgs e)
|
||||
|
||||
Reference in New Issue
Block a user