AX Agent 좌측 패널과 컨텍스트 사용량 UI를 Codex 기준으로 재정렬\n\n- 좌측 사이드바 폭과 새 대화/검색/필터/탭 메뉴 타이포를 키워 레퍼런스와 더 비슷한 밀도로 조정\n- Cowork 작업 유형 카드 크기와 제목/hover 설명 라벨 폰트를 확대해 가독성 보정\n- 하단 컨텍스트 사용량 카드를 작은 원형 심볼로 축소하고 hover 전용 커스텀 팝업으로 상세 정보 분리\n- README와 DEVELOPMENT 문서에 변경 이력 및 검증 결과 즉시 반영\n\n검증 결과\n- dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\\n- 경고 0 / 오류 0
Some checks failed
Release Gate / gate (push) Has been cancelled

This commit is contained in:
2026-04-05 16:39:32 +09:00
parent b53af39358
commit 500c8ffb06
4 changed files with 209 additions and 96 deletions

View File

@@ -412,7 +412,7 @@
<!-- 축소 아이콘 바 (사이드바 닫힘 시 표시) -->
<ColumnDefinition x:Name="IconBarColumn" Width="0"/>
<!-- 사이드바 (열림 시 표시) -->
<ColumnDefinition x:Name="SidebarColumn" Width="220" MinWidth="0"/>
<ColumnDefinition x:Name="SidebarColumn" Width="246" MinWidth="0"/>
<ColumnDefinition Width="*"/>
<!-- 미리보기 스플리터 -->
<ColumnDefinition x:Name="SplitterColumn" Width="0"/>
@@ -506,8 +506,8 @@
<StackPanel>
<Border x:Name="SidebarNewChatTrigger"
Background="Transparent"
CornerRadius="5"
Padding="6,4"
CornerRadius="7"
Padding="8,6"
Cursor="Hand"
MouseEnter="SidebarNewChatTrigger_MouseEnter"
MouseLeave="SidebarNewChatTrigger_MouseLeave"
@@ -518,25 +518,25 @@
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE710;" FontFamily="Segoe MDL2 Assets" FontSize="9.75"
<TextBlock Text="&#xE710;" FontFamily="Segoe MDL2 Assets" FontSize="11.5"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="새 대화"
Foreground="{DynamicResource PrimaryText}"
FontSize="10" Margin="6,0,0,0" VerticalAlignment="Center"/>
FontSize="12.5" FontWeight="SemiBold" Margin="8,0,0,0" VerticalAlignment="Center"/>
<TextBlock x:Name="SidebarNewChatShortcutHint"
Grid.Column="2"
Text="Ctrl+N"
Visibility="Collapsed"
Foreground="{DynamicResource SecondaryText}"
FontSize="9.25"
FontSize="10.5"
VerticalAlignment="Center"/>
</Grid>
</Border>
<Border x:Name="SidebarSearchTrigger"
Background="Transparent"
CornerRadius="5"
Padding="6,4"
CornerRadius="7"
Padding="8,6"
Cursor="Hand"
MouseEnter="SidebarSearchTrigger_MouseEnter"
MouseLeave="SidebarSearchTrigger_MouseLeave"
@@ -547,17 +547,17 @@
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE721;" FontFamily="Segoe MDL2 Assets" FontSize="9.75"
<TextBlock Text="&#xE721;" FontFamily="Segoe MDL2 Assets" FontSize="11.5"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="검색"
Foreground="{DynamicResource PrimaryText}"
FontSize="10" Margin="6,0,0,0" VerticalAlignment="Center"/>
FontSize="12.5" FontWeight="SemiBold" Margin="8,0,0,0" VerticalAlignment="Center"/>
<TextBlock x:Name="SidebarSearchShortcutHint"
Grid.Column="2"
Text="Ctrl+K"
Visibility="Collapsed"
Foreground="{DynamicResource SecondaryText}"
FontSize="9.25"
FontSize="10.5"
VerticalAlignment="Center"/>
</Grid>
</Border>
@@ -565,7 +565,7 @@
<Border x:Name="SidebarSearchEditor"
Background="{DynamicResource ItemBackground}"
CornerRadius="7"
Padding="7,4"
Padding="9,6"
Visibility="Collapsed"
Opacity="0"
RenderTransformOrigin="0,0.5">
@@ -580,35 +580,35 @@
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE721;" FontFamily="Segoe MDL2 Assets" FontSize="11"
<TextBlock Text="&#xE721;" FontFamily="Segoe MDL2 Assets" FontSize="12.5"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<TextBox x:Name="SearchBox" Grid.Column="1"
Background="Transparent" BorderThickness="0"
Foreground="{DynamicResource PrimaryText}"
CaretBrush="{DynamicResource AccentColor}" FontSize="10.5"
VerticalAlignment="Center" Margin="8,0,6,0"
CaretBrush="{DynamicResource AccentColor}" FontSize="12.5"
VerticalAlignment="Center" Margin="9,0,7,0"
TextChanged="SearchBox_TextChanged"/>
<Button x:Name="BtnConversationSort" Grid.Column="2"
Style="{StaticResource GhostBtn}"
Padding="6,2.5" MinWidth="50"
Padding="7,3.5" MinWidth="58"
Margin="0,0,0,0"
VerticalAlignment="Center"
Click="BtnConversationSort_Click"
ToolTip="대화 정렬 기준 전환"
Visibility="Collapsed">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE8CB;" FontFamily="Segoe MDL2 Assets" FontSize="10"
<TextBlock Text="&#xE8CB;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,4,0"/>
<TextBlock x:Name="ConversationSortLabel" Text="활동"
FontSize="10" FontWeight="SemiBold"
FontSize="11.5" FontWeight="SemiBold"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
<Button x:Name="BtnRunningOnlyFilter" Grid.Column="3"
Style="{StaticResource GhostBtn}"
Padding="6,2.5" MinWidth="50"
Padding="7,3.5" MinWidth="58"
Margin="5,0,0,0"
VerticalAlignment="Center"
Click="BtnRunningOnlyFilter_Click"
@@ -616,24 +616,24 @@
Visibility="Collapsed"
IsEnabled="False">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE768;" FontFamily="Segoe MDL2 Assets" FontSize="10"
<TextBlock Text="&#xE768;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,4,0"/>
<TextBlock x:Name="RunningOnlyFilterLabel" Text="진행"
FontSize="10" FontWeight="SemiBold"
FontSize="11.5" FontWeight="SemiBold"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
<Button Grid.Column="4"
Style="{StaticResource GhostBtn}"
Padding="6,3"
Padding="7,4"
Margin="5,0,0,0"
Click="BtnSidebarSearchClose_Click"
ToolTip="검색 닫기">
<TextBlock Text="&#xE711;"
FontFamily="Segoe MDL2 Assets"
FontSize="9.75"
FontSize="10.5"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
</Grid>
@@ -644,20 +644,20 @@
<!-- 상단 필터 드롭다운 -->
<Border Grid.Row="2" Margin="12,0,12,4">
<Button x:Name="BtnCategoryDrop" Style="{StaticResource GhostBtn}"
HorizontalAlignment="Stretch" Padding="7,3.5"
HorizontalAlignment="Stretch" Padding="9,5"
Click="BtnCategoryDrop_Click">
<Grid HorizontalAlignment="Stretch">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="CategoryIcon" Text="&#xE8BD;"
FontFamily="Segoe MDL2 Assets" FontSize="10"
FontFamily="Segoe MDL2 Assets" FontSize="11.5"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center" Margin="0,0,6,0"/>
VerticalAlignment="Center" Margin="0,0,7,0"/>
<TextBlock x:Name="CategoryLabel" Text="모든 주제"
FontSize="10.25" FontWeight="SemiBold"
FontSize="12" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
</StackPanel>
<TextBlock Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="8.5"
<TextBlock Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="9.5"
Foreground="{DynamicResource SecondaryText}"
HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
@@ -674,18 +674,18 @@
<StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,0,4" Visibility="Collapsed">
<TextBlock x:Name="SidebarModeBadgeIcon" Text="&#xE8BD;"
FontFamily="Segoe MDL2 Assets" FontSize="10.5"
FontFamily="Segoe MDL2 Assets" FontSize="11.5"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center" Margin="0,0,6,0"/>
<TextBlock x:Name="SidebarModeBadgeTitle" Text="Chat 메뉴"
FontSize="10.5" FontWeight="SemiBold"
FontSize="11.75" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
</StackPanel>
<StackPanel x:Name="SidebarChatMenu" Visibility="Visible">
<Border Cursor="Hand" Background="Transparent" CornerRadius="8"
Padding="7,3.5" Margin="0,0,0,2"
Padding="9,5" Margin="0,0,0,3"
MouseLeftButtonUp="SidebarChatAll_MouseLeftButtonUp">
<Grid>
<Grid.ColumnDefinitions>
@@ -693,17 +693,17 @@
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE8BD;" FontFamily="Segoe MDL2 Assets" FontSize="10"
<TextBlock Text="&#xE8BD;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="주제"
Foreground="{DynamicResource PrimaryText}"
FontSize="10.25" Margin="6,0,0,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="8.5"
FontSize="12" Margin="7,0,0,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="9.5"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border x:Name="SidebarChatRunningRow" Cursor="Hand" Background="Transparent" CornerRadius="8"
Padding="7,3.5"
Padding="9,5"
MouseLeftButtonUp="SidebarChatRunning_MouseLeftButtonUp"
Visibility="Collapsed">
<Grid>
@@ -712,21 +712,21 @@
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE768;" FontFamily="Segoe MDL2 Assets" FontSize="10"
<TextBlock Text="&#xE768;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="#22C55E" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="진행 중 대화만 보기"
Foreground="{DynamicResource PrimaryText}"
FontSize="10.25" Margin="6,0,0,0" VerticalAlignment="Center"/>
FontSize="12" Margin="7,0,0,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" x:Name="SidebarChatRunningState" Text="OFF"
Foreground="{DynamicResource SecondaryText}"
FontSize="9.75" VerticalAlignment="Center"/>
FontSize="10.75" VerticalAlignment="Center"/>
</Grid>
</Border>
</StackPanel>
<StackPanel x:Name="SidebarCoworkMenu" Visibility="Collapsed">
<Border Cursor="Hand" Background="Transparent" CornerRadius="8"
Padding="7,3.5" Margin="0,0,0,2"
Padding="9,5" Margin="0,0,0,3"
MouseLeftButtonUp="SidebarCoworkCategory_MouseLeftButtonUp">
<Grid>
<Grid.ColumnDefinitions>
@@ -734,12 +734,12 @@
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE8FD;" FontFamily="Segoe MDL2 Assets" FontSize="10"
<TextBlock Text="&#xE8FD;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="#3B82F6" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="작업 유형"
Foreground="{DynamicResource PrimaryText}"
FontSize="10.25" Margin="6,0,0,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="8.5"
FontSize="12" Margin="7,0,0,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="9.5"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
</Grid>
</Border>
@@ -747,7 +747,7 @@
<StackPanel x:Name="SidebarCodeMenu" Visibility="Collapsed">
<Border Cursor="Hand" Background="Transparent" CornerRadius="8"
Padding="7,3.5" Margin="0,0,0,2"
Padding="9,5" Margin="0,0,0,3"
MouseLeftButtonUp="SidebarCodeCategory_MouseLeftButtonUp">
<Grid>
<Grid.ColumnDefinitions>
@@ -755,12 +755,12 @@
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE943;" FontFamily="Segoe MDL2 Assets" FontSize="10"
<TextBlock Text="&#xE943;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="#3B82F6" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="워크스페이스"
Foreground="{DynamicResource PrimaryText}"
FontSize="10.25" Margin="6,0,0,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="8.5"
FontSize="12" Margin="7,0,0,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="9.5"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
</Grid>
</Border>
@@ -1217,14 +1217,14 @@
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<TextBlock x:Name="EmptyStateTitle" Text="작업을 시작하세요" FontSize="18" FontWeight="SemiBold"
<TextBlock x:Name="EmptyStateTitle" Text="작업을 시작하세요" FontSize="22" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}" HorizontalAlignment="Center"/>
<TextBlock x:Name="EmptyStateDesc" Text="프롬프트를 입력하거나 아래 작업 유형을 선택하면 됩니다"
FontSize="12.5" Foreground="{DynamicResource SecondaryText}"
FontSize="14.25" Foreground="{DynamicResource SecondaryText}"
HorizontalAlignment="Center"
TextAlignment="Center"
Width="380"
Margin="0,5,0,0"/>
Width="430"
Margin="0,7,0,0"/>
</StackPanel>
<ScrollViewer x:Name="TopicPresetScrollViewer"
@@ -1692,25 +1692,25 @@
<Border x:Name="TokenUsageCard"
Grid.Column="2"
Margin="6,0,0,0"
Padding="6,3"
Padding="0"
Width="28"
Height="28"
CornerRadius="999"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Background="{DynamicResource ItemBackground}"
BorderBrush="Transparent"
BorderThickness="0"
Background="Transparent"
VerticalAlignment="Center"
Visibility="Collapsed">
Visibility="Collapsed"
Cursor="Hand"
MouseEnter="TokenUsageCard_MouseEnter"
MouseLeave="TokenUsageCard_MouseLeave">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid Width="28" Height="28" VerticalAlignment="Center">
<Ellipse Stroke="{DynamicResource HintBackground}"
StrokeThickness="3.5"/>
StrokeThickness="3"/>
<Path x:Name="TokenUsageArc"
Stroke="{DynamicResource AccentColor}"
StrokeThickness="3.5"
StrokeThickness="3"
StrokeStartLineCap="Round"
StrokeEndLineCap="Round"/>
<Canvas IsHitTestVisible="False">
@@ -1721,28 +1721,26 @@
</Canvas>
<TextBlock x:Name="TokenUsagePercentText"
Text="0%"
FontSize="9"
FontSize="8.25"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
<StackPanel Grid.Column="1"
Margin="7,0,5,0"
VerticalAlignment="Center">
<StackPanel Visibility="Collapsed">
<TextBlock x:Name="TokenUsageSummaryText"
Text="컨텍스트"
FontSize="10.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock x:Name="TokenUsageHintText"
Text="0 / 0"
FontSize="9"
Foreground="{DynamicResource SecondaryText}"/>
Text="0 / 0"
FontSize="9"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<Button x:Name="BtnCompactNow"
Grid.Column="2"
Style="{StaticResource GhostBtn}"
Visibility="Collapsed"
Padding="6,3"
Margin="0"
VerticalAlignment="Center"
@@ -1764,6 +1762,53 @@
</Button>
</Grid>
</Border>
<Popup x:Name="TokenUsagePopup"
Grid.Column="2"
PlacementTarget="{Binding ElementName=TokenUsageCard}"
Placement="Top"
HorizontalOffset="-8"
VerticalOffset="-10"
AllowsTransparency="True"
PopupAnimation="Fade"
StaysOpen="True">
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="14"
Padding="12,10"
MinWidth="186"
MouseEnter="TokenUsagePopup_MouseEnter"
MouseLeave="TokenUsagePopup_MouseLeave">
<Border.Effect>
<DropShadowEffect BlurRadius="18" ShadowDepth="0" Opacity="0.16"/>
</Border.Effect>
<StackPanel>
<TextBlock x:Name="TokenUsagePopupTitle"
Text="컨텍스트 창"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock x:Name="TokenUsagePopupUsage"
Margin="0,6,0,0"
Text="76% 창"
FontSize="18"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock x:Name="TokenUsagePopupDetail"
Margin="0,2,0,0"
Text="197k/258k 캐시 토큰 사용"
FontSize="11.5"
Foreground="{DynamicResource SecondaryText}"
TextWrapping="Wrap"/>
<TextBlock x:Name="TokenUsagePopupCompact"
Margin="0,8,0,0"
Text="AX Agent가 컨텍스트를 자동으로 압축합니다"
FontSize="11.5"
Foreground="{DynamicResource PrimaryText}"
TextWrapping="Wrap"/>
</StackPanel>
</Border>
</Popup>
<Button x:Name="BtnTemplateSelector"
Style="{StaticResource OutlineHoverBtn}"
Grid.Column="3"