From e8e701e4a1ad8477c48c6fb0601e943f46553560 Mon Sep 17 00:00:00 2001 From: lacvet Date: Sat, 4 Apr 2026 12:34:34 +0900 Subject: [PATCH] =?UTF-8?q?UI=20=EB=A7=88=EA=B0=90=20=ED=8A=9C=EB=8B=9D:?= =?UTF-8?q?=20=EA=B6=8C=ED=95=9C=20=ED=8C=9D=EC=97=85=20=EA=B0=80=EB=8F=85?= =?UTF-8?q?=EC=84=B1=C2=B7=EC=BB=B4=ED=8F=AC=EC=A0=80=20=EB=B0=80=EB=8F=84?= =?UTF-8?q?=C2=B7=EC=A0=90=EA=B2=80=20=EC=B2=B4=ED=81=AC=EB=A6=AC=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ChatWindow 권한 팝업의 섹션/행 패딩·폰트·줄간격을 미세 조정해 스캔 속도 개선 - 슬래시 팔레트 하단 안내에 PgUp/PgDn/Home/End 키 이동 정보를 반영 - 좌측 기본 카테고리 라벨을 주제 선택/작업 선택으로 통일 - 입력 상단 컴포저(모델/프리셋/인라인 설정) 간격을 컴팩트하게 재정돈 - docs/UI_UX_CHECKLIST.md에 최신 점검 결과(운영모드 필터 18건, 전체 테스트 436건) 기록 - README.md, docs/DEVELOPMENT.md 이력 및 업데이트 시각(2026-04-04 12:33 KST) 갱신 - 빌드 복구 메모: WPF 임시 생성물 꼬임 발생 시 obj/bin 정리 후 정상 재생성 확인 --- README.md | 5 +++- docs/DEVELOPMENT.md | 33 +++++++++++++++++++++++++ docs/UI_UX_CHECKLIST.md | 9 +++++++ src/AxCopilot/Views/ChatWindow.xaml | 8 +++--- src/AxCopilot/Views/ChatWindow.xaml.cs | 34 +++++++++++++------------- 5 files changed, 67 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index f0a3c22..80ab701 100644 --- a/README.md +++ b/README.md @@ -222,7 +222,7 @@ public class MyHandler : IActionHandler ### v0.7.3 — AX Agent 권한 코어 재구성 + 입력 계층 정리 -업데이트: 2026-04-04 12:22 (KST) +업데이트: 2026-04-04 12:33 (KST) | 분류 | 내용 | |------|------| @@ -267,6 +267,9 @@ public class MyHandler : IActionHandler | 권한 모드 표면 통일 | 권한 표시 명칭을 `활용하지 않음/소극 활용/적극 활용/계획 중심/완전 자동/질문 없이 진행`으로 통일하고 팝업 선택 순서를 동일 체계로 재정렬 | | 권한 기본 동작/순환 보강 | Chat 탭 기본 권한을 `활용하지 않음`으로 적용하고, `/sandbox-toggle` 및 AX Agent 설정 권한 순환을 같은 순서(`활용하지 않음→소극→적극→계획→완전 자동→질문 없이 진행`)로 맞춤 | | 운영 모드 회귀 점검 강화 | `OperationModePolicyTests`, `OperationModeReadinessTests`, `LlmOperationModeTests` 필터 테스트(18건)를 통과해 internal/external 차단·허용 경로를 재검증 | +| 권한 팝업 밀도 재정돈 | 권한 섹션 헤더/카드/행의 패딩·폰트·줄간격을 조정해 과밀 영역을 완화하고 Codex/Claude형 스캔 속도에 맞춤 | +| 좌측/컴포저 라벨 정리 | 좌측 기본 카테고리 라벨을 `주제 선택/작업 선택`으로 통일하고, 입력 상단 바 패딩·간격을 미세 조정해 단일 라인 정돈 강화 | +| 체크리스트 실행 결과 기록 | `docs/UI_UX_CHECKLIST.md`에 2026-04-04 12:22 기준 점검 결과(운영모드 필터 18건 + 전체 436건 통과)를 기록 | | Slash palette 상태 분리 시작 | `ChatWindow`에 몰려 있던 slash 상태를 `SlashPaletteState`로 분리해 이후 Codex/Claude형 composer 개편 기반 마련 | | 런처 이미지 미리보기 추가 | `#` 클립보드 이미지 항목에서 `Shift+Enter`로 전용 미리보기 창을 열고, 줌·원본 해상도 확인·PNG/JPEG/BMP 저장·클립보드 복사를 지원 | | 검증 | `dotnet build` 경고 0 / 오류 0, `dotnet test` 436 passed / 0 failed | diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 0d0c920..bc80b35 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -3206,6 +3206,39 @@ else: - `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` 통과 (436 passed, 0 failed). +## 2026-04-04 추가 진행 기록 (연속 실행 23차: UI 마감 튜닝 + 체크리스트 실행 기록) + +업데이트: 2026-04-04 12:33 (KST) + +### 1) 권한 팝업 가독성 마감 +- 권한 섹션 헤더/요약 카드/권한 행의 폰트·패딩·줄간격을 조정해 밀도 균형을 개선. +- 권한 설명 문장의 줄바꿈을 정돈해 항목 간 스캔 속도를 개선. + +### 2) 좌측 패널/카테고리 라벨 정리 +- 탭별 기본 카테고리 라벨을 + - Chat: `주제 선택` + - Cowork/Code: `작업 선택` + 로 통일해 좌측 목적성을 명확화. + +### 3) 컴포저 미세 튜닝 +- 입력 컨테이너 패딩, 모델/프리셋 바 상단 간격, 인라인 설정 패널 간격을 조정해 단일 라인 구성을 더 컴팩트하게 정돈. +- `/` 팔레트 하단 안내 문구에 `PgUp/PgDn/Home/End` 키 이동 정보를 반영. + +### 4) 체크리스트 및 운영 모드 점검 기록 +- `docs/UI_UX_CHECKLIST.md`에 최근 점검 결과 섹션 추가. +- 운영 모드 관련 테스트 필터 18건 통과: + - `OperationModePolicyTests` + - `OperationModeReadinessTests` + - `LlmOperationModeTests` + +### 5) 빌드 이슈 대응 +- WPF 임시 생성물(`wpftmp`) 꼬임으로 발생한 빌드 실패를 확인. +- `src/AxCopilot/obj`, `src/AxCopilot/bin` 정리 후 재빌드/재테스트로 정상 복구. + +### 6) 품질 게이트 +- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` 통과 (436 passed, 0 failed). + diff --git a/docs/UI_UX_CHECKLIST.md b/docs/UI_UX_CHECKLIST.md index 34f1403..4698a64 100644 --- a/docs/UI_UX_CHECKLIST.md +++ b/docs/UI_UX_CHECKLIST.md @@ -45,3 +45,12 @@ - [ ] `dotnet build src/AxCopilot/AxCopilot.csproj` 경고 0 / 오류 0 - [ ] `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` 전체 통과 +## 7. 최근 점검 결과 + +점검 시각: 2026-04-04 12:22 (KST) + +- [x] 권한 모드 표면 명칭/순서 통일 적용 확인 +- [x] `/` 팔레트 휠/방향키/PageUp/PageDown/Home/End 동작 경로 반영 확인 +- [x] AX Agent 설정 권한 순환 순서와 `/sandbox-toggle` 순환 순서 일치 확인 +- [x] 운영 모드 회귀 필터 테스트 18건 통과 (`OperationModePolicy/Readiness/LlmOperationMode`) +- [x] 전체 테스트 436건 통과 diff --git a/src/AxCopilot/Views/ChatWindow.xaml b/src/AxCopilot/Views/ChatWindow.xaml index 73ce2a6..221c57b 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml +++ b/src/AxCopilot/Views/ChatWindow.xaml @@ -1079,7 +1079,7 @@ @@ -1093,7 +1093,7 @@ - + @@ -1149,8 +1149,8 @@ "모든 작업", _ => "모든 주제" }; + CategoryLabel.Text = _activeTab switch { "Cowork" or "Code" => "작업 선택", _ => "주제 선택" }; CategoryIcon.Text = "\uE8BD"; } else if (_selectedCategory == "__custom__") @@ -1636,7 +1636,7 @@ public partial class ChatWindow : Window var titleBlock = new TextBlock { Text = title, - FontSize = 10.5, + FontSize = 10, FontWeight = FontWeights.SemiBold, Foreground = primaryText, VerticalAlignment = VerticalAlignment.Center, @@ -1650,7 +1650,7 @@ public partial class ChatWindow : Window { Background = Brushes.Transparent, CornerRadius = new CornerRadius(6), - Padding = new Thickness(8, 6, 8, 6), + Padding = new Thickness(8, 5, 8, 5), Cursor = Cursors.Hand, Focusable = true, Child = headerGrid, @@ -1708,12 +1708,12 @@ public partial class ChatWindow : Window : BrushFromHex("#C7D2FE"), BorderThickness = new Thickness(1), CornerRadius = new CornerRadius(8), - Padding = new Thickness(12, 10, 12, 10), - Margin = new Thickness(0, 0, 0, 6), - Child = new StackPanel - { - Children = + Padding = new Thickness(11, 9, 11, 9), + Margin = new Thickness(0, 0, 0, 6), + Child = new StackPanel { + Children = + { new TextBlock { Text = $"현재 권한 모드 · {PermissionModeCatalog.ToDisplayLabel(summary.EffectiveMode)}", @@ -1728,7 +1728,7 @@ public partial class ChatWindow : Window new TextBlock { Text = $"{summary.Description} 기본값 {PermissionModeCatalog.ToDisplayLabel(summary.DefaultMode)} · 예외 {summary.OverrideCount}개", - FontSize = 10.5, + FontSize = 10, Margin = new Thickness(0, 4, 0, 0), Foreground = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray, TextWrapping = TextWrapping.Wrap, @@ -1919,8 +1919,8 @@ public partial class ChatWindow : Window BorderBrush = isActive ? BrushFromHex("#C7D2FE") : Brushes.Transparent, BorderThickness = new Thickness(1), CornerRadius = new CornerRadius(8), - Padding = new Thickness(10, 7, 10, 7), - Margin = new Thickness(0, 1, 0, 1), + Padding = new Thickness(10, 6, 10, 6), + Margin = new Thickness(0, 2, 0, 2), Cursor = Cursors.Hand, Focusable = true, }; @@ -1945,18 +1945,18 @@ public partial class ChatWindow : Window textStack.Children.Add(new TextBlock { Text = title, - FontSize = 12, + FontSize = 11.5, FontWeight = FontWeights.SemiBold, Foreground = TryFindResource("PrimaryText") as Brush ?? Brushes.White, }); textStack.Children.Add(new TextBlock { Text = desc, - FontSize = 10.5, + FontSize = 10, Margin = new Thickness(0, 2, 0, 0), Foreground = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray, TextWrapping = TextWrapping.Wrap, - LineHeight = 14.5, + LineHeight = 14, MaxWidth = 230, }); Grid.SetColumn(textStack, 1); @@ -5400,8 +5400,8 @@ public partial class ChatWindow : Window BorderBrush = isSelected ? accent : borderBrush, BorderThickness = new Thickness(1), CornerRadius = new CornerRadius(10), - Padding = new Thickness(10, 8, 10, 8), - Margin = new Thickness(0, 0, 0, 6), + Padding = new Thickness(10, 7, 10, 7), + Margin = new Thickness(0, 0, 0, 4), Cursor = skillAvailable ? Cursors.Hand : Cursors.Arrow, Opacity = skillAvailable ? 1.0 : 0.5, }; @@ -5566,7 +5566,7 @@ public partial class ChatWindow : Window } else { - SlashPopupFooter.Text = $"Enter 실행 · ↑↓ 이동 · 휠 스크롤 · Esc 닫기 · 표시 {visibleCommandCount + visibleSkillCount}/{total}"; + SlashPopupFooter.Text = $"Enter 실행 · ↑↓/PgUp/PgDn 이동 · Home/End · Esc 닫기 · 표시 {visibleCommandCount + visibleSkillCount}/{total}"; } EnsureSlashSelectionVisible();