From d102e17d47f6b3b66d51de32c5f3f98eaa6a269e Mon Sep 17 00:00:00 2001 From: lacvet Date: Sun, 5 Apr 2026 13:35:16 +0900 Subject: [PATCH] =?UTF-8?q?AX=20Agent=20=EB=8C=80=ED=99=94=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=B9=B4=EB=93=9C=EC=99=80=20=EC=B6=95=EC=86=8C=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=20=EB=B0=94=20UI=20=EB=B0=80?= =?UTF-8?q?=EB=8F=84=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ChatWindow 대화 목록 행 카드의 선택/호버 강조를 더 얇게 줄이고 제목, 메타, 배지, 편집 버튼 밀도를 claw-code 기준으로 정리 - 축소 아이콘 바의 행 높이, 버튼 규격, 아이콘 크기, 사용자 배지를 현재 사이드바와 같은 중립형 시각 언어로 통일 - README와 DEVELOPMENT 문서에 변경 이력과 2026-04-05 14:57 (KST) 기준 업데이트 시각 반영 - 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ / 경고 0 오류 0 --- README.md | 5 +- docs/DEVELOPMENT.md | 5 ++ src/AxCopilot/Views/ChatWindow.xaml | 24 ++++---- src/AxCopilot/Views/ChatWindow.xaml.cs | 84 +++++++++++++------------- 4 files changed, 62 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index b6f6119..935ce6c 100644 --- a/README.md +++ b/README.md @@ -785,8 +785,11 @@ ow + toggle 시각 언어로 통일했습니다. - `새 대화`, `검색`, `작업 유형/워크스페이스`, 하단 사용자 영역, 삭제 영역까지 패딩과 폰트, 아이콘 크기를 함께 낮췄고, 하단 상태바는 다이아몬드 아이콘을 작은 원형 점으로 바꿔 더 단순한 상태선처럼 보이게 정리했습니다. - 실행 로그 배너도 본문 침범을 더 줄였습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `AddAgentEventBanner(...)` 에서 debug 전용 `ToolInput` 카드 길이를 더 짧게 줄였고, `FilePath`는 일반 로그에서는 빠른 액션이 붙은 카드형 대신 파일명 한 줄만 약하게 표시하도록 바꿨습니다. - 이제 파일 경로 카드와 빠른 액션은 `debug`일 때만 크게 보이고, 일반 Cowork/Code 로그에서는 파일명만 보조 정보처럼 붙습니다. 덕분에 실행 로그가 본문 아래에서 더 얇게 흐르도록 정리됐습니다. +- 대화 목록 행 카드와 축소 아이콘 바도 같은 시각 언어로 더 정리했습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `AddConversationItem(...)`에서 선택 강조 배경과 좌측 액센트 바 두께를 더 얇게 줄이고, 행 패딩/아이콘/폰트/배지 크기를 전반적으로 낮춰 `claw-code`처럼 목록 자체가 먼저 튀지 않도록 정리했습니다. +- `진행 중`, `성공`, `실패` 배지와 실행 요약 텍스트도 더 작고 중립적인 톤으로 줄였고, 호버 시 확대 애니메이션은 제거해 목록이 더 차분하게 반응하도록 맞췄습니다. 편집 버튼도 더 작은 규격과 낮은 opacity를 써서 필요할 때만 보조 액션으로 보이게 조정했습니다. +- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml)의 축소 아이콘 바는 상하 행 높이, 버튼 패딩, 아이콘 크기, 사용자 배지 크기를 한 단계 더 줄여 현재 사이드바와 같은 밀도로 묶었습니다. 이제 축소 상태에서도 검색/필터/새 대화 아이콘이 더 균일한 간격으로 정리되고, 하단 사용자 배지도 과하게 튀지 않는 중립형으로 유지됩니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0 -- 업데이트: 2026-04-05 14:49 (KST) +- 업데이트: 2026-04-05 14:57 (KST) --- diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 543ec41..d6341fb 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -4550,3 +4550,8 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎. - 이 변경으로 빠른 액션이 붙은 파일 경로 카드와 디버그 상세는 `debug` 로그에서만 크게 보이고, 일반 Cowork/Code 로그에서는 본문 아래에 더 얇은 보조 행으로만 남습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0 - 업데이트: 2026-04-05 14:49 (KST) +- 대화 목록 행 카드와 축소 아이콘 바도 `claw-code` 쪽 시각 언어에 더 맞췄습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `AddConversationItem(...)`에서 선택 상태 배경과 액센트 바 두께를 더 줄이고, 목록 행 패딩/아이콘/폰트/배지 크기를 전반적으로 낮췄습니다. +- `진행 중`, `성공`, `실패` 배지는 더 작고 중립적인 톤으로 정리했고, 실행 요약 텍스트도 한 단계 작은 크기와 짧은 상하 여백을 써서 목록 메타가 제목보다 덜 튀게 조정했습니다. 호버 시 확대 애니메이션은 제거하고 얇은 배경 강조만 남겨, 목록 반응이 더 차분한 레이어로 보이게 바꿨습니다. +- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml)의 축소 아이콘 바는 상하 row 높이와 버튼 규격, 아이콘 크기, 사용자 배지 크기를 함께 줄여 현재 사이드바 헤더/하단 계정 영역과 같은 밀도로 묶었습니다. +- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0 +- 업데이트: 2026-04-05 14:57 (KST) diff --git a/src/AxCopilot/Views/ChatWindow.xaml b/src/AxCopilot/Views/ChatWindow.xaml index 4f88b77..d84195c 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml +++ b/src/AxCopilot/Views/ChatWindow.xaml @@ -422,32 +422,32 @@ Visibility="Collapsed"> - + - + - - - - - @@ -457,11 +457,11 @@ HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip="" Padding="0" WindowChrome.IsHitTestVisibleInChrome="True"> - - diff --git a/src/AxCopilot/Views/ChatWindow.xaml.cs b/src/AxCopilot/Views/ChatWindow.xaml.cs index aa97139..f616bd7 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml.cs +++ b/src/AxCopilot/Views/ChatWindow.xaml.cs @@ -3227,16 +3227,16 @@ public partial class ChatWindow : Window var border = new Border { Background = isSelected - ? new SolidColorBrush(Color.FromArgb(0x30, 0x4B, 0x5E, 0xFC)) + ? new SolidColorBrush(Color.FromArgb(0x14, 0x4B, 0x5E, 0xFC)) : Brushes.Transparent, - CornerRadius = new CornerRadius(8), - Padding = new Thickness(10, 7, 10, 7), + 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), Cursor = Cursors.Hand }; var grid = new Grid(); - grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(28) }); + grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(20) }); 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 = 13, + FontSize = 11, Foreground = iconBrush, VerticalAlignment = VerticalAlignment.Center }; @@ -3270,14 +3270,15 @@ public partial class ChatWindow : Window var title = new TextBlock { Text = item.Title, - FontSize = 12, + FontSize = 11, + FontWeight = isSelected ? FontWeights.SemiBold : FontWeights.Normal, Foreground = titleColor, TextTrimming = TextTrimming.CharacterEllipsis }; var date = new TextBlock { Text = item.UpdatedAtText, - FontSize = 9.5, + FontSize = 8.5, Foreground = dateColor, Margin = new Thickness(0, 1, 0, 0) }; @@ -3287,21 +3288,21 @@ public partial class ChatWindow : Window { stack.Children.Add(new Border { - Background = BrushFromHex("#DBEAFE"), - BorderBrush = BrushFromHex("#93C5FD"), + Background = BrushFromHex("#EEF2FF"), + BorderBrush = BrushFromHex("#C7D2FE"), BorderThickness = new Thickness(1), - CornerRadius = new CornerRadius(8), - Padding = new Thickness(6, 1, 6, 1), - Margin = new Thickness(0, 4, 0, 0), + CornerRadius = new CornerRadius(6), + Padding = new Thickness(4, 1, 4, 1), + Margin = new Thickness(0, 2, 0, 0), HorizontalAlignment = HorizontalAlignment.Left, Child = new TextBlock { Text = _appState.ActiveTasks.Count > 0 ? $"진행 중 {_appState.ActiveTasks.Count}" : "진행 중", - FontSize = 9, - FontWeight = FontWeights.SemiBold, - Foreground = BrushFromHex("#1D4ED8"), + FontSize = 8, + FontWeight = FontWeights.Medium, + Foreground = BrushFromHex("#4F46E5"), } }); } @@ -3309,7 +3310,7 @@ public partial class ChatWindow : Window { var runSummaryPanel = new DockPanel { - Margin = new Thickness(0, 3, 0, 0), + Margin = new Thickness(0, 2, 0, 0), LastChildFill = true, }; @@ -3318,18 +3319,18 @@ public partial class ChatWindow : Window var failedBadge = new Border { Background = BrushFromHex("#FEF2F2"), - BorderBrush = BrushFromHex("#FECACA"), + BorderBrush = BrushFromHex("#FEE2E2"), BorderThickness = new Thickness(1), - CornerRadius = new CornerRadius(8), - Padding = new Thickness(6, 1, 6, 1), - Margin = new Thickness(0, 0, 6, 0), + 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 = 9, - FontWeight = FontWeights.SemiBold, - Foreground = BrushFromHex("#991B1B"), + FontSize = 8, + FontWeight = FontWeights.Medium, + Foreground = BrushFromHex("#B91C1C"), } }; DockPanel.SetDock(failedBadge, Dock.Right); @@ -3340,17 +3341,17 @@ public partial class ChatWindow : Window var completedBadge = new Border { Background = BrushFromHex("#ECFDF5"), - BorderBrush = BrushFromHex("#BBF7D0"), + BorderBrush = BrushFromHex("#DCFCE7"), BorderThickness = new Thickness(1), - CornerRadius = new CornerRadius(8), - Padding = new Thickness(6, 1, 6, 1), - Margin = new Thickness(0, 0, 6, 0), + 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 = 9, - FontWeight = FontWeights.SemiBold, + FontSize = 8, + FontWeight = FontWeights.Medium, Foreground = BrushFromHex("#166534"), } }; @@ -3363,11 +3364,11 @@ public partial class ChatWindow : Window Text = item.FailedAgentRunCount > 0 ? $"실행 {item.AgentRunCount} · 실패 {item.FailedAgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 28)}" : $"실행 {item.AgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 32)}", - FontSize = 9.5, + FontSize = 8.25, Foreground = item.FailedAgentRunCount > 0 ? BrushFromHex("#B91C1C") : (TryFindResource("SecondaryText") as Brush ?? Brushes.Gray), - Margin = new Thickness(0, 3, 0, 0), + Margin = new Thickness(0, 1, 0, 0), TextTrimming = TextTrimming.CharacterEllipsis }; if (!string.IsNullOrWhiteSpace(item.LastAgentRunSummary)) @@ -3389,7 +3390,7 @@ public partial class ChatWindow : Window { Text = "\uE70F", // Edit FontFamily = new FontFamily("Segoe MDL2 Assets"), - FontSize = 10, + FontSize = 8.5, Foreground = (TryFindResource("SecondaryText") as Brush ?? Brushes.Gray) }, Background = Brushes.Transparent, @@ -3397,7 +3398,10 @@ public partial class ChatWindow : Window Cursor = Cursors.Hand, VerticalAlignment = VerticalAlignment.Center, Visibility = Visibility.Collapsed, - Padding = new Thickness(4), + Width = 22, + Height = 22, + Padding = new Thickness(0), + Opacity = 0.85, ToolTip = _activeTab == "Cowork" ? "작업 유형" : "대화 주제 변경" }; var capturedId = item.Id; @@ -3409,32 +3413,26 @@ public partial class ChatWindow : Window if (isSelected) { border.BorderBrush = TryFindResource("AccentColor") as Brush ?? Brushes.CornflowerBlue; - border.BorderThickness = new Thickness(2, 0, 0, 0); + border.BorderThickness = new Thickness(1.5, 0, 0, 0); } border.Child = grid; - // 호버 이벤트 — 배경 + 미세 확대 + // 호버 이벤트 — 배경만 얇게 강조 border.RenderTransformOrigin = new Point(0.5, 0.5); border.RenderTransform = new ScaleTransform(1, 1); - var selectedBg = new SolidColorBrush(Color.FromArgb(0x30, 0x4B, 0x5E, 0xFC)); + var hoverBg = new SolidColorBrush(Color.FromArgb(0x08, 0xFF, 0xFF, 0xFF)); border.MouseEnter += (_, _) => { if (!isSelected) - border.Background = new SolidColorBrush(Color.FromArgb(0x15, 0xFF, 0xFF, 0xFF)); + border.Background = hoverBg; catBtn.Visibility = Visibility.Visible; - var st = border.RenderTransform as ScaleTransform; - st?.BeginAnimation(ScaleTransform.ScaleXProperty, new DoubleAnimation(1.02, TimeSpan.FromMilliseconds(120))); - st?.BeginAnimation(ScaleTransform.ScaleYProperty, new DoubleAnimation(1.02, TimeSpan.FromMilliseconds(120))); }; border.MouseLeave += (_, _) => { if (!isSelected) border.Background = Brushes.Transparent; catBtn.Visibility = Visibility.Collapsed; - var st = border.RenderTransform as ScaleTransform; - st?.BeginAnimation(ScaleTransform.ScaleXProperty, new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(150))); - st?.BeginAnimation(ScaleTransform.ScaleYProperty, new DoubleAnimation(1.0, TimeSpan.FromMilliseconds(150))); }; // 클릭 — 이미 선택된 대화면 제목 편집, 아니면 대화 전환