AX Agent claw-code 진척율 문서화 및 메시지 축 단순화
Some checks failed
Release Gate / gate (push) Has been cancelled

- claw-code 대비 AX Agent 진척율을 README, DEVELOPMENT, parity 계획 문서에 수치로 기록

- 핵심 엔진 영향 설정 최소화 원칙을 정리하고 계획 모드 잔재 노출을 추가로 축소

- ChatWindow 메시지 버블과 좌측 대화 목록 카드를 더 얇은 밀도로 조정해 claw-code식 읽기 축에 가깝게 정리

- 검증: 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:
2026-04-05 14:38:03 +09:00
parent 22eebc13d9
commit d99b46e3e2
5 changed files with 46 additions and 93 deletions

View File

@@ -1888,6 +1888,7 @@
<Button x:Name="BtnInlinePlanMode"
Style="{StaticResource OutlineHoverBtn}"
Visibility="Collapsed"
IsEnabled="False"
Margin="0,0,6,6"
Padding="9,4"
Click="BtnInlinePlanMode_Click"/>
@@ -2873,6 +2874,7 @@
</StackPanel>
<ComboBox x:Name="CmbOverlayPlanMode"
Grid.Column="1"
Visibility="Collapsed"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayPlanMode_SelectionChanged">
<ComboBoxItem Content="계획 · 끄기" Tag="off"/>
@@ -4498,7 +4500,7 @@
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayTogglePlanModeTools" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Border x:Name="OverlayTogglePlanModeTools" Style="{StaticResource OverlayAdvancedToggleRowStyle}" Visibility="Collapsed">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>

View File

@@ -3227,16 +3227,16 @@ public partial class ChatWindow : Window
var border = new Border
{
Background = isSelected
? new SolidColorBrush(Color.FromArgb(0x14, 0x4B, 0x5E, 0xFC))
? new SolidColorBrush(Color.FromArgb(0x10, 0x4B, 0x5E, 0xFC))
: Brushes.Transparent,
CornerRadius = new CornerRadius(7),
Padding = new Thickness(8, 5, 8, 5),
Margin = isBranch ? new Thickness(14, 1, 0, 1) : new Thickness(0, 1, 0, 1),
CornerRadius = new CornerRadius(6),
Padding = new Thickness(7, 4, 7, 4),
Margin = isBranch ? new Thickness(12, 1, 0, 1) : new Thickness(0, 1, 0, 1),
Cursor = Cursors.Hand
};
var grid = new Grid();
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(20) });
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(18) });
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });
@@ -3255,7 +3255,7 @@ public partial class ChatWindow : Window
{
Text = iconText,
FontFamily = new FontFamily("Segoe MDL2 Assets"),
FontSize = 11,
FontSize = 10,
Foreground = iconBrush,
VerticalAlignment = VerticalAlignment.Center
};
@@ -3270,7 +3270,7 @@ public partial class ChatWindow : Window
var title = new TextBlock
{
Text = item.Title,
FontSize = 11,
FontSize = 10.5,
FontWeight = isSelected ? FontWeights.SemiBold : FontWeights.Normal,
Foreground = titleColor,
TextTrimming = TextTrimming.CharacterEllipsis
@@ -3278,7 +3278,7 @@ public partial class ChatWindow : Window
var date = new TextBlock
{
Text = item.UpdatedAtText,
FontSize = 8.5,
FontSize = 8,
Foreground = dateColor,
Margin = new Thickness(0, 1, 0, 0)
};
@@ -3286,89 +3286,29 @@ public partial class ChatWindow : Window
stack.Children.Add(date);
if (item.IsRunning)
{
stack.Children.Add(new Border
stack.Children.Add(new TextBlock
{
Background = BrushFromHex("#EEF2FF"),
BorderBrush = BrushFromHex("#C7D2FE"),
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(6),
Padding = new Thickness(4, 1, 4, 1),
Text = _appState.ActiveTasks.Count > 0
? $"진행 중 {_appState.ActiveTasks.Count}"
: "진행 중",
FontSize = 8,
FontWeight = FontWeights.Medium,
Foreground = BrushFromHex("#4F46E5"),
Margin = new Thickness(0, 2, 0, 0),
HorizontalAlignment = HorizontalAlignment.Left,
Child = new TextBlock
{
Text = _appState.ActiveTasks.Count > 0
? $"진행 중 {_appState.ActiveTasks.Count}"
: "진행 중",
FontSize = 8,
FontWeight = FontWeights.Medium,
Foreground = BrushFromHex("#4F46E5"),
}
});
}
if (item.AgentRunCount > 0)
{
var runSummaryPanel = new DockPanel
{
Margin = new Thickness(0, 2, 0, 0),
LastChildFill = true,
};
if (item.FailedAgentRunCount > 0 && item.LastFailedAt.HasValue)
{
var failedBadge = new Border
{
Background = BrushFromHex("#FEF2F2"),
BorderBrush = BrushFromHex("#FEE2E2"),
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(6),
Padding = new Thickness(4, 1, 4, 1),
Margin = new Thickness(0, 0, 4, 0),
VerticalAlignment = VerticalAlignment.Center,
Child = new TextBlock
{
Text = $"실패 {FormatDate(item.LastFailedAt.Value)}",
FontSize = 8,
FontWeight = FontWeights.Medium,
Foreground = BrushFromHex("#B91C1C"),
}
};
DockPanel.SetDock(failedBadge, Dock.Right);
runSummaryPanel.Children.Add(failedBadge);
}
else if (item.LastCompletedAt.HasValue)
{
var completedBadge = new Border
{
Background = BrushFromHex("#ECFDF5"),
BorderBrush = BrushFromHex("#DCFCE7"),
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(6),
Padding = new Thickness(4, 1, 4, 1),
Margin = new Thickness(0, 0, 4, 0),
VerticalAlignment = VerticalAlignment.Center,
Child = new TextBlock
{
Text = $"성공 {FormatDate(item.LastCompletedAt.Value)}",
FontSize = 8,
FontWeight = FontWeights.Medium,
Foreground = BrushFromHex("#166534"),
}
};
DockPanel.SetDock(completedBadge, Dock.Right);
runSummaryPanel.Children.Add(completedBadge);
}
var runSummaryText = new TextBlock
{
Text = item.FailedAgentRunCount > 0
? $"실행 {item.AgentRunCount} · 실패 {item.FailedAgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 28)}"
: $"실행 {item.AgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 32)}",
? $"실패 {item.FailedAgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 26)}"
: $"실행 {item.AgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 28)}",
FontSize = 8.25,
Foreground = item.FailedAgentRunCount > 0
? BrushFromHex("#B91C1C")
: (TryFindResource("SecondaryText") as Brush ?? Brushes.Gray),
Margin = new Thickness(0, 1, 0, 0),
Margin = new Thickness(0, 2, 0, 0),
TextTrimming = TextTrimming.CharacterEllipsis
};
if (!string.IsNullOrWhiteSpace(item.LastAgentRunSummary))
@@ -3377,8 +3317,7 @@ public partial class ChatWindow : Window
? $"최근 실패 포함\n{item.LastAgentRunSummary}"
: item.LastAgentRunSummary;
}
runSummaryPanel.Children.Add(runSummaryText);
stack.Children.Add(runSummaryPanel);
stack.Children.Add(runSummaryText);
}
Grid.SetColumn(stack, 1);
grid.Children.Add(stack);
@@ -4447,7 +4386,7 @@ public partial class ChatWindow : Window
{
HorizontalAlignment = HorizontalAlignment.Right,
MaxWidth = GetMessageMaxWidth(),
Margin = new Thickness(172, 2, 16, 2),
Margin = new Thickness(196, 2, 12, 2),
};
var bubble = new Border
@@ -4455,16 +4394,16 @@ public partial class ChatWindow : Window
Background = userBubbleBg,
BorderBrush = borderBrush,
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(13),
Padding = new Thickness(12, 8, 12, 8),
CornerRadius = new CornerRadius(12),
Padding = new Thickness(11, 7, 11, 7),
Child = new TextBlock
{
Text = content,
TextAlignment = TextAlignment.Left,
FontSize = 12,
FontSize = 11.5,
Foreground = primaryText,
TextWrapping = TextWrapping.Wrap,
LineHeight = 19,
LineHeight = 18,
}
};
wrapper.Children.Add(bubble);
@@ -4492,7 +4431,7 @@ public partial class ChatWindow : Window
userBottomBar.Children.Add(new TextBlock
{
Text = timestamp.ToString("HH:mm"),
FontSize = 8.5, Opacity = 0.46,
FontSize = 8, Opacity = 0.42,
Foreground = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray,
HorizontalAlignment = HorizontalAlignment.Right,
VerticalAlignment = VerticalAlignment.Center,
@@ -4530,19 +4469,19 @@ public partial class ChatWindow : Window
{
HorizontalAlignment = HorizontalAlignment.Left,
MaxWidth = GetMessageMaxWidth(),
Margin = new Thickness(6, 2, 180, 2)
Margin = new Thickness(4, 2, 164, 2)
};
if (animate) ApplyMessageEntryAnimation(container);
// AI 에이전트 이름 + 아이콘
var (agentName, _, _) = GetAgentIdentity();
var headerSp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(3, 0, 0, 1) };
var headerSp = new StackPanel { Orientation = Orientation.Horizontal, Margin = new Thickness(2, 0, 0, 1) };
var iconBlock = new TextBlock
{
Text = "\uE945",
FontFamily = new FontFamily("Segoe MDL2 Assets"),
FontSize = 7.5,
FontSize = 7,
Foreground = secondaryText,
VerticalAlignment = VerticalAlignment.Center,
};
@@ -4551,7 +4490,7 @@ public partial class ChatWindow : Window
headerSp.Children.Add(new TextBlock
{
Text = agentName,
FontSize = 8.5,
FontSize = 8,
FontWeight = FontWeights.Normal,
Foreground = secondaryText,
Margin = new Thickness(3, 0, 0, 0),
@@ -4564,8 +4503,8 @@ public partial class ChatWindow : Window
Background = assistantBubbleBg,
BorderBrush = borderBrush,
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(13),
Padding = new Thickness(12, 8, 12, 8),
CornerRadius = new CornerRadius(12),
Padding = new Thickness(11, 7, 11, 7),
};
var contentStack = new StackPanel();