- ChatWindow.xaml에서 slash 팝업 폭/높이/헤더/리스트/푸터 패딩을 축소해 한 화면 정보량을 증가 - ChatWindow.xaml.cs에서 섹션 헤더/명령 항목의 폰트와 패딩을 낮춰 Codex형 컴팩트 탐색 밀도 반영 - 스크롤/선택 UX(재렌더링 최소화) 경로와 충돌 없이 시각 밀도만 조정 - README.md, docs/DEVELOPMENT.md에 2026-04-04 14:09(KST) 기준 이력 반영 - 검증: dotnet build 0경고/0오류, slash 관련 필터 테스트 41건 통과
This commit is contained in:
@@ -222,7 +222,7 @@ public class MyHandler : IActionHandler
|
|||||||
|
|
||||||
### v0.7.3 — AX Agent 권한 코어 재구성 + 입력 계층 정리
|
### v0.7.3 — AX Agent 권한 코어 재구성 + 입력 계층 정리
|
||||||
|
|
||||||
업데이트: 2026-04-04 14:01 (KST)
|
업데이트: 2026-04-04 14:09 (KST)
|
||||||
|
|
||||||
| 분류 | 내용 |
|
| 분류 | 내용 |
|
||||||
|------|------|
|
|------|------|
|
||||||
@@ -282,6 +282,7 @@ public class MyHandler : IActionHandler
|
|||||||
| L4 통합 회귀 보강 | `PermissionModeCatalogTests`/`PermissionModePresentationCatalogTests`/`SlashCommandCatalogTests`를 추가하고 deny 우선 규칙을 `OperationModePolicyTests`에 반영해 권한·슬래시 회귀망을 강화 |
|
| L4 통합 회귀 보강 | `PermissionModeCatalogTests`/`PermissionModePresentationCatalogTests`/`SlashCommandCatalogTests`를 추가하고 deny 우선 규칙을 `OperationModePolicyTests`에 반영해 권한·슬래시 회귀망을 강화 |
|
||||||
| 권한 팝업 핵심 4모드 정렬 | 권한 팝업을 `소극 활용/적극 활용/계획 중심/완전 자동` 중심으로 단순화하고 `활용하지 않음/질문 없이 진행`은 `고급 모드` 접힘 섹션으로 분리 |
|
| 권한 팝업 핵심 4모드 정렬 | 권한 팝업을 `소극 활용/적극 활용/계획 중심/완전 자동` 중심으로 단순화하고 `활용하지 않음/질문 없이 진행`은 `고급 모드` 접힘 섹션으로 분리 |
|
||||||
| slash 스크롤 체감 개선 | 휠/방향키 이동 시 전체 재렌더링을 제거하고 선택 하이라이트만 갱신하도록 바꿔 `/` 팝업 스크롤 반응성과 안정성을 개선 |
|
| slash 스크롤 체감 개선 | 휠/방향키 이동 시 전체 재렌더링을 제거하고 선택 하이라이트만 갱신하도록 바꿔 `/` 팝업 스크롤 반응성과 안정성을 개선 |
|
||||||
|
| slash 팝업 밀도 압축 2단계 | `/` 팝업 폭/높이/패딩과 항목 폰트/행 높이를 축소해 Codex형 컴팩트 밀도와 스캔 속도를 강화 |
|
||||||
| Slash palette 상태 분리 시작 | `ChatWindow`에 몰려 있던 slash 상태를 `SlashPaletteState`로 분리해 이후 Codex/Claude형 composer 개편 기반 마련 |
|
| Slash palette 상태 분리 시작 | `ChatWindow`에 몰려 있던 slash 상태를 `SlashPaletteState`로 분리해 이후 Codex/Claude형 composer 개편 기반 마련 |
|
||||||
| 런처 이미지 미리보기 추가 | `#` 클립보드 이미지 항목에서 `Shift+Enter`로 전용 미리보기 창을 열고, 줌·원본 해상도 확인·PNG/JPEG/BMP 저장·클립보드 복사를 지원 |
|
| 런처 이미지 미리보기 추가 | `#` 클립보드 이미지 항목에서 `Shift+Enter`로 전용 미리보기 창을 열고, 줌·원본 해상도 확인·PNG/JPEG/BMP 저장·클립보드 복사를 지원 |
|
||||||
| 검증 | `dotnet build` 경고 0 / 오류 0, `dotnet test` 436 passed / 0 failed |
|
| 검증 | `dotnet build` 경고 0 / 오류 0, `dotnet test` 436 passed / 0 failed |
|
||||||
|
|||||||
@@ -3430,3 +3430,25 @@ else:
|
|||||||
### 3) 품질 게이트
|
### 3) 품질 게이트
|
||||||
- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0).
|
- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0).
|
||||||
- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~SlashCommandCatalogTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests"` 통과 (84 passed, 0 failed).
|
- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~SlashCommandCatalogTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests"` 통과 (84 passed, 0 failed).
|
||||||
|
|
||||||
|
## 2026-04-04 추가 진행 기록 (연속 실행 32차: slash 팝업 밀도 압축 2단계)
|
||||||
|
|
||||||
|
업데이트: 2026-04-04 14:09 (KST)
|
||||||
|
|
||||||
|
### 1) slash 팝업 프레임 밀도 조정
|
||||||
|
- `ChatWindow.xaml`의 slash 팝업 폭/높이와 내부 여백을 축소:
|
||||||
|
- `MinWidth 620 → 580`, `MaxWidth 780 → 740`
|
||||||
|
- `ScrollViewer MaxHeight 420 → 380`
|
||||||
|
- 헤더/리스트/푸터 패딩 및 마진 축소
|
||||||
|
- 목적: 더 컴팩트한 정보 밀도와 빠른 스캔 흐름 확보.
|
||||||
|
|
||||||
|
### 2) 항목/섹션 타이포 밀도 조정
|
||||||
|
- `ChatWindow.xaml.cs`의 렌더링 항목 크기를 축소:
|
||||||
|
- 섹션 헤더 패딩/폰트(`10.5/10 → 10/9.5`)
|
||||||
|
- 명령 항목 패딩/마진 축소
|
||||||
|
- 명령 라벨/설명 폰트(`13/11.5 → 12.5/11`)
|
||||||
|
- 목적: 한 화면에 더 많은 명령이 보이도록 개선.
|
||||||
|
|
||||||
|
### 3) 품질 게이트
|
||||||
|
- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0).
|
||||||
|
- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~SlashCommandCatalogTests"` 통과 (41 passed, 0 failed).
|
||||||
|
|||||||
@@ -861,7 +861,7 @@
|
|||||||
<Border Background="{DynamicResource LauncherBackground}"
|
<Border Background="{DynamicResource LauncherBackground}"
|
||||||
BorderBrush="{DynamicResource BorderColor}"
|
BorderBrush="{DynamicResource BorderColor}"
|
||||||
BorderThickness="1" CornerRadius="18"
|
BorderThickness="1" CornerRadius="18"
|
||||||
Padding="0" MinWidth="620" MaxWidth="780"
|
Padding="0" MinWidth="580" MaxWidth="740"
|
||||||
PreviewMouseWheel="SlashPopup_PreviewMouseWheel">
|
PreviewMouseWheel="SlashPopup_PreviewMouseWheel">
|
||||||
<Border.Effect>
|
<Border.Effect>
|
||||||
<DropShadowEffect BlurRadius="16" ShadowDepth="0" Opacity="0.16"/>
|
<DropShadowEffect BlurRadius="16" ShadowDepth="0" Opacity="0.16"/>
|
||||||
@@ -871,7 +871,7 @@
|
|||||||
BorderBrush="{DynamicResource BorderColor}"
|
BorderBrush="{DynamicResource BorderColor}"
|
||||||
BorderThickness="0,0,0,1"
|
BorderThickness="0,0,0,1"
|
||||||
CornerRadius="18,18,0,0"
|
CornerRadius="18,18,0,0"
|
||||||
Padding="14,12,14,10">
|
Padding="12,10,12,8">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
@@ -882,7 +882,7 @@
|
|||||||
<StackPanel Orientation="Horizontal" Grid.Column="0">
|
<StackPanel Orientation="Horizontal" Grid.Column="0">
|
||||||
<Border Background="{DynamicResource AccentColor}"
|
<Border Background="{DynamicResource AccentColor}"
|
||||||
CornerRadius="8"
|
CornerRadius="8"
|
||||||
Padding="6,2"
|
Padding="5,1.5"
|
||||||
Margin="0,0,8,0"
|
Margin="0,0,8,0"
|
||||||
VerticalAlignment="Center">
|
VerticalAlignment="Center">
|
||||||
<TextBlock Text="/"
|
<TextBlock Text="/"
|
||||||
@@ -892,7 +892,7 @@
|
|||||||
</Border>
|
</Border>
|
||||||
<TextBlock x:Name="SlashPopupTitle"
|
<TextBlock x:Name="SlashPopupTitle"
|
||||||
Text="명령 및 스킬"
|
Text="명령 및 스킬"
|
||||||
FontSize="13.5"
|
FontSize="13"
|
||||||
FontWeight="SemiBold"
|
FontWeight="SemiBold"
|
||||||
Foreground="{DynamicResource PrimaryText}"
|
Foreground="{DynamicResource PrimaryText}"
|
||||||
VerticalAlignment="Center"/>
|
VerticalAlignment="Center"/>
|
||||||
@@ -901,7 +901,7 @@
|
|||||||
x:Name="BtnSlashReset"
|
x:Name="BtnSlashReset"
|
||||||
Click="BtnSlashReset_Click"
|
Click="BtnSlashReset_Click"
|
||||||
Style="{StaticResource GhostBtn}"
|
Style="{StaticResource GhostBtn}"
|
||||||
Padding="8,4"
|
Padding="7,3"
|
||||||
Margin="0,0,6,0"
|
Margin="0,0,6,0"
|
||||||
ToolTip="핀/최근 정리">
|
ToolTip="핀/최근 정리">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
@@ -919,7 +919,7 @@
|
|||||||
x:Name="BtnSlashToggleGroups"
|
x:Name="BtnSlashToggleGroups"
|
||||||
Click="BtnSlashToggleGroups_Click"
|
Click="BtnSlashToggleGroups_Click"
|
||||||
Style="{StaticResource GhostBtn}"
|
Style="{StaticResource GhostBtn}"
|
||||||
Padding="8,4"
|
Padding="7,3"
|
||||||
ToolTip="명령/스킬 그룹 전체 접기 또는 펼치기">
|
ToolTip="명령/스킬 그룹 전체 접기 또는 펼치기">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<TextBlock Text=""
|
<TextBlock Text=""
|
||||||
@@ -936,25 +936,25 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
<TextBlock x:Name="SlashPopupHint"
|
<TextBlock x:Name="SlashPopupHint"
|
||||||
Text="방향키나 마우스 휠로 이동하고 Enter로 바로 실행합니다"
|
Text="방향키나 마우스 휠로 이동하고 Enter로 바로 실행합니다"
|
||||||
FontSize="11.5"
|
FontSize="11"
|
||||||
Foreground="{DynamicResource SecondaryText}"
|
Foreground="{DynamicResource SecondaryText}"
|
||||||
Margin="0,6,0,0"/>
|
Margin="0,5,0,0"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
<ScrollViewer x:Name="SlashScrollViewer"
|
<ScrollViewer x:Name="SlashScrollViewer"
|
||||||
MaxHeight="420"
|
MaxHeight="380"
|
||||||
VerticalScrollBarVisibility="Auto"
|
VerticalScrollBarVisibility="Auto"
|
||||||
HorizontalScrollBarVisibility="Disabled"
|
HorizontalScrollBarVisibility="Disabled"
|
||||||
CanContentScroll="False"
|
CanContentScroll="False"
|
||||||
PanningMode="VerticalOnly"
|
PanningMode="VerticalOnly"
|
||||||
PreviewMouseWheel="SlashPopup_PreviewMouseWheel"
|
PreviewMouseWheel="SlashPopup_PreviewMouseWheel"
|
||||||
Padding="10,10,10,8">
|
Padding="8,8,8,6">
|
||||||
<ItemsControl x:Name="SlashItems"/>
|
<ItemsControl x:Name="SlashItems"/>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
<TextBlock x:Name="SlashPopupFooter"
|
<TextBlock x:Name="SlashPopupFooter"
|
||||||
Margin="14,0,14,12"
|
Margin="12,0,12,10"
|
||||||
Text="Enter 실행 · ↑↓ 이동 · 휠 스크롤 · Esc 닫기"
|
Text="Enter 실행 · ↑↓ 이동 · 휠 스크롤 · Esc 닫기"
|
||||||
FontSize="10.5"
|
FontSize="10"
|
||||||
Foreground="{DynamicResource SecondaryText}"/>
|
Foreground="{DynamicResource SecondaryText}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
|
|||||||
@@ -5255,8 +5255,8 @@ public partial class ChatWindow : Window
|
|||||||
BorderBrush = borderBrush,
|
BorderBrush = borderBrush,
|
||||||
BorderThickness = new Thickness(1),
|
BorderThickness = new Thickness(1),
|
||||||
CornerRadius = new CornerRadius(8),
|
CornerRadius = new CornerRadius(8),
|
||||||
Padding = new Thickness(10, 6, 10, 6),
|
Padding = new Thickness(9, 5, 9, 5),
|
||||||
Margin = new Thickness(0, 0, 0, 6),
|
Margin = new Thickness(0, 0, 0, 5),
|
||||||
Cursor = Cursors.Hand,
|
Cursor = Cursors.Hand,
|
||||||
};
|
};
|
||||||
var grid = new Grid();
|
var grid = new Grid();
|
||||||
@@ -5276,7 +5276,7 @@ public partial class ChatWindow : Window
|
|||||||
var titleText = new TextBlock
|
var titleText = new TextBlock
|
||||||
{
|
{
|
||||||
Text = $"{title} {count}",
|
Text = $"{title} {count}",
|
||||||
FontSize = 10.5,
|
FontSize = 10,
|
||||||
FontWeight = FontWeights.SemiBold,
|
FontWeight = FontWeights.SemiBold,
|
||||||
Foreground = primaryText,
|
Foreground = primaryText,
|
||||||
VerticalAlignment = VerticalAlignment.Center,
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
@@ -5286,7 +5286,7 @@ public partial class ChatWindow : Window
|
|||||||
var metaText = new TextBlock
|
var metaText = new TextBlock
|
||||||
{
|
{
|
||||||
Text = expanded ? "접기" : "펼치기",
|
Text = expanded ? "접기" : "펼치기",
|
||||||
FontSize = 10,
|
FontSize = 9.5,
|
||||||
Foreground = secondaryText,
|
Foreground = secondaryText,
|
||||||
VerticalAlignment = VerticalAlignment.Center,
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
};
|
};
|
||||||
@@ -5328,8 +5328,8 @@ public partial class ChatWindow : Window
|
|||||||
BorderBrush = borderBrush,
|
BorderBrush = borderBrush,
|
||||||
BorderThickness = new Thickness(1),
|
BorderThickness = new Thickness(1),
|
||||||
CornerRadius = new CornerRadius(10),
|
CornerRadius = new CornerRadius(10),
|
||||||
Padding = new Thickness(10, 7, 10, 7),
|
Padding = new Thickness(9, 6, 9, 6),
|
||||||
Margin = new Thickness(0, 0, 0, 4),
|
Margin = new Thickness(0, 0, 0, 3),
|
||||||
Cursor = skillAvailable ? Cursors.Hand : Cursors.Arrow,
|
Cursor = skillAvailable ? Cursors.Hand : Cursors.Arrow,
|
||||||
Opacity = skillAvailable ? 1.0 : 0.5,
|
Opacity = skillAvailable ? 1.0 : 0.5,
|
||||||
};
|
};
|
||||||
@@ -5351,7 +5351,7 @@ public partial class ChatWindow : Window
|
|||||||
titleRow.Children.Add(new TextBlock
|
titleRow.Children.Add(new TextBlock
|
||||||
{
|
{
|
||||||
Text = cmd,
|
Text = cmd,
|
||||||
FontSize = 13,
|
FontSize = 12.5,
|
||||||
FontWeight = FontWeights.SemiBold,
|
FontWeight = FontWeights.SemiBold,
|
||||||
Foreground = skillAvailable ? primaryText : secondaryText,
|
Foreground = skillAvailable ? primaryText : secondaryText,
|
||||||
VerticalAlignment = VerticalAlignment.Center,
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
@@ -5396,10 +5396,10 @@ public partial class ChatWindow : Window
|
|||||||
leftStack.Children.Add(new TextBlock
|
leftStack.Children.Add(new TextBlock
|
||||||
{
|
{
|
||||||
Text = label,
|
Text = label,
|
||||||
FontSize = 11.5,
|
FontSize = 11,
|
||||||
Foreground = secondaryText,
|
Foreground = secondaryText,
|
||||||
VerticalAlignment = VerticalAlignment.Center,
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
Margin = new Thickness(18, 2, 0, 0),
|
Margin = new Thickness(18, 1.5, 0, 0),
|
||||||
TextTrimming = TextTrimming.CharacterEllipsis,
|
TextTrimming = TextTrimming.CharacterEllipsis,
|
||||||
});
|
});
|
||||||
Grid.SetColumn(leftStack, 0);
|
Grid.SetColumn(leftStack, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user