Files
AX-Copilot-Codex/src/AxCopilot/Views/ChatWindow.xaml
lacvet 88a21ead92
Some checks failed
Release Gate / gate (push) Has been cancelled
AX Agent 상태 스트립과 작업 요약 UI 축소
- ChatWindow의 ConversationStatusStrip, AgentProgressBar, RuntimeActivityBadge, 실행 로그 관련 상태 요소 패딩과 폰트 밀도를 낮춰 본문 우선 구조로 조정함

- 작업 요약 팝업의 제목/설명/최근 실행 카드 밀도를 줄이고 최근 실행 표시 수를 축소해 상태 패널이 보조 레이어로 남도록 정리함

- README와 DEVELOPMENT 문서에 2026-04-05 14:31 (KST) 기준 작업 이력을 반영하고 Release 빌드 경고 0 오류 0을 확인함
2026-04-05 13:22:19 +09:00

5156 lines
409 KiB
XML

<Window x:Class="AxCopilot.Views.ChatWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
Title="AX Copilot — AX Agent"
Width="1100" Height="760"
MinWidth="700" MinHeight="520"
WindowStyle="None"
UseLayoutRounding="True"
SnapsToDevicePixels="True"
Background="{DynamicResource LauncherBackground}"
ResizeMode="CanResizeWithGrip"
WindowStartupLocation="CenterScreen"
ShowInTaskbar="True"
Icon="pack://application:,,,/Assets/icon.ico">
<WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="48"
CornerRadius="0"
GlassFrameThickness="0"
ResizeBorderThickness="6"/>
</WindowChrome.WindowChrome>
<Window.Resources>
<!-- 사이드바 버튼 -->
<Style x:Key="GhostBtn" TargetType="Button">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Padding" Value="8,6"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Bd" Background="{TemplateBinding Background}"
CornerRadius="8" Padding="{TemplateBinding Padding}"
Opacity="1">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
<Setter TargetName="Bd" Property="Opacity" Value="0.85"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.35"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="TitleBarActionButton" TargetType="Button">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Width" Value="40"/>
<Setter Property="Height" Value="40"/>
<Setter Property="Margin" Value="2,0,0,0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Bd"
Background="{TemplateBinding Background}"
CornerRadius="8"
Opacity="1"
RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<ScaleTransform x:Name="ScaleTf" ScaleX="1" ScaleY="1"/>
</Border.RenderTransform>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="ScaleTf"
Storyboard.TargetProperty="ScaleX"
To="1.06"
Duration="0:0:0.12"/>
<DoubleAnimation Storyboard.TargetName="ScaleTf"
Storyboard.TargetProperty="ScaleY"
To="1.06"
Duration="0:0:0.12"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="ScaleTf"
Storyboard.TargetProperty="ScaleX"
To="1"
Duration="0:0:0.12"/>
<DoubleAnimation Storyboard.TargetName="ScaleTf"
Storyboard.TargetProperty="ScaleY"
To="1"
Duration="0:0:0.12"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Bd" Property="Opacity" Value="0.78"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.35"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="TitleBarCloseButton" TargetType="Button" BasedOn="{StaticResource TitleBarActionButton}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#33FF5A5A"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="OverlayBinaryChoiceButtonStyle" TargetType="Button">
<Setter Property="Background" Value="{DynamicResource ItemBackground}"/>
<Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="12,6"/>
<Setter Property="Margin" Value="0,0,6,0"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="ChoiceBorder"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="6"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ChoiceBorder" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="ChoiceBorder" Property="Opacity" Value="0.55"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="OverlayAdvancedToggleRowStyle" TargetType="Border">
<Setter Property="Background" Value="{DynamicResource ItemBackground}"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="10"/>
<Setter Property="Padding" Value="14,12"/>
<Setter Property="Margin" Value="0,0,0,8"/>
</Style>
<Style x:Key="OverlayHelpBadge" TargetType="Border">
<Setter Property="Width" Value="16"/>
<Setter Property="Height" Value="16"/>
<Setter Property="CornerRadius" Value="8"/>
<Setter Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
<Setter Property="Margin" Value="6,0,0,0"/>
<Setter Property="Cursor" Value="Help"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<!-- 탭 버튼 -->
<Style x:Key="TopTabBtn" TargetType="RadioButton">
<Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Padding" Value="18,6"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Border x:Name="Bd" Background="Transparent"
CornerRadius="8" Padding="{TemplateBinding Padding}">
<ContentPresenter x:Name="Cp" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}"/>
</Trigger>
<!-- IsChecked를 뒤에 두어 호버보다 선택 상태가 항상 우선 적용 -->
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemSelectedBackground}"/>
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}"/>
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.3"/>
<Setter Property="Cursor" Value="Arrow"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- 테두리 호버 버튼 (배경색 변경 없이 테두리만 표시) -->
<Style x:Key="OutlineHoverBtn" TargetType="Button">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Padding" Value="8,6,10,6"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Bd" Background="Transparent"
BorderBrush="Transparent"
BorderThickness="0"
CornerRadius="8" Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.35"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SettingsNavBtn" TargetType="RadioButton">
<Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/>
<Setter Property="FontSize" Value="11.5"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Padding" Value="8,6"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Border x:Name="Bd"
Background="Transparent"
CornerRadius="6"
Padding="{TemplateBinding Padding}">
<ContentPresenter VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource HintBackground}"/>
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}"/>
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ControlTemplate x:Key="OverlayComboBoxToggle" TargetType="ToggleButton">
<Border x:Name="Bd"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1.5"
CornerRadius="8"
Padding="10,6">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ContentPresenter Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"/>
<TextBlock Grid.Column="1"
Text="&#xE70D;"
FontFamily="Segoe MDL2 Assets"
FontSize="10"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"
Margin="8,0,2,0"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="BorderBrush" Value="{DynamicResource BorderColor}"/>
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Bd" Property="BorderBrush" Value="{DynamicResource AccentColor}"/>
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemBackground}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style x:Key="OverlayComboBox" TargetType="ComboBox">
<Setter Property="MinWidth" Value="150"/>
<Setter Property="Height" Value="32"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}"/>
<Setter Property="Background" Value="{DynamicResource ItemBackground}"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor}"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="ItemContainerStyle" Value="{DynamicResource OverlayComboBoxItem}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Grid>
<ToggleButton x:Name="ToggleButton"
Template="{StaticResource OverlayComboBoxToggle}"
Focusable="False"
IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press"/>
<ContentPresenter x:Name="ContentSite"
IsHitTestVisible="False"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
Margin="12,6,28,6"
VerticalAlignment="Center"
HorizontalAlignment="Left"/>
<Popup x:Name="Popup"
Placement="Bottom"
IsOpen="{TemplateBinding IsDropDownOpen}"
AllowsTransparency="True"
Focusable="False"
PopupAnimation="Slide">
<Grid x:Name="DropDown"
MinWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}"
SnapsToDevicePixels="True">
<Border x:Name="DropDownBorder"
Background="{DynamicResource LauncherBackground}"
CornerRadius="8"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Margin="0,2,0,0"
Padding="4">
<Border.Effect>
<DropShadowEffect BlurRadius="12" ShadowDepth="4" Opacity="0.12" Direction="270"/>
</Border.Effect>
<ScrollViewer SnapsToDevicePixels="True"
VerticalScrollBarVisibility="Auto"
MaxHeight="300">
<StackPanel IsItemsHost="True"
KeyboardNavigation.DirectionalNavigation="Contained"/>
</ScrollViewer>
</Border>
</Grid>
</Popup>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="OverlayComboBoxItem" TargetType="ComboBoxItem">
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Padding" Value="10,7"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Border x:Name="Bd"
Background="Transparent"
CornerRadius="6"
Padding="{TemplateBinding Padding}"
Margin="0,1">
<ContentPresenter VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsHighlighted" Value="True">
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
<Setter Property="Foreground" Value="{DynamicResource AccentColor}"/>
<Setter Property="FontWeight" Value="SemiBold"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- 모든 드롭다운 메뉴는 코드-비하인드에서 커스텀 Popup으로 렌더링 -->
</Window.Resources>
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<!-- 축소 아이콘 바 (사이드바 닫힘 시 표시) -->
<ColumnDefinition x:Name="IconBarColumn" Width="0"/>
<!-- 사이드바 (열림 시 표시) -->
<ColumnDefinition x:Name="SidebarColumn" Width="270" MinWidth="0"/>
<ColumnDefinition Width="*"/>
<!-- 미리보기 스플리터 -->
<ColumnDefinition x:Name="SplitterColumn" Width="0"/>
<!-- 미리보기 패널 (파일 생성 시 표시) -->
<ColumnDefinition x:Name="PreviewColumn" Width="0" MinWidth="0"/>
</Grid.ColumnDefinitions>
<!-- ══ 축소 아이콘 바 (사이드바 닫힘 시) ══ -->
<Border x:Name="IconBarPanel" Grid.Column="0"
Background="{DynamicResource ItemBackground}"
Visibility="Collapsed">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="54"/>
<RowDefinition Height="*"/>
<RowDefinition Height="54"/>
</Grid.RowDefinitions>
<!-- 상단 아이콘들 -->
<StackPanel Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center">
<Button Style="{StaticResource GhostBtn}" Padding="10,8"
Click="BtnNewChat_Click" ToolTip="새 대화"
WindowChrome.IsHitTestVisibleInChrome="True">
<TextBlock Text="&#xE710;" FontFamily="Segoe MDL2 Assets" FontSize="15"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
</StackPanel>
<StackPanel Grid.Row="1" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,8,0,0">
<Button Style="{StaticResource GhostBtn}" Padding="10,8"
Click="BtnToggleSidebar_Click" ToolTip="검색"
WindowChrome.IsHitTestVisibleInChrome="True">
<TextBlock Text="&#xE721;" FontFamily="Segoe MDL2 Assets" FontSize="14"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<Button Style="{StaticResource GhostBtn}" Padding="10,8"
Click="BtnCategoryDrop_Click" ToolTip="대화 필터"
WindowChrome.IsHitTestVisibleInChrome="True">
<TextBlock Text="&#xE8BD;" FontFamily="Segoe MDL2 Assets" FontSize="14"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
</StackPanel>
<!-- 하단: 사용자 이니셜 -->
<Button x:Name="BtnUserIconBar" Grid.Row="2" Style="{StaticResource GhostBtn}"
HorizontalAlignment="Center" VerticalAlignment="Center"
ToolTip="" Padding="0"
WindowChrome.IsHitTestVisibleInChrome="True">
<Border Width="32" Height="32" CornerRadius="16"
Background="{DynamicResource AccentColor}">
<TextBlock x:Name="UserInitialIconBar" Text="U" FontSize="13" FontWeight="Bold"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</Button>
</Grid>
</Border>
<!-- ══════════════════════════════════════════════════════ -->
<!-- 좌측: 사이드바 -->
<!-- ══════════════════════════════════════════════════════ -->
<Border x:Name="SidebarPanel" Grid.Column="1"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="0,0,1,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="52"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<!-- 헤더 -->
<Grid Grid.Row="0" Margin="16,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Border Background="{DynamicResource AccentColor}" CornerRadius="8"
Width="28" Height="28">
<TextBlock Text="&#xE8BD;" FontFamily="Segoe MDL2 Assets" FontSize="14"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<TextBlock Text="AX Agent" FontSize="14.5" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center" Margin="10,0,0,0"/>
</StackPanel>
</Grid>
<!-- 상단 액션 -->
<Grid Grid.Row="1" Margin="12,2,12,8">
<StackPanel>
<Border x:Name="SidebarNewChatTrigger"
Background="Transparent"
CornerRadius="10"
Padding="10,8"
Cursor="Hand"
MouseEnter="SidebarNewChatTrigger_MouseEnter"
MouseLeave="SidebarNewChatTrigger_MouseLeave"
MouseLeftButtonUp="SidebarNewChatTrigger_MouseLeftButtonUp">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE710;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="새 대화"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5" Margin="8,0,0,0" VerticalAlignment="Center"/>
<TextBlock x:Name="SidebarNewChatShortcutHint"
Grid.Column="2"
Text="Ctrl+N"
Visibility="Collapsed"
Foreground="{DynamicResource SecondaryText}"
FontSize="10.5"
VerticalAlignment="Center"/>
</Grid>
</Border>
<Border x:Name="SidebarSearchTrigger"
Background="Transparent"
CornerRadius="10"
Padding="10,8"
Cursor="Hand"
MouseEnter="SidebarSearchTrigger_MouseEnter"
MouseLeave="SidebarSearchTrigger_MouseLeave"
MouseLeftButtonUp="SidebarSearchTrigger_MouseLeftButtonUp">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE721;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="검색"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5" Margin="8,0,0,0" VerticalAlignment="Center"/>
<TextBlock x:Name="SidebarSearchShortcutHint"
Grid.Column="2"
Text="Ctrl+K"
Visibility="Collapsed"
Foreground="{DynamicResource SecondaryText}"
FontSize="10.5"
VerticalAlignment="Center"/>
</Grid>
</Border>
<Border x:Name="SidebarSearchEditor"
Background="{DynamicResource ItemBackground}"
CornerRadius="12"
Padding="10,7"
Visibility="Collapsed"
Opacity="0"
RenderTransformOrigin="0,0.5">
<Border.RenderTransform>
<ScaleTransform x:Name="SidebarSearchEditorScale" ScaleX="0.85" ScaleY="1"/>
</Border.RenderTransform>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE721;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<TextBox x:Name="SearchBox" Grid.Column="1"
Background="Transparent" BorderThickness="0"
Foreground="{DynamicResource PrimaryText}"
CaretBrush="{DynamicResource AccentColor}" FontSize="11.5"
VerticalAlignment="Center" Margin="10,0,8,0"
TextChanged="SearchBox_TextChanged"/>
<Button x:Name="BtnConversationSort" Grid.Column="2"
Style="{StaticResource GhostBtn}"
Padding="8,3" MinWidth="54"
Margin="0,0,0,0"
VerticalAlignment="Center"
Click="BtnConversationSort_Click"
ToolTip="대화 정렬 기준 전환"
Visibility="Collapsed">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE8CB;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock x:Name="ConversationSortLabel" Text="활동"
FontSize="11" FontWeight="SemiBold"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
<Button x:Name="BtnRunningOnlyFilter" Grid.Column="3"
Style="{StaticResource GhostBtn}"
Padding="8,3" MinWidth="54"
Margin="6,0,0,0"
VerticalAlignment="Center"
Click="BtnRunningOnlyFilter_Click"
ToolTip="비활성"
Visibility="Collapsed"
IsEnabled="False">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE768;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock x:Name="RunningOnlyFilterLabel" Text="진행"
FontSize="11" FontWeight="SemiBold"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
<Button Grid.Column="4"
Style="{StaticResource GhostBtn}"
Padding="7,4"
Margin="6,0,0,0"
Click="BtnSidebarSearchClose_Click"
ToolTip="검색 닫기">
<TextBlock Text="&#xE711;"
FontFamily="Segoe MDL2 Assets"
FontSize="10.5"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
</Grid>
</Border>
</StackPanel>
</Grid>
<!-- 상단 필터 드롭다운 -->
<Border Grid.Row="2" Margin="12,0,12,4">
<Button x:Name="BtnCategoryDrop" Style="{StaticResource GhostBtn}"
HorizontalAlignment="Stretch" Padding="10,5"
Click="BtnCategoryDrop_Click">
<Grid HorizontalAlignment="Stretch">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="CategoryIcon" Text="&#xE8BD;"
FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBlock x:Name="CategoryLabel" Text="모든 주제"
FontSize="11.5" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
</StackPanel>
<TextBlock Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="9"
Foreground="{DynamicResource SecondaryText}"
HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Button>
</Border>
<!-- 탭별 좌측 메뉴 -->
<Border Grid.Row="3" Margin="12,0,12,8"
Background="Transparent"
BorderBrush="Transparent"
BorderThickness="0"
CornerRadius="0"
Padding="0">
<StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,0,4" Visibility="Collapsed">
<TextBlock x:Name="SidebarModeBadgeIcon" Text="&#xE8BD;"
FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center" Margin="0,0,6,0"/>
<TextBlock x:Name="SidebarModeBadgeTitle" Text="Chat 메뉴"
FontSize="11.5" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
</StackPanel>
<StackPanel x:Name="SidebarChatMenu" Visibility="Visible">
<Border Cursor="Hand" Background="Transparent" CornerRadius="8"
Padding="8,5" Margin="0,0,0,3"
MouseLeftButtonUp="SidebarChatAll_MouseLeftButtonUp">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE8BD;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="주제"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5" Margin="8,0,0,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="9"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border x:Name="SidebarChatRunningRow" Cursor="Hand" Background="Transparent" CornerRadius="8"
Padding="8,5"
MouseLeftButtonUp="SidebarChatRunning_MouseLeftButtonUp"
Visibility="Collapsed">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE768;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="#22C55E" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="진행 중 대화만 보기"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5" Margin="8,0,0,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" x:Name="SidebarChatRunningState" Text="OFF"
Foreground="{DynamicResource SecondaryText}"
FontSize="11" VerticalAlignment="Center"/>
</Grid>
</Border>
</StackPanel>
<StackPanel x:Name="SidebarCoworkMenu" Visibility="Collapsed">
<Border Cursor="Hand" Background="Transparent" CornerRadius="8"
Padding="8,5" Margin="0,0,0,3"
MouseLeftButtonUp="SidebarCoworkCategory_MouseLeftButtonUp">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE8FD;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="#3B82F6" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="작업 유형"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5" Margin="8,0,0,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="9"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
</Grid>
</Border>
</StackPanel>
<StackPanel x:Name="SidebarCodeMenu" Visibility="Collapsed">
<Border Cursor="Hand" Background="Transparent" CornerRadius="8"
Padding="8,5" Margin="0,0,0,3"
MouseLeftButtonUp="SidebarCodeCategory_MouseLeftButtonUp">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE943;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="#3B82F6" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="워크스페이스"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5" Margin="8,0,0,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="9"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
</Grid>
</Border>
</StackPanel>
</StackPanel>
</Border>
<!-- 대화 목록 -->
<ScrollViewer Grid.Row="4" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<StackPanel x:Name="ConversationPanel" Margin="8,0"/>
</ScrollViewer>
<!-- 하단: 삭제 -->
<Border Grid.Row="5" BorderBrush="{DynamicResource SeparatorColor}" BorderThickness="0,1,0,0"
Padding="0,4">
<Button x:Name="BtnDeleteAll" Style="{StaticResource GhostBtn}"
HorizontalAlignment="Center" VerticalAlignment="Center"
Click="BtnDeleteAll_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE74D;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="#AA5555" VerticalAlignment="Center" Margin="0,0,6,0"/>
<TextBlock Text="전체 삭제" FontSize="11" Foreground="#AA5555"/>
</StackPanel>
</Button>
</Border>
<!-- 하단: 사용자 계정 -->
<Border Grid.Row="6" Margin="12,0,12,8">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="34" Height="34" CornerRadius="17"
Background="{DynamicResource AccentColor}" Margin="0,0,10,0">
<TextBlock x:Name="UserInitialSidebar" Text="U" FontSize="14" FontWeight="Bold"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock x:Name="UserNameText" Text="" FontSize="12" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
TextTrimming="CharacterEllipsis"/>
<TextBlock x:Name="UserPcText" Text="" FontSize="10"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<Button x:Name="BtnSidebarSettings"
Grid.Column="2"
Style="{StaticResource GhostBtn}"
Width="32" Height="32"
Margin="8,0,0,0"
VerticalAlignment="Center"
Click="BtnSettings_Click"
ToolTip="AX Agent 설정">
<TextBlock Text="&#xE713;"
FontFamily="Segoe MDL2 Assets"
FontSize="13"
Foreground="{DynamicResource SecondaryText}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Button>
</Grid>
</Border>
</Grid>
</Border>
<!-- ══════════════════════════════════════════════════════ -->
<!-- 우측: 메시지 영역 -->
<!-- ══════════════════════════════════════════════════════ -->
<Grid Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition Height="48"/>
<RowDefinition Height="Auto"/> <!-- 서브 바: 제목 + 프리뷰 -->
<RowDefinition Height="Auto"/> <!-- 스티키 진행률 바 -->
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/> <!-- 입력 바 + Popup들 -->
<RowDefinition Height="Auto"/> <!-- 파일 탐색기 -->
<RowDefinition Height="Auto"/> <!-- 상태바 -->
</Grid.RowDefinitions>
<!-- ── 서브 바: 제목 + 프리뷰 버튼 (AX Agent 스타일) ── -->
<Border Grid.Row="1" Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource SeparatorColor}" BorderThickness="0,0,0,1"
Padding="12,4,12,4">
<Grid>
<!-- 좌: 대화 제목 -->
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Grid VerticalAlignment="Center">
<TextBlock x:Name="ChatTitle" Text="" FontSize="13" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center" TextTrimming="CharacterEllipsis"
MaxWidth="400" Cursor="Hand"
MouseLeftButtonDown="ChatTitle_MouseDown"
ToolTip="클릭하여 대화 이름 변경"/>
<TextBox x:Name="ChatTitleEdit" FontSize="13"
Foreground="{DynamicResource PrimaryText}"
Background="{DynamicResource HintBackground}"
CaretBrush="{DynamicResource AccentColor}"
BorderThickness="0" Padding="4,2"
MaxWidth="400" MinWidth="80"
Visibility="Collapsed"
LostFocus="ChatTitleEdit_LostFocus"
KeyDown="ChatTitleEdit_KeyDown"/>
</Grid>
<Border x:Name="ConversationStatusStrip" Visibility="Collapsed"
Margin="8,0,0,0" Padding="6,1.5"
CornerRadius="7"
Background="{DynamicResource HintBackground}"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1">
<TextBlock x:Name="ConversationStatusStripLabel" Text=""
FontSize="9.5" FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"/>
</Border>
</StackPanel>
<WrapPanel x:Name="ConversationQuickStrip" Visibility="Collapsed"
Margin="0,3,0,0">
<Button x:Name="BtnQuickRunningFilter" Style="{StaticResource GhostBtn}"
Padding="7,1.5" Margin="0,0,5,0"
Click="BtnQuickRunningFilter_Click"
Visibility="Collapsed"
IsEnabled="False">
<TextBlock x:Name="QuickRunningLabel" Text="진행"
FontSize="9.5" FontWeight="SemiBold"/>
</Button>
<Button x:Name="BtnQuickHotSort" Style="{StaticResource GhostBtn}"
Padding="7,1.5"
Click="BtnQuickHotSort_Click">
<TextBlock x:Name="QuickHotLabel" Text="활동"
FontSize="9.5" FontWeight="SemiBold"/>
</Button>
</WrapPanel>
</StackPanel>
<!-- 우: 프리뷰 토글 버튼 -->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Button x:Name="BtnPreviewToggle" Style="{StaticResource GhostBtn}"
Click="BtnPreviewToggle_Click" ToolTip="미리보기 패널" Visibility="Collapsed"
Padding="8,4">
<StackPanel Orientation="Horizontal">
<Ellipse x:Name="PreviewDot" Width="6" Height="6" Fill="#22C55E"
Margin="0,0,5,0" VerticalAlignment="Center"/>
<TextBlock Text="미리보기" FontSize="12"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
</StackPanel>
</Grid>
</Border>
<!-- ── 에이전트 진행률 스티키 바 ── -->
<Border x:Name="AgentProgressBar" Grid.Row="2" Visibility="Collapsed"
Background="{DynamicResource HintBackground}"
BorderBrush="{DynamicResource SeparatorColor}" BorderThickness="0,0,0,1"
Padding="12,3,12,3">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- 아이콘 -->
<TextBlock Grid.Column="0" x:Name="ProgressIcon"
Text="&#xE768;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center" Margin="0,0,6,0"/>
<!-- 단계 텍스트 -->
<TextBlock Grid.Column="1" x:Name="ProgressStepLabel"
Text="" FontSize="11"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center" TextTrimming="CharacterEllipsis"
MaxWidth="220" Margin="0,0,8,0"/>
<!-- 프로그레스 바 -->
<Border Grid.Column="2" CornerRadius="3" Background="{DynamicResource ItemHoverBackground}"
Height="4" VerticalAlignment="Center" Margin="0,0,8,0">
<Border x:Name="ProgressFill" CornerRadius="3" HorizontalAlignment="Left"
Width="0" Background="{DynamicResource AccentColor}"/>
</Border>
<!-- 퍼센트 -->
<TextBlock Grid.Column="3" x:Name="ProgressPercent"
Text="0%" FontSize="10" FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center" Margin="0,0,6,0" MinWidth="26" TextAlignment="Right"/>
<!-- 경과 시간 -->
<TextBlock Grid.Column="4" x:Name="ProgressElapsed"
Text="0:00" FontSize="9.5"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
</Grid>
</Border>
<!-- ── 상단 권한 알림 배너 ── -->
<Border x:Name="PermissionTopBanner"
Grid.Row="0" Grid.RowSpan="3"
Visibility="Collapsed"
Margin="16,94,16,0"
VerticalAlignment="Top"
Panel.ZIndex="20"
Background="{DynamicResource HintBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="10"
Padding="10,8">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="PermissionTopBannerIcon"
Text="&#xE7BA;"
FontFamily="Segoe MDL2 Assets"
FontSize="12"
Margin="0,0,8,0"
VerticalAlignment="Center"
Foreground="{DynamicResource AccentColor}"/>
<StackPanel>
<TextBlock x:Name="PermissionTopBannerTitle"
Text="현재 권한 모드"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock x:Name="PermissionTopBannerText"
Text=""
FontSize="11"
TextWrapping="Wrap"
MaxWidth="760"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
</StackPanel>
<Button x:Name="BtnPermissionTopBannerClose"
Grid.Column="1"
Style="{StaticResource GhostBtn}"
Padding="2"
Cursor="Hand"
Click="BtnPermissionTopBannerClose_Click"
ToolTip="닫기">
<TextBlock Text="&#xE711;"
FontFamily="Segoe MDL2 Assets"
FontSize="9"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
</Grid>
</Border>
<!-- ── 상단 바: 토글 | 탭(중앙) | 설정+닫기 ── -->
<Border Grid.Row="0" Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource SeparatorColor}" BorderThickness="0,0,0,1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0"
Orientation="Horizontal"
VerticalAlignment="Center"
Margin="46,0,0,0"
Visibility="Collapsed">
<TextBlock x:Name="CurrentTabTitle"
Text="AX Agent"
FontSize="13"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
</StackPanel>
<!-- 좌: 사이드바 토글 -->
<Button x:Name="BtnToggleSidebar"
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"
Width="30"
Height="30"
Background="{DynamicResource HintBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Cursor="Hand"
Click="BtnToggleSidebar_Click" ToolTip="사이드바 열기/닫기"
WindowChrome.IsHitTestVisibleInChrome="True">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border x:Name="Root"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="8">
<Grid Width="30" Height="30">
<StackPanel HorizontalAlignment="Center"
VerticalAlignment="Center">
<Border x:Name="SidebarLine1"
Width="12"
Height="1.6"
CornerRadius="1"
Background="{DynamicResource SecondaryText}"/>
<Border x:Name="SidebarLine2"
Width="12"
Height="1.6"
Margin="0,3,0,0"
CornerRadius="1"
Background="{DynamicResource SecondaryText}"/>
<Border x:Name="SidebarLine3"
Width="12"
Height="1.6"
Margin="0,3,0,0"
CornerRadius="1"
Background="{DynamicResource SecondaryText}"/>
</StackPanel>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Root" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
<Setter TargetName="Root" Property="BorderBrush" Value="{DynamicResource AccentColor}"/>
<Setter TargetName="SidebarLine1" Property="Background" Value="{DynamicResource AccentColor}"/>
<Setter TargetName="SidebarLine2" Property="Background" Value="{DynamicResource AccentColor}"/>
<Setter TargetName="SidebarLine3" Property="Background" Value="{DynamicResource AccentColor}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Root" Property="Opacity" Value="0.88"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
<!-- 중앙: 탭 메뉴 -->
<Border Grid.Column="1"
HorizontalAlignment="Center" VerticalAlignment="Center"
Background="{DynamicResource HintBackground}"
CornerRadius="12" Padding="4"
WindowChrome.IsHitTestVisibleInChrome="True">
<StackPanel Orientation="Horizontal">
<RadioButton x:Name="TabChat" Content="Chat" Style="{StaticResource TopTabBtn}"
IsChecked="True" GroupName="TopTab"
Checked="TabChat_Checked"/>
<RadioButton x:Name="TabCowork" Content="Cowork" Style="{StaticResource TopTabBtn}"
GroupName="TopTab"
Checked="TabCowork_Checked"/>
<RadioButton x:Name="TabCode" Content="Code" Style="{StaticResource TopTabBtn}"
GroupName="TopTab"
Checked="TabCode_Checked"/>
</StackPanel>
</Border>
<!-- 우: 최소화 + 최대화 + 닫기 -->
<StackPanel Grid.Column="2"
Orientation="Horizontal" HorizontalAlignment="Right"
VerticalAlignment="Center" Margin="0,0,8,0"
WindowChrome.IsHitTestVisibleInChrome="True">
<Button Style="{StaticResource TitleBarActionButton}" Click="BtnMinimize_Click" ToolTip="최소화">
<TextBlock Text="&#xE921;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<Button Style="{StaticResource TitleBarActionButton}" Click="BtnMaximize_Click" ToolTip="최대화">
<TextBlock x:Name="MaximizeIcon" Text="&#xE739;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<Button Style="{StaticResource TitleBarCloseButton}" Click="BtnClose_Click" ToolTip="닫기">
<TextBlock Text="&#xE711;" FontFamily="Segoe MDL2 Assets" FontSize="12.5"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
</StackPanel>
</Grid>
</Border>
<!-- ── 메시지 내 검색 바 (Ctrl+F) ── -->
<Border x:Name="MessageSearchBar" Grid.Row="3" Visibility="Collapsed"
Panel.ZIndex="5" VerticalAlignment="Top"
Background="{DynamicResource HintBackground}"
BorderBrush="{DynamicResource SeparatorColor}" BorderThickness="0,0,0,1"
Padding="12,6" Margin="40,0,40,0" CornerRadius="0,0,10,10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="&#xE721;" FontFamily="Segoe MDL2 Assets" FontSize="13"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBox x:Name="SearchTextBox" Grid.Column="1"
FontSize="12.5" Padding="4,3"
Background="Transparent" Foreground="{DynamicResource PrimaryText}"
BorderThickness="0"
TextChanged="SearchTextBox_TextChanged"/>
<TextBlock x:Name="SearchResultCount" Grid.Column="2"
Text="" FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="8,0"/>
<Button Grid.Column="3" Style="{StaticResource GhostBtn}" Padding="4"
Click="SearchPrev_Click" ToolTip="이전 (Shift+Enter)">
<TextBlock Text="&#xE70E;" FontFamily="Segoe MDL2 Assets" FontSize="10"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<Button Grid.Column="4" Style="{StaticResource GhostBtn}" Padding="4"
Click="SearchNext_Click" ToolTip="다음 (Enter)">
<TextBlock Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="10"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<Button Grid.Column="5" Style="{StaticResource GhostBtn}" Padding="4"
Click="SearchClose_Click" ToolTip="닫기 (Esc)">
<TextBlock Text="&#xE711;" FontFamily="Segoe MDL2 Assets" FontSize="9"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
</Grid>
</Border>
<!-- ── 메시지 스크롤 ── -->
<ScrollViewer x:Name="MessageScroll" Grid.Row="3"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
Background="{DynamicResource LauncherBackground}"
Padding="24,14,24,8">
<StackPanel x:Name="MessagePanel"
Margin="0,0,0,20"
MaxWidth="880"
HorizontalAlignment="Center">
<StackPanel.RenderTransform>
<TranslateTransform/>
</StackPanel.RenderTransform>
</StackPanel>
</ScrollViewer>
<!-- 빈 상태 -->
<Grid x:Name="EmptyState" Grid.Row="3"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
MaxWidth="880"
Margin="24,8,24,8">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="16"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Margin="0,10,0,2">
<Border x:Name="EmptyIcon" CornerRadius="18" Width="54" Height="54"
HorizontalAlignment="Center" Margin="0,0,0,14"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1">
<TextBlock Text="&#xE8BD;" FontFamily="Segoe MDL2 Assets" FontSize="30"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<TextBlock x:Name="EmptyStateTitle" Text="작업을 시작하세요" FontSize="20" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}" HorizontalAlignment="Center"/>
<TextBlock x:Name="EmptyStateDesc" Text="프롬프트를 입력하거나 아래 작업 유형을 선택하면 됩니다"
FontSize="12" Foreground="{DynamicResource SecondaryText}"
HorizontalAlignment="Center"
TextAlignment="Center"
Width="340"
Margin="0,8,0,0"/>
</StackPanel>
<ScrollViewer x:Name="TopicPresetScrollViewer"
Grid.Row="2"
VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Disabled"
MaxHeight="376"
Margin="0"
Padding="0,2,0,0">
<!-- 대화 주제 버튼 (프리셋에서 동적 생성) -->
<WrapPanel x:Name="TopicButtonPanel" HorizontalAlignment="Center"
Margin="0,0,0,4"/>
</ScrollViewer>
</Grid>
<!-- ── 프롬프트 템플릿 팝업 ── -->
<Popup x:Name="TemplatePopup" Grid.Row="4"
PlacementTarget="{Binding ElementName=InputBorder}"
Placement="Top" StaysOpen="False"
AllowsTransparency="True" PopupAnimation="Fade">
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1" CornerRadius="18"
Padding="8" MinWidth="320" MaxWidth="440">
<Border.Effect>
<DropShadowEffect BlurRadius="20" ShadowDepth="0" Opacity="0.14"/>
</Border.Effect>
<StackPanel>
<TextBlock Text="프리셋" FontSize="13" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
Margin="12,10,12,8"/>
<Border Margin="8,0,8,8"
CornerRadius="10"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Background="{DynamicResource ItemBackground}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE721;"
FontFamily="Segoe MDL2 Assets"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"
Margin="10,0,8,0"/>
<TextBox x:Name="TemplateSearchBox"
Grid.Column="1"
BorderThickness="0"
Background="Transparent"
Foreground="{DynamicResource PrimaryText}"
CaretBrush="{DynamicResource AccentColor}"
FontSize="11.5"
Padding="0,8,10,8"
TextChanged="TemplateSearchBox_TextChanged"/>
</Grid>
</Border>
<ItemsControl x:Name="TemplateItems"/>
<TextBlock x:Name="TemplateEmptyHint"
Text="등록된 템플릿이 없습니다. 설정에서 추가하세요."
FontSize="11" Foreground="{DynamicResource SecondaryText}"
Margin="10,4,10,8" Visibility="Collapsed"/>
</StackPanel>
</Border>
</Popup>
<!-- ── 권한 선택 팝업 ── -->
<Popup x:Name="PermissionPopup" Grid.Row="4"
PlacementTarget="{Binding ElementName=BtnPermission}"
Placement="Top" StaysOpen="False"
AllowsTransparency="True" PopupAnimation="Fade">
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1" CornerRadius="18"
Padding="10" MinWidth="340">
<Border.Effect>
<DropShadowEffect BlurRadius="22" ShadowDepth="0" Opacity="0.15"/>
</Border.Effect>
<StackPanel x:Name="PermissionItems" Margin="2"/>
</Border>
</Popup>
<!-- ── 데이터 활용 수준 팝업 ── -->
<Popup x:Name="DataUsagePopup" Grid.Row="4"
PlacementTarget="{Binding ElementName=BtnDataUsage}"
Placement="Top" StaysOpen="False"
AllowsTransparency="True" PopupAnimation="Fade">
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1" CornerRadius="18"
Padding="10" MinWidth="300">
<Border.Effect>
<DropShadowEffect BlurRadius="22" ShadowDepth="0" Opacity="0.15"/>
</Border.Effect>
<StackPanel x:Name="DataUsageItems" Margin="2"/>
</Border>
</Popup>
<!-- ── 슬래시 명령어 팝업 ── -->
<Popup x:Name="SlashPopup" Grid.Row="4"
PlacementTarget="{Binding ElementName=InputBorder}"
Placement="Top" StaysOpen="False"
AllowsTransparency="True" PopupAnimation="Fade">
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1" CornerRadius="16"
Padding="0" MinWidth="620" MaxWidth="760"
PreviewMouseWheel="SlashPopup_PreviewMouseWheel">
<Border.Effect>
<DropShadowEffect BlurRadius="20" ShadowDepth="0" Opacity="0.14"/>
</Border.Effect>
<StackPanel>
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="0,0,0,1"
CornerRadius="16,16,0,0"
Padding="14,12,14,8">
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Grid.Column="0">
<Border Background="{DynamicResource AccentColor}"
CornerRadius="8"
Padding="5,1.5"
Margin="0,0,8,0"
VerticalAlignment="Center">
<TextBlock Text="/"
FontSize="12"
FontWeight="SemiBold"
Foreground="White"/>
</Border>
<TextBlock x:Name="SlashPopupTitle"
Text="명령 및 스킬"
FontSize="13"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
</StackPanel>
<Button Grid.Column="1"
x:Name="BtnSlashReset"
Click="BtnSlashReset_Click"
Style="{StaticResource GhostBtn}"
Padding="7,3"
Margin="0,0,6,0"
ToolTip="핀/최근 정리">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE74D;"
FontFamily="Segoe MDL2 Assets"
FontSize="10.5"
Foreground="{DynamicResource SecondaryText}"
Margin="0,0,4,0"/>
<TextBlock Text="정리"
FontSize="11.5"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
</Button>
<Button Grid.Column="2"
x:Name="BtnSlashToggleGroups"
Click="BtnSlashToggleGroups_Click"
Style="{StaticResource GhostBtn}"
Padding="7,3"
ToolTip="명령/스킬 그룹 전체 접기 또는 펼치기">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE70D;"
FontFamily="Segoe MDL2 Assets"
FontSize="10.5"
Foreground="{DynamicResource SecondaryText}"
Margin="0,0,4,0"/>
<TextBlock x:Name="SlashToggleGroupsLabel"
Text="전체 접기"
FontSize="11.5"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
</Button>
</Grid>
<TextBlock x:Name="SlashPopupHint"
Text="방향키나 마우스 휠로 이동하고 Enter로 바로 실행합니다"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"
Margin="0,5,0,0"/>
</StackPanel>
</Border>
<ScrollViewer x:Name="SlashScrollViewer"
MaxHeight="420"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
CanContentScroll="False"
PanningMode="VerticalOnly"
PreviewMouseWheel="SlashPopup_PreviewMouseWheel"
Padding="10,8,10,6">
<ItemsControl x:Name="SlashItems"/>
</ScrollViewer>
<TextBlock x:Name="SlashPopupFooter"
Margin="12,0,12,10"
Text="Enter 실행 · ↑↓ 이동 · 휠 스크롤 · Esc 닫기"
FontSize="10"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
</Border>
</Popup>
<!-- ── 폴더 선택 팝업 ── -->
<Popup x:Name="FolderMenuPopup" Grid.Row="4"
PlacementTarget="{Binding ElementName=FolderPathLabel}"
Placement="Top" StaysOpen="False"
AllowsTransparency="True" PopupAnimation="Fade">
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1" CornerRadius="16">
<Border.Effect>
<DropShadowEffect BlurRadius="22" ShadowDepth="0" Opacity="0.14"/>
</Border.Effect>
<StackPanel Margin="0">
<TextBlock Text="워크스페이스 선택"
Margin="16,14,16,6"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Margin="4,4,4,8"
CornerRadius="10"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Background="{DynamicResource ItemBackground}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE721;"
FontFamily="Segoe MDL2 Assets"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"
Margin="10,0,8,0"/>
<TextBox x:Name="FolderMenuSearchBox"
Grid.Column="1"
BorderThickness="0"
Background="Transparent"
Foreground="{DynamicResource PrimaryText}"
CaretBrush="{DynamicResource AccentColor}"
FontSize="11.5"
Padding="0,8,10,8"
ToolTip="프로젝트 검색"
TextChanged="FolderMenuSearchBox_TextChanged"/>
</Grid>
</Border>
<ScrollViewer MaxHeight="360"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
Padding="4,0,4,8">
<StackPanel x:Name="FolderMenuItems" Margin="2"/>
</ScrollViewer>
</StackPanel>
</Border>
</Popup>
<Popup x:Name="GitBranchPopup" Grid.Row="4"
PlacementTarget="{Binding ElementName=BtnGitBranch}"
Placement="Top" StaysOpen="False"
AllowsTransparency="True" PopupAnimation="Fade">
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="16"
Padding="8"
MinWidth="340"
MaxWidth="420">
<Border.Effect>
<DropShadowEffect BlurRadius="20" ShadowDepth="0" Opacity="0.14"/>
</Border.Effect>
<StackPanel>
<TextBlock Text="브랜치 상태"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
Margin="8,6,8,8"/>
<Border Margin="8,0,8,8"
CornerRadius="10"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Background="{DynamicResource ItemBackground}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="&#xE721;"
FontFamily="Segoe MDL2 Assets"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"
Margin="10,0,8,0"/>
<TextBox x:Name="GitBranchSearchBox"
Grid.Column="1"
BorderThickness="0"
Background="Transparent"
Foreground="{DynamicResource PrimaryText}"
CaretBrush="{DynamicResource AccentColor}"
FontSize="11.5"
Padding="0,8,10,8"
ToolTip="브랜치 검색"
TextChanged="GitBranchSearchBox_TextChanged"/>
</Grid>
</Border>
<StackPanel x:Name="GitBranchItems" Margin="0,0,0,4"/>
</StackPanel>
</Border>
</Popup>
<!-- ── 토스트 알림 ── -->
<Border x:Name="ToastBorder" Grid.Row="3" Visibility="Collapsed"
Panel.ZIndex="20"
HorizontalAlignment="Center" VerticalAlignment="Bottom"
Margin="0,0,0,16"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1"
CornerRadius="20"
Padding="16,8,16,8" Opacity="0"
IsHitTestVisible="False">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="ToastIcon" Text="&#xE73E;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,6,0"/>
<TextBlock x:Name="ToastText" Text="" FontSize="12"
Foreground="{DynamicResource PrimaryText}" VerticalAlignment="Center"/>
</StackPanel>
</Border>
<!-- ── 입력 바 ── -->
<Border x:Name="ComposerShell" Grid.Row="4"
Margin="18,0,18,20"
Width="Auto"
MaxWidth="820"
HorizontalAlignment="Center"
VerticalAlignment="Bottom">
<StackPanel HorizontalAlignment="Stretch">
<Border x:Name="DraftPreviewCard"
Visibility="Collapsed"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="14"
Padding="10,8,10,8"
Margin="0,0,0,6">
<Border.Effect>
<DropShadowEffect BlurRadius="10" ShadowDepth="0" Opacity="0.05"/>
</Border.Effect>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Text="후속 요청"
FontSize="10.5"
Foreground="{DynamicResource SecondaryText}"/>
<TextBlock x:Name="DraftPreviewText"
FontSize="12.5"
Foreground="{DynamicResource PrimaryText}"
Margin="0,4,0,0"
TextTrimming="CharacterEllipsis"/>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Top">
<Button x:Name="BtnDraftEnqueue"
Style="{StaticResource GhostBtn}"
Padding="6,4"
Margin="0,0,4,0"
Click="BtnDraftEnqueue_Click"
ToolTip="대기열에 추가">
<TextBlock Text="&#xE710;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<Button x:Name="BtnDraftEdit"
Style="{StaticResource GhostBtn}"
Padding="6,4"
Margin="0,0,4,0"
Click="BtnDraftEdit_Click"
ToolTip="메시지 편집">
<TextBlock Text="&#xE70F;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<Button x:Name="BtnDraftClear"
Style="{StaticResource GhostBtn}"
Padding="6,4"
Click="BtnDraftClear_Click"
ToolTip="대기열 끄기">
<TextBlock Text="&#xE711;" FontFamily="Segoe MDL2 Assets" FontSize="10"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
</StackPanel>
</Grid>
</Border>
<!-- 무지개 글로우 + 입력 영역 (겹침 레이아웃) -->
<Grid>
<!-- 무지개 글로우 외부 테두리 (메시지 전송 시 애니메이션) -->
<StackPanel x:Name="DraftQueuePanel"
Visibility="Collapsed"
Margin="0,0,0,8"/>
<Border x:Name="InputGlowBorder" CornerRadius="16" Opacity="0"
Margin="-3" IsHitTestVisible="False">
<Border.BorderBrush>
<LinearGradientBrush x:Name="RainbowBrush" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="#FF6B6B" Offset="0.0"/>
<GradientStop Color="#FECA57" Offset="0.17"/>
<GradientStop Color="#48DBFB" Offset="0.33"/>
<GradientStop Color="#FF9FF3" Offset="0.5"/>
<GradientStop Color="#54A0FF" Offset="0.67"/>
<GradientStop Color="#5F27CD" Offset="0.83"/>
<GradientStop Color="#FF6B6B" Offset="1.0"/>
</LinearGradientBrush>
</Border.BorderBrush>
<Border.BorderThickness>
<Thickness>3</Thickness>
</Border.BorderThickness>
<Border.Effect>
<BlurEffect Radius="6"/>
</Border.Effect>
</Border>
<!-- 실제 입력 영역 -->
<Border x:Name="InputBorder"
Background="{DynamicResource LauncherBackground}"
CornerRadius="12" Padding="6"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1">
<Border.Effect>
<DropShadowEffect BlurRadius="14" ShadowDepth="0" Opacity="0.06"/>
</Border.Effect>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Row 0: 모델 셀렉터 + 템플릿 버튼 -->
<Grid Grid.Row="0" Margin="2,0,2,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Button x:Name="BtnModelSelector"
Style="{StaticResource OutlineHoverBtn}"
Grid.Column="0"
HorizontalAlignment="Left"
Margin="0"
MinHeight="24"
Padding="7,2"
Click="BtnModelSelector_Click"
ToolTip="모델/추론 빠른 설정"
WindowChrome.IsHitTestVisibleInChrome="True">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xEA86;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,4,0"/>
<TextBlock x:Name="ModelLabel" FontSize="11.5"
Foreground="{DynamicResource SecondaryText}"
MaxWidth="360"
TextTrimming="CharacterEllipsis"
VerticalAlignment="Center"/>
<TextBlock Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="8"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="4,1,0,0"/>
</StackPanel>
</Button>
<Border x:Name="TokenUsageCard"
Grid.Column="2"
Margin="5,0,5,0"
Padding="5,2"
CornerRadius="7"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Background="{DynamicResource ItemBackground}"
VerticalAlignment="Center">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid Width="26" Height="26" VerticalAlignment="Center">
<Ellipse Stroke="{DynamicResource HintBackground}"
StrokeThickness="3.5"/>
<Path x:Name="TokenUsageArc"
Stroke="{DynamicResource AccentColor}"
StrokeThickness="3.5"
StrokeStartLineCap="Round"
StrokeEndLineCap="Round"/>
<Canvas IsHitTestVisible="False">
<Ellipse x:Name="TokenUsageThresholdMarker"
Width="5"
Height="5"
Fill="{DynamicResource AccentColor}"/>
</Canvas>
<TextBlock x:Name="TokenUsagePercentText"
Text="0%"
FontSize="8.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
<StackPanel Grid.Column="1"
Margin="6,0,4,0"
VerticalAlignment="Center">
<TextBlock x:Name="TokenUsageSummaryText"
Text="컨텍스트"
FontSize="9.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock x:Name="TokenUsageHintText"
Text="0 / 0"
FontSize="8.5"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<Button x:Name="BtnCompactNow"
Grid.Column="2"
Style="{StaticResource GhostBtn}"
Padding="5,2"
Margin="0"
VerticalAlignment="Center"
Click="BtnCompactNow_Click"
ToolTip="지금 대화 컨텍스트 압축">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE8D4;"
FontFamily="Segoe MDL2 Assets"
FontSize="8.5"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"
Margin="0,0,4,0"/>
<TextBlock x:Name="CompactNowLabel"
Text="압축"
FontSize="8.5"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
</Grid>
</Border>
<Button x:Name="BtnTemplateSelector"
Style="{StaticResource OutlineHoverBtn}"
Grid.Column="3"
HorizontalAlignment="Right"
Margin="0"
MinHeight="24"
MinWidth="58"
Padding="7,2"
Click="BtnTemplateSelector_Click"
ToolTip="프롬프트 템플릿"
WindowChrome.IsHitTestVisibleInChrome="True">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE8A5;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,4,0"/>
<TextBlock Text="프리셋" FontSize="10.5"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
<TextBlock Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="8"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="4,1,0,0"/>
</StackPanel>
</Button>
</Grid>
<!-- Row 1: 모델/권한 빠른 설정 팝업 -->
<Popup x:Name="InlineSettingsPanel"
Grid.Row="1"
PlacementTarget="{Binding ElementName=BtnModelSelector}"
Placement="Bottom"
HorizontalOffset="0"
VerticalOffset="8"
StaysOpen="False"
AllowsTransparency="True"
PopupAnimation="Fade">
<Border Margin="0"
Padding="10,10,10,8"
CornerRadius="16"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Background="{DynamicResource LauncherBackground}"
MinWidth="404"
MaxWidth="520">
<Border.Effect>
<DropShadowEffect BlurRadius="24" ShadowDepth="0" Opacity="0.16"/>
</Border.Effect>
<StackPanel>
<Grid Margin="0,0,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="모델과 추론"
FontSize="11.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<TextBlock Grid.Column="1"
x:Name="InlineSettingsHintText"
Margin="6,0,0,0"
Text="서비스, 모델, 추론을 여기서 바로 바꿉니다"
FontSize="10"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
<Button Grid.Column="2"
x:Name="BtnInlineSettingsClose"
Style="{StaticResource GhostBtn}"
Padding="5,3"
Click="BtnInlineSettingsClose_Click"
ToolTip="설정 패널 닫기">
<TextBlock Text="&#xE711;"
FontFamily="Segoe MDL2 Assets"
FontSize="10"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
</Grid>
<ComboBox x:Name="CmbInlineService"
Visibility="Collapsed"
SelectionChanged="CmbInlineService_SelectionChanged"/>
<ComboBox x:Name="CmbInlineModel"
Visibility="Collapsed"
SelectionChanged="CmbInlineModel_SelectionChanged"/>
<TextBlock Text="서비스"
Margin="0,0,0,5"
FontSize="10"
Foreground="{DynamicResource SecondaryText}"/>
<WrapPanel x:Name="InlineServiceCardPanel"
Margin="0,0,0,8"/>
<TextBlock Text="모델"
Margin="0,0,0,5"
FontSize="10"
Foreground="{DynamicResource SecondaryText}"/>
<StackPanel x:Name="InlineModelListPanel"
Margin="0,0,0,8"/>
<WrapPanel x:Name="InlineModelChipPanel"
Visibility="Collapsed"
Margin="0,0,0,8"/>
<WrapPanel x:Name="InlineSettingsQuickActions" Margin="0,0,0,0">
<Button x:Name="BtnInlineFastMode"
Style="{StaticResource OutlineHoverBtn}"
Margin="0,0,6,6"
Padding="9,4"
Click="BtnInlineFastMode_Click"/>
<Button x:Name="BtnInlineReasoning"
Style="{StaticResource OutlineHoverBtn}"
Margin="0,0,6,6"
Padding="9,4"
Click="BtnInlineReasoning_Click"/>
<Button x:Name="BtnInlinePlanMode"
Style="{StaticResource OutlineHoverBtn}"
Visibility="Collapsed"
Margin="0,0,6,6"
Padding="9,4"
Click="BtnInlinePlanMode_Click"/>
<Button x:Name="BtnInlinePermission"
Style="{StaticResource OutlineHoverBtn}"
Visibility="Collapsed"
Margin="0,0,6,6"
Padding="9,4"
Click="BtnInlinePermission_Click"/>
<Button x:Name="BtnInlineSkill"
Style="{StaticResource OutlineHoverBtn}"
Margin="0,0,6,6"
Padding="10,5"
Click="BtnInlineSkill_Click"
Visibility="Collapsed"/>
<Button x:Name="BtnInlineCommandBrowser"
Style="{StaticResource OutlineHoverBtn}"
Margin="0,0,6,6"
Padding="10,5"
Click="BtnInlineCommandBrowser_Click"
Visibility="Collapsed"/>
<Button x:Name="BtnInlineMcp"
Style="{StaticResource OutlineHoverBtn}"
Margin="0,0,6,6"
Padding="10,5"
Click="BtnInlineMcp_Click"
Visibility="Collapsed"/>
</WrapPanel>
</StackPanel>
</Border>
</Popup>
<!-- Row 2: 첨부 파일 목록 -->
<ItemsControl x:Name="AttachedFilesPanel" Grid.Row="2"
Margin="8,0,8,2" Visibility="Collapsed">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<!-- 입력 영역 (Row 3) -->
<Grid Grid.Row="3" Margin="0,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<TextBox x:Name="InputBox"
FontSize="14" FontFamily="Segoe UI, Malgun Gothic"
Foreground="{DynamicResource PrimaryText}"
Background="Transparent"
CaretBrush="{DynamicResource AccentColor}"
BorderThickness="0" Padding="14,10"
VerticalAlignment="Top"
VerticalContentAlignment="Top"
AcceptsReturn="True"
PreviewKeyDown="InputBox_PreviewKeyDown"
TextChanged="InputBox_TextChanged"
TextWrapping="Wrap"
MinHeight="36" MaxHeight="144"
VerticalScrollBarVisibility="Auto"/>
<!-- 워터마크 (프롬프트 카드 안내문구) -->
<TextBlock x:Name="InputWatermark"
FontSize="14" FontFamily="Segoe UI, Malgun Gothic"
Foreground="{DynamicResource SecondaryText}"
Padding="14,10" IsHitTestVisible="False"
TextWrapping="Wrap" Opacity="0.7"
Visibility="Collapsed"/>
<!-- 슬래시 명령어 칩 (명령 선택 후 표시) -->
<Border x:Name="SlashCommandChip"
HorizontalAlignment="Left" VerticalAlignment="Top"
Margin="10,7,0,0" Visibility="Collapsed"
CornerRadius="7" Padding="8,3,4,3"
Background="{DynamicResource ItemHoverBackground}"
IsHitTestVisible="True">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="SlashChipText"
FontSize="12.5" FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"/>
<Border x:Name="SlashChipClose" Cursor="Hand"
Padding="4,0,2,0" Margin="2,0,0,0"
VerticalAlignment="Center">
<TextBlock Text="&#xE711;"
FontFamily="Segoe MDL2 Assets"
FontSize="8" Foreground="{DynamicResource AccentColor}"/>
</Border>
</StackPanel>
</Border>
</Grid>
<!-- 파일 첨부 -->
<Button x:Name="BtnAttach" Style="{StaticResource GhostBtn}" Grid.Column="1"
Width="32" Height="32" Margin="0,0,4,0" VerticalAlignment="Bottom"
Click="BtnAttach_Click" ToolTip="파일 첨부"
WindowChrome.IsHitTestVisibleInChrome="True"
AllowDrop="True">
<TextBlock Text="&#xE723;" FontFamily="Segoe MDL2 Assets" FontSize="14"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<!-- 내보내기 -->
<Button Style="{StaticResource GhostBtn}" Grid.Column="2"
Width="32" Height="32" Margin="0,0,4,0" VerticalAlignment="Bottom"
Click="BtnExport_Click" ToolTip="대화 내보내기"
WindowChrome.IsHitTestVisibleInChrome="True"
Visibility="Collapsed">
<TextBlock Text="&#xEDE1;" FontFamily="Segoe MDL2 Assets" FontSize="14"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<!-- 일시정지 -->
<Border x:Name="BtnPause" Grid.Column="3"
Width="30" Height="30" Margin="0,0,4,0"
CornerRadius="8" Cursor="Hand"
Background="{DynamicResource ItemHoverBackground}" Visibility="Collapsed"
VerticalAlignment="Bottom"
MouseLeftButtonUp="BtnPause_Click"
ToolTip="일시정지 / 재개">
<TextBlock x:Name="PauseIcon" Text="&#xE769;"
FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<!-- 중지/전송 -->
<Button x:Name="BtnStop" Grid.Column="3"
Width="36" Height="36" Margin="4,0,4,0"
Cursor="Hand" Click="BtnStop_Click"
VerticalAlignment="Bottom" Visibility="Collapsed"
WindowChrome.IsHitTestVisibleInChrome="True">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Background="#DC2626" CornerRadius="18">
<TextBlock Text="&#xE71A;" FontFamily="Segoe MDL2 Assets"
FontSize="13" Foreground="White"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
<Button x:Name="BtnSend" Grid.Column="4"
Width="38" Height="38" Margin="8,0,4,0"
Cursor="Hand" Click="BtnSend_Click"
VerticalAlignment="Bottom">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border x:Name="Bd" Background="{DynamicResource AccentColor}"
CornerRadius="19">
<TextBlock Text="&#xE724;" FontFamily="Segoe MDL2 Assets"
FontSize="13" Foreground="White"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="Opacity" Value="0.85"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Bd" Property="Opacity" Value="0.3"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
</Grid>
</Grid>
</Border>
</Grid> <!-- 글로우 + 입력 Grid 닫기 -->
<!-- ── 폴더 바 + 권한 메뉴 (입력 하단, Cowork/Code 탭 전용) ── -->
<Border x:Name="FolderBar" Visibility="Collapsed"
Margin="4,4,4,0"
MinHeight="32"
Background="Transparent"
BorderBrush="Transparent"
BorderThickness="0"
CornerRadius="0"
Padding="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/> <!-- 0: 폴더 아이콘 -->
<ColumnDefinition Width="*"/> <!-- 1: 폴더 경로 -->
<ColumnDefinition Width="Auto"/> <!-- 2: 폴더 해제 X -->
<ColumnDefinition Width="Auto"/> <!-- 3: 구분선 -->
<ColumnDefinition Width="Auto"/> <!-- 4: 포맷/디자인 -->
<ColumnDefinition Width="Auto"/> <!-- 5: 구분선 -->
<ColumnDefinition Width="Auto"/> <!-- 6: 데이터 활용 -->
<ColumnDefinition Width="Auto"/> <!-- 7: 구분선 -->
<ColumnDefinition Width="Auto"/> <!-- 8: 권한 -->
<ColumnDefinition Width="Auto"/> <!-- 9: 구분선 -->
<ColumnDefinition Width="Auto"/> <!-- 10: git -->
</Grid.ColumnDefinitions>
<!-- 폴더 아이콘 -->
<TextBlock Grid.Column="0" Text="&#xED25;" FontFamily="Segoe MDL2 Assets" FontSize="14"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center" Margin="6,0,4,0"/>
<!-- 폴더 경로 (클릭 시 최근 폴더 메뉴) -->
<TextBlock x:Name="FolderPathLabel" Grid.Column="1"
Text="폴더를 선택하세요" FontSize="13"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" TextTrimming="CharacterEllipsis"
Cursor="Hand" MouseLeftButtonUp="FolderPathLabel_Click"
ToolTip="클릭하여 폴더 변경"/>
<!-- 폴더 해제 -->
<Button Grid.Column="2" Style="{StaticResource GhostBtn}"
Padding="6,4" Click="BtnFolderClear_Click" ToolTip="폴더 연결 해제">
<TextBlock Text="&#xE711;" FontFamily="Segoe MDL2 Assets" FontSize="10"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<!-- 구분선 -->
<Border Grid.Column="3" Width="1" Height="18" Margin="4,0"
Background="{DynamicResource SeparatorColor}"/>
<!-- 포맷/디자인 드롭다운 (Cowork 전용, 코드비하인드에서 동적 생성) -->
<StackPanel x:Name="MoodIconPanel" Grid.Column="4" Orientation="Horizontal"
VerticalAlignment="Center"/>
<!-- 구분선 (포맷/디자인 뒤) -->
<Border x:Name="FormatMoodSeparator" Grid.Column="5" Width="1" Height="18" Margin="4,0"
Background="{DynamicResource SeparatorColor}" Visibility="Collapsed"/>
<!-- 데이터 활용 메뉴 -->
<Border x:Name="BtnDataUsage" Grid.Column="6" Cursor="Hand"
Background="Transparent"
BorderBrush="Transparent"
BorderThickness="0"
Padding="10,5"
CornerRadius="8"
MouseLeftButtonUp="BtnDataUsage_Click"
ToolTip="폴더 데이터 활용 수준">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="DataUsageIcon" Text="&#xE9F5;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,4,0"/>
<TextBlock x:Name="DataUsageLabel" Text="활용하지 않음" FontSize="12"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
</StackPanel>
</Border>
<!-- 구분선 -->
<Border Grid.Column="7" Width="1" Height="18" Margin="4,0"
Background="{DynamicResource SeparatorColor}"/>
<!-- 권한 메뉴 -->
<Button x:Name="BtnPermission" Grid.Column="8" Style="{StaticResource OutlineHoverBtn}"
Padding="10,5" Click="BtnPermission_Click" ToolTip="파일 접근 권한">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="PermissionIcon" Text="&#xE8D7;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,4,0"/>
<TextBlock x:Name="PermissionLabel" Text="활용하지 않음" FontSize="12"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
<Border x:Name="GitBranchSeparator" Grid.Column="9" Width="1" Height="18" Margin="4,0"
Visibility="Collapsed"
Background="{DynamicResource SeparatorColor}"/>
<Button x:Name="BtnGitBranch"
Grid.Column="10"
Style="{StaticResource GhostBtn}"
Padding="10,5"
Margin="2,0,0,0"
Visibility="Collapsed"
Click="BtnGitBranch_Click"
ToolTip="현재 Git 브랜치 상태">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE943;"
FontFamily="Segoe MDL2 Assets"
FontSize="12"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"
Margin="0,0,4,0"/>
<TextBlock x:Name="GitBranchLabel"
Text="main"
FontSize="12"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
<TextBlock x:Name="GitBranchFilesText"
Text=""
FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"
Margin="6,0,0,0"/>
<TextBlock x:Name="GitBranchAddedText"
Text=""
FontSize="11"
Foreground="#16A34A"
VerticalAlignment="Center"
Margin="6,0,0,0"/>
<TextBlock x:Name="GitBranchDeletedText"
Text=""
FontSize="11"
Foreground="#DC2626"
VerticalAlignment="Center"
Margin="4,0,0,0"/>
<TextBlock Text="&#xE70D;"
FontFamily="Segoe MDL2 Assets"
FontSize="8"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"
Margin="6,1,0,0"/>
</StackPanel>
</Button>
</Grid>
</Border>
<!-- 포맷 선택 팝업 -->
<Popup x:Name="FormatMenuPopup" PlacementTarget="{Binding ElementName=BtnFormatMenu}"
Placement="Top" StaysOpen="False"
AllowsTransparency="True" PopupAnimation="Fade">
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1" CornerRadius="12"
Padding="6" MinWidth="200">
<StackPanel x:Name="FormatMenuItems" Margin="2"/>
</Border>
</Popup>
<!-- 디자인 선택 팝업 -->
<Popup x:Name="MoodMenuPopup" PlacementTarget="{Binding ElementName=BtnMoodMenu}"
Placement="Top" StaysOpen="False"
AllowsTransparency="True" PopupAnimation="Fade">
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1" CornerRadius="12"
Padding="6" MinWidth="380" MaxHeight="480">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel x:Name="MoodMenuItems" Margin="2"/>
</ScrollViewer>
</Border>
</Popup>
</StackPanel>
</Border>
<!-- ── 파일 탐색기 패널 ── -->
<Border x:Name="FileBrowserPanel" Grid.Row="5" Visibility="Collapsed"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource SeparatorColor}" BorderThickness="0,1,0,0"
MaxHeight="220">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- 툴바 -->
<Border Grid.Row="0" Background="{DynamicResource HintBackground}" Padding="8,4">
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Text="&#xED25;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center" Margin="0,0,6,0"/>
<TextBlock x:Name="FileBrowserTitle" Text="파일 탐색기"
FontSize="11.5" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button Style="{StaticResource GhostBtn}" Padding="3"
Click="BtnFileBrowserRefresh_Click" ToolTip="새로고침" Cursor="Hand">
<TextBlock Text="&#xE72C;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<Button Style="{StaticResource GhostBtn}" Padding="3"
Click="BtnFileBrowserOpenFolder_Click" ToolTip="탐색기에서 열기" Cursor="Hand">
<TextBlock Text="&#xE8A7;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<Button Style="{StaticResource GhostBtn}" Padding="3"
Click="BtnFileBrowserClose_Click" ToolTip="닫기" Cursor="Hand">
<TextBlock Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="9"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
</StackPanel>
</Grid>
</Border>
<!-- 트리뷰 -->
<TreeView x:Name="FileTreeView" Grid.Row="1"
Background="Transparent" BorderThickness="0"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5" Padding="4,2"/>
</Grid>
</Border>
<!-- ── 하단 상태바 (AX Agent 스타일) ── -->
<Border Grid.Row="6" Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource SeparatorColor}" BorderThickness="0,1,0,0"
Padding="12,4,12,4" Height="28">
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left"
VerticalAlignment="Center">
<!-- 상태 아이콘 (다이아몬드 + 애니메이션) -->
<TextBlock x:Name="StatusDiamond" Text="◆" FontSize="10"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center" Margin="0,0,6,0"
RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform>
<RotateTransform x:Name="StatusDiamondRotate" Angle="0"/>
</TextBlock.RenderTransform>
</TextBlock>
<TextBlock x:Name="StatusLabel" Text="대기 중" FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
VerticalAlignment="Center">
<Border x:Name="RuntimeActivityBadge" Visibility="Collapsed"
CornerRadius="4" Padding="4,1.5" Margin="0,0,6,0"
Background="{DynamicResource HintBackground}" ToolTip="현재 실행 중인 작업"
Cursor="Hand"
MouseLeftButtonUp="RuntimeTaskSummary_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE945;" FontFamily="Segoe MDL2 Assets" FontSize="9"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,3,0"/>
<TextBlock x:Name="RuntimeActivityLabel" Text="실행 중 0"
FontSize="9.5" Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"/>
</StackPanel>
</Border>
<TextBlock x:Name="LastCompletedLabel" Text=""
FontSize="9.5"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,6,0"
MaxWidth="180" TextTrimming="CharacterEllipsis"
Visibility="Collapsed"
Cursor="Hand"
MouseLeftButtonUp="RuntimeTaskSummary_Click"/>
<Button x:Name="BtnToggleExecutionLog" Style="{StaticResource GhostBtn}"
Padding="5,1.5" Margin="0,0,6,0"
Click="BtnToggleExecutionLog_Click"
ToolTip="실행 로그 표시/숨기기">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="ExecutionLogIcon" Text="&#xE7C1;"
FontFamily="Segoe MDL2 Assets" FontSize="9"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,3,0"/>
<TextBlock x:Name="ExecutionLogLabel" Text="실행 로그 0"
FontSize="9.5"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
<Border x:Name="SubAgentIndicator" Visibility="Collapsed"
CornerRadius="4" Padding="4,1.5" Margin="0,0,6,0"
Background="{DynamicResource HintBackground}" ToolTip="실행 중인 서브에이전트">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE945;" FontFamily="Segoe MDL2 Assets" FontSize="9"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,3,0"/>
<TextBlock x:Name="SubAgentIndicatorLabel" Text="서브에이전트 0"
FontSize="9.5" Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"/>
</StackPanel>
</Border>
<!-- 워크플로우 분석기 열기 버튼 (개발자 모드) -->
<Border x:Name="BtnShowAnalyzer" Visibility="Collapsed"
CornerRadius="4" Padding="4,1.5" Margin="0,0,6,0"
Background="{DynamicResource HintBackground}" Cursor="Hand" ToolTip="워크플로우 분석기"
MouseLeftButtonUp="BtnShowAnalyzer_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE9D9;" FontFamily="Segoe MDL2 Assets" FontSize="9"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,3,0"/>
<TextBlock Text="분석기" FontSize="9.5" Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"/>
</StackPanel>
</Border>
<TextBlock x:Name="StatusElapsed" Text="" FontSize="9.5"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBlock x:Name="StatusTokens" Text="" FontSize="9.5"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
</StackPanel>
</Grid>
</Border>
</Grid>
<!-- ══ AX Agent 설정 오버레이 (채팅 화면 내부 전체 덮기) ══ -->
<Border x:Name="AgentSettingsOverlay"
Grid.Column="2"
Grid.ColumnSpan="3"
Margin="0,48,0,0"
Background="{DynamicResource LauncherBackground}"
Visibility="Collapsed"
Panel.ZIndex="120">
<Grid Margin="0">
<Border Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="0"
Padding="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="172"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.RowSpan="2"
Grid.Column="0"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="0,0,1,0">
<StackPanel Margin="14,16,12,12">
<Button Style="{StaticResource GhostBtn}"
HorizontalAlignment="Left"
Padding="0"
Margin="0,0,0,10"
Click="BtnOverlaySettingsClose_Click"
ToolTip="대화로 돌아가기">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE72B;"
FontFamily="Segoe MDL2 Assets"
FontSize="13"
Foreground="{DynamicResource SecondaryText}"
Margin="0,0,6,0"
VerticalAlignment="Center"/>
<StackPanel>
<TextBlock Text="설정"
FontSize="18"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="AX Agent"
FontSize="11"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"
Margin="0,1,0,0"/>
</StackPanel>
</StackPanel>
</Button>
<RadioButton x:Name="OverlayNavBasic"
Content="공통"
GroupName="OverlayNav"
Style="{StaticResource SettingsNavBtn}"
HorizontalAlignment="Stretch"
Checked="OverlayNav_Checked"
Tag="basic"
IsChecked="True"/>
<RadioButton x:Name="OverlayNavChat"
Content="채팅"
GroupName="OverlayNav"
Style="{StaticResource SettingsNavBtn}"
HorizontalAlignment="Stretch"
Margin="0,4,0,0"
Checked="OverlayNav_Checked"
Tag="chat"/>
<RadioButton x:Name="OverlayNavShared"
Content="코워크/코드"
GroupName="OverlayNav"
Style="{StaticResource SettingsNavBtn}"
HorizontalAlignment="Stretch"
Margin="0,4,0,0"
Checked="OverlayNav_Checked"
Tag="shared"/>
<RadioButton x:Name="OverlayNavCowork"
Content="코워크"
GroupName="OverlayNav"
Style="{StaticResource SettingsNavBtn}"
HorizontalAlignment="Stretch"
Margin="0,4,0,0"
Checked="OverlayNav_Checked"
Tag="cowork"/>
<RadioButton x:Name="OverlayNavCode"
Content="코드"
GroupName="OverlayNav"
Style="{StaticResource SettingsNavBtn}"
HorizontalAlignment="Stretch"
Margin="0,4,0,0"
Checked="OverlayNav_Checked"
Tag="code"/>
<RadioButton x:Name="OverlayNavDev"
Content="개발자"
GroupName="OverlayNav"
Style="{StaticResource SettingsNavBtn}"
HorizontalAlignment="Stretch"
Margin="0,4,0,0"
Checked="OverlayNav_Checked"
Tag="dev"/>
<RadioButton x:Name="OverlayNavTools"
Content="도구"
GroupName="OverlayNav"
Style="{StaticResource SettingsNavBtn}"
HorizontalAlignment="Stretch"
Margin="0,4,0,0"
Checked="OverlayNav_Checked"
Tag="tools"/>
<RadioButton x:Name="OverlayNavEtc"
Content="스킬/차단"
GroupName="OverlayNav"
Style="{StaticResource SettingsNavBtn}"
HorizontalAlignment="Stretch"
Margin="0,4,0,0"
Checked="OverlayNav_Checked"
Tag="etc"/>
</StackPanel>
</Border>
<ScrollViewer Grid.Row="0" Grid.RowSpan="2" Grid.Column="1"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
Padding="14,14,20,20">
<StackPanel>
<Border x:Name="OverlaySectionHeading"
Background="Transparent"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="0"
CornerRadius="0"
Padding="0"
Margin="0,0,0,12">
<StackPanel>
<TextBlock x:Name="OverlayTopHeadingTitle"
Text="공통 설정"
FontSize="13"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock x:Name="OverlayTopHeadingDescription"
Text="Chat, Cowork, Code에서 공통으로 쓰는 기본 설정입니다."
Margin="0,4,0,0"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
</Border>
<Border x:Name="OverlaySectionService"
Background="Transparent"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="0,0,0,1"
CornerRadius="0"
Padding="0,0,0,12"
Margin="0,0,0,10">
<StackPanel>
<TextBlock Text="서비스와 모델"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="대화에 사용할 서비스와 모델 연결을 관리합니다."
Margin="0,4,0,10"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
<WrapPanel Margin="0,0,0,8">
<Border x:Name="OverlaySvcOllamaCard"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlaySvcOllamaCard_MouseLeftButtonUp">
<TextBlock Text="Ollama" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<Border x:Name="OverlaySvcVllmCard"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlaySvcVllmCard_MouseLeftButtonUp">
<TextBlock Text="vLLM" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<Border x:Name="OverlaySvcGeminiCard"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlaySvcGeminiCard_MouseLeftButtonUp">
<TextBlock Text="Gemini" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<Border x:Name="OverlaySvcClaudeCard"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlaySvcClaudeCard_MouseLeftButtonUp">
<TextBlock Text="Claude" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
</WrapPanel>
<Grid x:Name="OverlayServiceSelectRow" Visibility="Collapsed">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,6,0">
<StackPanel Orientation="Horizontal" Margin="0,0,0,6">
<TextBlock Text="서비스"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">현재 대화에서 사용할 AI 서비스 연결을 선택합니다. 사내 모드에서는 내부 연결만 유지하는 데도 함께 쓰입니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<ComboBox x:Name="CmbOverlayService"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayService_SelectionChanged"/>
</StackPanel>
<StackPanel Grid.Column="1" Margin="6,0,0,0">
<StackPanel Orientation="Horizontal" Margin="0,0,0,6">
<TextBlock Text="모델"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">선택한 서비스 안에서 실제 응답을 생성할 모델입니다. 모델에 따라 속도, 문장 길이, 코드 품질이 달라질 수 있습니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<ComboBox x:Name="CmbOverlayModel"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayModel_SelectionChanged"/>
</StackPanel>
</Grid>
<Grid Margin="0,2,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="현재 서비스"
FontSize="11.5"
Foreground="{DynamicResource SecondaryText}"
Margin="0,0,0,8"/>
<TextBlock x:Name="OverlaySelectedServiceText"
Grid.Column="1"
FontSize="12"
Foreground="{DynamicResource PrimaryText}"
Margin="0,0,0,8"/>
<TextBlock Grid.Row="1"
Text="현재 모델"
FontSize="11.5"
Foreground="{DynamicResource SecondaryText}"/>
<TextBlock x:Name="OverlaySelectedModelText"
Grid.Row="1"
Grid.Column="1"
FontSize="12"
Foreground="{DynamicResource PrimaryText}"/>
</Grid>
<Grid x:Name="OverlayServiceDetailPanel" Margin="0,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,6,0">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="OverlayEndpointLabel"
Text="기본 서버 주소"
FontSize="11.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">Ollama, vLLM 같은 연결형 서비스의 기본 주소입니다. 사내 서버나 프록시를 쓰는 경우 이 값을 바꿔 연결 대상을 맞춥니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock x:Name="OverlayEndpointHint"
Text="선택한 서비스의 기본 연결 주소를 입력합니다."
Margin="0,4,0,6"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
<TextBox x:Name="TxtOverlayServiceEndpoint"
LostFocus="TxtOverlayServiceEndpoint_LostFocus"
Padding="9,7"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Foreground="{DynamicResource PrimaryText}"
FontSize="12"/>
</StackPanel>
<StackPanel Grid.Column="1" Margin="6,0,0,0">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="OverlayApiKeyLabel"
Text="API 키"
FontSize="11.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">Gemini, Claude처럼 인증이 필요한 서비스만 입력합니다. 빈 값이면 인증 없이 접속 가능한 연결만 사용합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock x:Name="OverlayApiKeyHint"
Text="접근 제어가 필요한 경우에만 입력합니다."
Margin="0,4,0,6"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
<PasswordBox x:Name="TxtOverlayServiceApiKey"
LostFocus="TxtOverlayServiceApiKey_LostFocus"
Padding="9,7"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
FontSize="12"/>
</StackPanel>
</Grid>
</StackPanel>
</Border>
<Border x:Name="OverlaySectionQuick"
Background="Transparent"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="0,0,0,1"
CornerRadius="0"
Padding="0,0,0,12"
Margin="0,0,0,10">
<StackPanel>
<TextBlock Text="실행 방식"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="권한, 계획, 추론 방식을 같은 기준으로 바로 바꿉니다."
Margin="0,4,0,10"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
<Grid Margin="0,0,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,12,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="호출 간격 최적화"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Width="16" Height="16" CornerRadius="8" Background="{DynamicResource ItemHoverBackground}" Margin="6,0,0,0" Cursor="Help" VerticalAlignment="Center">
<TextBlock Text="?" FontSize="10" FontWeight="Bold" Foreground="{DynamicResource AccentColor}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap" Foreground="White" FontSize="12" LineHeight="18" MaxWidth="280">호출 간격을 조정해 제한이 있는 환경에서 더 안정적으로 동작하게 합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="호출 간격을 조정해 제한이 있는 환경에서 더 안정적으로 동작합니다."
Margin="0,3,0,0"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<ComboBox x:Name="CmbOverlayFastMode"
Grid.Column="1"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayFastMode_SelectionChanged">
<ComboBoxItem Content="Fast · 켜짐" Tag="on"/>
<ComboBoxItem Content="Fast · 꺼짐" Tag="off"/>
</ComboBox>
</Grid>
<Grid Margin="0,0,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,12,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="의사결정 수준"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Width="16" Height="16" CornerRadius="8" Background="{DynamicResource ItemHoverBackground}" Margin="6,0,0,0" Cursor="Help" VerticalAlignment="Center">
<TextBlock Text="?" FontSize="10" FontWeight="Bold" Foreground="{DynamicResource AccentColor}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap" Foreground="White" FontSize="12" LineHeight="18" MaxWidth="280">계획과 확인 단계를 얼마나 신중하게 가져갈지 정합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="계획과 확인 단계를 얼마나 신중하게 가져갈지 정합니다."
Margin="0,3,0,0"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<ComboBox x:Name="CmbOverlayReasoning"
Grid.Column="1"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayReasoning_SelectionChanged">
<ComboBoxItem Content="추론 · 낮음" Tag="minimal"/>
<ComboBoxItem Content="추론 · 중간" Tag="normal"/>
<ComboBoxItem Content="추론 · 높음" Tag="detailed"/>
</ComboBox>
</Grid>
<Grid Margin="0,0,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,12,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="실행 전 계획"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Width="16" Height="16" CornerRadius="8" Background="{DynamicResource ItemHoverBackground}" Margin="6,0,0,0" Cursor="Help" VerticalAlignment="Center">
<TextBlock Text="?" FontSize="10" FontWeight="Bold" Foreground="{DynamicResource AccentColor}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap" Foreground="White" FontSize="12" LineHeight="18" MaxWidth="280">실행 전에 계획 단계를 둘지 바로 작업으로 넘어갈지 선택합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="실행 전에 계획 단계를 둘지 바로 작업으로 넘어갈지 선택합니다."
Margin="0,3,0,0"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<ComboBox x:Name="CmbOverlayPlanMode"
Grid.Column="1"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayPlanMode_SelectionChanged">
<ComboBoxItem Content="계획 · 끄기" Tag="off"/>
<ComboBoxItem Content="계획 · 자동 계획" Tag="auto"/>
<ComboBoxItem Content="계획 · 항상 계획" Tag="always"/>
</ComboBox>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,12,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="권한 모드"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Width="16" Height="16" CornerRadius="8" Background="{DynamicResource ItemHoverBackground}" Margin="6,0,0,0" Cursor="Help" VerticalAlignment="Center">
<TextBlock Text="?" FontSize="10" FontWeight="Bold" Foreground="{DynamicResource AccentColor}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap" Foreground="White" FontSize="12" LineHeight="18" MaxWidth="280">파일 접근과 실행 요청을 어떤 기준으로 승인할지 결정합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="파일 접근과 실행 요청을 어떤 기준으로 승인할지 결정합니다."
Margin="0,3,0,0"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<ComboBox x:Name="CmbOverlayPermission"
Grid.Column="1"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayPermission_SelectionChanged">
<ComboBoxItem Content="권한 · 차단" Tag="Deny"/>
<ComboBoxItem Content="권한 · 권한 요청" Tag="Default"/>
<ComboBoxItem Content="권한 · 편집 자동 승인" Tag="AcceptEdits"/>
<ComboBoxItem Content="권한 · 계획 모드" Tag="Plan"/>
<ComboBoxItem Content="권한 · 권한 건너뛰기" Tag="BypassPermissions"/>
</ComboBox>
</Grid>
</StackPanel>
</Border>
<Border x:Name="OverlaySectionDetail"
Background="Transparent"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="0"
CornerRadius="0"
Padding="0"
Margin="0,0,0,0">
<StackPanel>
<TextBlock x:Name="OverlayAnchorCommon"
Text="세부 설정"
FontSize="13"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
Visibility="Collapsed"/>
<TextBlock Text="Chat, Cowork, Code에서 공통으로 쓰는 기본 설정입니다."
Margin="0,4,0,10"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"
Visibility="Collapsed"/>
<Grid x:Name="OverlayAiEnabledRow" Margin="0,0,0,12" Visibility="Collapsed">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock Text="AX Agent 사용"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="비활성화하면 AX Agent 대화 기능이 숨겨집니다."
Margin="0,4,0,0"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayAiEnabled"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"
Checked="ChkOverlayAiEnabled_Changed"
Unchecked="ChkOverlayAiEnabled_Changed"/>
</Grid>
<StackPanel x:Name="OverlayThemeStylePanel"
Visibility="Collapsed"
Height="0"
Margin="0"
IsHitTestVisible="False">
<Border x:Name="OverlayThemeStyleClawCard"/>
<Border x:Name="OverlayThemeStyleCodexCard"/>
<Border x:Name="OverlayThemeStyleSlateCard"/>
</StackPanel>
<StackPanel x:Name="OverlayThemePanel"
Visibility="Collapsed"
Height="0"
Margin="0"
IsHitTestVisible="False">
<Border x:Name="OverlayThemeSystemCard"/>
<Border x:Name="OverlayThemeLightCard"/>
<Border x:Name="OverlayThemeDarkCard"/>
</StackPanel>
<Grid x:Name="OverlayDefaultOutputFormatRow" Margin="0,0,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="문서 형태"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">문서나 결과물을 파일로 만들 때 우선 고려할 출력 형식입니다. 자동으로 두면 요청 내용을 보고 가장 맞는 형식을 선택합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="기본은 AI 자동 선택으로 두고 필요할 때만 바꿉니다."
Margin="0,4,0,0"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<ComboBox x:Name="CmbOverlayDefaultOutputFormat"
Grid.Column="1"
MinWidth="160"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayDefaultOutputFormat_SelectionChanged">
<ComboBoxItem Content="AI 자동 · 자동" Tag="auto"/>
<ComboBoxItem Content="AI 자동 · Word" Tag="docx"/>
<ComboBoxItem Content="AI 자동 · HTML 보고서" Tag="html"/>
<ComboBoxItem Content="AI 자동 · Excel" Tag="xlsx"/>
<ComboBoxItem Content="AI 자동 · PDF" Tag="pdf"/>
<ComboBoxItem Content="AI 자동 · Markdown" Tag="md"/>
<ComboBoxItem Content="AI 자동 · 텍스트" Tag="txt"/>
</ComboBox>
</Grid>
<Grid x:Name="OverlayDefaultMoodRow" Margin="0,0,0,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="디자인 스타일"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">HTML 보고서나 미리보기 화면을 만들 때 기본으로 적용할 분위기입니다. 같은 내용도 보고서 톤과 카드 스타일이 달라집니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="HTML/미리보기 기본 스타일을 설정합니다."
Margin="0,4,0,0"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<ComboBox x:Name="CmbOverlayDefaultMood"
Grid.Column="1"
MinWidth="160"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayDefaultMood_SelectionChanged"/>
</Grid>
<Grid x:Name="OverlayPdfExportPathRow" Margin="0,0,0,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="280"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,12,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="PDF 내보내기 기본 경로"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">대화 내용을 PDF로 저장할 때 기본으로 제안할 폴더입니다. 비워 두면 바탕화면을 사용합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="빈 값이면 바탕화면을 기본 경로로 사용합니다."
Margin="0,4,0,0"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<TextBox x:Name="TxtOverlayPdfExportPath"
Grid.Column="1"
LostFocus="TxtOverlayPdfExportPath_LostFocus"
Padding="9,7"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Foreground="{DynamicResource PrimaryText}"
FontSize="12"/>
</Grid>
<Border x:Name="OverlayToggleImageInput" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="이미지 입력 활성화"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">스크린샷 붙여넣기와 이미지 파일 첨부를 허용합니다. 끄면 텍스트와 일반 파일만 다룹니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="이미지 붙여넣기와 파일 첨부를 AX Agent 대화에 허용합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableImageInput"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<StackPanel x:Name="OverlayModelEditorPanel">
<TextBlock Text="등록된 모델 선택"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"
Margin="0,4,0,6"/>
<TextBlock Text="사내 서비스는 등록한 모델 중에서 선택하고, 여기서 바로 추가/편집할 수 있습니다."
FontSize="11"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"
Margin="0,0,0,8"/>
<WrapPanel x:Name="OverlayModelChipPanel" Margin="0,2,0,0"/>
<Grid x:Name="OverlayRegisteredModelsHeader"
Margin="0,10,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="등록 모델 관리"
FontSize="11.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Button x:Name="BtnOverlayAddModel"
Grid.Column="1"
Style="{StaticResource OutlineHoverBtn}"
MinHeight="28"
Padding="10,4"
Click="BtnOverlayAddModel_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE710;"
FontFamily="Segoe MDL2 Assets"
FontSize="11"
Foreground="{DynamicResource AccentColor}"
Margin="0,0,5,0"
VerticalAlignment="Center"/>
<TextBlock Text="모델 추가"
FontSize="11.5"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
</Grid>
<StackPanel x:Name="OverlayRegisteredModelsPanel"
Margin="0,0,0,8"/>
<TextBox x:Name="TxtOverlayModelInput" Visibility="Collapsed"/>
</StackPanel>
<Grid x:Name="OverlayAnchorPermission" Margin="12,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="운영 모드"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">사내 모드는 외부 검색, 외부 URL 열기, 외부 호출을 더 강하게 제한합니다. 사외 모드는 외부 서비스와 웹 작업까지 허용하는 확장 모드입니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<ComboBox x:Name="CmbOverlayOperationMode"
Grid.Column="1"
MinWidth="140"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayOperationMode_SelectionChanged">
<ComboBoxItem Content="모드 · 사내 모드" Tag="internal"/>
<ComboBoxItem Content="모드 · 사외 모드" Tag="external"/>
</ComboBox>
</Grid>
<Grid x:Name="OverlayFolderDataUsageRow" Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="폴더 데이터 활용"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">현재 폴더의 파일과 문맥을 응답에 얼마나 적극적으로 활용할지 정합니다. 적극 활용은 관련 파일을 더 넓게 참조하고, 활용하지 않음은 현재 입력 중심으로만 답합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<ComboBox x:Name="CmbOverlayFolderDataUsage"
Grid.Column="1"
MinWidth="140"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayFolderDataUsage_SelectionChanged">
<ComboBoxItem Content="데이터 · 활용하지 않음" Tag="none"/>
<ComboBoxItem Content="데이터 · 소극 활용" Tag="passive"/>
<ComboBoxItem Content="데이터 · 적극 활용" Tag="active"/>
</ComboBox>
</Grid>
<Grid x:Name="OverlayTlsRow" Visibility="Collapsed" Margin="0,0,0,0">
<CheckBox x:Name="OverlayHiddenTlsToggle" Visibility="Collapsed"/>
</Grid>
<Grid x:Name="OverlayAnchorAdvanced" Margin="0,14,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="압축 시작 한도(%)"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">컨텍스트 사용량이 이 비율에 도달하면 오래된 대화를 먼저 요약해 공간을 비웁니다. 값을 낮추면 더 일찍 압축해 안정성이 올라갑니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<StackPanel Grid.Column="1">
<WrapPanel HorizontalAlignment="Right">
<Border x:Name="OverlayCompact60Card"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlayCompactPresetCard_MouseLeftButtonUp"
Tag="60">
<TextBlock Text="60%" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<Border x:Name="OverlayCompact70Card"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlayCompactPresetCard_MouseLeftButtonUp"
Tag="70">
<TextBlock Text="70%" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<Border x:Name="OverlayCompact80Card"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlayCompactPresetCard_MouseLeftButtonUp"
Tag="80">
<TextBlock Text="80%" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<Border x:Name="OverlayCompact90Card"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,0,8"
MouseLeftButtonUp="OverlayCompactPresetCard_MouseLeftButtonUp"
Tag="90">
<TextBlock Text="90%" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
</WrapPanel>
<TextBox x:Name="TxtOverlayContextCompactTriggerPercent"
Visibility="Collapsed"
LostFocus="TxtOverlayContextCompactTriggerPercent_LostFocus"/>
</StackPanel>
</Grid>
<Grid x:Name="OverlayMaxContextTokensRow" Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="최대 컨텍스트 토큰"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">한 번의 작업에서 AX Agent가 유지할 수 있는 최대 문맥 크기입니다. 너무 낮으면 긴 대화가 빨리 잘리고, 너무 높으면 느려질 수 있습니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<StackPanel Grid.Column="1">
<WrapPanel HorizontalAlignment="Right">
<Border x:Name="OverlayContext4KCard"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlayContextPresetCard_MouseLeftButtonUp"
Tag="4096">
<TextBlock Text="4K" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<Border x:Name="OverlayContext16KCard"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlayContextPresetCard_MouseLeftButtonUp"
Tag="16384">
<TextBlock Text="16K" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<Border x:Name="OverlayContext64KCard"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlayContextPresetCard_MouseLeftButtonUp"
Tag="65536">
<TextBlock Text="64K" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<Border x:Name="OverlayContext256KCard"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlayContextPresetCard_MouseLeftButtonUp"
Tag="262144">
<TextBlock Text="256K" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<Border x:Name="OverlayContext1MCard"
Cursor="Hand"
CornerRadius="8"
BorderThickness="1"
BorderBrush="{DynamicResource BorderColor}"
Padding="9,7"
Margin="0,0,0,8"
MouseLeftButtonUp="OverlayContextPresetCard_MouseLeftButtonUp"
Tag="1000000">
<TextBlock Text="1M" FontSize="12" Foreground="{DynamicResource PrimaryText}"/>
</Border>
</WrapPanel>
<TextBox x:Name="TxtOverlayMaxContextTokens"
Visibility="Collapsed"
LostFocus="TxtOverlayMaxContextTokens_LostFocus"/>
</StackPanel>
</Grid>
<Grid x:Name="OverlayTemperatureRow" Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="220"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="Temperature"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">낮을수록 더 일관되고 정확한 답변 쪽으로, 높을수록 더 자유롭고 창의적인 답변 쪽으로 기울어집니다. 일반 업무형 응답은 0.7 전후가 기본값입니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider x:Name="SldOverlayTemperature"
Width="150"
Minimum="0"
Maximum="2"
TickFrequency="0.1"
IsSnapToTickEnabled="True"
ValueChanged="SldOverlayTemperature_ValueChanged"
VerticalAlignment="Center"/>
<Border Width="48"
Height="28"
Margin="10,0,0,0"
CornerRadius="8"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1">
<TextBlock x:Name="TxtOverlayTemperatureValue"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5"/>
</Border>
<TextBox x:Name="TxtOverlayTemperature"
Visibility="Collapsed"
LostFocus="TxtOverlayTemperature_LostFocus"/>
</StackPanel>
</Grid>
<Grid x:Name="OverlayMaxRetryRow" Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="220"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="오류 재시도 횟수"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">도구 실패나 일시 오류가 났을 때 자동으로 다시 시도할 횟수입니다. 높을수록 복구 기회는 늘지만 전체 실행 시간도 길어집니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider x:Name="SldOverlayMaxRetryOnError"
Width="150"
Minimum="0"
Maximum="10"
TickFrequency="1"
IsSnapToTickEnabled="True"
ValueChanged="SldOverlayMaxRetryOnError_ValueChanged"
VerticalAlignment="Center"/>
<Border Width="48"
Height="28"
Margin="10,0,0,0"
CornerRadius="8"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1">
<TextBlock x:Name="TxtOverlayMaxRetryOnErrorValue"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5"/>
</Border>
<TextBox x:Name="TxtOverlayMaxRetryOnError"
Visibility="Collapsed"
LostFocus="TxtOverlayMaxRetryOnError_LostFocus"/>
</StackPanel>
</Grid>
<Grid x:Name="OverlayMaxAgentIterationsRow" Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="220"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="최대 Agent Pass"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">계획, 실행, 검토 단계를 몇 번까지 반복할지 정합니다. 큰 작업일수록 여유를 두는 편이 좋지만, 너무 높으면 과도하게 오래 돌 수 있습니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider x:Name="SldOverlayMaxAgentIterations"
Width="150"
Minimum="1"
Maximum="100"
TickFrequency="1"
IsSnapToTickEnabled="True"
ValueChanged="SldOverlayMaxAgentIterations_ValueChanged"
VerticalAlignment="Center"/>
<Border Width="48"
Height="28"
Margin="10,0,0,0"
CornerRadius="8"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1">
<TextBlock x:Name="TxtOverlayMaxAgentIterationsValue"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5"/>
</Border>
<TextBox x:Name="TxtOverlayMaxAgentIterations"
Visibility="Collapsed"
LostFocus="TxtOverlayMaxAgentIterations_LostFocus"/>
</StackPanel>
</Grid>
<StackPanel x:Name="OverlayDeveloperRuntimePanel" Margin="0,14,0,0">
<Grid x:Name="OverlayFreeTierDelayRow">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="220"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="호출 간 딜레이(초)"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">무료 호출 제한이 있는 서비스에서 연속 요청 사이에 둘 최소 대기 시간입니다. 호출이 막히는 환경일수록 조금 넉넉하게 두는 편이 안정적입니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider x:Name="SldOverlayFreeTierDelaySeconds"
Width="150"
Minimum="0"
Maximum="60"
TickFrequency="1"
IsSnapToTickEnabled="True"
ValueChanged="SldOverlayFreeTierDelaySeconds_ValueChanged"
VerticalAlignment="Center"/>
<Border Width="48"
Height="28"
Margin="10,0,0,0"
CornerRadius="8"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1">
<TextBlock x:Name="TxtOverlayFreeTierDelaySecondsValue"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5"/>
</Border>
<TextBox x:Name="TxtOverlayFreeTierDelaySeconds"
Visibility="Collapsed"
LostFocus="TxtOverlayFreeTierDelaySeconds_LostFocus"/>
</StackPanel>
</Grid>
<Grid x:Name="OverlayMaxSubAgentsRow" Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="220"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="서브에이전트 최대 수"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">큰 작업을 병렬로 나눌 때 동시에 돌릴 최대 서브에이전트 수입니다. 값을 높이면 빠를 수 있지만 CPU와 메모리 사용량이 늘어납니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider x:Name="SldOverlayMaxSubAgents"
Width="150"
Minimum="1"
Maximum="10"
TickFrequency="1"
IsSnapToTickEnabled="True"
ValueChanged="SldOverlayMaxSubAgents_ValueChanged"
VerticalAlignment="Center"/>
<Border Width="48"
Height="28"
Margin="10,0,0,0"
CornerRadius="8"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1">
<TextBlock x:Name="TxtOverlayMaxSubAgentsValue"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="{DynamicResource PrimaryText}"
FontSize="11.5"/>
</Border>
<TextBox x:Name="TxtOverlayMaxSubAgents"
Visibility="Collapsed"
LostFocus="TxtOverlayMaxSubAgents_LostFocus"/>
</StackPanel>
</Grid>
<Grid x:Name="OverlayAgentLogLevelRow" Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="160"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="실행 이력 상세도"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">채팅창에 도구 호출과 결과를 얼마나 자세히 보여줄지 정합니다. 디버그는 가장 자세하지만 작업 흐름이 길게 보일 수 있습니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<ComboBox x:Name="CmbOverlayAgentLogLevel"
Grid.Column="1"
MinWidth="160"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayAgentLogLevel_SelectionChanged">
<ComboBoxItem Content="간략" Tag="simple"/>
<ComboBoxItem Content="상세" Tag="detailed"/>
<ComboBoxItem Content="디버그" Tag="debug"/>
</ComboBox>
</Grid>
</StackPanel>
<StackPanel x:Name="OverlayDeveloperExtraPanel" Margin="0,8,0,0">
<Grid x:Name="OverlayPlanDiffCountRow">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="180"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="계획 diff 심각도(개수)"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">계획 변경 개수가 어느 정도일 때 중간, 대폭 배지를 붙일지 정합니다. 검토 기준을 팀 스타일에 맞게 조절할 때 씁니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<TextBlock Text="중간" Margin="0,0,6,0" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<TextBox x:Name="TxtOverlayPlanDiffMediumCount"
Width="48"
Margin="0,0,10,0"
TextAlignment="Center"
LostFocus="TxtOverlayPlanDiffMediumCount_LostFocus"
Padding="8,5"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Foreground="{DynamicResource PrimaryText}"
FontSize="12"/>
<TextBlock Text="대폭" Margin="0,0,6,0" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<TextBox x:Name="TxtOverlayPlanDiffHighCount"
Width="48"
TextAlignment="Center"
LostFocus="TxtOverlayPlanDiffHighCount_LostFocus"
Padding="8,5"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Foreground="{DynamicResource PrimaryText}"
FontSize="12"/>
</StackPanel>
</Grid>
<Grid x:Name="OverlayPlanDiffRatioRow" Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="180"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="계획 diff 심각도(비율 %)"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">전체 계획 대비 변경 비율이 어느 수준일 때 중간, 대폭으로 볼지 정합니다. 작업 크기보다 영향도를 기준으로 보고 싶을 때 적합합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<TextBlock Text="중간" Margin="0,0,6,0" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<TextBox x:Name="TxtOverlayPlanDiffMediumRatio"
Width="48"
Margin="0,0,10,0"
TextAlignment="Center"
LostFocus="TxtOverlayPlanDiffMediumRatio_LostFocus"
Padding="8,5"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Foreground="{DynamicResource PrimaryText}"
FontSize="12"/>
<TextBlock Text="대폭" Margin="0,0,6,0" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<TextBox x:Name="TxtOverlayPlanDiffHighRatio"
Width="48"
TextAlignment="Center"
LostFocus="TxtOverlayPlanDiffHighRatio_LostFocus"
Padding="8,5"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Foreground="{DynamicResource PrimaryText}"
FontSize="12"/>
</StackPanel>
</Grid>
<Border x:Name="OverlayToggleWorkflowVisualizer" Style="{StaticResource OverlayAdvancedToggleRowStyle}" Margin="0,8,0,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<TextBlock Text="워크플로우 시각화" FontSize="12.5" FontWeight="SemiBold" Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="에이전트 실행 흐름을 별도 창에서 실시간으로 보여줍니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayWorkflowVisualizer"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleShowTotalCallStats" Style="{StaticResource OverlayAdvancedToggleRowStyle}" Margin="0,8,0,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<TextBlock Text="전체 호출·토큰 합계 표시" FontSize="12.5" FontWeight="SemiBold" Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="작업 완료 시 총 호출 수와 누적 토큰량을 별도로 표시합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayShowTotalCallStats"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleAuditLog" Style="{StaticResource OverlayAdvancedToggleRowStyle}" Margin="0,8,0,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<TextBlock Text="감사 로그" FontSize="12.5" FontWeight="SemiBold" Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="도구 호출 이력을 로컬 JSON으로 기록해 보안 감사와 디버깅에 활용합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableAuditLog"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Grid x:Name="OverlayOpenAuditLogRow" Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock Text="감사 로그 폴더"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<TextBlock Text="저장된 도구 호출 이력 폴더를 바로 엽니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<Border Grid.Column="1"
Cursor="Hand"
Background="{DynamicResource ItemHoverBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="8"
Padding="10,6"
Margin="12,0,0,0"
MouseLeftButtonUp="OverlayOpenAuditLogBtn_MouseLeftButtonUp">
<TextBlock Text="폴더 열기"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}"/>
</Border>
</Grid>
</StackPanel>
<StackPanel x:Name="OverlayAdvancedTogglePanel" Margin="0,14,0,0">
<CheckBox x:Name="ChkOverlayVllmAllowInsecureTls" Visibility="Collapsed" Checked="ChkOverlayVllmAllowInsecureTls_Changed" Unchecked="ChkOverlayVllmAllowInsecureTls_Changed"/>
<Border x:Name="OverlayToggleProactiveCompact" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="자동 대화 압축"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">긴 대화에서 오래된 내용을 먼저 요약해 현재 작업에 필요한 맥락만 남깁니다. 컨텍스트 초과로 답변이 끊기는 상황을 줄일 때 유용합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="대화 길이가 길어질 때 이전 내용을 먼저 정리해 컨텍스트 한도에 안정적으로 맞춥니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableProactiveCompact"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleSkillSystem" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="확장 스킬 사용"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">로컬 스킬 파일을 읽어 슬래시 명령, 업무 템플릿, 자동 워크플로우를 확장합니다. 끄면 기본 내장 기능만 사용합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="설치된 스킬 파일을 읽어 슬래시 명령과 업무별 확장 워크플로우를 활용합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableSkillSystem"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleToolHooks" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="실행 전후 자동 확장"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">도구 실행 직전과 직후에 사용자 정의 훅을 연결합니다. 백업, 로그 기록, 검증 스크립트 같은 후처리를 자동화할 때 씁니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="도구 실행 전후에 추가 스크립트나 확장 규칙을 끼워 넣어 자동 처리 흐름을 확장합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableToolHooks"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleHookInputMutation" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="입력 보정 반영"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">훅이나 확장 규칙이 입력을 더 안전하거나 명확하게 다듬은 경우, 그 수정본을 실제 실행 프롬프트에 반영합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="확장 규칙이 입력을 더 적절하게 고친 경우 그 수정본을 실제 실행에 반영합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableHookInputMutation"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleHookPermissionUpdate" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="권한 변경 반영"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">확장 규칙이 읽기 전용, 승인 필요 같은 실행 권한을 조정하면 그 결과를 다음 도구 단계에 바로 이어받습니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="확장 규칙이 현재 실행 권한을 조정하면 그 변경값을 이어지는 단계에 바로 적용합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableHookPermissionUpdate"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleCoworkVerification" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Cowork 결과 검토"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">문서, 보고서, 표 같은 업무 결과를 한 번 더 확인해 빠진 항목이나 형식 오류를 줄입니다. 완성도는 올라가지만 한 단계 더 검토하므로 시간이 조금 더 듭니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="문서와 데이터 작업 결과를 한 번 더 점검해 누락이나 형식 문제를 줄입니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableCoworkVerification"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleCodeVerification" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Code 결과 검토"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">코드 수정 후 다시 읽고 점검해 누락된 변경, 문법 문제, 테스트 누락 가능성을 줄입니다. 안전성은 오르지만 응답 시간이 약간 늘 수 있습니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="코드 생성 또는 수정 뒤에 한 번 더 점검해 오류와 빠진 부분을 줄입니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableCodeVerification"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleCodeReview" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="코드 리뷰 도구 활성화"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">Git diff 분석, 파일 리뷰, PR 요약 생성 도구를 코드 탭에서 사용할 수 있게 합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="코드 탭에서 diff 분석과 리뷰 요약 도구를 자동으로 활용합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableCodeReview"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleParallelTools" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="도구 병렬 실행"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">서로 충돌하지 않는 읽기, 조회, 분석 작업을 동시에 실행해 응답 속도를 높입니다. 순서 보장이 중요한 작업은 자동으로 직렬 처리됩니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="서로 겹치지 않는 작업은 동시에 처리해 응답 시간을 줄입니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableParallelTools"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleProjectRules" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="프로젝트 규칙 자동 반영"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">작업 폴더 안의 규칙 문서나 지침 파일을 읽어 코딩 스타일, 금지사항, 작업 순서를 응답에 자동 반영합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="작업 폴더 안의 규칙 문서를 읽어 작업 방식과 주의사항을 자동으로 반영합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableProjectRules"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleAgentMemory" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="에이전트 메모리 사용"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">폴더별 메모와 이전 합의사항을 유지해 반복 요청에서 같은 설명을 다시 하지 않도록 돕습니다. 장기 작업을 이어갈 때 특히 유용합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="폴더별 메모를 유지해 반복 작업에서 이전 맥락을 더 잘 이어갑니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableAgentMemory"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayTogglePlanModeTools" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Plan Mode 도구"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">코드 탭에서 작업을 바로 실행하기 전에 계획 단계로 분리해 검토할 수 있게 합니다. 큰 변경이나 위험 작업을 다룰 때 안전장치 역할을 합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="코드 탭에서 계획 전용 단계 전환 도구를 사용할 수 있게 합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnablePlanModeTools"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleWorktreeTools" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Worktree 도구"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">브랜치와 작업 디렉터리를 분리해 실험 작업을 안전하게 진행하는 도구입니다. 현재 작업을 건드리지 않고 병렬 검토를 하고 싶을 때 유용합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="코드 탭에서 워크트리 생성과 전환 도구를 노출합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableWorktreeTools"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleTeamTools" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Team 도구"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">큰 작업을 역할별 단위로 쪼개고 병렬 진행 흐름을 관리하는 도구입니다. 리뷰, 구현, 검증을 나눠 다룰 때 도움이 됩니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="코드 탭에서 팀 작업 생성과 정리 도구를 사용할 수 있게 합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableTeamTools"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
<Border x:Name="OverlayToggleCronTools" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Cron 도구"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">정기 실행 작업이나 예약형 자동화를 다룰 때 쓰는 도구입니다. 반복 점검, 예약 생성, 상태 확인 같은 흐름을 연결합니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Text="코드 탭에서 예약 작업 생성과 확인 도구를 사용할 수 있게 합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableCronTools"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"/>
</Grid>
</Border>
</StackPanel>
<Border x:Name="OverlayToolsInfoPanel"
Visibility="Collapsed"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="12"
Padding="14,12"
Margin="0,14,0,0">
<StackPanel>
<TextBlock Text="도구 설명"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="도구 탭에서는 AX Agent가 실제로 사용할 도구와 실행 전후 확장 흐름을 관리합니다."
Margin="0,4,0,10"
FontSize="11"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
<TextBlock FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource PrimaryText}">
AI가 파일 읽기/쓰기, 검색, Git 같은 도구를 실행할 때
<LineBreak/>Pre 훅과 Post 훅으로 사용자 스크립트를 자동 실행할 수 있습니다.
<LineBreak/>
<LineBreak/>동작 흐름: AI 판단 → Pre 훅 → 도구 실행 → Post 훅 → 다음 단계
<LineBreak/>
<LineBreak/>활용 예시
<LineBreak/>• 파일 수정 후 자동 백업
<LineBreak/>• Git 커밋 전 린트/테스트 실행
<LineBreak/>• 특정 도구 실행 시 로그 기록 또는 알림 표시
<LineBreak/>
<LineBreak/>훅 실패나 타임아웃이 나더라도 AX Agent 작업은 계속 진행됩니다.
</TextBlock>
</StackPanel>
</Border>
<StackPanel x:Name="OverlayToolsRuntimePanel"
Visibility="Collapsed"
Margin="0,14,0,0">
<TextBlock Text="훅 실행 타임아웃"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="12"
Padding="14,12"
Margin="0,8,0,10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="120"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<TextBlock Text="도구 훅 스크립트 제한 시간"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="지정 시간 안에 훅이 끝나지 않으면 자동으로 종료하고, AX Agent 본 작업은 계속 진행합니다."
Margin="0,4,0,0"
FontSize="11"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<Grid Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="44"/>
</Grid.ColumnDefinitions>
<Slider x:Name="SldOverlayToolHookTimeoutMs"
Minimum="3000"
Maximum="30000"
TickFrequency="1000"
IsSnapToTickEnabled="True"
SmallChange="1000"
LargeChange="3000"
VerticalAlignment="Center"
ValueChanged="SldOverlayToolHookTimeoutMs_ValueChanged"/>
<Border Grid.Column="1"
Margin="10,0,0,0"
Padding="8,4"
MinWidth="44"
VerticalAlignment="Center"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="10">
<TextBlock x:Name="TxtOverlayToolHookTimeoutMsValue"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="11.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBox x:Name="TxtOverlayToolHookTimeoutMs"
Visibility="Collapsed"
LostFocus="TxtOverlayToolHookTimeoutMs_LostFocus"/>
</Grid>
</Grid>
</Border>
<Grid Margin="0,0,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock Text="등록된 훅"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="실행 전/후 자동 확장에 연결된 스크립트를 여기서 직접 추가하고 정리합니다."
Margin="0,4,0,0"
FontSize="11"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<Border Grid.Column="1"
Cursor="Hand"
Background="{DynamicResource ItemHoverBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="8"
Padding="10,6"
Margin="12,0,0,0"
MouseLeftButtonUp="OverlayAddHookBtn_MouseLeftButtonUp">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE710;"
FontFamily="Segoe MDL2 Assets"
FontSize="11.5"
Margin="0,0,6,0"
Foreground="{DynamicResource AccentColor}"/>
<TextBlock Text="훅 추가"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}"/>
</StackPanel>
</Border>
</Grid>
<StackPanel x:Name="OverlayHookListPanel"/>
</StackPanel>
<Border x:Name="OverlayEtcInfoPanel"
Visibility="Collapsed"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="12"
Padding="14,12"
Margin="0,14,0,0">
<StackPanel>
<TextBlock Text="스킬/차단 설명"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="스킬 탭에서는 재사용 워크플로우, 폴더 기반 확장, MCP 연동과 보조 동작을 관리합니다."
Margin="0,4,0,10"
FontSize="11"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
<TextBlock FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource PrimaryText}">
`.skill.md` 또는 `SKILL.md` 파일을 두면 슬래시 명령(`/`)으로 스킬을 호출할 수 있습니다.
<LineBreak/>기본 스킬 폴더: %APPDATA%\AxCopilot\skills\
<LineBreak/>
<LineBreak/>이 탭에서 함께 관리하는 항목
<LineBreak/>• 추가 스킬 폴더
<LineBreak/>• 슬래시 팝업 표시 개수
<LineBreak/>• 드래그 앤 드롭 AI 액션
<LineBreak/>• 응답 실패 대비 폴백 모델
<LineBreak/>• MCP 서버 연결 상태와 확장 도구 연동
<LineBreak/>
<LineBreak/>MCP 서버를 연결하면 브라우저, 파일시스템, 외부 업무 도구 같은 확장 기능을 AX Agent가 사용할 수 있습니다.
</TextBlock>
</StackPanel>
</Border>
<StackPanel x:Name="OverlayEtcRuntimePanel"
Visibility="Collapsed"
Margin="0,14,0,0">
<TextBlock Text="에이전트 접근 차단"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="12"
Padding="14,12"
Margin="0,8,0,8">
<StackPanel>
<TextBlock Text="차단 경로 패턴"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="에이전트가 접근할 수 없는 경로입니다. (시스템 보호)"
Margin="0,2,0,8"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
<StackPanel x:Name="OverlayBlockedPathsPanel"/>
</StackPanel>
</Border>
<Border Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="12"
Padding="14,12"
Margin="0,0,0,14">
<StackPanel>
<TextBlock Text="차단 확장자"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="에이전트가 수정할 수 없는 파일 형식입니다."
Margin="0,2,0,8"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
<WrapPanel x:Name="OverlayBlockedExtensionsPanel"/>
</StackPanel>
</Border>
<TextBlock Text="스킬 설정"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="12"
Padding="14,12"
Margin="0,8,0,8">
<StackPanel>
<TextBlock Text="스킬 폴더"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock x:Name="OverlaySkillsFolderPathText"
Margin="0,4,0,10"
FontSize="11"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
<WrapPanel Margin="0,0,0,10">
<Border Cursor="Hand"
Background="{DynamicResource ItemHoverBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="8"
Padding="10,6"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlayBrowseSkillFolderBtn_MouseLeftButtonUp">
<TextBlock Text="폴더 선택"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}"/>
</Border>
<Border Cursor="Hand"
Background="{DynamicResource ItemHoverBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="8"
Padding="10,6"
Margin="0,0,8,8"
MouseLeftButtonUp="OverlayOpenSkillFolderBtn_MouseLeftButtonUp">
<TextBlock Text="폴더 열기"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}"/>
</Border>
</WrapPanel>
<Grid Margin="0,0,0,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="160"/>
</Grid.ColumnDefinitions>
<TextBlock Text="슬래시 팝업 표시 개수"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Grid Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="36"/>
</Grid.ColumnDefinitions>
<Slider x:Name="SldOverlaySlashPopupPageSize"
Minimum="3"
Maximum="20"
TickFrequency="1"
IsSnapToTickEnabled="True"
SmallChange="1"
LargeChange="2"
VerticalAlignment="Center"
ValueChanged="SldOverlaySlashPopupPageSize_ValueChanged"/>
<Border Grid.Column="1"
Margin="8,0,0,0"
Padding="6,4"
VerticalAlignment="Center"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="10">
<TextBlock x:Name="TxtOverlaySlashPopupPageSizeValue"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="11.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBox x:Name="TxtOverlaySlashPopupPageSize"
Visibility="Collapsed"
LostFocus="TxtOverlaySlashPopupPageSize_LostFocus"/>
</Grid>
</Grid>
<Grid Margin="0,0,0,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="160"/>
</Grid.ColumnDefinitions>
<TextBlock Text="슬래시 핀 최대 개수"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Grid Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="36"/>
</Grid.ColumnDefinitions>
<Slider x:Name="SldOverlayMaxFavoriteSlashCommands"
Minimum="1"
Maximum="30"
TickFrequency="1"
IsSnapToTickEnabled="True"
SmallChange="1"
LargeChange="2"
VerticalAlignment="Center"
ValueChanged="SldOverlayMaxFavoriteSlashCommands_ValueChanged"/>
<Border Grid.Column="1"
Margin="8,0,0,0"
Padding="6,4"
VerticalAlignment="Center"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="10">
<TextBlock x:Name="TxtOverlayMaxFavoriteSlashCommandsValue"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="11.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBox x:Name="TxtOverlayMaxFavoriteSlashCommands"
Visibility="Collapsed"
LostFocus="TxtOverlayMaxFavoriteSlashCommands_LostFocus"/>
</Grid>
</Grid>
<Grid Margin="0,0,0,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="160"/>
</Grid.ColumnDefinitions>
<TextBlock Text="슬래시 최근 최대 개수"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Grid Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="36"/>
</Grid.ColumnDefinitions>
<Slider x:Name="SldOverlayMaxRecentSlashCommands"
Minimum="5"
Maximum="50"
TickFrequency="1"
IsSnapToTickEnabled="True"
SmallChange="1"
LargeChange="5"
VerticalAlignment="Center"
ValueChanged="SldOverlayMaxRecentSlashCommands_ValueChanged"/>
<Border Grid.Column="1"
Margin="8,0,0,0"
Padding="6,4"
VerticalAlignment="Center"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="10">
<TextBlock x:Name="TxtOverlayMaxRecentSlashCommandsValue"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="11.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBox x:Name="TxtOverlayMaxRecentSlashCommands"
Visibility="Collapsed"
LostFocus="TxtOverlayMaxRecentSlashCommands_LostFocus"/>
</Grid>
</Grid>
<Border Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<TextBlock Text="드래그 앤 드롭 AI 액션"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="파일을 끌어 놓을 때 AI 액션 선택 메뉴를 먼저 보여줍니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayEnableDragDropAiActions"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"
Checked="ChkOverlayEnableDragDropAiActions_Changed"
Unchecked="ChkOverlayEnableDragDropAiActions_Changed"/>
</Grid>
</Border>
<Border Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Margin="0,0,16,0">
<TextBlock Text="드래그 앤 드롭 즉시 전송"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="AI 액션을 고른 뒤 추가 확인 없이 바로 큐에 넣어 실행합니다."
Margin="0,4,0,0"
FontSize="11.5"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<CheckBox x:Name="ChkOverlayDragDropAutoSend"
Grid.Column="1"
VerticalAlignment="Center"
Style="{StaticResource ToggleSwitch}"
Checked="ChkOverlayDragDropAutoSend_Changed"
Unchecked="ChkOverlayDragDropAutoSend_Changed"/>
</Grid>
</Border>
<TextBlock Text="로드된 스킬"
Margin="0,10,0,6"
FontSize="12"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<StackPanel x:Name="OverlaySkillListPanel"/>
</StackPanel>
</Border>
<TextBlock Text="폴백 모델"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="12"
Padding="14,12"
Margin="0,8,0,14">
<StackPanel x:Name="OverlayFallbackModelsPanel"/>
</Border>
<TextBlock Text="MCP 서버"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<Border Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="12"
Padding="14,12"
Margin="0,8,0,14">
<StackPanel x:Name="OverlayMcpServerListPanel"/>
</Border>
<TextBlock Text="등록된 도구/커넥터"
FontSize="12.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="에이전트가 사용할 수 있는 도구 목록입니다. 코워크/코드 탭에서 자동으로 호출합니다."
Margin="0,4,0,8"
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
<StackPanel x:Name="OverlayToolRegistryPanel"/>
</StackPanel>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
</Grid>
</Border>
</Grid>
</Border>
<!-- ══ 미리보기 스플리터 (Column 3) ══ -->
<GridSplitter x:Name="PreviewSplitter" Grid.Column="3" Width="5"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Background="Transparent" Cursor="SizeWE" Visibility="Collapsed"
ShowsPreview="True"/>
<!-- ══ 문서 미리보기 패널 (Column 4) ══ -->
<!--
WebView2 에어스페이스 문제 해결:
탭 바와 WebView2 콘텐츠를 DockPanel으로 분리.
DockPanel.Dock="Top"인 탭 바는 별도 WPF 레이어로 렌더링되어
WebView2 HWND에 가려지지 않음.
-->
<Border x:Name="PreviewPanel" Grid.Column="4" Visibility="Collapsed"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1,0,0,0">
<DockPanel LastChildFill="True">
<!-- 탭 바 + 도구 버튼 (DockPanel.Top — WebView2 위에 독립 레이어) -->
<Border DockPanel.Dock="Top" Background="{DynamicResource HintBackground}"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="0,0,0,1"
Padding="0" Panel.ZIndex="10" Focusable="True"
PreviewMouseDown="PreviewTabBar_PreviewMouseDown">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ScrollViewer Grid.Column="0" HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Disabled" CanContentScroll="True">
<StackPanel x:Name="PreviewTabPanel" Orientation="Horizontal"/>
</ScrollViewer>
<StackPanel Grid.Column="1" Orientation="Horizontal" Margin="4,0">
<Button x:Name="BtnOpenExternal" Style="{StaticResource GhostBtn}" Padding="6"
Click="BtnOpenExternal_Click" ToolTip="외부 프로그램으로 열기" Cursor="Hand">
<TextBlock Text="&#xE8A7;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource SecondaryText}" IsHitTestVisible="False"/>
</Button>
<Button Style="{StaticResource GhostBtn}" Padding="6"
Click="BtnClosePreview_Click" ToolTip="미리보기 닫기" Cursor="Hand">
<TextBlock Text="&#xE711;" FontFamily="Segoe MDL2 Assets" FontSize="10"
Foreground="{DynamicResource SecondaryText}" IsHitTestVisible="False"/>
</Button>
</StackPanel>
</Grid>
</Border>
<!-- 미리보기 콘텐츠 영역 (DockPanel.Fill — WebView2는 여기에만 존재) -->
<Grid ClipToBounds="True">
<wv2:WebView2 x:Name="PreviewWebView" Visibility="Collapsed"/>
<ScrollViewer x:Name="PreviewTextScroll" Visibility="Collapsed"
VerticalScrollBarVisibility="Auto" Padding="12,8">
<TextBlock x:Name="PreviewTextBlock" TextWrapping="Wrap"
FontFamily="Consolas" FontSize="12"
Foreground="{DynamicResource PrimaryText}"/>
</ScrollViewer>
<DataGrid x:Name="PreviewDataGrid" Visibility="Collapsed"
AutoGenerateColumns="True" IsReadOnly="True"
HeadersVisibility="Column" GridLinesVisibility="All"
Background="Transparent" Foreground="{DynamicResource PrimaryText}"
BorderThickness="0" CanUserAddRows="False"
RowBackground="{DynamicResource HintBackground}" AlternatingRowBackground="{DynamicResource ItemHoverBackground}"
ColumnHeaderHeight="30" RowHeight="28" FontSize="11.5"/>
<TextBlock x:Name="PreviewEmpty" Text="미리보기할 파일이 없습니다"
HorizontalAlignment="Center" VerticalAlignment="Center"
FontSize="12" Foreground="{DynamicResource SecondaryText}"
Visibility="Collapsed"/>
</Grid>
</DockPanel>
</Border>
<!-- 리사이즈 그립 -->
<Thumb x:Name="ResizeGrip" Grid.Column="2"
Width="14" Height="14"
HorizontalAlignment="Right" VerticalAlignment="Bottom"
Cursor="SizeNWSE" Opacity="0.3"
DragDelta="ResizeGrip_DragDelta">
<Thumb.Template>
<ControlTemplate>
<TextBlock Text="&#xE740;" FontFamily="Segoe MDL2 Assets" FontSize="10"
Foreground="{DynamicResource SecondaryText}"/>
</ControlTemplate>
</Thumb.Template>
</Thumb>
</Grid>
</Border>
</Window>