Files
AX-Copilot-Codex/src/AxCopilot/Views/SettingsWindow.xaml
lacvet 303a23130b
Some checks failed
Release Gate / gate (push) Has been cancelled
AX Agent 플랜모드 잔재 제거와 상태바 소음 축소 반영
- AX Agent 내부 설정 오버레이에서 Plan Mode 도구 저장/노출 경로를 false 고정으로 정리

- 메인 설정에 남아 있던 플랜 모드 및 Plan Mode 도구 UI를 숨기고 카드 상태를 off 고정으로 정리

- Cowork/Code 상태바가 debug가 아닐 때 ToolCall/SkillCall/Paused/Resumed 이벤트로 과하게 흔들리지 않도록 조정

- claw-code parity 계획 문서와 README, DEVELOPMENT 이력을 현재 정책과 진척율 기준으로 갱신

- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ 경고 0 / 오류 0
2026-04-05 17:11:30 +09:00

5741 lines
446 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<Window x:Class="AxCopilot.Views.SettingsWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:AxCopilot.ViewModels"
xmlns:views="clr-namespace:AxCopilot.Views"
xmlns:converters="clr-namespace:AxCopilot.Themes"
Title="AX Copilot 설정"
Width="1100" Height="760"
MinWidth="960" MinHeight="700"
WindowStyle="SingleBorderWindow"
ResizeMode="CanResize"
ShowInTaskbar="True"
WindowStartupLocation="CenterScreen"
Background="{DynamicResource LauncherBackground}"
FontFamily="Segoe UI, Malgun Gothic"
Icon="pack://application:,,,/Assets/icon.ico"
PreviewKeyDown="Window_PreviewKeyDown">
<Window.Resources>
<!-- ─── 컨버터 ─────────────────────────────────────────────────────── -->
<converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
<converters:InverseBoolToVisibilityConverter x:Key="InverseBoolToVisibilityConverter"/>
<converters:CountToVisibilityConverter x:Key="CountToVisibilityConverter"/>
<converters:StringEqualConverter x:Key="StringEqualConverter"/>
<!-- ─── 사이드바 탭 항목 스타일 ──────────────────────────────────── -->
<Style x:Key="SideNavItem" TargetType="TabItem">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="FontWeight" Value="Normal"/>
<Setter Property="Width" Value="188"/>
<Setter Property="Height" Value="46"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Grid Height="46">
<!-- 배경 -->
<Border x:Name="BgBd" Background="Transparent"
CornerRadius="8" Margin="8,2"/>
<!-- 좌측 액센트 바 -->
<Border x:Name="Bar" Width="3" HorizontalAlignment="Left"
CornerRadius="0,3,3,0" Background="Transparent"/>
<!-- 아이콘 + 텍스트 -->
<StackPanel Orientation="Horizontal"
VerticalAlignment="Center" Margin="22,0,12,0">
<TextBlock x:Name="Icon"
Text="{TemplateBinding Tag}"
FontFamily="Segoe MDL2 Assets"
FontSize="16" Width="22"
HorizontalAlignment="Center"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"
Margin="0,0,10,0"/>
<ContentPresenter ContentSource="Header"
VerticalAlignment="Center"
RecognizesAccessKey="True"/>
</StackPanel>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="BgBd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
<Setter TargetName="Bar" Property="Background" Value="{DynamicResource AccentColor}"/>
<Setter TargetName="Icon" Property="Foreground" Value="{DynamicResource AccentColor}"/>
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}"/>
<Setter Property="FontWeight" Value="SemiBold"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsSelected" Value="False"/>
</MultiTrigger.Conditions>
<Setter TargetName="BgBd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
<Setter TargetName="Icon" Property="Foreground" Value="{DynamicResource SecondaryText}"/>
<Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ─── 설정 행 컨테이너 ─────────────────────────────────────────── -->
<Style x:Key="SettingsRow" TargetType="Border">
<Setter Property="Background" Value="White"/>
<Setter Property="CornerRadius" Value="10"/>
<Setter Property="Padding" Value="14,12"/>
<Setter Property="Margin" Value="0,0,0,3"/>
</Style>
<Style x:Key="AgentSettingsRow" TargetType="Border" BasedOn="{StaticResource SettingsRow}">
<Setter Property="Padding" Value="20,18"/>
<Setter Property="Margin" Value="0,0,0,14"/>
</Style>
<!-- ─── 레이블 / 힌트 ────────────────────────────────────────────── -->
<Style x:Key="RowLabel" TargetType="TextBlock">
<Setter Property="FontSize" Value="13"/>
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style x:Key="RowHint" TargetType="TextBlock">
<Setter Property="FontSize" Value="11"/>
<Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Margin" Value="0,2,0,0"/>
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
<Style x:Key="SectionHeader" TargetType="TextBlock">
<Setter Property="FontSize" Value="10.5"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/>
<Setter Property="Margin" Value="2,18,0,8"/>
</Style>
<!-- ─── 도움말 아이콘 (? 버튼 + 커스텀 툴팁) ──────────────────────── -->
<Style x:Key="HelpTooltipStyle" TargetType="ToolTip">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="HasDropShadow" Value="False"/>
<Setter Property="MaxWidth" Value="320"/>
<Setter Property="Placement" Value="Bottom"/>
<Setter Property="Background" Value="#1F2440"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="TextElement.Foreground" Value="White"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToolTip">
<Border Background="{TemplateBinding Background}" CornerRadius="10" Padding="14,10"
BorderBrush="{DynamicResource AccentColor}" BorderThickness="1">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ─── 에이전트 서브탭 (Segmented Control 스타일) ────────────────── -->
<Style x:Key="AgentSubTabStyle" TargetType="RadioButton">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="FontWeight" Value="Normal"/>
<Setter Property="Padding" Value="18,10"/>
<Setter Property="Margin" Value="0,0,10,0"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Border x:Name="Bd" Background="{TemplateBinding Background}"
BorderBrush="Transparent"
BorderThickness="0"
CornerRadius="10" Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="True">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
<Setter Property="Foreground" Value="{DynamicResource AccentColor}"/>
<Setter Property="FontWeight" Value="SemiBold"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsChecked" Value="False"/>
</MultiTrigger.Conditions>
<Setter TargetName="Bd" Property="Background" Value="{DynamicResource ItemHoverBackground}"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ─── 토글 스위치 ──────────────────────────────────────────────── -->
<Style x:Key="ToggleSwitch" TargetType="CheckBox">
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="CheckBox">
<Grid Width="46" Height="26" VerticalAlignment="Center">
<Border x:Name="Track" CornerRadius="13" Background="#D0D0E0"
Width="46" Height="26"/>
<Ellipse x:Name="Thumb" Width="20" Height="20"
Fill="White" HorizontalAlignment="Left"
VerticalAlignment="Center" Margin="3,0,0,0">
<Ellipse.Effect>
<DropShadowEffect BlurRadius="5" ShadowDepth="1" Opacity="0.25" Direction="270"/>
</Ellipse.Effect>
</Ellipse>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Track" Property="Background" Value="{DynamicResource AccentColor}"/>
<Setter TargetName="Thumb" Property="HorizontalAlignment" Value="Right"/>
<Setter TargetName="Thumb" Property="Margin" Value="0,0,3,0"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ─── 커스텀 ComboBox (ModernComboBox) ────────────────────────── -->
<ControlTemplate x:Key="ModernComboBoxToggle" TargetType="ToggleButton">
<Border x:Name="Bd" Background="{DynamicResource ItemBackground}" BorderBrush="{DynamicResource BorderColor}" BorderThickness="1.5"
CornerRadius="7" 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 TargetType="ComboBox">
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}"/>
<Setter Property="FontSize" Value="13"/>
<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="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Grid>
<ToggleButton x:Name="ToggleButton"
Template="{StaticResource ModernComboBoxToggle}"
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="White" 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 TargetType="ComboBoxItem">
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}"/>
<Setter Property="FontSize" Value="13"/>
<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>
<!-- ─── ModernTextBox ────────────────────────────────────────────── -->
<Style x:Key="ModernTextBox" TargetType="TextBox">
<Setter Property="Background" Value="{DynamicResource ItemBackground}"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor}"/>
<Setter Property="BorderThickness" Value="1.5"/>
<Setter Property="Padding" Value="10,7"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="7">
<Grid>
<ScrollViewer x:Name="PART_ContentHost" Margin="{TemplateBinding Padding}"/>
<TextBlock x:Name="PART_Placeholder"
Text="{TemplateBinding Tag}"
Foreground="{DynamicResource SecondaryText}"
FontSize="{TemplateBinding FontSize}"
Margin="{TemplateBinding Padding}"
VerticalAlignment="Center"
IsHitTestVisible="False"
Visibility="Collapsed"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="BorderBrush" Value="{DynamicResource AccentColor}"/>
<Setter Property="Background" Value="{DynamicResource ItemBackground}"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value=""/>
<Condition Property="IsFocused" Value="False"/>
</MultiTrigger.Conditions>
<Setter TargetName="PART_Placeholder" Property="Visibility" Value="Visible"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ─── 버튼 스타일들 ─────────────────────────────────────────────── -->
<Style x:Key="PrimaryButton" TargetType="Button">
<Setter Property="Background" Value="{DynamicResource AccentColor}"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Padding" Value="18,8"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
CornerRadius="8" Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#3B4EEC"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#2B3EDC"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SecondaryButton" TargetType="Button">
<Setter Property="Background" Value="{DynamicResource ItemBackground}"/>
<Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="Padding" Value="18,8"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
CornerRadius="8" Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource BorderColor}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- 아이콘 버튼 (작은 정사각형) -->
<Style x:Key="IconButton" TargetType="Button">
<Setter Property="Background" Value="{DynamicResource ItemBackground}"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Width" Value="34"/>
<Setter Property="Height" Value="32"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" CornerRadius="7">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource BorderColor}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- 삭제 버튼 -->
<Style x:Key="DeleteButton" TargetType="Button">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Width" Value="28"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" CornerRadius="6">
<TextBlock Text="&#xE74D;" FontFamily="Segoe MDL2 Assets"
FontSize="12" Foreground="#DD3333"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#FFF0F0"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- 색상 스와치 버튼 -->
<Style x:Key="ColorSwatchButton" TargetType="Button">
<Setter Property="Width" Value="36"/>
<Setter Property="Height" Value="36"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor}"/>
<Setter Property="BorderThickness" Value="1.5"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Border x:Name="Swatch"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="9"/>
<TextBlock x:Name="EditIcon" Text="&#xE70F;"
FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="White" HorizontalAlignment="Center"
VerticalAlignment="Center" Opacity="0"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Swatch" Property="BorderBrush" Value="{DynamicResource AccentColor}"/>
<Setter TargetName="Swatch" Property="BorderThickness" Value="2"/>
<Setter TargetName="EditIcon" Property="Opacity" Value="0.85"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ─── 핫키 배지 (키 이름 pill) ──────────────────────────────── -->
<Style x:Key="KeyBadge" TargetType="Border">
<Setter Property="Background" Value="White"/>
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="CornerRadius" Value="5"/>
<Setter Property="Padding" Value="8,3"/>
<Setter Property="Margin" Value="0,0,0,0"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect BlurRadius="3" ShadowDepth="1" Opacity="0.12" Direction="270"/>
</Setter.Value>
</Setter>
</Style>
<!-- 테마 카드 스타일 -->
<Style x:Key="ThemeCard" TargetType="Button">
<Setter Property="Padding" Value="0"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="CardBorder"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="12" ClipToBounds="True">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="CardBorder" Property="BorderBrush" Value="{DynamicResource AccentColor}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- ══════════════════════════════════════════════════════════════════ -->
<!-- 탭 컨트롤 (좌측 사이드바) -->
<!-- ══════════════════════════════════════════════════════════════════ -->
<TabControl x:Name="MainSettingsTab" Grid.Row="0" TabStripPlacement="Left"
SelectionChanged="MainSettingsTab_SelectionChanged"
Background="Transparent" BorderThickness="0">
<TabControl.Template>
<ControlTemplate TargetType="TabControl">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="188"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- ── 사이드바 ────────────────────────────────────── -->
<Border Grid.Column="0" Background="White"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="0,0,1,0">
<DockPanel>
<!-- 앱 브랜딩 헤더 -->
<Border DockPanel.Dock="Top" Padding="16,20,16,14">
<StackPanel Orientation="Horizontal">
<Border Width="30" Height="30" CornerRadius="8"
Background="{DynamicResource AccentColor}" Margin="0,0,10,0">
<TextBlock Text="&#xE700;"
FontFamily="Segoe MDL2 Assets"
FontSize="15" Foreground="White"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<StackPanel VerticalAlignment="Center">
<TextBlock Text="AX"
FontSize="14" FontWeight="Bold"
Foreground="{DynamicResource PrimaryText}" LineHeight="16"/>
<TextBlock Text="Commander"
FontSize="9.5" Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
</StackPanel>
</Border>
<Rectangle DockPanel.Dock="Top" Height="1"
Fill="{DynamicResource BorderColor}" Margin="12,0,12,8"/>
<Border DockPanel.Dock="Bottom" Margin="12,0,12,8"
Visibility="Collapsed"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1"
CornerRadius="10" Padding="8,8">
<StackPanel>
<TextBlock Text="설정 표현"
FontSize="11" FontWeight="SemiBold"
Foreground="{DynamicResource SecondaryText}"
Margin="2,0,0,6"/>
<WrapPanel>
<RadioButton x:Name="DisplayModeRich"
Content="풍부하게"
GroupName="DisplayMode"
Style="{StaticResource AgentSubTabStyle}"
Checked="DisplayMode_Checked"/>
<RadioButton x:Name="DisplayModeBalanced"
Content="적절하게"
GroupName="DisplayMode"
Style="{StaticResource AgentSubTabStyle}"
Checked="DisplayMode_Checked"/>
<RadioButton x:Name="DisplayModeSimple"
Content="간단하게"
GroupName="DisplayMode"
Style="{StaticResource AgentSubTabStyle}"
Checked="DisplayMode_Checked"/>
</WrapPanel>
</StackPanel>
</Border>
<!-- 탭 목록 — 창 높이가 충분히 크므로 스크롤 없음 -->
<ScrollViewer VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Disabled"
Margin="0,4,0,4">
<TabPanel IsItemsHost="True"
Background="Transparent"/>
</ScrollViewer>
</DockPanel>
</Border>
<!-- ── 컨텐츠 영역 ─────────────────────────────────── -->
<Border Grid.Column="1" Background="{DynamicResource LauncherBackground}">
<ContentPresenter ContentSource="SelectedContent"
Margin="26,20,26,8"/>
</Border>
</Grid>
</ControlTemplate>
</TabControl.Template>
<!-- ════════════════════════════════════════════════════════════ -->
<!-- 1. 일반 탭 -->
<!-- ════════════════════════════════════════════════════════════ -->
<TabItem Header="일반" Tag="&#xE713;" Style="{StaticResource SideNavItem}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="일반 설정" FontSize="16" FontWeight="SemiBold" Foreground="{DynamicResource PrimaryText}" Margin="0,0,0,2"/>
<Border Grid.Row="1" Background="Transparent" BorderThickness="0" Padding="0" Margin="0,8,0,14">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<RadioButton x:Name="GeneralSubTabMain" Content="일반" IsChecked="True"
GroupName="GeneralSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="GeneralSubTab_Checked"/>
<RadioButton x:Name="GeneralSubTabNotify" Content="알림"
GroupName="GeneralSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="GeneralSubTab_Checked"/>
<RadioButton x:Name="GeneralSubTabStorage" Content="저장 공간"
GroupName="GeneralSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="GeneralSubTab_Checked"/>
</StackPanel>
</Border>
<ScrollViewer x:Name="GeneralMainPanel" Grid.Row="2" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel>
<TextBlock Text="단축키" Style="{StaticResource SectionHeader}"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<!-- 아이콘 박스 -->
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="{DynamicResource AccentColor}" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE765;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="글로벌 단축키" Style="{StaticResource RowLabel}"/>
<TextBlock Text="AX Commander를 열고 닫는 전역 단축키" Style="{StaticResource RowHint}"/>
</StackPanel>
<!-- ── 글로벌 단축키 콤보박스 ──────────────── -->
<ComboBox Grid.Column="2"
x:Name="HotkeyCombo"
SelectedValue="{Binding Hotkey}"
SelectedValuePath="Tag"
SelectionChanged="HotkeyCombo_SelectionChanged"
Width="200" Height="34"
FontSize="13" FontWeight="SemiBold"
VerticalAlignment="Center"
VerticalContentAlignment="Center">
<!-- Spotlight / Alfred / Raycast 계열 인기 키조합 -->
<ComboBoxItem Content="Alt + Space" Tag="Alt+Space"/>
<ComboBoxItem Content="Ctrl + Space" Tag="Ctrl+Space"/>
<ComboBoxItem Content="Ctrl + Alt + Space" Tag="Ctrl+Alt+Space"/>
<ComboBoxItem Content="Alt + X" Tag="Alt+X"/>
<ComboBoxItem Content="Alt + A" Tag="Alt+A"/>
<ComboBoxItem Content="Alt + Z" Tag="Alt+Z"/>
<ComboBoxItem Content="Ctrl + Shift + Space" Tag="Ctrl+Shift+Space"/>
<ComboBoxItem Content="Ctrl + `" Tag="Ctrl+Oem3"/>
<ComboBoxItem Content="Win + Space" Tag="Win+Space"/>
<ComboBoxItem Content="Ctrl + Alt + A" Tag="Ctrl+Alt+A"/>
<ComboBoxItem Content="Ctrl + ;" Tag="Ctrl+OemSemicolon"/>
<ComboBoxItem Content="F12" Tag="F12"/>
</ComboBox>
</Grid>
</Border>
<TextBlock Text="검색 결과" Style="{StaticResource SectionHeader}"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#00A8CC" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE721;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="최대 결과 수" Style="{StaticResource RowLabel}"/>
<TextBlock Text="한 번에 표시할 최대 항목 개수 (120)" Style="{StaticResource RowHint}"/>
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center">
<Slider Minimum="1" Maximum="20"
Value="{Binding MaxResults, UpdateSourceTrigger=PropertyChanged}"
Width="140" SmallChange="1" LargeChange="5"
IsSnapToTickEnabled="True" TickFrequency="1"
VerticalAlignment="Center"/>
<Border Width="36" Height="28" CornerRadius="6" Background="{DynamicResource ItemHoverBackground}"
Margin="8,0,0,0" VerticalAlignment="Center">
<TextBlock Text="{Binding MaxResults}"
FontSize="13" FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</StackPanel>
</Grid>
</Border>
<!-- 기본 검색 엔진 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#006EAF" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE774;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="기본 검색 엔진" Style="{StaticResource RowLabel}"/>
<TextBlock Text="'?' 예약어의 기본 검색 엔진" Style="{StaticResource RowHint}"/>
</StackPanel>
<ComboBox Grid.Column="2"
SelectedValue="{Binding WebSearchEngine}"
SelectedValuePath="Tag"
Height="32" FontSize="12"
VerticalContentAlignment="Center">
<ComboBoxItem Tag="g">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE774;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="#4285F4" Margin="0,0,7,0" VerticalAlignment="Center"/>
<TextBlock Text="Google" VerticalAlignment="Center"/>
</StackPanel>
</ComboBoxItem>
<ComboBoxItem Tag="n">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE774;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="#03C75A" Margin="0,0,7,0" VerticalAlignment="Center"/>
<TextBlock Text="Naver" VerticalAlignment="Center"/>
</StackPanel>
</ComboBoxItem>
<ComboBoxItem Tag="d">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE774;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="#DE5833" Margin="0,0,7,0" VerticalAlignment="Center"/>
<TextBlock Text="DuckDuckGo" VerticalAlignment="Center"/>
</StackPanel>
</ComboBoxItem>
<ComboBoxItem Tag="y">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE774;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="#FF0000" Margin="0,0,7,0" VerticalAlignment="Center"/>
<TextBlock Text="YouTube" VerticalAlignment="Center"/>
</StackPanel>
</ComboBoxItem>
<ComboBoxItem Tag="w">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE774;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="#888888" Margin="0,0,7,0" VerticalAlignment="Center"/>
<TextBlock Text="Wikipedia" VerticalAlignment="Center"/>
</StackPanel>
</ComboBoxItem>
</ComboBox>
</Grid>
</Border>
<TextBlock Text="디스플레이" Style="{StaticResource SectionHeader}"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#7B2FBE" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE706;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="투명도" Style="{StaticResource RowLabel}"/>
<TextBlock Text="AX Commander 창의 배경 불투명도" Style="{StaticResource RowHint}"/>
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center">
<Slider Minimum="0.4" Maximum="1.0"
Value="{Binding Opacity, UpdateSourceTrigger=PropertyChanged}"
Width="140" SmallChange="0.01" LargeChange="0.1"
VerticalAlignment="Center"/>
<Border Width="46" Height="28" CornerRadius="6" Background="{DynamicResource ItemHoverBackground}"
Margin="8,0,0,0" VerticalAlignment="Center">
<TextBlock FontSize="12" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock.Text>
<Binding Path="OpacityPercent" StringFormat="{}{0}%"/>
</TextBlock.Text>
</TextBlock>
</Border>
</StackPanel>
</Grid>
</Border>
<!-- 런처 위치 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#5B4E7E" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE81D;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="AX Commander 위치" Style="{StaticResource RowLabel}"/>
<TextBlock Text="AX Commander 창이 나타날 화면 위치" Style="{StaticResource RowHint}"/>
</StackPanel>
<ComboBox Grid.Column="2"
SelectedValue="{Binding LauncherPosition}"
SelectedValuePath="Tag"
Height="32" FontSize="12"
VerticalContentAlignment="Center">
<ComboBoxItem Tag="center-top" Content="화면 상단 중앙 (기본)"/>
<ComboBoxItem Tag="center" Content="화면 정중앙"/>
<ComboBoxItem Tag="bottom" Content="화면 하단 중앙"/>
</ComboBox>
</Grid>
</Border>
<!-- 언어 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#6366F1" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xF2B7;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="Language" Style="{StaticResource RowLabel}"/>
<TextBlock Text="UI language (apply after save)" Style="{StaticResource RowHint}"/>
</StackPanel>
<ComboBox Grid.Column="2"
SelectedValue="{Binding Language}"
SelectedValuePath="Tag"
Height="32" FontSize="12"
VerticalContentAlignment="Center">
<ComboBoxItem Tag="ko" Content="한국어"/>
<ComboBoxItem Tag="en" Content="English"/>
<ComboBoxItem Tag="ja" Content="日本語"/>
<ComboBoxItem Tag="zh" Content="中文"/>
<ComboBoxItem Tag="vi" Content="Tiếng Việt"/>
</ComboBox>
</Grid>
</Border>
<!-- ─── 인덱스 경로 ──────────────────────────────────────────────── -->
<TextBlock Text="인덱스 경로" Style="{StaticResource SectionHeader}"/>
<!-- 안내 배너 -->
<Border Background="White" CornerRadius="10" Padding="14,10" Margin="0,0,0,3">
<StackPanel Orientation="Horizontal">
<Border Width="36" Height="36" CornerRadius="9"
Background="#1A8C4E" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE838;" FontFamily="Segoe MDL2 Assets" FontSize="16"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel VerticalAlignment="Center">
<TextBlock Text="검색할 폴더 목록" Style="{StaticResource RowLabel}"/>
<TextBlock Text="앱·파일 퍼지 검색 대상 경로 (환경변수 사용 가능)" Style="{StaticResource RowHint}"/>
</StackPanel>
</StackPanel>
</Border>
<!-- 경로 목록 -->
<Border Background="White" CornerRadius="10" Padding="10,8" Margin="0,0,0,3">
<ItemsControl ItemsSource="{Binding IndexPaths}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding}"
FontSize="12" Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="4,0,8,0"
TextTrimming="CharacterEllipsis"
ToolTip="{Binding}"/>
<Button Grid.Column="1"
Style="{StaticResource DeleteButton}"
Tag="{Binding}"
Click="RemoveIndexPath_Click"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
<!-- 경로 추가 -->
<Border Background="White" CornerRadius="10" Padding="10,8" Margin="0,0,0,3">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="NewIndexPathBox"
Grid.Column="0"
Style="{StaticResource ModernTextBox}"
VerticalAlignment="Center"
Margin="0,0,8,0"/>
<Button Grid.Column="1" Content="찾아보기"
Style="{StaticResource SecondaryButton}"
Padding="12,6" FontSize="12"
Margin="0,0,6,0"
Click="BrowseIndexPath_Click"/>
<Button Grid.Column="2" Content="추가"
Style="{StaticResource PrimaryButton}"
Padding="14,6" FontSize="12"
Click="AddIndexPath_Click"/>
</Grid>
</Border>
<!-- 검색 확장자 -->
<Border Background="{DynamicResource ItemBackground}" CornerRadius="10" Padding="14,10" Margin="0,12,0,3">
<StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,0,0,4">
<Border Width="28" Height="28" CornerRadius="7" Background="#E08850" Margin="0,0,8,0">
<TextBlock Text="&#xE8E5;" FontFamily="Segoe MDL2 Assets"
FontSize="13" Foreground="White"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel VerticalAlignment="Center">
<TextBlock Text="검색할 확장자" FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="인덱싱할 파일 확장자 (비어있으면 모든 파일)" FontSize="10.5" Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
</StackPanel>
</StackPanel>
</Border>
<Border Background="White" CornerRadius="10" Padding="10,8" Margin="0,0,0,3">
<ItemsControl ItemsSource="{Binding IndexExtensions}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="{DynamicResource ItemBackground}" CornerRadius="6" Padding="8,3" Margin="2,2">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}" FontSize="11.5" Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
<Button Content="&#xE711;" FontFamily="Segoe MDL2 Assets"
FontSize="9" Foreground="{DynamicResource SecondaryText}"
Background="Transparent" BorderThickness="0"
Padding="4,0,0,0" Cursor="Hand"
VerticalAlignment="Center"
Tag="{Binding}"
Click="RemoveExtension_Click"/>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
<Border Background="White" CornerRadius="10" Padding="10,8" Margin="0,0,0,3">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="NewExtensionBox"
Grid.Column="0"
Style="{StaticResource ModernTextBox}"
VerticalAlignment="Center"
Margin="0,0,8,0"/>
<Button Grid.Column="1" Content="추가"
Style="{StaticResource PrimaryButton}"
Padding="14,6" FontSize="12"
Click="AddExtension_Click"/>
</Grid>
</Border>
<!-- 인덱싱 속도 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="160"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#10B981" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE916;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="인덱싱 속도" Style="{StaticResource RowLabel}"/>
<TextBlock Text="{Binding IndexSpeedHint}"
FontSize="10.5" Foreground="#CC8800"
TextWrapping="Wrap"/>
</StackPanel>
<ComboBox Grid.Column="2"
SelectedValue="{Binding IndexSpeed}"
SelectedValuePath="Tag"
Height="32" FontSize="12"
VerticalContentAlignment="Center">
<ComboBoxItem Tag="slow" Content="느리게 (PC 부하 최소)"/>
<ComboBoxItem Tag="normal" Content="보통 (권장)"/>
<ComboBoxItem Tag="fast" Content="빠르게 (고성능 PC)"/>
</ComboBox>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
<!-- 알림 패널 (하위 탭) — 기존 알림 탭 내용을 여기로 통합 -->
<ScrollViewer x:Name="GeneralNotifyPanel" Grid.Row="2" Visibility="Collapsed"
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel x:Name="NotifyContent">
<!-- 이 내용은 기존 알림 탭에서 이동함 -->
</StackPanel>
</ScrollViewer>
<!-- 저장 공간 패널 (하위 탭) -->
<ScrollViewer x:Name="GeneralStoragePanel" Grid.Row="2" Visibility="Collapsed"
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel Margin="0,6,0,0">
<TextBlock Text="저장 공간 현황" Style="{StaticResource SectionHeader}"/>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock x:Name="StorageSummaryText2" Style="{StaticResource RowLabel}" Text="분석 중..."/>
<TextBlock x:Name="StorageDriveText2" Style="{StaticResource RowHint}" Text=""/>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal">
<Button Content="새로고침" Click="BtnStorageRefresh2_Click"
Background="Transparent" BorderThickness="0"
Foreground="{DynamicResource AccentColor}" FontSize="12" Cursor="Hand" Padding="8,4" Margin="0,0,8,0"/>
<Button Content="저장 공간 줄이기" Click="BtnStorageCleanup_Click"
Background="#DC2626" Foreground="White" FontSize="12"
Padding="14,6" Cursor="Hand" BorderThickness="0">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" CornerRadius="8"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
</StackPanel>
</Grid>
<StackPanel x:Name="StorageDetailPanel2" Margin="0,10,0,0"/>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
</Grid>
</TabItem>
<TabItem x:Name="AgentShortcutTabItem" Header="AX Agent" Tag="&#xE8BD;" Style="{StaticResource SideNavItem}">
<Grid>
<StackPanel VerticalAlignment="Top">
<TextBlock Text="AX Agent 내부 설정 바로가기" Style="{StaticResource SectionHeader}" Margin="2,8,0,8"/>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<TextBlock Text="AX Agent 채팅창을 열고 내부 설정 오버레이를 바로 표시합니다."
Style="{StaticResource RowHint}"/>
</StackPanel>
</Border>
</StackPanel>
</Grid>
</TabItem>
<!-- ════════════════════════════════════════════════════════════ -->
<!-- 2. 테마 탭 (테마 선택 + 색상 편집 합침) -->
<!-- ════════════════════════════════════════════════════════════ -->
<TabItem Header="테마" Tag="&#xE790;" Style="{StaticResource SideNavItem}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="테마 설정" FontSize="16" FontWeight="SemiBold" Foreground="{DynamicResource PrimaryText}" Margin="0,0,0,2"/>
<Border Grid.Row="1" Background="Transparent" BorderThickness="0" Padding="0" Margin="0,8,0,14">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<RadioButton x:Name="ThemeSubTabSelect" Content="테마 선택" IsChecked="True"
GroupName="ThemeSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="ThemeSubTab_Checked"/>
<RadioButton x:Name="ThemeSubTabColors" Content="색상 편집"
GroupName="ThemeSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="ThemeSubTab_Checked"/>
</StackPanel>
</Border>
<!-- 테마 선택 패널 -->
<ScrollViewer x:Name="ThemeSelectPanel" Grid.Row="2" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel>
<!-- ── 시각 효과 ── -->
<TextBlock Text="시각 효과" Style="{StaticResource SectionHeader}"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="런처 무지개 글로우"/>
<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">
AX Commander 테두리에 무지개빛 회전 애니메이션을 표시합니다.
<LineBreak/>GPU 가속을 사용하므로 저사양 PC에서는 끄는 것을 권장합니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="AX Commander 테두리에 무지개빛 글로우 효과를 표시합니다. 저사양 PC에서는 끄는 것을 권장합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableRainbowGlow, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="선택 아이템 글로우"/>
<TextBlock Style="{StaticResource RowHint}" Text="선택된 항목에 은은한 글로우를 상시 표시합니다. 테마 AccentColor를 기반으로 색상이 적용됩니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableSelectionGlow, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="채팅 입력창 무지개 글로우"/>
<TextBlock Style="{StaticResource RowHint}" Text="메시지 전송 시 입력창 테두리에 무지개빛 글로우 효과를 표시합니다. 저사양 PC에서는 끄는 것을 권장합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableChatRainbowGlow, Mode=TwoWay}"/>
</Grid>
</Border>
<TextBlock Text="테마 선택" Style="{StaticResource SectionHeader}"/>
<Border Background="White" CornerRadius="10" Padding="14,10" Margin="0,0,0,14">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE946;" FontFamily="Segoe MDL2 Assets" FontSize="13"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBlock Text="카드를 클릭하면 즉시 AX Commander에 미리보기가 적용됩니다."
FontSize="12" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
</StackPanel>
</Border>
<ItemsControl x:Name="ThemeCardsPanel" ItemsSource="{Binding ThemeCards}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type vm:ThemeCardModel}">
<Button x:Name="CardBtn"
Width="188" Height="148"
Margin="0,0,10,10"
Tag="{Binding Key}"
Click="ThemeCard_Click">
<Button.Background>
<SolidColorBrush Color="{Binding PreviewBackground, Converter={x:Static converters:HexToColorConverter.Instance}}"/>
</Button.Background>
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource ThemeCard}">
<Setter Property="BorderBrush" Value="{DynamicResource BorderColor}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter Property="BorderBrush" Value="{DynamicResource AccentColor}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="38"/>
</Grid.RowDefinitions>
<!-- 미니 런처 미리보기 -->
<Border Grid.Row="0" Padding="10,10,10,6">
<Border CornerRadius="6" Padding="8,6">
<Border.Background>
<SolidColorBrush Color="{Binding PreviewItem, Converter={x:Static converters:HexToColorConverter.Instance}}"/>
</Border.Background>
<StackPanel>
<Grid Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Width="6" Height="6" CornerRadius="3" VerticalAlignment="Center" Margin="0,0,4,0">
<Border.Background><SolidColorBrush Color="{Binding PreviewAccent, Converter={x:Static converters:HexToColorConverter.Instance}}"/></Border.Background>
</Border>
<Border Grid.Column="1" Height="5" CornerRadius="3" Margin="2,0,12,0" VerticalAlignment="Center">
<Border.Background><SolidColorBrush Color="{Binding PreviewSubText, Converter={x:Static converters:HexToColorConverter.Instance}}"/></Border.Background>
</Border>
</Grid>
<Border Height="14" CornerRadius="3" Margin="0,0,0,3" Padding="5,0">
<Border.Background><SolidColorBrush Color="{Binding PreviewAccent, Converter={x:Static converters:HexToColorConverter.Instance}}" Opacity="0.28"/></Border.Background>
<Border Width="5" Height="5" CornerRadius="2.5" HorizontalAlignment="Left" VerticalAlignment="Center">
<Border.Background><SolidColorBrush Color="{Binding PreviewAccent, Converter={x:Static converters:HexToColorConverter.Instance}}"/></Border.Background>
</Border>
</Border>
<Border Height="11" CornerRadius="3" Margin="0,0,0,3">
<Border.Background><SolidColorBrush Color="{Binding PreviewBackground, Converter={x:Static converters:HexToColorConverter.Instance}}" Opacity="0.4"/></Border.Background>
</Border>
<Border Height="11" CornerRadius="3">
<Border.Background><SolidColorBrush Color="{Binding PreviewBackground, Converter={x:Static converters:HexToColorConverter.Instance}}" Opacity="0.4"/></Border.Background>
</Border>
</StackPanel>
</Border>
</Border>
<!-- 하단 정보 바 -->
<Border Grid.Row="1" Padding="10,0,8,0">
<Border.Background>
<SolidColorBrush Color="{Binding PreviewItem, Converter={x:Static converters:HexToColorConverter.Instance}}" Opacity="0.7"/>
</Border.Background>
<Grid>
<TextBlock Text="{Binding Name}" FontSize="11" FontWeight="SemiBold" VerticalAlignment="Center">
<TextBlock.Foreground><SolidColorBrush Color="{Binding PreviewText, Converter={x:Static converters:HexToColorConverter.Instance}}"/></TextBlock.Foreground>
</TextBlock>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Ellipse Width="8" Height="8" Margin="0,0,3,0"><Ellipse.Fill><SolidColorBrush Color="{Binding PreviewBackground, Converter={x:Static converters:HexToColorConverter.Instance}}"/></Ellipse.Fill></Ellipse>
<Ellipse Width="8" Height="8" Margin="0,0,3,0"><Ellipse.Fill><SolidColorBrush Color="{Binding PreviewAccent, Converter={x:Static converters:HexToColorConverter.Instance}}"/></Ellipse.Fill></Ellipse>
<Ellipse Width="8" Height="8" Margin="0,0,4,0"><Ellipse.Fill><SolidColorBrush Color="{Binding PreviewText, Converter={x:Static converters:HexToColorConverter.Instance}}"/></Ellipse.Fill></Ellipse>
<TextBlock Text="&#xE73E;" FontFamily="Segoe MDL2 Assets" FontSize="10"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center"
Visibility="{Binding IsSelected, Converter={StaticResource BoolToVisibilityConverter}}"/>
</StackPanel>
</Grid>
</Border>
</Grid>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ScrollViewer>
<!-- 색상 편집 패널 -->
<Grid x:Name="ThemeColorsPanel" Grid.Row="2" Visibility="Collapsed">
<!-- 커스텀 테마 미선택 안내 -->
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"
Visibility="{Binding IsCustomTheme, Converter={StaticResource InverseBoolToVisibilityConverter}}">
<Border Width="64" Height="64" CornerRadius="18" Background="{DynamicResource ItemHoverBackground}"
HorizontalAlignment="Center" Margin="0,0,0,16">
<TextBlock Text="&#xE771;" FontFamily="Segoe MDL2 Assets"
FontSize="32" Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<TextBlock Text="커스텀 테마를 선택하세요"
FontSize="15" FontWeight="SemiBold"
Foreground="{DynamicResource SecondaryText}" HorizontalAlignment="Center"/>
<TextBlock Text="위 '테마 선택' 탭에서 '커스텀'을 선택하면 각 색상을 편집할 수 있습니다."
FontSize="12" Foreground="{DynamicResource SecondaryText}"
HorizontalAlignment="Center" Margin="0,6,0,0" TextWrapping="Wrap"
MaxWidth="300" TextAlignment="Center"/>
</StackPanel>
<!-- 색상 편집 목록 -->
<ScrollViewer VerticalScrollBarVisibility="Auto"
Visibility="{Binding IsCustomTheme, Converter={StaticResource BoolToVisibilityConverter}}">
<StackPanel>
<TextBlock Text="커스텀 색상" Style="{StaticResource SectionHeader}"/>
<Border Background="White" CornerRadius="10" Padding="14,10" Margin="0,0,0,12">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE946;" FontFamily="Segoe MDL2 Assets" FontSize="13"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBlock Text="색상 버튼 클릭 또는 헥스 코드 직접 입력 (#RRGGBB)"
FontSize="12" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
</StackPanel>
</Border>
<ItemsControl ItemsSource="{Binding ColorRows}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type vm:ColorRowModel}">
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="160"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Label}"
Style="{StaticResource RowLabel}"/>
<TextBox Grid.Column="1"
Style="{StaticResource ModernTextBox}"
Text="{Binding Hex, UpdateSourceTrigger=PropertyChanged}"
FontFamily="Consolas, Courier New"
MaxLength="9" VerticalAlignment="Center" Margin="8,0"/>
<Button Grid.Column="2"
Style="{StaticResource ColorSwatchButton}"
Background="{Binding Preview}"
Tag="{Binding}" Click="ColorSwatch_Click"
ToolTip="클릭하여 색상 선택"/>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock Text="모양 (모서리 라운딩)" Style="{StaticResource SectionHeader}"/>
<!-- 창 전체 모서리 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="40"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#7C3AED" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE8A0;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="창 모서리 라운딩" Style="{StaticResource RowLabel}"/>
<Slider Minimum="0" Maximum="30"
Value="{Binding CustomWindowCornerRadius}"
TickFrequency="2" IsSnapToTickEnabled="True"
Margin="0,6,0,0"/>
</StackPanel>
<TextBlock Grid.Column="2"
Text="{Binding CustomWindowCornerRadius, StringFormat={}{0}px}"
FontFamily="Consolas" FontSize="12" Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</Border>
<!-- 항목 모서리 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="40"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="{DynamicResource AccentColor}" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE8A0;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="항목 모서리 라운딩" Style="{StaticResource RowLabel}"/>
<Slider Minimum="0" Maximum="20"
Value="{Binding CustomItemCornerRadius}"
TickFrequency="2" IsSnapToTickEnabled="True"
Margin="0,6,0,0"/>
</StackPanel>
<TextBlock Grid.Column="2"
Text="{Binding CustomItemCornerRadius, StringFormat={}{0}px}"
FontFamily="Consolas" FontSize="12" Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
</Grid>
</Grid>
</TabItem>
<!-- ════════════════════════════════════════════════════════════ -->
<!-- 독 바 설정 탭 -->
<!-- ════════════════════════════════════════════════════════════ -->
<TabItem Header="독 바" Tag="&#xE8A0;" Style="{StaticResource SideNavItem}">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel>
<TextBlock Text="독 바 기본" Style="{StaticResource SectionHeader}"/>
<!-- 자동 표시 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<TextBlock Text="앱 시작 시 독 바 자동 표시" Style="{StaticResource RowLabel}"/>
<TextBlock Text="AX Copilot 시작 시 독 바를 자동으로 띄웁니다" Style="{StaticResource RowHint}"/>
</StackPanel>
<CheckBox x:Name="ChkDockAutoShow" Grid.Column="1"
Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Border>
<!-- 무지개 글로우 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<TextBlock Text="무지개 글로우 효과" Style="{StaticResource RowLabel}"/>
<TextBlock Text="독 바 테두리에 무지개 애니메이션을 표시합니다" Style="{StaticResource RowHint}"/>
</StackPanel>
<CheckBox x:Name="ChkDockRainbowGlow" Grid.Column="1"
Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Border>
<!-- 투명도 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="120"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<TextBlock Text="독 바 투명도" Style="{StaticResource RowLabel}"/>
<TextBlock Text="0.3 (반투명) ~ 1.0 (불투명)" Style="{StaticResource RowHint}"/>
</StackPanel>
<Slider x:Name="SliderDockOpacity" Grid.Column="1"
Minimum="0.3" Maximum="1.0" Value="0.92"
TickFrequency="0.05" IsSnapToTickEnabled="True"
VerticalAlignment="Center"/>
</Grid>
</Border>
<!-- 위치 재조정 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<TextBlock Text="독 바 위치 초기화" Style="{StaticResource RowLabel}"/>
<TextBlock Text="독 바를 화면 하단 중앙으로 되돌립니다" Style="{StaticResource RowHint}"/>
</StackPanel>
<Button Grid.Column="1" Content="중앙으로 이동"
Click="BtnDockResetPosition_Click"
Background="{DynamicResource AccentColor}" Foreground="White"
FontSize="12" Padding="14,6" Cursor="Hand"
BorderThickness="0">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" CornerRadius="8"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
</Grid>
</Border>
<TextBlock Text="표시 항목" Style="{StaticResource SectionHeader}"/>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="독 바에 표시할 항목을 선택하세요. 변경 후 독 바를 다시 열면 적용됩니다."/>
<StackPanel x:Name="DockItemsPanel" Margin="0,8,0,0"/>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
<!-- 4. 스니펫 탭 -->
<!-- ════════════════════════════════════════════════════════════ -->
<TabItem Header="스니펫" Tag="&#xE70B;" Style="{StaticResource SideNavItem}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0">
<TextBlock Text="자동 확장" Style="{StaticResource SectionHeader}"/>
<!-- 자동 확장 토글 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#FF6B35" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE70B;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="글로벌 스니펫 자동 확장" Style="{StaticResource RowLabel}"/>
<TextBlock Text=";키워드 + Space/Enter → 모든 앱에서 텍스트 자동 입력" Style="{StaticResource RowHint}"/>
</StackPanel>
<CheckBox Grid.Column="2"
Style="{StaticResource ToggleSwitch}"
IsChecked="{Binding SnippetAutoExpand}"
VerticalAlignment="Center"/>
</Grid>
</Border>
<TextBlock Text="텍스트 스니펫" Style="{StaticResource SectionHeader}"/>
<!-- 안내 배너 -->
<Border Background="White" CornerRadius="10" Padding="14,11" Margin="0,0,0,10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#FF6B35" Margin="0,0,12,0" VerticalAlignment="Center">
<TextBlock Text="&#xE70B;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock FontSize="12" Foreground="{DynamicResource SecondaryText}" TextWrapping="Wrap">
AX Commander에서 <Run FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}">;</Run> 다음 키워드를 입력하면 미리 저장된 텍스트를 즉시 붙여넣습니다.
</TextBlock>
<TextBlock FontSize="11" Foreground="{DynamicResource SecondaryText}" Margin="0,3,0,0">
변수: <Run FontFamily="Consolas" Foreground="#FF6B35">{date}</Run>
<Run FontFamily="Consolas" Foreground="#FF6B35"> {time}</Run>
<Run FontFamily="Consolas" Foreground="#FF6B35"> {datetime}</Run>
<Run FontFamily="Consolas" Foreground="#FF6B35"> {year}</Run>
<Run FontFamily="Consolas" Foreground="#FF6B35"> {month}</Run>
<Run FontFamily="Consolas" Foreground="#FF6B35"> {day}</Run>
</TextBlock>
</StackPanel>
</Grid>
</Border>
<!-- 새 스니펫 입력 폼 -->
<Border Background="White" CornerRadius="10" Padding="16,14" Margin="0,0,0,10"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1.5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="8"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="8"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="키워드"
Style="{StaticResource RowLabel}" VerticalAlignment="Center"/>
<TextBox Grid.Row="0" Grid.Column="1"
Style="{StaticResource ModernTextBox}"
Text="{Binding NewSnippetKey, UpdateSourceTrigger=PropertyChanged}"
ToolTip="예: addr, sig, greet"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="표시 이름"
Style="{StaticResource RowLabel}" VerticalAlignment="Center"/>
<TextBox Grid.Row="2" Grid.Column="1"
Style="{StaticResource ModernTextBox}"
Text="{Binding NewSnippetName, UpdateSourceTrigger=PropertyChanged}"
ToolTip="예: 사무실 주소, 이메일 서명"/>
<TextBlock Grid.Row="4" Grid.Column="0" Text="내용"
Style="{StaticResource RowLabel}" VerticalAlignment="Top" Margin="0,8,0,0"/>
<Grid Grid.Row="4" Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"
Style="{StaticResource ModernTextBox}"
Text="{Binding NewSnippetContent, UpdateSourceTrigger=PropertyChanged}"
AcceptsReturn="True" TextWrapping="Wrap"
Height="58" VerticalScrollBarVisibility="Auto"
ToolTip="붙여넣기될 텍스트. {date} {time} {datetime} 사용 가능"/>
<Button Grid.Column="1" Style="{StaticResource PrimaryButton}"
Padding="10,0" MinWidth="72" Margin="6,0,0,0"
VerticalAlignment="Bottom" Click="AddSnippet_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE710;" FontFamily="Segoe MDL2 Assets"
FontSize="12" Margin="0,0,5,0" VerticalAlignment="Center"/>
<TextBlock Text="추가" VerticalAlignment="Center"/>
</StackPanel>
</Button>
</Grid>
</Grid>
</Border>
<!-- 목록 헤더 -->
<Grid Margin="4,2,4,4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="140"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="32"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="; 키워드" Style="{StaticResource RowHint}"/>
<TextBlock Grid.Column="1" Text="이름" Style="{StaticResource RowHint}"/>
<TextBlock Grid.Column="2" Text="내용 미리보기" Style="{StaticResource RowHint}"/>
</Grid>
</StackPanel>
<!-- 스니펫 목록 -->
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
<StackPanel>
<ItemsControl ItemsSource="{Binding Snippets}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type vm:SnippetRowModel}">
<Border Background="White" CornerRadius="9"
Margin="0,0,0,2" Padding="12,10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="140"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="32"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Background="#FFF3EE" CornerRadius="6"
Padding="8,4" HorizontalAlignment="Left" VerticalAlignment="Center">
<TextBlock FontSize="12" FontWeight="SemiBold" Foreground="#FF6B35">
<Run Text=";"/><Run Text="{Binding Key}"/>
</TextBlock>
</Border>
<TextBlock Grid.Column="1" Text="{Binding Name}"
FontSize="12" Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" TextTrimming="CharacterEllipsis"
Margin="0,0,8,0"/>
<TextBlock Grid.Column="2" Text="{Binding Preview}"
FontSize="11" Foreground="{DynamicResource SecondaryText}"
FontFamily="Consolas, Courier New"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis"/>
<Button Grid.Column="3" Style="{StaticResource DeleteButton}"
Tag="{Binding}" Click="DeleteSnippet_Click"
ToolTip="삭제" VerticalAlignment="Center"/>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<!-- 빈 상태 안내 (count==0 일 때 표시) -->
<Border CornerRadius="10" Background="White" Padding="30,22">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Snippets.Count}" Value="0">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<StackPanel HorizontalAlignment="Center">
<TextBlock Text="&#xE70B;" FontFamily="Segoe MDL2 Assets"
FontSize="28" Foreground="{DynamicResource BorderColor}"
HorizontalAlignment="Center" Margin="0,0,0,10"/>
<TextBlock Text="스니펫이 없습니다." FontSize="13" Foreground="{DynamicResource SecondaryText}"
HorizontalAlignment="Center"/>
<TextBlock Text="위 폼에서 키워드와 내용을 입력하고 추가하세요."
FontSize="11" Foreground="{DynamicResource BorderColor}"
HorizontalAlignment="Center" Margin="0,4,0,0"/>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
</Grid>
</TabItem>
<!-- ════════════════════════════════════════════════════════════ -->
<!-- 5. 클립보드 탭 -->
<!-- ════════════════════════════════════════════════════════════ -->
<TabItem Header="클립보드" Tag="&#xE77F;" Style="{StaticResource SideNavItem}">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel>
<TextBlock Text="클립보드 히스토리" Style="{StaticResource SectionHeader}"/>
<!-- 활성화 토글 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#20B2AA" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE77F;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="히스토리 활성화" Style="{StaticResource RowLabel}"/>
<TextBlock Text="클립보드 변경을 감지하여 히스토리에 기록합니다" Style="{StaticResource RowHint}"/>
</StackPanel>
<CheckBox Grid.Column="2" Style="{StaticResource ToggleSwitch}"
IsChecked="{Binding ClipboardEnabled}"
VerticalAlignment="Center"/>
</Grid>
</Border>
<TextBlock Text="저장 개수" Style="{StaticResource SectionHeader}"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#FF8C42" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE81C;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="최대 보관 개수" Style="{StaticResource RowLabel}"/>
<TextBlock Text="오래된 항목부터 자동 삭제 (10200)" Style="{StaticResource RowHint}"/>
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center">
<Slider Minimum="10" Maximum="200"
Value="{Binding ClipboardMaxItems}"
Width="140" SmallChange="5" LargeChange="20"
IsSnapToTickEnabled="True" TickFrequency="5"
VerticalAlignment="Center"/>
<Border Width="46" Height="28" CornerRadius="6" Background="{DynamicResource ItemHoverBackground}"
Margin="8,0,0,0" VerticalAlignment="Center">
<TextBlock Text="{Binding ClipboardMaxItems}"
FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</StackPanel>
</Grid>
</Border>
<TextBlock Text="보안 — 제외 패턴" Style="{StaticResource SectionHeader}"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#C50F1F" Margin="0,2,14,0" VerticalAlignment="Top">
<TextBlock Text="&#xE72E;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1">
<TextBlock Text="민감 데이터 자동 제외 (Regex)"
Style="{StaticResource RowLabel}"/>
<TextBlock Text="아래 정규식에 일치하는 텍스트는 히스토리에 저장되지 않습니다."
Style="{StaticResource RowHint}" TextWrapping="Wrap" Margin="0,2,0,10"/>
<Border Background="#FFF5F5" CornerRadius="7" Padding="10,8" Margin="0,0,0,4"
BorderBrush="#FFCCCC" BorderThickness="1">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE74D;" FontFamily="Segoe MDL2 Assets"
FontSize="10" Foreground="#CC3333" VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBlock Text="^\d{4}[\s\-]?\d{4}[\s\-]?\d{4}[\s\-]?\d{4}$"
FontFamily="Consolas, Courier New" FontSize="11"
Foreground="#993333" VerticalAlignment="Center"/>
<TextBlock Text=" 신용카드 번호" FontSize="10" Foreground="#BB7777"
VerticalAlignment="Center" Margin="8,0,0,0"/>
</StackPanel>
</Border>
<Border Background="#FFF5F5" CornerRadius="7" Padding="10,8"
BorderBrush="#FFCCCC" BorderThickness="1">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE74D;" FontFamily="Segoe MDL2 Assets"
FontSize="10" Foreground="#CC3333" VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBlock Text="^(?:\d{1,3}\.){3}\d{1,3}$"
FontFamily="Consolas, Courier New" FontSize="11"
Foreground="#993333" VerticalAlignment="Center"/>
<TextBlock Text=" IP 주소" FontSize="10" Foreground="#BB7777"
VerticalAlignment="Center" Margin="8,0,0,0"/>
</StackPanel>
</Border>
</StackPanel>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
<!-- ════════════════════════════════════════════════════════════ -->
<!-- 6. 캡처 탭 -->
<!-- ════════════════════════════════════════════════════════════ -->
<TabItem Header="캡처" Tag="&#xE722;" Style="{StaticResource SideNavItem}">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel>
<TextBlock Text="명령어 예약어" Style="{StaticResource SectionHeader}"/>
<!-- 안내 -->
<Border Background="White" CornerRadius="10" Padding="14,10" Margin="0,0,0,8">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE946;" FontFamily="Segoe MDL2 Assets" FontSize="13"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBlock FontSize="12" Foreground="{DynamicResource SecondaryText}" TextWrapping="Wrap" VerticalAlignment="Center">
<Run>AX Commander에서 캡처를 실행하는 예약어입니다. 기본값은</Run>
<Run FontFamily="Consolas" Foreground="{DynamicResource AccentColor}">cap</Run>
<Run>— 짧게 바꾸면 더 빠르게 실행할 수 있습니다 (예:</Run>
<Run FontFamily="Consolas" Foreground="{DynamicResource AccentColor}">c</Run>
<Run>).</Run>
</TextBlock>
</StackPanel>
</Border>
<!-- 예약어 입력 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#7C3AED" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE765;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="캡처 명령어 예약어" Style="{StaticResource RowLabel}"/>
<TextBlock Style="{StaticResource RowHint}">
<Run>현재: </Run>
<Run FontFamily="Consolas" Foreground="{DynamicResource AccentColor}"
Text="{Binding CapPrefix, Mode=OneWay}"/>
<Run> screen / window / scroll / region</Run>
</TextBlock>
</StackPanel>
<TextBox Grid.Column="2"
Style="{StaticResource ModernTextBox}"
Text="{Binding CapPrefix, UpdateSourceTrigger=PropertyChanged}"
MaxLength="20"
FontFamily="Consolas"
VerticalAlignment="Center" Margin="8,0"/>
<Button Grid.Column="3" Content="기본값"
Style="{StaticResource SecondaryButton}"
Click="ResetCapPrefix_Click"
VerticalAlignment="Center"/>
</Grid>
</Border>
<TextBlock Text="글로벌 캡처 단축키" Style="{StaticResource SectionHeader}"/>
<!-- 안내 -->
<Border Background="White" CornerRadius="10" Padding="14,10" Margin="0,0,0,8">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE946;" FontFamily="Segoe MDL2 Assets" FontSize="13"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBlock FontSize="12" Foreground="{DynamicResource SecondaryText}" TextWrapping="Wrap" VerticalAlignment="Center">
<Run>AX Commander를 열지 않고 단축키만으로 즉시 캡처합니다.</Run>
<Run>기본값은 비활성화입니다.</Run>
</TextBlock>
</StackPanel>
</Border>
<!-- 활성화 토글 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#0078D4" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE765;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="글로벌 캡처 단축키 사용" Style="{StaticResource RowLabel}"/>
<TextBlock Text="AX Commander를 열지 않고 단축키로 바로 캡처" Style="{StaticResource RowHint}"/>
</StackPanel>
<CheckBox Grid.Column="2" Style="{StaticResource ToggleSwitch}"
IsChecked="{Binding CapGlobalHotkeyEnabled}"
VerticalAlignment="Center"/>
</Grid>
</Border>
<!-- 단축키 입력 (활성화 시만 표시) -->
<Border Style="{StaticResource SettingsRow}"
Visibility="{Binding CapGlobalHotkeyEnabled, Converter={StaticResource BoolToVisibilityConverter}}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="160"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="{DynamicResource AccentColor}" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE765;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="캡처 단축키" Style="{StaticResource RowLabel}"/>
<TextBlock Text="클릭 후 원하는 키 조합 입력" Style="{StaticResource RowHint}"/>
</StackPanel>
<TextBox Grid.Column="2"
Style="{StaticResource ModernTextBox}"
Text="{Binding CapGlobalHotkey, UpdateSourceTrigger=PropertyChanged}"
FontFamily="Consolas"
FontWeight="Bold"
IsReadOnly="True"
PreviewKeyDown="CapHotkeyRecorder_PreviewKeyDown"
VerticalAlignment="Center" Margin="8,0"/>
<Button Grid.Column="3" Content="기본값"
Style="{StaticResource SecondaryButton}"
Click="ResetCapGlobalHotkey_Click"
VerticalAlignment="Center"/>
</Grid>
</Border>
<!-- 캡처 모드 선택 (활성화 시만 표시) -->
<Border Style="{StaticResource SettingsRow}"
Visibility="{Binding CapGlobalHotkeyEnabled, Converter={StaticResource BoolToVisibilityConverter}}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="160"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#E722AA" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE722;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="단축키 실행 모드" Style="{StaticResource RowLabel}"/>
<TextBlock Text="단축키를 누르면 실행할 캡처 종류" Style="{StaticResource RowHint}"/>
</StackPanel>
<ComboBox Grid.Column="2" SelectedValue="{Binding CapGlobalMode}"
SelectedValuePath="Tag"
VerticalAlignment="Center" Margin="8,0">
<ComboBoxItem Content="전체 화면" Tag="screen"/>
<ComboBoxItem Content="활성 창" Tag="window"/>
<ComboBoxItem Content="영역 선택" Tag="region"/>
</ComboBox>
</Grid>
</Border>
<TextBlock Text="고급" Style="{StaticResource SectionHeader}"/>
<!-- 스크롤 캡처 딜레이 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="130"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#B45309" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE916;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="스크롤 캡처 대기 시간" Style="{StaticResource RowLabel}"/>
<TextBlock Text="프레임 간 대기 시간 (ms). 느린 페이지는 값을 높이세요" Style="{StaticResource RowHint}"/>
</StackPanel>
<ComboBox Grid.Column="2" SelectedValue="{Binding CapScrollDelayMsStr}"
SelectedValuePath="Tag"
VerticalAlignment="Center" Margin="8,0">
<ComboBoxItem Content="80ms (빠른 페이지)" Tag="80"/>
<ComboBoxItem Content="120ms (기본)" Tag="120"/>
<ComboBoxItem Content="200ms (보통)" Tag="200"/>
<ComboBoxItem Content="300ms (느린 페이지)" Tag="300"/>
<ComboBoxItem Content="500ms (매우 느린)" Tag="500"/>
</ComboBox>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
<!-- ════════════════════════════════════════════════════════════ -->
<!-- 7. 알림 탭 (좌측 사이드바에서 숨김 — 일반 탭 내 알림 서브탭으로 통합됨) -->
<!-- ════════════════════════════════════════════════════════════ -->
<TabItem Header="알림" Tag="&#xEA8F;" Style="{StaticResource SideNavItem}" Visibility="Collapsed">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<StackPanel>
<!-- 안내 -->
<Border Background="White" CornerRadius="10" Padding="14,10" Margin="0,18,0,8">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE946;" FontFamily="Segoe MDL2 Assets" FontSize="13"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBlock FontSize="12" Foreground="{DynamicResource SecondaryText}" TextWrapping="Wrap" VerticalAlignment="Center">
<Run>PC 잠금을 해제할 때 격려 문구와 오늘의 근무 시간을 보여줍니다.</Run>
<Run>기본값은 비활성화입니다.</Run>
</TextBlock>
</StackPanel>
</Border>
<TextBlock Text="기능 활성화" Style="{StaticResource SectionHeader}"/>
<!-- 활성화 토글 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="{DynamicResource AccentColor}" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xEA8F;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="잠금 해제 알림 사용" Style="{StaticResource RowLabel}"/>
<TextBlock Text="잠금 해제 시 격려 문구 팝업을 표시합니다" Style="{StaticResource RowHint}"/>
</StackPanel>
<CheckBox Grid.Column="2" Style="{StaticResource ToggleSwitch}"
IsChecked="{Binding ReminderEnabled}"
VerticalAlignment="Center"/>
</Grid>
</Border>
<TextBlock Text="표시 위치" Style="{StaticResource SectionHeader}"/>
<!-- 코너 선택 (2×2 버튼 그리드) -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#8E44AD" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE744;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1">
<TextBlock Text="팝업 표시 위치" Style="{StaticResource RowLabel}" Margin="0,0,0,10"/>
<UniformGrid Rows="2" Columns="2" HorizontalAlignment="Left" Width="280">
<RadioButton Content="좌측 상단" Margin="0,0,8,6"
IsChecked="{Binding ReminderCorner, Converter={StaticResource StringEqualConverter}, ConverterParameter=top-left}"
Tag="top-left" Click="ReminderCorner_Click"/>
<RadioButton Content="우측 상단" Margin="0,0,0,6"
IsChecked="{Binding ReminderCorner, Converter={StaticResource StringEqualConverter}, ConverterParameter=top-right}"
Tag="top-right" Click="ReminderCorner_Click"/>
<RadioButton Content="좌측 하단" Margin="0,0,8,0"
IsChecked="{Binding ReminderCorner, Converter={StaticResource StringEqualConverter}, ConverterParameter=bottom-left}"
Tag="bottom-left" Click="ReminderCorner_Click"/>
<RadioButton Content="우측 하단 (기본)" Margin="0"
IsChecked="{Binding ReminderCorner, Converter={StaticResource StringEqualConverter}, ConverterParameter=bottom-right}"
Tag="bottom-right" Click="ReminderCorner_Click"/>
</UniformGrid>
</StackPanel>
</Grid>
</Border>
<TextBlock Text="알림 콘텐츠" Style="{StaticResource SectionHeader}"/>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowLabel}" Text="표시할 알림 카테고리"/>
<TextBlock Style="{StaticResource RowHint}" Text="선택한 카테고리의 문구가 랜덤으로 표시됩니다. 아무것도 선택하지 않으면 격려 문구가 기본으로 표시됩니다."/>
<StackPanel x:Name="QuoteCategoryPanel" Margin="0,8,0,0"/>
</StackPanel>
</Border>
<TextBlock Text="알림 간격" Style="{StaticResource SectionHeader}"/>
<!-- 간격 선택 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#E67E22" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE823;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="표시 간격" Style="{StaticResource RowLabel}"/>
<TextBlock Text="잠금 해제 후 이 시간이 지났을 때 알림 표시" Style="{StaticResource RowHint}"/>
</StackPanel>
<ComboBox Grid.Column="2"
SelectedValue="{Binding ReminderIntervalMinutes}"
SelectedValuePath="Tag"
Width="120" VerticalAlignment="Center">
<ComboBoxItem Content="5분" Tag="5"/>
<ComboBoxItem Content="10분" Tag="10"/>
<ComboBoxItem Content="20분" Tag="20"/>
<ComboBoxItem Content="30분" Tag="30"/>
<ComboBoxItem Content="1시간" Tag="60"/>
<ComboBoxItem Content="2시간" Tag="120"/>
<ComboBoxItem Content="3시간" Tag="180"/>
<ComboBoxItem Content="4시간" Tag="240"/>
</ComboBox>
</Grid>
</Border>
<TextBlock Text="표시 시간" Style="{StaticResource SectionHeader}"/>
<!-- 표시 시간 선택 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#27AE60" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE916;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="자동 닫힘 시간" Style="{StaticResource RowLabel}"/>
<TextBlock Text="팝업이 자동으로 닫히는 시간 (기본 15초)" Style="{StaticResource RowHint}"/>
</StackPanel>
<ComboBox Grid.Column="2"
SelectedValue="{Binding ReminderDisplaySeconds}"
SelectedValuePath="Tag"
Width="120" VerticalAlignment="Center">
<ComboBoxItem Content="5초" Tag="5"/>
<ComboBoxItem Content="10초" Tag="10"/>
<ComboBoxItem Content="15초 (기본)" Tag="15"/>
<ComboBoxItem Content="20초" Tag="20"/>
<ComboBoxItem Content="30초" Tag="30"/>
<ComboBoxItem Content="1분" Tag="60"/>
<ComboBoxItem Content="2분" Tag="120"/>
<ComboBoxItem Content="3분" Tag="180"/>
</ComboBox>
</Grid>
</Border>
<!-- 바로보기 버튼 -->
<Border Background="White" CornerRadius="10" Padding="14,12" Margin="0,10,0,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#EBF5FF" Margin="0,0,14,0" VerticalAlignment="Center">
<TextBlock Text="&#xE7BE;" FontFamily="Segoe MDL2 Assets" FontSize="16"
Foreground="{DynamicResource AccentColor}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="알림 미리보기" Style="{StaticResource RowLabel}"/>
<TextBlock Text="설정한 옵션으로 알림 팝업을 즉시 확인합니다" Style="{StaticResource RowHint}"/>
</StackPanel>
<Button Grid.Column="2" Content="바로보기" Click="ReminderPreview_Click"
Width="84" Height="32" FontSize="12" FontWeight="SemiBold"
Foreground="White" Background="{DynamicResource AccentColor}" BorderThickness="0"
Cursor="Hand" VerticalAlignment="Center">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border x:Name="Bd" Background="{TemplateBinding Background}"
CornerRadius="8" Padding="12,6">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="Background" Value="#3B4EEC"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
<!-- ════════════════════════════════════════════════════════════ -->
<!-- ════════════════════════════════════════════════════════════ -->
<!-- 8. 시스템 명령 탭 -->
<!-- ════════════════════════════════════════════════════════════ -->
<TabItem Header="시스템" Tag="&#xE7E8;" Style="{StaticResource SideNavItem}">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel>
<TextBlock Text="시스템 명령 표시 여부" Style="{StaticResource SectionHeader}"/>
<Border Background="White" CornerRadius="10" Padding="14,10" Margin="0,0,0,12">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE946;" FontFamily="Segoe MDL2 Assets" FontSize="13"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBlock Text="AX Commander에서 / 예약어로 실행 가능한 시스템 명령을 개별 활성화할 수 있습니다."
FontSize="12" Foreground="{DynamicResource SecondaryText}" TextWrapping="Wrap" VerticalAlignment="Center"/>
</StackPanel>
</Border>
<!-- 별칭 입력 힌트 -->
<Border Background="{DynamicResource ItemBackground}" CornerRadius="8" Padding="12,8" Margin="0,0,0,8">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE70F;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,8,0"/>
<TextBlock FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center">
<Run>별칭 입력: 쉼표로 구분해서 입력 (예:</Run>
<Run FontFamily="Consolas" Foreground="{DynamicResource AccentColor}">잠금, l</Run>
<Run>) → AX Commander에서</Run>
<Run FontFamily="Consolas" Foreground="{DynamicResource AccentColor}">/잠금</Run>
<Run>또는</Run>
<Run FontFamily="Consolas" Foreground="{DynamicResource AccentColor}">/l</Run>
<Run>로 실행</Run>
</TextBlock>
</StackPanel>
</Border>
<!-- 각 명령 토글 + 별칭 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9" Background="#0078D4" Margin="0,0,12,0" VerticalAlignment="Center">
<TextBlock Text="&#xE72E;" FontFamily="Segoe MDL2 Assets" FontSize="17" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="화면 잠금" Style="{StaticResource RowLabel}"/>
<TextBlock FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource SecondaryText}">/lock</TextBlock>
</StackPanel>
<TextBox Grid.Column="2" Style="{StaticResource ModernTextBox}"
Text="{Binding AliasLock, UpdateSourceTrigger=PropertyChanged}"
ToolTip="별칭 (쉼표 구분, 예: 잠금, l)"
FontSize="12" Margin="8,0,12,0" VerticalAlignment="Center"/>
<CheckBox Grid.Column="3" Style="{StaticResource ToggleSwitch}" IsChecked="{Binding SysShowLock}" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9" Background="#7B2FBE" Margin="0,0,12,0" VerticalAlignment="Center">
<TextBlock Text="&#xEC46;" FontFamily="Segoe MDL2 Assets" FontSize="17" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="절전 모드" Style="{StaticResource RowLabel}"/>
<TextBlock FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource SecondaryText}">/sleep</TextBlock>
</StackPanel>
<TextBox Grid.Column="2" Style="{StaticResource ModernTextBox}"
Text="{Binding AliasSleep, UpdateSourceTrigger=PropertyChanged}"
ToolTip="별칭 (쉼표 구분)"
FontSize="12" Margin="8,0,12,0" VerticalAlignment="Center"/>
<CheckBox Grid.Column="3" Style="{StaticResource ToggleSwitch}" IsChecked="{Binding SysShowSleep}" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9" Background="#0099BC" Margin="0,0,12,0" VerticalAlignment="Center">
<TextBlock Text="&#xEC46;" FontFamily="Segoe MDL2 Assets" FontSize="17" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="최대 절전" Style="{StaticResource RowLabel}"/>
<TextBlock FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource SecondaryText}">/hibernate</TextBlock>
</StackPanel>
<TextBox Grid.Column="2" Style="{StaticResource ModernTextBox}"
Text="{Binding AliasHibernate, UpdateSourceTrigger=PropertyChanged}"
ToolTip="별칭 (쉼표 구분)"
FontSize="12" Margin="8,0,12,0" VerticalAlignment="Center"/>
<CheckBox Grid.Column="3" Style="{StaticResource ToggleSwitch}" IsChecked="{Binding SysShowHibernate}" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9" Background="#107C10" Margin="0,0,12,0" VerticalAlignment="Center">
<TextBlock Text="&#xE777;" FontFamily="Segoe MDL2 Assets" FontSize="17" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="재시작" Style="{StaticResource RowLabel}"/>
<TextBlock FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource SecondaryText}">/restart</TextBlock>
</StackPanel>
<TextBox Grid.Column="2" Style="{StaticResource ModernTextBox}"
Text="{Binding AliasRestart, UpdateSourceTrigger=PropertyChanged}"
ToolTip="별칭 (쉼표 구분)"
FontSize="12" Margin="8,0,12,0" VerticalAlignment="Center"/>
<CheckBox Grid.Column="3" Style="{StaticResource ToggleSwitch}" IsChecked="{Binding SysShowRestart}" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9" Background="#C50F1F" Margin="0,0,12,0" VerticalAlignment="Center">
<TextBlock Text="&#xE7E8;" FontFamily="Segoe MDL2 Assets" FontSize="17" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="시스템 종료" Style="{StaticResource RowLabel}"/>
<TextBlock FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource SecondaryText}">/shutdown</TextBlock>
</StackPanel>
<TextBox Grid.Column="2" Style="{StaticResource ModernTextBox}"
Text="{Binding AliasShutdown, UpdateSourceTrigger=PropertyChanged}"
ToolTip="별칭 (쉼표 구분)"
FontSize="12" Margin="8,0,12,0" VerticalAlignment="Center"/>
<CheckBox Grid.Column="3" Style="{StaticResource ToggleSwitch}" IsChecked="{Binding SysShowShutdown}" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9" Background="#CA5010" Margin="0,0,12,0" VerticalAlignment="Center">
<TextBlock Text="&#xF3B1;" FontFamily="Segoe MDL2 Assets" FontSize="17" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="로그아웃" Style="{StaticResource RowLabel}"/>
<TextBlock FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource SecondaryText}">/logout</TextBlock>
</StackPanel>
<TextBox Grid.Column="2" Style="{StaticResource ModernTextBox}"
Text="{Binding AliasLogout, UpdateSourceTrigger=PropertyChanged}"
ToolTip="별칭 (쉼표 구분)"
FontSize="12" Margin="8,0,12,0" VerticalAlignment="Center"/>
<CheckBox Grid.Column="3" Style="{StaticResource ToggleSwitch}" IsChecked="{Binding SysShowLogout}" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9" Background="#605E5C" Margin="0,0,12,0" VerticalAlignment="Center">
<TextBlock Text="&#xE74D;" FontFamily="Segoe MDL2 Assets" FontSize="17" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="휴지통 비우기" Style="{StaticResource RowLabel}"/>
<TextBlock FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource SecondaryText}">/recycle</TextBlock>
</StackPanel>
<TextBox Grid.Column="2" Style="{StaticResource ModernTextBox}"
Text="{Binding AliasRecycle, UpdateSourceTrigger=PropertyChanged}"
ToolTip="별칭 (쉼표 구분)"
FontSize="12" Margin="8,0,12,0" VerticalAlignment="Center"/>
<CheckBox Grid.Column="3" Style="{StaticResource ToggleSwitch}" IsChecked="{Binding SysShowRecycleBin}" VerticalAlignment="Center"/>
</Grid>
</Border>
<!-- 기본값 초기화 버튼 -->
<Border Background="White" CornerRadius="10" Padding="14,10" Margin="0,4,0,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" FontSize="12" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center">
별칭을 모두 지우고 기본 명령어만 사용합니다.
</TextBlock>
<Button Grid.Column="1" Style="{StaticResource SecondaryButton}"
Padding="12,6" Click="ResetCommandAliases_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE72C;" FontFamily="Segoe MDL2 Assets"
FontSize="11" Margin="0,0,6,0" VerticalAlignment="Center"/>
<TextBlock Text="별칭 기본값 초기화" VerticalAlignment="Center"/>
</StackPanel>
</Button>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
</TabItem>
<!-- ════════════════════════════════════════════════════════════ -->
<!-- 7. 빠른 실행 탭 -->
<!-- ════════════════════════════════════════════════════════════ -->
<TabItem Header="빠른 실행" Tag="&#xE7C3;" Style="{StaticResource SideNavItem}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0">
<TextBlock Text="앱 단축키" Style="{StaticResource SectionHeader}"/>
<!-- 안내 배너 -->
<Border Background="White" CornerRadius="10" Padding="14,11" Margin="0,0,0,10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="{DynamicResource AccentColor}" Margin="0,0,12,0" VerticalAlignment="Center">
<TextBlock Text="&#xE7C3;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<TextBlock Grid.Column="1" FontSize="12" Foreground="{DynamicResource SecondaryText}"
TextWrapping="Wrap" VerticalAlignment="Center">
키워드를 입력하면 AX Commander에서 <Run FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}">예약어 없이</Run> 바로 앱·URL·폴더를 열 수 있습니다.
</TextBlock>
</Grid>
</Border>
<!-- 입력 폼 -->
<Border Background="White" CornerRadius="10" Padding="16,14" Margin="0,0,0,10"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1.5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="8"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- 행 1: 키워드 + 설명 -->
<TextBox Grid.Row="0" Grid.Column="0"
Style="{StaticResource ModernTextBox}"
Text="{Binding NewKey, UpdateSourceTrigger=PropertyChanged}"
Tag="키워드 (예: vscode, gh)"
ToolTip="AX Commander에서 입력할 단축 키워드"/>
<TextBox Grid.Row="0" Grid.Column="2"
Style="{StaticResource ModernTextBox}"
Text="{Binding NewDescription, UpdateSourceTrigger=PropertyChanged}"
Tag="표시 이름 (예: Visual Studio Code)"
ToolTip="AX Commander 결과에 표시될 이름"/>
<!-- 행 2: 경로 + 타입 + 찾아보기 + 추가 -->
<Grid Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="76"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"
Style="{StaticResource ModernTextBox}"
Text="{Binding NewTarget, UpdateSourceTrigger=PropertyChanged}"
Tag="경로 또는 URL (예: C:\...\app.exe, https://...)"
ToolTip="앱 실행 파일 경로, URL, 또는 폴더 경로"/>
<!-- 파일 선택 버튼 -->
<Button Grid.Column="2" Style="{StaticResource IconButton}"
Click="Browse_Click" ToolTip="앱 파일 선택 (.exe)">
<TextBlock Text="&#xE8DA;" FontFamily="Segoe MDL2 Assets"
FontSize="13" Foreground="{DynamicResource SecondaryText}"/>
</Button>
<!-- 타입 콤보 -->
<ComboBox Grid.Column="4"
SelectedValue="{Binding NewType}"
SelectedValuePath="Tag"
Height="32" FontSize="12"
VerticalContentAlignment="Center">
<ComboBoxItem Tag="app">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xECAA;" FontFamily="Segoe MDL2 Assets" FontSize="12" Margin="0,0,6,0" VerticalAlignment="Center" Foreground="{DynamicResource AccentColor}"/>
<TextBlock Text="앱"/>
</StackPanel>
</ComboBoxItem>
<ComboBoxItem Tag="url">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE774;" FontFamily="Segoe MDL2 Assets" FontSize="12" Margin="0,0,6,0" VerticalAlignment="Center" Foreground="#0078D4"/>
<TextBlock Text="URL"/>
</StackPanel>
</ComboBoxItem>
<ComboBoxItem Tag="folder">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE8B7;" FontFamily="Segoe MDL2 Assets" FontSize="12" Margin="0,0,6,0" VerticalAlignment="Center" Foreground="#107C10"/>
<TextBlock Text="폴더"/>
</StackPanel>
</ComboBoxItem>
</ComboBox>
<!-- 추가 버튼 -->
<Button Grid.Column="6" Style="{StaticResource PrimaryButton}"
Padding="14,0" Height="32" Click="AddShortcut_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE710;" FontFamily="Segoe MDL2 Assets"
FontSize="12" Margin="0,0,5,0" VerticalAlignment="Center"/>
<TextBlock Text="추가" VerticalAlignment="Center"/>
</StackPanel>
</Button>
</Grid>
</Grid>
</Border>
<!-- 목록 헤더 -->
<Grid Margin="4,2,4,4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="38"/>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="32"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="1" Text="키워드" Style="{StaticResource RowHint}"/>
<TextBlock Grid.Column="2" Text="설명" Style="{StaticResource RowHint}"/>
<TextBlock Grid.Column="3" Text="실행 대상" Style="{StaticResource RowHint}"/>
</Grid>
</StackPanel>
<!-- 단축키 목록 -->
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<ItemsControl ItemsSource="{Binding AppShortcuts}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type vm:AppShortcutModel}">
<Border Background="White" CornerRadius="9"
Margin="0,0,0,2" Padding="10,10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="38"/>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="32"/>
</Grid.ColumnDefinitions>
<!-- 타입 아이콘 박스 -->
<Border Grid.Column="0" Width="28" Height="28" CornerRadius="7"
Background="{DynamicResource ItemHoverBackground}" VerticalAlignment="Center">
<TextBlock Text="{Binding TypeSymbol}"
FontFamily="Segoe MDL2 Assets" FontSize="13"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<!-- 키워드 -->
<TextBlock Grid.Column="1"
Text="{Binding Key}"
FontSize="13" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center" Margin="8,0,6,0"/>
<!-- 설명 -->
<TextBlock Grid.Column="2"
Text="{Binding Description}"
FontSize="12" Foreground="#5A5C80"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis" Margin="0,0,8,0"/>
<!-- 경로 -->
<TextBlock Grid.Column="3"
Text="{Binding Target}"
FontSize="11" Foreground="{DynamicResource SecondaryText}"
FontFamily="Consolas, Courier New"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis"/>
<!-- 삭제 -->
<Button Grid.Column="4"
Style="{StaticResource DeleteButton}"
Tag="{Binding}" Click="DeleteShortcut_Click"
ToolTip="삭제" VerticalAlignment="Center"/>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
</TabItem>
<!-- ════════════════════════════════════════════════════════════ -->
<!-- 8. 배치 명령 탭 -->
<!-- ════════════════════════════════════════════════════════════ -->
<TabItem Header="배치 명령" Tag="&#xE756;" Style="{StaticResource SideNavItem}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0">
<TextBlock Text="배치 명령 (&gt; 예약어)" Style="{StaticResource SectionHeader}"/>
<!-- 안내 배너 -->
<Border Background="White" CornerRadius="10" Padding="14,11" Margin="0,0,0,10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Width="36" Height="36" CornerRadius="9"
Background="#323130" Margin="0,0,12,0" VerticalAlignment="Center">
<TextBlock Text="&#xE756;" FontFamily="Segoe MDL2 Assets" FontSize="17"
Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<TextBlock Grid.Column="1" FontSize="12" Foreground="{DynamicResource SecondaryText}"
TextWrapping="Wrap" VerticalAlignment="Center">
<Run FontWeight="SemiBold" Foreground="#323130">&gt;키워드</Run>
<Run>로 PowerShell/배치 명령을 빠르게 실행합니다. ShowWindow를 켜면 터미널 창이 표시됩니다.</Run>
</TextBlock>
</Grid>
</Border>
<!-- 입력 폼 -->
<Border Background="White" CornerRadius="10" Padding="16,14" Margin="0,0,0,10"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1.5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="8"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- 키워드 -->
<TextBox Grid.Row="0" Grid.Column="0"
Style="{StaticResource ModernTextBox}"
Text="{Binding NewBatchKey, UpdateSourceTrigger=PropertyChanged}"
ToolTip="키워드 (예: build, deploy, test)"/>
<!-- 명령어 -->
<TextBox Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="5"
Style="{StaticResource ModernTextBox}"
Text="{Binding NewBatchCommand, UpdateSourceTrigger=PropertyChanged}"
ToolTip="실행할 명령어 (예: powershell -File C:\build.ps1)"/>
<!-- ShowWindow 토글 + 추가 버튼 -->
<StackPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="4"
Orientation="Horizontal" VerticalAlignment="Center">
<CheckBox Style="{StaticResource ToggleSwitch}"
IsChecked="{Binding NewBatchShowWindow}"
VerticalAlignment="Center"/>
<TextBlock Text="창 표시 (ShowWindow)" FontSize="12"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center" Margin="10,0,0,0"/>
</StackPanel>
<Button Grid.Row="2" Grid.Column="6"
Style="{StaticResource PrimaryButton}"
Padding="14,0" Height="32"
Click="AddBatchCommand_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE710;" FontFamily="Segoe MDL2 Assets"
FontSize="12" Margin="0,0,5,0" VerticalAlignment="Center"/>
<TextBlock Text="추가" VerticalAlignment="Center"/>
</StackPanel>
</Button>
</Grid>
</Border>
<!-- 목록 헤더 -->
<Grid Margin="4,2,4,4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="38"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="32"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="1" Text="키워드" Style="{StaticResource RowHint}"/>
<TextBlock Grid.Column="2" Text="명령어" Style="{StaticResource RowHint}"/>
<TextBlock Grid.Column="3" Text="창 표시" Style="{StaticResource RowHint}" HorizontalAlignment="Center"/>
</Grid>
</StackPanel>
<!-- 배치 명령 목록 -->
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<ItemsControl ItemsSource="{Binding BatchCommands}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type vm:BatchCommandModel}">
<Border Background="White" CornerRadius="9"
Margin="0,0,0,2" Padding="10,10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="38"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="32"/>
</Grid.ColumnDefinitions>
<!-- 아이콘 -->
<Border Grid.Column="0" Width="28" Height="28" CornerRadius="7"
Background="#2A2A2F" VerticalAlignment="Center">
<TextBlock Text="&#xE756;"
FontFamily="Segoe MDL2 Assets" FontSize="13"
Foreground="White"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<!-- 키워드 -->
<TextBlock Grid.Column="1"
Text="{Binding Key}"
FontSize="13" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center" Margin="8,0,6,0"/>
<!-- 명령어 -->
<TextBlock Grid.Column="2"
Text="{Binding Command}"
FontSize="11" Foreground="{DynamicResource SecondaryText}"
FontFamily="Consolas, Courier New"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis"/>
<!-- ShowWindow -->
<TextBlock Grid.Column="3"
FontFamily="Segoe MDL2 Assets" FontSize="14"
HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="&#xE73C;"/>
<Setter Property="Foreground" Value="{DynamicResource BorderColor}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ShowWindow}" Value="True">
<Setter Property="Text" Value="&#xE73E;"/>
<Setter Property="Foreground" Value="{DynamicResource AccentColor}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<!-- 삭제 -->
<Button Grid.Column="4"
Style="{StaticResource DeleteButton}"
Tag="{Binding}" Click="DeleteBatchCommand_Click"
ToolTip="삭제" VerticalAlignment="Center"/>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
</TabItem>
<!-- ══════════════════════════════════════════════════════════════
기능 탭 — 단축키로 활성/비활성화 가능한 기능들의 ON/OFF 설정
══════════════════════════════════════════════════════════════ -->
<TabItem Header="기능" Tag="&#xE713;" Style="{StaticResource SideNavItem}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="기능 설정"
FontSize="16" FontWeight="SemiBold" Foreground="{DynamicResource PrimaryText}"
Margin="0,0,0,2"/>
<!-- ── 기능 내부 서브탭 ── -->
<Border Grid.Row="1" Background="Transparent" BorderThickness="0" Padding="0" Margin="0,8,0,14">
<StackPanel x:Name="FunctionSubTabBar" Orientation="Horizontal" VerticalAlignment="Center">
<RadioButton x:Name="FuncSubTab_AI" Content="텍스트/파일" IsChecked="True"
GroupName="FuncSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="FuncSubTab_Checked"/>
<RadioButton x:Name="FuncSubTab_Launcher" Content="AX Commander"
GroupName="FuncSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="FuncSubTab_Checked"/>
<RadioButton x:Name="FuncSubTab_Design" Content="디자인·기타"
GroupName="FuncSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="FuncSubTab_Checked"/>
</StackPanel>
</Border>
<!-- ═══ 서브탭: AI 기능 ═══ -->
<ScrollViewer x:Name="FuncPanel_AI" Grid.Row="2" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled" Padding="0,0,8,0" Visibility="Visible">
<StackPanel>
<!-- ── 선택 텍스트 AI 명령 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="선택 텍스트 명령"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="선택 텍스트 명령 사용"/>
<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">
텍스트를 선택(드래그)한 상태에서 핫키를 누르면 커서 위치에 AI 명령 팝업이 나타납니다.
<LineBreak/>번역, 요약, 문법 교정, 설명, 다시 쓰기 중 선택하여 실행합니다.
<LineBreak/><LineBreak/>비활성화하면 항상 AX Commander가 열립니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="텍스트를 선택한 상태에서 핫키를 누르면 AI 명령 팝업이 표시됩니다"/>
</StackPanel>
<CheckBox x:Name="ChkEnableTextAction" Grid.Column="1"
Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableTextAction, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowLabel}" Text="활성화할 AI 명령"/>
<TextBlock Style="{StaticResource RowHint}" Text="최소 1개 이상 선택해야 합니다. 1개만 선택하면 팝업 없이 바로 실행됩니다."/>
<StackPanel x:Name="TextActionCommandsPanel" Margin="0,8,0,0"/>
</StackPanel>
</Border>
<!-- ── 파일 대화상자 통합 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="파일 대화상자 연동"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="열기/저장 대화상자에서 런처 자동 열기"/>
<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">
프로그램에서 파일 열기/저장 대화상자가 나타나면 AX Commander가 자동으로 열립니다.
<LineBreak/>cd 명령으로 원하는 폴더를 빠르게 찾아 이동할 수 있습니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="Windows 열기/저장 대화상자가 나타나면 런처를 자동으로 엽니다. 브라우저 파일 업로드 시 런처가 열리는 현상이 발생하면 비활성화하세요"/>
</StackPanel>
<CheckBox x:Name="ChkEnableFileDialog" Grid.Column="1"
Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableFileDialogIntegration, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── 번역 기본 언어 ── -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<TextBlock Style="{StaticResource RowLabel}" Text="번역 기본 언어"/>
<TextBlock Style="{StaticResource RowHint}" Text="선택 텍스트 AI 번역 시 기본 대상 언어"/>
</StackPanel>
<ComboBox Grid.Column="1"
SelectedValue="{Binding TextActionTranslateLanguage}"
SelectedValuePath="Tag"
Width="140" VerticalAlignment="Center">
<ComboBoxItem Content="자동 감지" Tag="auto"/>
<ComboBoxItem Content="한국어 → 영어" Tag="ko-en"/>
<ComboBoxItem Content="영어 → 한국어" Tag="en-ko"/>
<ComboBoxItem Content="한국어 → 일본어" Tag="ko-ja"/>
<ComboBoxItem Content="한국어 → 중국어" Tag="ko-zh"/>
</ComboBox>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
<!-- ═══ 서브탭: AX Commander ═══ -->
<ScrollViewer x:Name="FuncPanel_Launcher" Grid.Row="2" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled" Padding="0,0,8,0" Visibility="Collapsed">
<StackPanel>
<!-- ── UI 표시 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="UI 표시"/>
<!-- 번호 배지 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="번호 배지 표시"/>
<TextBlock Style="{StaticResource RowHint}"
Text="결과 항목 앞에 1~9 번호 표시. Ctrl+숫자로 바로 실행합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShowNumberBadges, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- 예약어 배지 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="예약어 배지 표시"/>
<TextBlock Style="{StaticResource RowHint}"
Text="입력창 좌측에 현재 활성 예약어(cd / ~ / # 등) 배지를 표시합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShowPrefixBadge, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── 런처 동작 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="AX Commander 동작"/>
<!-- 포커스 잃으면 닫기 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="포커스 잃으면 자동 닫기"/>
<TextBlock Style="{StaticResource RowHint}"
Text="AX Commander 창이 포커스를 잃으면 자동으로 닫힙니다. 끄면 수동으로 닫아야 합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding CloseOnFocusLost, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="마지막 위치 기억"/>
<TextBlock Style="{StaticResource RowHint}"
Text="AX Commander를 닫은 위치를 기억하고 다음에 같은 위치에서 엽니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding RememberPosition, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- 액션 모드 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="액션 모드 사용"/>
<TextBlock Style="{StaticResource RowHint}"
Text="파일 선택 후 → 키 또는 Ctrl+Enter / Alt+Enter로 추가 동작(복사·열기·관리자 실행 등) 메뉴에 진입합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableActionMode, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── 기록 기능 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="기록 기능"/>
<!-- 최근 실행 기록 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="최근 실행 기록 저장"/>
<TextBlock Style="{StaticResource RowHint}"
Text="실행한 항목을 recent 목록에 저장합니다. Ctrl+R 또는 'recent' 입력으로 조회합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableRecent, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- 즐겨찾기 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="즐겨찾기 기능 사용"/>
<TextBlock Style="{StaticResource RowHint}"
Text="자주 쓰는 파일·폴더를 즐겨찾기에 등록합니다. Ctrl+B 또는 'fav' 입력, Ctrl+P로 현재 항목을 즉시 추가/제거합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableFavorites, Mode=TwoWay}"/>
</Grid>
</Border>
<TextBlock Style="{StaticResource SectionHeader}" Text="하단 위젯"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="성능 위젯 표시"/>
<TextBlock Style="{StaticResource RowHint}" Text="CPU, RAM, 저장 공간 요약을 하단 바에 표시합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShowWidgetPerf, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="포모도로 위젯 표시"/>
<TextBlock Style="{StaticResource RowHint}" Text="집중 타이머와 남은 시간을 런처 하단에 표시합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShowWidgetPomo, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="메모 위젯 표시"/>
<TextBlock Style="{StaticResource RowHint}" Text="최근 메모 상태를 하단 바에서 빠르게 확인합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShowWidgetNote, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="날씨 위젯 표시"/>
<TextBlock Style="{StaticResource RowHint}" Text="현재 날씨와 온도를 런처 하단에 표시합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShowWidgetWeather, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="일정 위젯 표시"/>
<TextBlock Style="{StaticResource RowHint}" Text="다가오는 일정 또는 날짜 요약을 하단 바에서 보여줍니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShowWidgetCalendar, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="배터리 위젯 표시"/>
<TextBlock Style="{StaticResource RowHint}" Text="노트북 배터리 잔량과 충전 상태를 하단 바에 표시합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShowWidgetBattery, Mode=TwoWay}"/>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
<!-- ═══ 서브탭: 디자인·기타 ═══ -->
<ScrollViewer x:Name="FuncPanel_Design" Grid.Row="2" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled" Padding="0,0,8,0" Visibility="Collapsed">
<StackPanel>
<!-- ── 클립보드 확장 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="클립보드 확장"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="자동 카테고리 분류"/>
<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">
복사한 텍스트를 자동으로 분류합니다:
<LineBreak/>• URL — http/https 링크
<LineBreak/>• 코드 — class, function, import 등 포함
<LineBreak/>• 경로 — C:\, \\서버\ 형태의 파일 경로
<LineBreak/>• 일반 — 위에 해당하지 않는 텍스트
<LineBreak/><LineBreak/>#url, #코드, #경로 로 필터링 가능합니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="복사한 텍스트를 URL/코드/경로/일반으로 자동 분류합니다"/>
</StackPanel>
<CheckBox x:Name="ChkEnableAutoCategory" Grid.Column="1"
Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableClipboardAutoCategory, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<TextBlock Style="{StaticResource RowLabel}" Text="최대 핀 고정 개수"/>
<TextBlock Style="{StaticResource RowHint}" Text="핀 고정할 수 있는 클립보드 항목의 최대 수"/>
</StackPanel>
<ComboBox Grid.Column="1"
SelectedValue="{Binding MaxPinnedClipboardItems}"
SelectedValuePath="Tag"
Width="100" VerticalAlignment="Center">
<ComboBoxItem Content="10개" Tag="10"/>
<ComboBoxItem Content="20개" Tag="20"/>
<ComboBoxItem Content="30개" Tag="30"/>
<ComboBoxItem Content="50개" Tag="50"/>
</ComboBox>
</Grid>
</Border>
<!-- ── 디자인 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="디자인"/>
<!-- 아이콘 애니메이션 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="아이콘 애니메이션 효과"/>
<TextBlock Style="{StaticResource RowHint}"
Text="AX Commander 입력창 왼쪽 다이아몬드 픽셀 아이콘에 점멸·회전 등 애니메이션 효과를 적용합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableIconAnimation, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- 안내 문구 랜덤 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="안내 문구 랜덤 출력"/>
<TextBlock Style="{StaticResource RowHint}"
Text="AX Commander 입력창 플레이스홀더 문구를 열 때마다 다양하게 표시합니다. 끄면 기본 문구만 표시됩니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableRandomPlaceholder, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- 런처 테두리 표시 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="AX Commander 창 테두리"/>
<TextBlock Style="{StaticResource RowHint}"
Text="AX Commander 창 가장자리에 테마 색상 테두리를 표시합니다"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShowLauncherBorder, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- 단축키 도움말 테마 색상 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="도움말 창 테마 색상"/>
<TextBlock Style="{StaticResource RowHint}"
Text="단축키 도움말(Ctrl+K)의 아이콘 색상을 테마 액센트 색상으로 통일합니다"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShortcutHelpUseThemeColor, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── 스니펫 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="스니펫"/>
<!-- 스니펫 자동 확장 -->
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="스니펫 자동 확장"/>
<TextBlock Style="{StaticResource RowHint}"
Text="등록된 키워드를 입력하면 전체 텍스트로 즉시 확장합니다. 스니펫 탭에서 키워드·내용을 관리합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding SnippetAutoExpand, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── 단축키 참조 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="단축키 참조"/>
<Border Background="{DynamicResource ItemBackground}" CornerRadius="10" Padding="16,14" Margin="0,0,0,3">
<StackPanel>
<TextBlock FontSize="11" Foreground="{DynamicResource AccentColor}" FontWeight="SemiBold"
Margin="0,0,0,8">주요 기능 단축키 목록</TextBlock>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
<RowDefinition Height="22"/>
</Grid.RowDefinitions>
<!-- 행 1 -->
<Border Grid.Row="0" Grid.Column="0" Background="{DynamicResource ItemHoverBackground}" CornerRadius="4" Padding="6,2" Margin="0,1,6,1" HorizontalAlignment="Left">
<TextBlock Text="Ctrl+B" FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBlock Grid.Row="0" Grid.Column="1" Text="즐겨찾기 목록 보기 / 숨기기" FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<!-- 행 2 -->
<Border Grid.Row="1" Grid.Column="0" Background="{DynamicResource ItemHoverBackground}" CornerRadius="4" Padding="6,2" Margin="0,1,6,1" HorizontalAlignment="Left">
<TextBlock Text="Ctrl+P" FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBlock Grid.Row="1" Grid.Column="1" Text="현재 선택 항목 즐겨찾기 추가/제거" FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<!-- 행 3 -->
<Border Grid.Row="2" Grid.Column="0" Background="{DynamicResource ItemHoverBackground}" CornerRadius="4" Padding="6,2" Margin="0,1,6,1" HorizontalAlignment="Left">
<TextBlock Text="Ctrl+R" FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBlock Grid.Row="2" Grid.Column="1" Text="최근 실행 목록 보기 / 숨기기" FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<!-- 행 4 -->
<Border Grid.Row="3" Grid.Column="0" Background="{DynamicResource ItemHoverBackground}" CornerRadius="4" Padding="6,2" Margin="0,1,6,1" HorizontalAlignment="Left">
<TextBlock Text="Ctrl+T" FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBlock Grid.Row="3" Grid.Column="1" Text="선택 항목 위치에서 터미널 열기" FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<!-- 행 5 -->
<Border Grid.Row="4" Grid.Column="0" Background="{DynamicResource ItemHoverBackground}" CornerRadius="4" Padding="6,2" Margin="0,1,6,1" HorizontalAlignment="Left">
<TextBlock Text="Ctrl+W" FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBlock Grid.Row="4" Grid.Column="1" Text="AX Commander 창 닫기" FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<!-- 행 6 -->
<Border Grid.Row="5" Grid.Column="0" Background="{DynamicResource ItemHoverBackground}" CornerRadius="4" Padding="6,2" Margin="0,1,6,1" HorizontalAlignment="Left">
<TextBlock Text="Ctrl+D" FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBlock Grid.Row="5" Grid.Column="1" Text="다운로드 폴더 바로가기" FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<!-- 행 7 -->
<Border Grid.Row="6" Grid.Column="0" Background="{DynamicResource ItemHoverBackground}" CornerRadius="4" Padding="6,2" Margin="0,1,6,1" HorizontalAlignment="Left">
<TextBlock Text="Ctrl+F" FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBlock Grid.Row="6" Grid.Column="1" Text="파일 검색 모드로 전환" FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<!-- 행 8 -->
<Border Grid.Row="7" Grid.Column="0" Background="{DynamicResource ItemHoverBackground}" CornerRadius="4" Padding="6,2" Margin="0,1,6,1" HorizontalAlignment="Left">
<TextBlock Text="Ctrl+K" FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBlock Grid.Row="7" Grid.Column="1" Text="단축키 모달 창 열기" FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<!-- 행 9 -->
<Border Grid.Row="8" Grid.Column="0" Background="{DynamicResource ItemHoverBackground}" CornerRadius="4" Padding="6,2" Margin="0,1,6,1" HorizontalAlignment="Left">
<TextBlock Text="Home / End" FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBlock Grid.Row="8" Grid.Column="1" Text="목록 처음 / 마지막 항목으로 이동" FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
<!-- 행 10 -->
<Border Grid.Row="9" Grid.Column="0" Background="{DynamicResource ItemHoverBackground}" CornerRadius="4" Padding="6,2" Margin="0,1,6,1" HorizontalAlignment="Left">
<TextBlock Text="Ctrl+1~9" FontFamily="Consolas" FontSize="11" Foreground="{DynamicResource PrimaryText}"/>
</Border>
<TextBlock Grid.Row="9" Grid.Column="1" Text="n번째 결과 항목 바로 실행" FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
</Grid>
</StackPanel>
</Border>
</StackPanel>
</ScrollViewer>
</Grid>
</TabItem>
<!-- ═════════════════════════════════════════════════════════════ -->
<!-- AX Agent 탭 -->
<!-- ═════════════════════════════════════════════════════════════ -->
<TabItem x:Name="AgentTabItem" Header="AX Agent" Tag="&#xE8BD;" Style="{StaticResource SideNavItem}" Visibility="Collapsed">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,0,0,4">
<Button Click="BtnAgentSettingsBack_Click"
Background="Transparent"
BorderThickness="0"
Padding="4"
Cursor="Hand"
ToolTip="이전 설정으로 돌아가기">
<TextBlock Text="&#xE72B;"
FontFamily="Segoe MDL2 Assets"
FontSize="14"
Foreground="{DynamicResource SecondaryText}"/>
</Button>
<TextBlock Text="AX Agent 설정"
FontSize="16"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
Margin="8,0,0,0"/>
</StackPanel>
<!-- ── 서브탭 헤더 (공통 / 서비스 / 권한 / 고급) ── -->
<Border Grid.Row="1" Background="Transparent" BorderThickness="0" Padding="0" Margin="0,8,0,14">
<StackPanel x:Name="AgentSubTabs" Orientation="Horizontal" VerticalAlignment="Center">
<RadioButton x:Name="AgentTabCommon" Content="공통" IsChecked="True"
GroupName="AgentSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="AgentSubTab_Checked"/>
<RadioButton x:Name="AgentTabChat" Content="서비스"
GroupName="AgentSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="AgentSubTab_Checked"/>
<RadioButton x:Name="AgentTabCoworkCode" Content="권한"
GroupName="AgentSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="AgentSubTab_Checked"/>
<RadioButton x:Name="AgentTabDev" Content="고급"
GroupName="AgentSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="AgentSubTab_Checked"/>
<RadioButton x:Name="AgentTabCowork" Content="코워크"
GroupName="AgentSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="AgentSubTab_Checked"
Visibility="Collapsed"/>
<RadioButton x:Name="AgentTabCode" Content="코드"
GroupName="AgentSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="AgentSubTab_Checked"
Visibility="Collapsed"/>
<RadioButton x:Name="AgentTabTools" Content="도구"
GroupName="AgentSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="AgentSubTab_Checked"
Visibility="Collapsed"/>
<RadioButton x:Name="AgentTabEtc" Content="스킬/차단"
GroupName="AgentSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="AgentSubTab_Checked"
Visibility="Collapsed"/>
</StackPanel>
</Border>
<!-- ══════════════════════════════════════════════════
공통 탭 (Common)
══════════════════════════════════════════════════ -->
<ScrollViewer x:Name="AgentPanelCommon" Grid.Row="2"
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
Padding="0,0,8,0">
<StackPanel>
<StackPanel x:Name="AgentCommonOverviewSection">
<TextBlock Style="{StaticResource SectionHeader}" Text="기본 상태"/>
<Border Style="{StaticResource AgentSettingsRow}" Visibility="Collapsed">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="AX Agent 사용"/>
<TextBlock Style="{StaticResource RowHint}" Text="비활성화하면 AX Agent 대화와 관련 설정이 숨겨지고 AI 동작이 차단됩니다."/>
</StackPanel>
<CheckBox x:Name="AgentAiEnabledToggle"
Grid.Column="1"
Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Checked="AiEnabled_Changed"
Unchecked="AiEnabled_Changed"/>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}" Visibility="Collapsed">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" HorizontalAlignment="Left" MaxWidth="420">
<TextBlock Style="{StaticResource RowLabel}" Text="운영 모드"/>
<TextBlock Style="{StaticResource RowHint}" Text="사내모드는 외부 검색, 외부 HTTP 호출, 외부 URL 열기를 차단합니다."/>
</StackPanel>
<WrapPanel Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Center">
<RadioButton x:Name="AgentOperationModeInternal"
Content="사내"
GroupName="AgentOperationMode"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentOperationModeCard_Checked"/>
<RadioButton x:Name="AgentOperationModeExternal"
Content="사외"
GroupName="AgentOperationMode"
Style="{StaticResource AgentSubTabStyle}"
Checked="AgentOperationModeCard_Checked"/>
</WrapPanel>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}" Visibility="Collapsed">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="표현 수준"/>
<TextBlock Style="{StaticResource RowHint}" Text="계획, 승인, composer 보조 설명의 정보 밀도와 노출량을 조절합니다."/>
</StackPanel>
<WrapPanel Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Center">
<RadioButton x:Name="AgentDisplayModeRich"
Content="풍부하게"
GroupName="AgentDisplayMode"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentDisplayMode_Checked"/>
<RadioButton x:Name="AgentDisplayModeBalanced"
Content="적절하게"
GroupName="AgentDisplayMode"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentDisplayMode_Checked"/>
<RadioButton x:Name="AgentDisplayModeSimple"
Content="간단하게"
GroupName="AgentDisplayMode"
Style="{StaticResource AgentSubTabStyle}"
Checked="AgentDisplayMode_Checked"/>
</WrapPanel>
</Grid>
</Border>
</StackPanel>
<!-- ── 활성 서비스 선택 ── -->
<StackPanel x:Name="AgentServiceSection">
<TextBlock Style="{StaticResource SectionHeader}" Text="활성 서비스"/>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="사용할 서비스"/>
<TextBlock Style="{StaticResource RowHint}" Text="AI 대화에 사용할 LLM 백엔드를 선택합니다."/>
</StackPanel>
<WrapPanel HorizontalAlignment="Right" VerticalAlignment="Center">
<RadioButton x:Name="AgentServiceCardOllama"
Content="Ollama"
GroupName="AgentServiceCard"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentServiceCard_Checked"/>
<RadioButton x:Name="AgentServiceCardVllm"
Content="vLLM"
GroupName="AgentServiceCard"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentServiceCard_Checked"/>
<RadioButton x:Name="AgentServiceCardGemini"
Content="Gemini"
GroupName="AgentServiceCard"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentServiceCard_Checked"/>
<RadioButton x:Name="AgentServiceCardClaude"
Content="Claude"
GroupName="AgentServiceCard"
Style="{StaticResource AgentSubTabStyle}"
Checked="AgentServiceCard_Checked"/>
</WrapPanel>
</Grid>
</Border>
<!-- ── LLM 서비스별 탭 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="서비스별 설정"/>
<Border Background="Transparent" BorderThickness="0" Padding="0" Margin="0,2,0,10">
<StackPanel x:Name="ServiceSubTabs" Orientation="Horizontal" VerticalAlignment="Center">
<RadioButton x:Name="SvcTabOllama" Content="Ollama" IsChecked="True"
GroupName="ServiceSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="ServiceSubTab_Checked"/>
<RadioButton x:Name="SvcTabVllm" Content="vLLM"
GroupName="ServiceSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="ServiceSubTab_Checked"/>
<RadioButton x:Name="SvcTabGemini" Content="Gemini"
GroupName="ServiceSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="ServiceSubTab_Checked"/>
<RadioButton x:Name="SvcTabSigmoid" Content="Claude"
GroupName="ServiceSubTab" Style="{StaticResource AgentSubTabStyle}"
Checked="ServiceSubTab_Checked"/>
</StackPanel>
</Border>
<!-- Ollama 패널 -->
<StackPanel x:Name="SvcPanelOllama">
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" MaxWidth="380">
<TextBlock Style="{StaticResource RowLabel}" Text="기본 서버 주소"/>
<TextBlock Style="{StaticResource RowHint}" Text="Ollama 기본 서버 주소. 모델별 개별 서버는 모델 추가 시 입력합니다."/>
</StackPanel>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="280" FontSize="12" Padding="6,4"
Text="{Binding OllamaEndpoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="등록 모델"/>
<TextBlock Style="{StaticResource RowHint}" Text="사내 모델을 별칭으로 등록합니다."/>
</StackPanel>
<Button x:Name="BtnAddModel" HorizontalAlignment="Right" VerticalAlignment="Center"
Content="+ 모델 추가" Padding="12,6" Cursor="Hand"
Click="BtnAddModel_Click"/>
</Grid>
</Border>
<ItemsControl x:Name="OllamaRegisteredModelsList" Margin="0,2,0,8">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="{DynamicResource ItemBackground}"
CornerRadius="10" Padding="14,10" Margin="0,4,0,0"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<TextBlock Text="{Binding Alias}" FontSize="13.5" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<StackPanel Orientation="Horizontal" Margin="0,3,0,0">
<Border Background="{DynamicResource AccentColor}" CornerRadius="4"
Padding="6,1,6,1" Margin="0,0,8,0" Opacity="0.8">
<TextBlock Text="{Binding ServiceLabel}" FontSize="10"
Foreground="White" FontWeight="SemiBold"/>
</Border>
<TextBlock Text="{Binding MaskedModelName}" FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
<TextBlock Text=" · " FontSize="11" Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding EndpointDisplay}" FontSize="10.5"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Opacity="0.7"/>
</StackPanel>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
<Button Content="&#xE70F;" FontFamily="Segoe MDL2 Assets"
FontSize="12" ToolTip="편집" Cursor="Hand"
Background="Transparent" BorderThickness="0"
Foreground="{DynamicResource SecondaryText}"
Padding="6,4" Margin="0,0,4,0"
Tag="{Binding}" Click="BtnEditModel_Click"/>
<Button Content="&#xE74D;" FontFamily="Segoe MDL2 Assets"
FontSize="12" ToolTip="삭제" Cursor="Hand"
Background="Transparent" BorderThickness="0"
Foreground="#DD4444" Padding="6,4"
Tag="{Binding}" Click="BtnDeleteModel_Click"/>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Border Style="{StaticResource AgentSettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowLabel}" Text="사용할 모델"/>
<TextBlock Style="{StaticResource RowHint}" Text="등록된 Ollama 모델 중에서 기본으로 사용할 모델을 선택합니다." Margin="0,2,0,8"/>
<WrapPanel x:Name="OllamaModelChipPanel"/>
</StackPanel>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" MaxWidth="380">
<TextBlock Style="{StaticResource RowLabel}" Text="API 키 (선택)"/>
<TextBlock Style="{StaticResource RowHint}" Text="접근 제어가 설정된 경우에만 입력합니다."/>
</StackPanel>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="280" FontSize="12" Padding="6,4"
Text="{Binding OllamaApiKey, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Border>
</StackPanel>
<!-- vLLM 패널 -->
<StackPanel x:Name="SvcPanelVllm" Visibility="Collapsed">
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" MaxWidth="380">
<TextBlock Style="{StaticResource RowLabel}" Text="기본 서버 주소"/>
<TextBlock Style="{StaticResource RowHint}" Text="vLLM(OpenAI 호환) 기본 서버 주소. 모델별 개별 서버는 모델 추가 시 입력합니다."/>
</StackPanel>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="280" FontSize="12" Padding="6,4"
Text="{Binding VllmEndpoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="등록 모델"/>
<TextBlock Style="{StaticResource RowHint}" Text="사내 vLLM 서버에 배포된 모델을 등록합니다. 모델별로 다른 서버를 지정할 수 있습니다."/>
</StackPanel>
<Button x:Name="BtnAddVllmModel" HorizontalAlignment="Right" VerticalAlignment="Center"
Content="+ 모델 추가" Padding="12,6" Cursor="Hand"
Click="BtnAddModel_Click"/>
</Grid>
</Border>
<ItemsControl x:Name="VllmRegisteredModelsList" Margin="0,2,0,8">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="{DynamicResource ItemBackground}"
CornerRadius="10" Padding="14,10" Margin="0,4,0,0"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<TextBlock Text="{Binding Alias}" FontSize="13.5" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<StackPanel Orientation="Horizontal" Margin="0,3,0,0">
<Border Background="{DynamicResource AccentColor}" CornerRadius="4"
Padding="6,1,6,1" Margin="0,0,8,0" Opacity="0.8">
<TextBlock Text="{Binding ServiceLabel}" FontSize="10"
Foreground="White" FontWeight="SemiBold"/>
</Border>
<TextBlock Text="{Binding MaskedModelName}" FontSize="11"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
<TextBlock Text=" · " FontSize="11" Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding EndpointDisplay}" FontSize="10.5"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Opacity="0.7"/>
</StackPanel>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
<Button Content="&#xE70F;" FontFamily="Segoe MDL2 Assets"
FontSize="12" ToolTip="편집" Cursor="Hand"
Background="Transparent" BorderThickness="0"
Foreground="{DynamicResource SecondaryText}"
Padding="6,4" Margin="0,0,4,0"
Tag="{Binding}" Click="BtnEditModel_Click"/>
<Button Content="&#xE74D;" FontFamily="Segoe MDL2 Assets"
FontSize="12" ToolTip="삭제" Cursor="Hand"
Background="Transparent" BorderThickness="0"
Foreground="#DD4444" Padding="6,4"
Tag="{Binding}" Click="BtnDeleteModel_Click"/>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Border Style="{StaticResource AgentSettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowLabel}" Text="사용할 모델"/>
<TextBlock Style="{StaticResource RowHint}" Text="등록된 vLLM 모델 중에서 기본으로 사용할 모델을 선택합니다." Margin="0,2,0,8"/>
<WrapPanel x:Name="VllmModelChipPanel"/>
</StackPanel>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" MaxWidth="380">
<TextBlock Style="{StaticResource RowLabel}" Text="기본 API 키 (선택)"/>
<TextBlock Style="{StaticResource RowHint}" Text="모델별 API 키가 없을 때 사용되는 기본 키입니다."/>
</StackPanel>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="280" FontSize="12" Padding="6,4"
Text="{Binding VllmApiKey, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Border>
</StackPanel>
<!-- Gemini 패널 -->
<StackPanel x:Name="SvcPanelGemini" Visibility="Collapsed">
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="사용할 모델"/>
<TextBlock Style="{StaticResource RowHint}" Text="Gemini 모델을 버튼형 목록에서 선택합니다."/>
</StackPanel>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowLabel}" Text="모델 선택"/>
<TextBlock Style="{StaticResource RowHint}" Text="현재 서비스에 맞는 추천 모델을 빠르게 고를 수 있습니다." Margin="0,2,0,10"/>
<WrapPanel x:Name="GeminiModelChipPanel"/>
</StackPanel>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" MaxWidth="380">
<TextBlock Style="{StaticResource RowLabel}" Text="API 키"/>
<TextBlock Style="{StaticResource RowHint}" Text="Google AI Studio에서 발급받은 API 키"/>
</StackPanel>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="280" FontSize="12" Padding="6,4"
Text="{Binding GeminiApiKey, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Border>
</StackPanel>
<!-- Claude 패널 -->
<StackPanel x:Name="SvcPanelSigmoid" Visibility="Collapsed">
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="사용할 모델"/>
<TextBlock Style="{StaticResource RowHint}" Text="Claude 모델을 버튼형 목록에서 선택합니다."/>
</StackPanel>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowLabel}" Text="모델 선택"/>
<TextBlock Style="{StaticResource RowHint}" Text="성능과 응답 속도에 맞는 Claude 모델을 선택합니다." Margin="0,2,0,10"/>
<WrapPanel x:Name="ClaudeModelChipPanel"/>
</StackPanel>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" MaxWidth="380">
<TextBlock Style="{StaticResource RowLabel}" Text="API 키"/>
<TextBlock Style="{StaticResource RowHint}" Text="Claude API 키"/>
</StackPanel>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="280" FontSize="12" Padding="6,4"
Text="{Binding ClaudeApiKey, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Border>
</StackPanel>
<!-- 연결 테스트 -->
<Border Style="{StaticResource AgentSettingsRow}" Margin="0,6,0,0">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="연결 테스트"/>
<TextBlock Style="{StaticResource RowHint}" Text="활성 서비스에 연결을 테스트합니다."/>
</StackPanel>
<Button x:Name="BtnTestConnection"
HorizontalAlignment="Right" VerticalAlignment="Center"
Content="테스트" Padding="16,6" Cursor="Hand"
Click="BtnTestConnection_Click"/>
</Grid>
</Border>
</StackPanel>
<!-- ── 응답 설정 ── -->
<StackPanel x:Name="AgentCommonRuntimeSection">
<TextBlock Style="{StaticResource SectionHeader}" Text="응답 설정"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="스트리밍 응답"/>
<TextBlock Style="{StaticResource RowHint}" Text="AI 응답이 실시간으로 한 글자씩 표시됩니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding LlmStreaming, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="Temperature"/>
<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">
AI 응답의 창의성을 조절합니다.
<LineBreak/>• 0.0 — 가장 정확하고 일관된 답변 (코딩 추천)
<LineBreak/>• 0.7 — 적당한 균형 (기본값)
<LineBreak/>• 1.0+ — 창의적이지만 부정확할 수 있음
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="낮을수록 정확하고, 높을수록 창의적입니다. (0.0 ~ 2.0)"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider Width="120" Minimum="0" Maximum="2" TickFrequency="0.1"
IsSnapToTickEnabled="True"
Value="{Binding LlmTemperature, Mode=TwoWay}"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding LlmTemperature, StringFormat={}{0:F1}}"
FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}"
Width="32" TextAlignment="Center" VerticalAlignment="Center"
Margin="8,0,0,0"/>
</StackPanel>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="최대 컨텍스트 토큰"/>
<TextBlock Style="{StaticResource RowHint}" Text="한 번의 요청에 포함할 최대 토큰 수."/>
</StackPanel>
<WrapPanel HorizontalAlignment="Right" VerticalAlignment="Center" MaxWidth="360">
<RadioButton x:Name="AgentContextTokens4K"
Content="4K"
GroupName="AgentContextTokens"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,6"
Checked="AgentContextTokensCard_Checked"/>
<RadioButton x:Name="AgentContextTokens16K"
Content="16K"
GroupName="AgentContextTokens"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,6"
Checked="AgentContextTokensCard_Checked"/>
<RadioButton x:Name="AgentContextTokens64K"
Content="64K"
GroupName="AgentContextTokens"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,6"
Checked="AgentContextTokensCard_Checked"/>
<RadioButton x:Name="AgentContextTokens256K"
Content="256K"
GroupName="AgentContextTokens"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,6"
Checked="AgentContextTokensCard_Checked"/>
<RadioButton x:Name="AgentContextTokens1M"
Content="1M"
GroupName="AgentContextTokens"
Style="{StaticResource AgentSubTabStyle}"
Checked="AgentContextTokensCard_Checked"/>
</WrapPanel>
</Grid>
</Border>
<!-- ── 대화 관리 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="대화 관리"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="대화 보관 기간"/>
<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">
설정 기간이 지난 대화는 자동으로 삭제됩니다.
<LineBreak/>대화 파일은 암호화(AES-256-GCM)되어 저장되며
<LineBreak/>해당 PC/사용자만 열람 가능합니다.
<LineBreak/><LineBreak/>무제한(0)으로 설정하면 자동 삭제되지 않습니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="설정 기간이 지난 대화는 자동 삭제됩니다."/>
</StackPanel>
<WrapPanel HorizontalAlignment="Right" VerticalAlignment="Center">
<RadioButton x:Name="AgentRetentionDays7"
Content="7일"
GroupName="AgentRetentionDays"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentRetentionDaysCard_Checked"/>
<RadioButton x:Name="AgentRetentionDays30"
Content="30일"
GroupName="AgentRetentionDays"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentRetentionDaysCard_Checked"/>
<RadioButton x:Name="AgentRetentionDays90"
Content="90일"
GroupName="AgentRetentionDays"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentRetentionDaysCard_Checked"/>
<RadioButton x:Name="AgentRetentionDaysUnlimited"
Content="무제한"
GroupName="AgentRetentionDays"
Style="{StaticResource AgentSubTabStyle}"
Checked="AgentRetentionDaysCard_Checked"/>
</WrapPanel>
</Grid>
</Border>
<!-- ── 접근 차단은 기타 탭에 표시 (런타임 이동) ── -->
<!-- ── 저장 공간 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="저장 공간"/>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock x:Name="StorageSummaryText" Style="{StaticResource RowLabel}" Text="분석 중..."/>
<TextBlock x:Name="StorageDriveText" Style="{StaticResource RowHint}" Text=""/>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal">
<Button Content="새로고침" Click="BtnStorageRefresh_Click"
Background="Transparent" BorderThickness="0"
Foreground="{DynamicResource AccentColor}" FontSize="12" Cursor="Hand" Padding="8,4" Margin="0,0,8,0"/>
<Button Content="저장 공간 줄이기" Click="BtnStorageCleanup_Click"
Background="#DC2626" Foreground="White" FontSize="12"
Padding="14,6" Cursor="Hand" BorderThickness="0">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" CornerRadius="8"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
</StackPanel>
</Grid>
<StackPanel x:Name="StorageDetailPanel" Margin="0,10,0,0"/>
</StackPanel>
</Border>
<StackPanel x:Name="AgentBlockSection">
<TextBlock Style="{StaticResource SectionHeader}" Text="에이전트 접근 차단"/>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowLabel}" Text="차단 경로 패턴"/>
<TextBlock Style="{StaticResource RowHint}" Text="에이전트가 접근할 수 없는 경로입니다. (시스템 보호)" Margin="0,2,0,6"/>
<ItemsControl ItemsSource="{Binding BlockedPaths}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="{DynamicResource ItemBackground}" CornerRadius="4" Padding="8,3" Margin="0,1,0,1">
<TextBlock Text="{Binding}" FontSize="11.5" Foreground="{DynamicResource SecondaryText}"
FontFamily="Consolas, Malgun Gothic"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Border>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowLabel}" Text="차단 확장자"/>
<TextBlock Style="{StaticResource RowHint}" Text="에이전트가 수정할 수 없는 파일 형식입니다." Margin="0,2,0,6"/>
<WrapPanel>
<ItemsControl ItemsSource="{Binding BlockedExtensions}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="{DynamicResource ItemBackground}" CornerRadius="4" Padding="8,3" Margin="0,1,4,1">
<TextBlock Text="{Binding}" FontSize="11.5" Foreground="{DynamicResource SecondaryText}"
FontFamily="Consolas, Malgun Gothic"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</WrapPanel>
</StackPanel>
</Border>
</StackPanel>
<!-- ── 알림 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="알림"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="작업 완료 알림"/>
<TextBlock Style="{StaticResource RowHint}" Text="Cowork/Code 에이전트 작업 완료 시 시스템 트레이 알림을 표시합니다. (기본: 꺼짐)"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding NotifyOnComplete, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="팁 알림 받기"/>
<TextBlock Style="{StaticResource RowHint}" Text="탭 전환 시 유용한 사용 팁을 대화창에 표시합니다. (기본: 꺼짐)"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShowTips, Mode=TwoWay}"/>
</Grid>
</Border>
</StackPanel>
<!-- ── 에이전트 훅 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="에이전트 훅"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="훅 시스템 활성화"/>
<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="340">
AI가 도구(파일 읽기/쓰기, 검색, Git 등)를 실행할 때
<LineBreak/>그 전(Pre) 또는 후(Post)에 사용자가 등록한
<LineBreak/>스크립트를 자동으로 실행하는 확장 기능입니다.
<LineBreak/>
<LineBreak/>■ 동작 흐름
<LineBreak/> AI 판단 → [Pre 훅] → 도구 실행 → [Post 훅] → 다음 단계
<LineBreak/>
<LineBreak/>■ 활용 예시
<LineBreak/>• 파일 수정 후 자동 백업 스크립트 실행
<LineBreak/>• Git 커밋 전 린트/테스트 자동 검사
<LineBreak/>• 모든 도구 호출을 로그 파일에 기록
<LineBreak/>• 특정 도구 실행 시 알림 표시
<LineBreak/>
<LineBreak/>■ 안전 설계
<LineBreak/>• 훅 실패 시에도 AI 작업은 정상 진행됩니다
<LineBreak/>• 타임아웃 초과 시 스크립트가 자동 종료됩니다
<LineBreak/>• 각 훅을 개별적으로 켜고 끌 수 있습니다
<LineBreak/>
<LineBreak/>지원 스크립트: .bat, .cmd, .ps1
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="도구 실행 전/후 사용자 정의 스크립트(.bat/.ps1)를 자동 실행합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
IsChecked="{Binding EnableToolHooks}"
HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="훅 실행 타임아웃"/>
<TextBlock Text="{Binding ToolHookTimeoutMs, StringFormat={}{0:#,0}ms}"
Foreground="{DynamicResource SecondaryText}" FontSize="12" Margin="8,0,0,0" VerticalAlignment="Center"/>
<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="300">
훅 스크립트가 이 시간 내에 완료되지 않으면
<LineBreak/>자동으로 강제 종료됩니다.
<LineBreak/>
<LineBreak/>• 간단한 로깅: 3~5초 권장
<LineBreak/>• 린트/테스트 실행: 10~20초 권장
<LineBreak/>• 타임아웃 시 AI 작업은 정상 진행됩니다
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<Slider Minimum="3000" Maximum="30000" TickFrequency="1000"
IsSnapToTickEnabled="True"
Value="{Binding ToolHookTimeoutMs}"
Margin="0,6,0,0"/>
</StackPanel>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="훅 입력 갱신 허용"/>
<TextBlock Style="{StaticResource RowHint}" Text="Pre 훅이 반환한 updatedInput을 실제 도구 입력으로 반영합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
IsChecked="{Binding EnableHookInputMutation}"
HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="훅 권한 갱신 허용"/>
<TextBlock Style="{StaticResource RowHint}" Text="훅이 반환한 updatedPermissions를 현재 실행 컨텍스트 권한에 적용합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
IsChecked="{Binding EnableHookPermissionUpdate}"
HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="등록된 훅 목록"/>
<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="380">
스크립트에 환경 변수로 도구 실행 정보가 전달됩니다.
<LineBreak/>스크립트 내에서 이 값을 읽어 원하는 작업을 수행하세요.
<LineBreak/>
<LineBreak/>■ 공통 (Pre/Post 모두)
<LineBreak/> AX_TOOL_NAME — 실행된 도구 이름 (예: file_write)
<LineBreak/> AX_TOOL_TIMING — 실행 시점 (pre 또는 post)
<LineBreak/> AX_TOOL_INPUT — 도구에 전달된 입력 (JSON)
<LineBreak/> AX_WORK_FOLDER — 현재 작업 폴더 경로
<LineBreak/>
<LineBreak/>■ Post 전용 (도구 실행 후에만)
<LineBreak/> AX_TOOL_OUTPUT — 도구 실행 결과 텍스트
<LineBreak/> AX_TOOL_SUCCESS — 성공 여부 (true / false)
<LineBreak/>
<LineBreak/>■ 훅 설정 항목
<LineBreak/> • 대상 도구: * (전체) 또는 특정 도구명
<LineBreak/> • 타이밍: Pre (실행 전) / Post (실행 후)
<LineBreak/> • 스크립트: 실행할 .bat/.cmd/.ps1 파일 경로
<LineBreak/>
<LineBreak/>■ 스크립트 예시 (backup.bat)
<LineBreak/> @echo off
<LineBreak/> echo [%date%] %AX_TOOL_NAME% >> log.txt
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<StackPanel x:Name="HookListPanel" Margin="0,8,0,0"/>
<Border Background="{DynamicResource ItemHoverBackground}" CornerRadius="8"
Padding="10,8" Margin="0,6,0,0" Cursor="Hand"
MouseLeftButtonUp="AddHookBtn_Click">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock Text="&#xE710;" FontFamily="Segoe MDL2 Assets" FontSize="12"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center" Margin="0,0,6,0"/>
<TextBlock Text="훅 추가" FontSize="13" Foreground="{DynamicResource AccentColor}"/>
</StackPanel>
</Border>
</StackPanel>
</Border>
<!-- ── 스킬 시스템 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="스킬 시스템"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="스킬 시스템 활성화"/>
<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="320">
마크다운 기반 재사용 워크플로우 시스템입니다.
<LineBreak/>*.skill.md 파일로 스킬을 정의하면 슬래시 명령어(/)로 호출할 수 있습니다.
<LineBreak/>
<LineBreak/>스킬 폴더: %APPDATA%\AxCopilot\skills\
<LineBreak/>예: /daily-standup, /bug-hunt, /code-explain
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="마크다운 기반 재사용 워크플로우. 슬래시 명령어(/)로 호출합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableSkillSystem, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowLabel}" Text="추가 스킬 폴더"/>
<TextBlock Style="{StaticResource RowHint}" Text="외부 스킬 파일(*.skill.md, SKILL.md)을 불러올 추가 폴더를 지정합니다." Margin="0,0,0,6"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Style="{StaticResource ModernTextBox}"
Text="{Binding SkillsFolderPath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center"/>
<Button Grid.Column="1" Content="찾아보기" Margin="8,0,0,0" Padding="12,6" FontSize="12"
x:Name="BtnBrowseSkillFolder" Click="BtnBrowseSkillFolder_Click"
Background="{DynamicResource ItemHoverBackground}" Foreground="{DynamicResource AccentColor}" BorderBrush="{DynamicResource BorderColor}"
Cursor="Hand" FontWeight="SemiBold"/>
<Button Grid.Column="2" Content="열기" Margin="6,0,0,0" Padding="12,6" FontSize="12"
x:Name="BtnOpenSkillFolder" Click="BtnOpenSkillFolder_Click"
Background="#F0FDF4" Foreground="#059669" BorderBrush="#BBF7D0"
Cursor="Hand" FontWeight="SemiBold"/>
</Grid>
</StackPanel>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="슬래시 팝업 표시 개수"/>
<TextBlock Style="{StaticResource RowHint}" Text="/ 입력 시 한 번에 보여줄 명령어 개수입니다. (최소 3 ~ 최대 20)"/>
<TextBlock Style="{StaticResource RowHint}" Text="저장 후 즉시 반영"/>
</StackPanel>
<StackPanel HorizontalAlignment="Right" VerticalAlignment="Center"
Orientation="Horizontal">
<TextBlock Text="{Binding SlashPopupPageSize}"
FontSize="13" FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"
MinWidth="24" TextAlignment="Right"
Margin="0,0,8,0"/>
<Slider Width="140" Minimum="3" Maximum="20" TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding SlashPopupPageSize, Mode=TwoWay}"/>
</StackPanel>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="슬래시 핀 최대 개수"/>
<TextBlock Style="{StaticResource RowHint}" Text="핀 고정 가능한 슬래시 명령어 최대 개수입니다. (최소 1 ~ 최대 30)"/>
<TextBlock Style="{StaticResource RowHint}" Text="저장 후 즉시 반영"/>
</StackPanel>
<StackPanel HorizontalAlignment="Right" VerticalAlignment="Center"
Orientation="Horizontal">
<TextBlock Text="{Binding MaxFavoriteSlashCommands}"
FontSize="13" FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"
MinWidth="24" TextAlignment="Right"
Margin="0,0,8,0"/>
<Slider Width="140" Minimum="1" Maximum="30" TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding MaxFavoriteSlashCommands, Mode=TwoWay}"/>
</StackPanel>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="슬래시 최근 최대 개수"/>
<TextBlock Style="{StaticResource RowHint}" Text="최근 사용(MRU)으로 기억할 슬래시 명령어 최대 개수입니다. (최소 5 ~ 최대 50)"/>
<TextBlock Style="{StaticResource RowHint}" Text="저장 후 즉시 반영"/>
</StackPanel>
<StackPanel HorizontalAlignment="Right" VerticalAlignment="Center"
Orientation="Horizontal">
<TextBlock Text="{Binding MaxRecentSlashCommands}"
FontSize="13" FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"
MinWidth="24" TextAlignment="Right"
Margin="0,0,8,0"/>
<Slider Width="140" Minimum="5" Maximum="50" TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding MaxRecentSlashCommands, Mode=TwoWay}"/>
</StackPanel>
</Grid>
</Border>
<!-- ── 드래그 앤 드롭 AI ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="드래그 앤 드롭 AI"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="AI 액션 팝업 표시"/>
<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="320">
파일을 입력창에 드래그하면 파일 유형에 맞는 AI 액션 메뉴가 표시됩니다.
<LineBreak/>
<LineBreak/>• 코드 파일: 코드 리뷰, 설명, 리팩토<ED8CA9><ED86A0>, 테스트 생성
<LineBreak/>• 문서 파일: 요약, 분석, 번역
<LineBreak/>• 데이터 파일: 분석, 시각<EC8B9C><EAB081>, 변환
<LineBreak/>• 이미지: 설명, UI 리뷰
<LineBreak/>
<LineBreak/>끄면 기존처럼 파일만 첨부합니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="파일 드래그 시 유형별 AI 분석/변환/요약 액션을 제안합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableDragDropAiActions, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="선택 시 자동 전송"/>
<TextBlock Style="{StaticResource RowHint}" Text="AI 액션 선택 시 입력 없이 바로 전송합니다. (기본: 꺼짐)"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding DragDropAutoSend, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── 코드 리뷰 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="코드 리뷰"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="코드 리뷰 도구 활성화"/>
<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="320">
AI가 Git diff, 파일 정적 검사, PR 요약을 수행합니다.
<LineBreak/>
<LineBreak/>• diff_review: 변경사항 분석 (버그, 보안, 성능)
<LineBreak/>• file_review: 파일 품질 검사
<LineBreak/>• pr_summary: PR 설명 자동 생성
<LineBreak/>
<LineBreak/>Cowork/Code 탭에서 에이전트가 자동으로 사용합니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="Git diff 분석, 정적 코드 검사, PR 요약 생성을 지원합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableCodeReview, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── 기타 설정 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="기타"/>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="PDF 내보내기 기본 경로"/>
<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">
대화를 PDF로 내보낼 때 기본 저장 폴더입니다.
<LineBreak/>비어 있으면 바탕화면에 저장됩니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="빈 값이면 바탕화면에 저장됩니다"/>
<TextBox Text="{Binding PdfExportPath, Mode=TwoWay}" FontSize="12"
Padding="6,4" Margin="0,4,0,0"/>
</StackPanel>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="팁 알림 표시 시간"/>
<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">
Cowork/Code 탭 전환 시 표시되는 사용법 팁의 자동 닫힘 시간입니다.
<LineBreak/>0으로 설정하면 직접 닫을 때까지 표시됩니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="사용법 팁 자동 닫힘 시간 (0=수동 닫기)"/>
</StackPanel>
<ComboBox Grid.Column="1"
SelectedValue="{Binding TipDurationSeconds}"
SelectedValuePath="Tag"
Width="100" VerticalAlignment="Center">
<ComboBoxItem Content="수동 닫기" Tag="0"/>
<ComboBoxItem Content="3초" Tag="3"/>
<ComboBoxItem Content="5초 (기본)" Tag="5"/>
<ComboBoxItem Content="10초" Tag="10"/>
<ComboBoxItem Content="15초" Tag="15"/>
<ComboBoxItem Content="30초" Tag="30"/>
</ComboBox>
</Grid>
</Border>
<!-- ── 이미지 입력 (멀티모달) ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="이미지 입력"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="이미지 입력 활성화"/>
<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">
Ctrl+V로 스크린샷을 붙여넣거나 이미지 파일을 첨부하면
<LineBreak/>AI가 이미지를 분석합니다 (Vision API).
<LineBreak/><LineBreak/>지원 형식: PNG, JPG, GIF, BMP, WebP
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="Ctrl+V 스크린샷 붙여넣기 및 이미지 파일 첨부 허용"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
IsChecked="{Binding EnableImageInput}"
HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="최대 이미지 크기"/>
<TextBlock Text="{Binding MaxImageSizeKb, StringFormat={}{0:#,0} KB}"
Foreground="{DynamicResource SecondaryText}" FontSize="12" Margin="8,0,0,0" VerticalAlignment="Center"/>
</StackPanel>
<Slider Minimum="1024" Maximum="10240" TickFrequency="1024"
IsSnapToTickEnabled="True"
Value="{Binding MaxImageSizeKb}"
Margin="0,6,0,0"/>
</StackPanel>
</Border>
<StackPanel Visibility="Collapsed">
<TextBlock Style="{StaticResource SectionHeader}" Text="자동 모델 라우팅"/>
<Border Style="{StaticResource SettingsRow}" Opacity="0.5">
<Grid>
<StackPanel HorizontalAlignment="Left">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="자동 라우팅 활성화"/>
<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">
질문 유형(코딩/번역/분석 등)을 자동 감지하여 최적의 AI 모델로 전환합니다.
<LineBreak/><LineBreak/>현재 사내 서버 미확정으로 비활성 상태입니다.
<LineBreak/>서버 확정 후 개발자가 활성화할 예정입니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="준비 중 — 사내 AI 서버 확정 후 활성화 예정"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
IsChecked="{Binding EnableAutoRouter}"
IsEnabled="False" IsHitTestVisible="False"
HorizontalAlignment="Right" VerticalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}" Opacity="0.5">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="라우팅 확신도 임계값"/>
<TextBlock Text="{Binding AutoRouterConfidence, StringFormat={}{0:P0}}"
Foreground="{DynamicResource SecondaryText}" FontSize="12" Margin="8,0,0,0" VerticalAlignment="Center"/>
</StackPanel>
<Slider Minimum="0.5" Maximum="0.95" TickFrequency="0.05"
IsSnapToTickEnabled="True"
Value="{Binding AutoRouterConfidence}"
IsEnabled="False"
Margin="0,6,0,0"/>
</StackPanel>
</Border>
</StackPanel>
</StackPanel>
</ScrollViewer>
<!-- ══════════════════════════════════════════════════
채팅 탭 (Chat)
══════════════════════════════════════════════════ -->
<ScrollViewer x:Name="AgentPanelChat" Grid.Row="2" Visibility="Collapsed"
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
Padding="0,0,8,0">
<StackPanel>
<TextBlock Style="{StaticResource SectionHeader}" Text="프롬프트 템플릿"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="저장된 템플릿"/>
<TextBlock Style="{StaticResource RowHint}" Text="자주 사용하는 프롬프트를 저장해 빠르게 불러옵니다."/>
</StackPanel>
<Button x:Name="BtnAddTemplate" HorizontalAlignment="Right" VerticalAlignment="Center"
Content="+ 템플릿 추가" Padding="12,6" Cursor="Hand"
Click="BtnAddTemplate_Click"/>
</Grid>
</Border>
<ItemsControl ItemsSource="{Binding PromptTemplates}" Margin="0,2,0,8">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="{DynamicResource ItemBackground}"
CornerRadius="10" Padding="14,10" Margin="0,4,0,0"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<TextBlock Text="{Binding Name}" FontSize="13" FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"/>
<TextBlock Text="{Binding Preview}" FontSize="11"
Foreground="{DynamicResource SecondaryText}"
Margin="0,3,0,0" TextTrimming="CharacterEllipsis"/>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
<Button Content="&#xE70F;" FontFamily="Segoe MDL2 Assets"
FontSize="12" ToolTip="편집" Cursor="Hand"
Background="Transparent" BorderThickness="0"
Foreground="{DynamicResource SecondaryText}"
Padding="6,4" Margin="0,0,4,0"
Tag="{Binding}" Click="BtnEditTemplate_Click"/>
<Button Content="&#xE74D;" FontFamily="Segoe MDL2 Assets"
FontSize="12" ToolTip="삭제" Cursor="Hand"
Background="Transparent" BorderThickness="0"
Foreground="#DD4444" Padding="6,4"
Tag="{Binding}" Click="BtnDeleteTemplate_Click"/>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ScrollViewer>
<!-- ══════════════════════════════════════════════════
코워크 탭 (Cowork)
══════════════════════════════════════════════════ -->
<!-- ══════════════════════════════════════════════════
코워크/코드 공통 탭 (Cowork/Code Shared)
══════════════════════════════════════════════════ -->
<ScrollViewer x:Name="AgentPanelCoworkCode" Grid.Row="2" Visibility="Collapsed"
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
Padding="0,0,8,0">
<StackPanel>
<!-- ── 파일 접근 권한 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="파일 접근 권한"/>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="기본 파일 접근 권한"/>
<TextBlock Style="{StaticResource RowHint}" Text="Cowork/Code 탭 진입 시 자동 적용됩니다. Ask / Plan / Auto / Deny 4단계 권한을 지원합니다."/>
</StackPanel>
<WrapPanel HorizontalAlignment="Right" VerticalAlignment="Center">
<RadioButton x:Name="AgentPermissionCardAsk"
Content="Ask"
GroupName="AgentPermissionCard"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentPermissionCard_Checked"/>
<RadioButton x:Name="AgentPermissionCardPlan"
Content="Plan"
GroupName="AgentPermissionCard"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentPermissionCard_Checked"/>
<RadioButton x:Name="AgentPermissionCardAuto"
Content="Auto"
GroupName="AgentPermissionCard"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentPermissionCard_Checked"/>
<RadioButton x:Name="AgentPermissionCardDeny"
Content="Deny"
GroupName="AgentPermissionCard"
Style="{StaticResource AgentSubTabStyle}"
Checked="AgentPermissionCard_Checked"/>
</WrapPanel>
</Grid>
</Border>
<!-- ── 에이전트 동작 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="에이전트 동작"/>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="최대 반복 횟수"/>
<TextBlock Style="{StaticResource RowHint}" Text="에이전트가 도구를 호출하며 반복할 수 있는 최대 횟수입니다. (1~100)"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider Width="120" Minimum="1" Maximum="100" TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding MaxAgentIterations, Mode=TwoWay}"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding MaxAgentIterations}"
FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}"
Width="32" TextAlignment="Center" VerticalAlignment="Center"
Margin="8,0,0,0"/>
</StackPanel>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}" Visibility="Collapsed">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,180,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="의사결정 수준"/>
<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">
AI가 중요한 작업을 실행하기 전에 사용자 확인을 요청하는 빈도입니다.
<LineBreak/><LineBreak/>• 최소 — 파일 삭제, 외부 명령만 확인
<LineBreak/>• 보통 — + 새 파일 생성, 문서 생성, 빌드/테스트 실행
<LineBreak/>• 상세 — + 모든 파일 수정 시 확인
<LineBreak/><LineBreak/>※ Git 커밋은 수준에 관계없이 항상 확인합니다.
<LineBreak/>Cowork/Code 탭 모두에 적용됩니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="AI가 중요한 작업 전에 사용자 확인을 요청하는 빈도"/>
</StackPanel>
<WrapPanel HorizontalAlignment="Right" VerticalAlignment="Center">
<RadioButton x:Name="AgentDecisionCardMinimal"
Content="최소"
GroupName="AgentDecisionCard"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentDecisionCard_Checked"/>
<RadioButton x:Name="AgentDecisionCardNormal"
Content="보통"
GroupName="AgentDecisionCard"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentDecisionCard_Checked"/>
<RadioButton x:Name="AgentDecisionCardDetailed"
Content="상세"
GroupName="AgentDecisionCard"
Style="{StaticResource AgentSubTabStyle}"
Checked="AgentDecisionCard_Checked"/>
</WrapPanel>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}" Visibility="Collapsed">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,180,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="플랜 모드"/>
<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">
AI가 도구를 실행하기 전에 실행 계획을 먼저 생성합니다.
<LineBreak/><LineBreak/>• Off — 기존 동작 (계획 없이 바로 실행)
<LineBreak/>• Always — 항상 계획 생성 후 승인 대기
<LineBreak/>• Auto — 복잡한 작업 감지 시 자동 계획
<LineBreak/><LineBreak/>계획을 검토·수정·승인한 후 실행됩니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="도구 실행 전 구조화된 실행 계획 생성 및 사용자 승인"/>
</StackPanel>
<WrapPanel HorizontalAlignment="Right" VerticalAlignment="Center">
<RadioButton x:Name="AgentPlanModeCardOff"
Content="Off"
GroupName="AgentPlanModeCard"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentPlanModeCard_Checked"/>
<RadioButton x:Name="AgentPlanModeCardAlways"
Content="Always"
GroupName="AgentPlanModeCard"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentPlanModeCard_Checked"/>
<RadioButton x:Name="AgentPlanModeCardAuto"
Content="Auto"
GroupName="AgentPlanModeCard"
Style="{StaticResource AgentSubTabStyle}"
Checked="AgentPlanModeCard_Checked"/>
</WrapPanel>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="사전 컨텍스트 압축"/>
<TextBlock Style="{StaticResource RowHint}" Text="토큰 한도 전에 이전 대화를 요약/정리해 컨텍스트를 안정적으로 유지합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableProactiveContextCompact, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="압축 시작 임계치"/>
<TextBlock Style="{StaticResource RowHint}" Text="최대 컨텍스트 토큰 대비 사용률이 이 값에 도달하면 사전 압축을 수행합니다."/>
</StackPanel>
<StackPanel HorizontalAlignment="Right" VerticalAlignment="Center" Orientation="Horizontal">
<TextBlock Text="{Binding ContextCompactTriggerPercent, StringFormat={}{0}%}"
FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center" MinWidth="42" TextAlignment="Right" Margin="0,0,8,0"/>
<Slider Width="140" Minimum="50" Maximum="95" TickFrequency="5"
IsSnapToTickEnabled="True"
Value="{Binding ContextCompactTriggerPercent, Mode=TwoWay}"/>
</StackPanel>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="Fork 스킬 위임 강제"/>
<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">
context=fork 스킬 실행 시 위임 우선 정책을 강제합니다.
<LineBreak/><LineBreak/>• 켬(권장): spawn_agent 우선으로 재계획 유도
<LineBreak/>• 끔: 정책 힌트만 적용, 일반 도구 실행 허용
<LineBreak/><LineBreak/>Cowork/Code 탭 공통 적용.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="context=fork 스킬의 위임 우선 실행 정책을 강제합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right"
IsChecked="{Binding EnableForkSkillDelegationEnforcement, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── 프로젝트 규칙 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="프로젝트 규칙"/>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="프로젝트 규칙 자동 주입"/>
<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">
작업 폴더의 .ax/rules/ 디렉토리에 있는 규칙 파일을
<LineBreak/>AI 시스템 프롬프트에 자동으로 포함합니다.
<LineBreak/><LineBreak/>규칙 파일 형식 (마크다운 + YAML 프론트매터):
<LineBreak/>---
<LineBreak/>name: 코딩 컨벤션
<LineBreak/>applies-to: "*.cs"
<LineBreak/>when: always
<LineBreak/>---
<LineBreak/>규칙 내용...
<LineBreak/><LineBreak/>비활성화해도 project_rules 도구로 수동 조회는 가능합니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text=".ax/rules/*.md 규칙을 시스템 프롬프트에 자동 포함"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right"
IsChecked="{Binding EnableProjectRules}"/>
</Grid>
</Border>
<!-- ── 에이전트 메모리 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="에이전트 메모리"/>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="에이전트 메모리 활성화"/>
<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">
AI가 대화에서 학습한 프로젝트 규칙, 사용자 선호도,
<LineBreak/>사실 정보를 저장하고 다음 대화에서 활용합니다.
<LineBreak/><LineBreak/>• 작업 폴더별로 별도 메모리 관리
<LineBreak/>• 전역 메모리는 모든 폴더에 적용
<LineBreak/>• 암호화되어 안전하게 저장
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="프로젝트 규칙과 사용자 선호도를 학습하여 대화 간 지속적으로 활용합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableAgentMemory, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="최대 메모리 항목 수"/>
<TextBlock Style="{StaticResource RowHint}" Text="폴더당 저장할 수 있는 최대 메모리 항목 수입니다. (20~200)"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider Width="120" Minimum="20" Maximum="200" TickFrequency="10"
IsSnapToTickEnabled="True"
Value="{Binding MaxMemoryEntries, Mode=TwoWay}"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding MaxMemoryEntries}"
FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}"
Width="32" TextAlignment="Center" VerticalAlignment="Center"
Margin="8,0,0,0"/>
</StackPanel>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="메모리 관리"/>
<TextBlock Style="{StaticResource RowHint}" Text="현재 작업 폴더의 메모리를 확인하거나 초기화합니다."/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Button Content="메모리 초기화" Click="BtnClearMemory_Click"
Background="#DC2626" Foreground="White" FontSize="12"
Padding="14,6" Cursor="Hand" BorderThickness="0" Margin="8,0,0,0">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" CornerRadius="8"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
</StackPanel>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
<!-- ══════════════════════════════════════════════════
코워크 탭 (Cowork) — 코워크 전용 설정
══════════════════════════════════════════════════ -->
<ScrollViewer x:Name="AgentPanelCowork" Grid.Row="2" Visibility="Collapsed"
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
Padding="0,0,8,0">
<StackPanel>
<!-- ── 출력 형식 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="출력 형식"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="기본 출력 형식"/>
<TextBlock Style="{StaticResource RowHint}" Text="AI가 파일을 생성할 때 사용할 기본 형식입니다. Auto는 AI가 자동 선택합니다."/>
</StackPanel>
<ComboBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="160" SelectedValue="{Binding DefaultOutputFormat, Mode=TwoWay}"
SelectedValuePath="Tag">
<ComboBoxItem Content="Auto (AI 선택)" Tag="auto"/>
<ComboBoxItem Content="Excel (.xlsx)" Tag="xlsx"/>
<ComboBoxItem Content="Word (.docx)" Tag="docx"/>
<ComboBoxItem Content="HTML" Tag="html"/>
<ComboBoxItem Content="Markdown (.md)" Tag="md"/>
<ComboBoxItem Content="CSV" Tag="csv"/>
</ComboBox>
</Grid>
</Border>
<!-- ── 미리보기 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="미리보기"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="문서 미리보기"/>
<TextBlock Style="{StaticResource RowHint}" Text="파일 생성 시 오른쪽 패널에 미리보기를 표시합니다."/>
</StackPanel>
<ComboBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="160" SelectedValue="{Binding AutoPreview, Mode=TwoWay}"
SelectedValuePath="Tag">
<ComboBoxItem Content="Auto (자동 표시)" Tag="auto"/>
<ComboBoxItem Content="Manual (수동)" Tag="manual"/>
<ComboBoxItem Content="Off (비활성화)" Tag="off"/>
</ComboBox>
</Grid>
</Border>
<!-- ── 작업 폴더 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="작업 폴더"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="최근 폴더 최대 표시 수"/>
<TextBlock Style="{StaticResource RowHint}" Text="코워크 폴더 선택 메뉴에 표시할 최근 폴더 최대 개수입니다. (3~30)"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider Width="120" Minimum="3" Maximum="30" TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding MaxRecentFolders, Mode=TwoWay}"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding MaxRecentFolders}"
FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}"
Width="28" TextAlignment="Center" VerticalAlignment="Center"
Margin="8,0,0,0"/>
</StackPanel>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="기본 디자인 무드"/>
<TextBlock Style="{StaticResource RowHint}" Text="HTML 보고서의 기본 디자인 테마입니다."/>
</StackPanel>
<ComboBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="180" SelectedValue="{Binding DefaultMood, Mode=TwoWay}"
SelectedValuePath="Tag">
<ComboBoxItem Content="🔷 모던" Tag="modern"/>
<ComboBoxItem Content="📊 전문가" Tag="professional"/>
<ComboBoxItem Content="🎨 아이디어" Tag="creative"/>
<ComboBoxItem Content="◻️ 미니멀" Tag="minimal"/>
<ComboBoxItem Content="✨ 우아한" Tag="elegant"/>
<ComboBoxItem Content="🌙 다크 모드" Tag="dark"/>
<ComboBoxItem Content="🌈 컬러풀" Tag="colorful"/>
<ComboBoxItem Content="🏢 기업 공식" Tag="corporate"/>
<ComboBoxItem Content="📰 매거진" Tag="magazine"/>
<ComboBoxItem Content="📈 대시보드" Tag="dashboard"/>
</ComboBox>
</Grid>
</Border>
<TextBlock Style="{StaticResource SectionHeader}" Text="고품질 문서"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="고품질 문서 생성"/>
<TextBlock Style="{StaticResource RowHint}" Text="긴 문서를 개요→섹션별 상세→조립 방식으로 작성합니다. AI 호출이 많아질 수 있습니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableMultiPassDocument, Mode=TwoWay}"/>
</Grid>
</Border>
<TextBlock Style="{StaticResource SectionHeader}" Text="폴더 데이터 활용"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="기본 데이터 활용 수준"/>
<TextBlock Style="{StaticResource RowHint}" Text="작업 폴더 내 문서/데이터를 보고서 작성에 활용하는 수준입니다."/>
</StackPanel>
<ComboBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="180" SelectedValue="{Binding FolderDataUsage, Mode=TwoWay}"
SelectedValuePath="Tag">
<ComboBoxItem Content="활용하지 않음" Tag="none"/>
<ComboBoxItem Content="소극 활용 (요청 시)" Tag="passive"/>
<ComboBoxItem Content="적극 활용 (자동 탐색)" Tag="active"/>
</ComboBox>
</Grid>
</Border>
<!-- ── 품질 검증 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="품질 검증"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="문서 생성 후 검증 강제"/>
<TextBlock Style="{StaticResource RowHint}" Text="문서 생성 도구 실행 후 AI가 결과물을 자동으로 읽고 검증합니다. AI 호출이 추가됩니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableCoworkVerification, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="파일 경로 파란색 강조"/>
<TextBlock Style="{StaticResource RowHint}" Text="채팅에서 워크스페이스 내 파일/폴더 경로를 파란색으로 표시합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableFilePathHighlight, Mode=TwoWay}"/>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
<!-- ══════════════════════════════════════════════════
코드 탭 (Code)
══════════════════════════════════════════════════ -->
<ScrollViewer x:Name="AgentPanelCode" Grid.Row="2" Visibility="Collapsed"
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
Padding="0,0,8,0">
<StackPanel>
<!-- ── 패키지 저장소 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="패키지 저장소"/>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowLabel}" Text="사내 Nexus URL"/>
<TextBlock Style="{StaticResource RowHint}" Text="사내 Nexus 저장소 기본 URL. 빈값이면 공용 저장소 사용."/>
<TextBox Text="{Binding Code.NexusBaseUrl, Mode=TwoWay}" FontSize="12"
Padding="6,4" Margin="0,4,0,0"/>
</StackPanel>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="NuGet (.NET)"/>
<TextBlock Style="{StaticResource RowHint}" Text="기본: api.nuget.org"/>
</StackPanel>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="280" FontSize="11" Padding="4,3"
Text="{Binding Code.NugetSource, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="PyPI/Conda (Python)"/>
<TextBlock Style="{StaticResource RowHint}" Text="기본: conda.anaconda.org/conda-forge"/>
</StackPanel>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="280" FontSize="11" Padding="4,3"
Text="{Binding Code.PypiSource, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="Maven (Java)"/>
<TextBlock Style="{StaticResource RowHint}" Text="기본: repo1.maven.org/maven2"/>
</StackPanel>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="280" FontSize="11" Padding="4,3"
Text="{Binding Code.MavenSource, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="npm (JavaScript)"/>
<TextBlock Style="{StaticResource RowHint}" Text="기본: registry.npmjs.org"/>
</StackPanel>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="280" FontSize="11" Padding="4,3"
Text="{Binding Code.NpmSource, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── IDE 설정 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="IDE"/>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<TextBlock Style="{StaticResource RowLabel}" Text="선호 IDE 경로"/>
<TextBlock Style="{StaticResource RowHint}" Text="빈값이면 자동 감지 (VS Code, Visual Studio 등)"/>
<TextBox Text="{Binding Code.PreferredIdePath, Mode=TwoWay}" FontSize="12"
Padding="6,4" Margin="0,4,0,0"/>
</StackPanel>
</Border>
<!-- ── 빌드 설정 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="빌드 설정"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="빌드 타임아웃 (초)"/>
<TextBlock Style="{StaticResource RowHint}" Text="빌드/테스트 명령의 최대 실행 시간입니다. (30~300)"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider Width="120" Minimum="30" Maximum="300" TickFrequency="10"
IsSnapToTickEnabled="True"
Value="{Binding Code.BuildTimeout, Mode=TwoWay}"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding Code.BuildTimeout}"
FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}"
Width="36" TextAlignment="Center" VerticalAlignment="Center"
Margin="8,0,0,0"/>
</StackPanel>
</Grid>
</Border>
<!-- ── 코드 품질 검증 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="코드 품질 검증"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="코드 생성 후 검증 강제"/>
<TextBlock Style="{StaticResource RowHint}" Text="코드 생성/수정 도구 실행 후 AI가 구문 오류, 참조 무결성을 자동 검증합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding Code.EnableCodeVerification, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── Agentic 도구 설정 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="Agentic 도구"/>
<Border Style="{StaticResource SettingsRow}" Visibility="Collapsed">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="Plan Mode 도구"/>
<TextBlock Style="{StaticResource RowHint}" Text="EnterPlanMode/ExitPlanMode 도구를 사용할지 설정합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding Code.EnablePlanModeTools, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="Worktree 도구"/>
<TextBlock Style="{StaticResource RowHint}" Text="EnterWorktree/ExitWorktree 도구를 사용할지 설정합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding Code.EnableWorktreeTools, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="Team 도구"/>
<TextBlock Style="{StaticResource RowHint}" Text="TeamCreate/TeamDelete 도구를 사용할지 설정합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding Code.EnableTeamTools, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="Cron 도구"/>
<TextBlock Style="{StaticResource RowHint}" Text="CronCreate/CronList/CronDelete 도구를 사용할지 설정합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding Code.EnableCronTools, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── 코드 인텔리전스 (v1.4.0) ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="코드 인텔리전스"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="LSP 코드 분석"/>
<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">
Language Server Protocol을 사용하여 AI가 코드를 더 정확하게 이해합니다.
<LineBreak/>• 심볼 정의 위치 찾기 (Goto Definition)
<LineBreak/>• 심볼이 사용된 모든 위치 검색 (Find References)
<LineBreak/>• 파일 내 클래스/메서드/필드 목록 조회
<LineBreak/><LineBreak/>지원 언어: C#, TypeScript, Python, C++, Java
<LineBreak/>해당 언어 서버가 PC에 설치되어 있어야 동작합니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="언어 서버로 정의 이동, 참조 검색 등 코드 분석을 지원합니다"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding Code.EnableLsp, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="코드 시맨틱 검색"/>
<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">
프로젝트 파일을 자동으로 분석하여, 자연어 질문으로 관련 코드를 찾습니다.
<LineBreak/>예: "사용자 인증 로직", "DB 연결 설정"
<LineBreak/><LineBreak/>작업 폴더 변경 시 자동으로 재인덱싱됩니다.
<LineBreak/>큰 프로젝트에서는 인덱싱에 시간이 걸릴 수 있습니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="자연어 질문으로 관련 코드를 자동 검색합니다"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding Code.EnableCodeIndex, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="140"/>
<ColumnDefinition Width="40"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="인덱싱 최대 파일 크기"/>
<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">
코드 시맨틱 검색 시 이 크기(KB)를 초과하는 파일은 인덱싱하지 않습니다.
<LineBreak/>큰 파일(빌드 산출물, 데이터 파일)을 제외하여 성능을 보호합니다.
<LineBreak/>일반적으로 500KB가 적정합니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="이 크기를 초과하는 파일은 인덱싱하지 않습니다 (KB)"/>
</StackPanel>
<Slider Grid.Column="1" Minimum="100" Maximum="2000"
Value="{Binding Code.CodeIndexMaxFileKb, Mode=TwoWay}"
TickFrequency="100" IsSnapToTickEnabled="True"
VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="{Binding Code.CodeIndexMaxFileKb}"
FontFamily="Consolas" FontSize="12" Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="diff 자동 표시"/>
<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">
AI가 파일을 수정하면 변경 전/후를 색상으로 구분하여 보여줍니다.
<LineBreak/>추가된 줄(녹색), 삭제된 줄(빨강)을 한눈에 확인하고
<LineBreak/>적용/취소 버튼으로 변경을 승인하거나 되돌릴 수 있습니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="파일 수정 시 변경 전/후 비교를 자동으로 표시합니다"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding Code.EnableAutoDiff, Mode=TwoWay}"/>
</Grid>
</Border>
</StackPanel>
</ScrollViewer>
<!-- ══════════════════════════════════════════════════
개발자 탭 (Developer)
══════════════════════════════════════════════════ -->
<ScrollViewer x:Name="AgentPanelDev" Grid.Row="2" Visibility="Collapsed"
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
Padding="0,0,8,0">
<StackPanel>
<!-- ── 개발자 모드 활성화 (마스터 토글) ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="개발자 모드"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="개발자 모드 활성화"/>
<TextBlock Style="{StaticResource RowHint}" Text="활성화하면 아래에 고급 설정이 표시됩니다. (비밀번호 필요)"/>
</StackPanel>
<CheckBox x:Name="DevModeCheckBox" Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding DevMode, Mode=TwoWay}"
Checked="DevModeCheckBox_Checked"
Unchecked="DevModeCheckBox_Unchecked"/>
</Grid>
</Border>
<!-- ── 개발자 모드 활성화 시에만 보이는 영역 ── -->
<StackPanel x:Name="DevModeContent" Visibility="Collapsed">
<TextBlock Style="{StaticResource SectionHeader}" Text="자동 모델 라우팅"/>
<Border Style="{StaticResource SettingsRow}" Opacity="0.5">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="자동 라우팅 활성화"/>
<TextBlock Style="{StaticResource RowHint}" Text="질문 유형을 감지해 적절한 모델로 전환하는 준비 중 기능입니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}"
HorizontalAlignment="Right"
VerticalAlignment="Center"
IsChecked="{Binding EnableAutoRouter}"
IsEnabled="False"
IsHitTestVisible="False"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}" Opacity="0.5">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="라우팅 확신도 임계값"/>
<TextBlock Style="{StaticResource RowHint}" Text="확신도가 이 값 이상일 때만 자동 라우팅을 적용합니다. 현재는 확인용 표시입니다."/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider Width="120"
Minimum="0.5"
Maximum="0.95"
TickFrequency="0.05"
IsSnapToTickEnabled="True"
Value="{Binding AutoRouterConfidence}"
IsEnabled="False"/>
<TextBlock Text="{Binding AutoRouterConfidence, StringFormat={}{0:P0}}"
FontSize="12"
Foreground="{DynamicResource SecondaryText}"
Width="40"
TextAlignment="Right"
VerticalAlignment="Center"
Margin="8,0,0,0"/>
</StackPanel>
</Grid>
</Border>
<!-- ── 에이전트 상세 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="에이전트 상세"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="스텝 바이 스텝 승인"/>
<TextBlock Style="{StaticResource RowHint}" Text="각 도구 실행 전 사용자 승인을 받아야 다음 단계로 진행합니다. 성능 검증 및 디버깅 용도."/>
</StackPanel>
<CheckBox x:Name="StepApprovalCheckBox" Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding DevModeStepApproval, Mode=TwoWay}"
Checked="StepApprovalCheckBox_Checked"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="워크플로우 시각화"/>
<TextBlock Style="{StaticResource RowHint}" Text="에이전트 실행 시 별도 창에서 실행 흐름을 실시간으로 시각화합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding WorkflowVisualizer, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource AgentSettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="실행 이력 상세도"/>
<TextBlock Style="{StaticResource RowHint}" Text="에이전트 실행 이력(도구 호출/결과)의 채팅창 표시 수준입니다."/>
</StackPanel>
<WrapPanel HorizontalAlignment="Right" VerticalAlignment="Center">
<RadioButton x:Name="AgentLogLevelSimple"
Content="간략"
GroupName="AgentLogLevel"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentLogLevelCard_Checked"/>
<RadioButton x:Name="AgentLogLevelDetailed"
Content="상세"
GroupName="AgentLogLevel"
Style="{StaticResource AgentSubTabStyle}"
Margin="0,0,6,0"
Checked="AgentLogLevelCard_Checked"/>
<RadioButton x:Name="AgentLogLevelDebug"
Content="디버그"
GroupName="AgentLogLevel"
Style="{StaticResource AgentSubTabStyle}"
Checked="AgentLogLevelCard_Checked"/>
</WrapPanel>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="계획 diff 심각도(개수 기준)"/>
<TextBlock Style="{StaticResource RowHint}" Text="중간/대폭 배지를 변경 개수 기준으로 판단합니다."/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<TextBlock Text="중간" Style="{StaticResource RowHint}" VerticalAlignment="Center" Margin="0,0,4,0"/>
<TextBox Width="44" Margin="0,0,8,0" TextAlignment="Center"
Text="{Binding PlanDiffSeverityMediumCount, Mode=TwoWay}"
Style="{StaticResource ModernTextBox}"/>
<TextBlock Text="대폭" Style="{StaticResource RowHint}" VerticalAlignment="Center" Margin="0,0,4,0"/>
<TextBox Width="44" TextAlignment="Center"
Text="{Binding PlanDiffSeverityHighCount, Mode=TwoWay}"
Style="{StaticResource ModernTextBox}"/>
</StackPanel>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="계획 diff 심각도(비율 기준, %)"/>
<TextBlock Style="{StaticResource RowHint}" Text="중간/대폭 배지를 변경 비율 기준으로 판단합니다."/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<TextBlock Text="중간" Style="{StaticResource RowHint}" VerticalAlignment="Center" Margin="0,0,4,0"/>
<TextBox Width="44" Margin="0,0,8,0" TextAlignment="Center"
Text="{Binding PlanDiffSeverityMediumRatioPercent, Mode=TwoWay}"
Style="{StaticResource ModernTextBox}"/>
<TextBlock Text="대폭" Style="{StaticResource RowHint}" VerticalAlignment="Center" Margin="0,0,4,0"/>
<TextBox Width="44" TextAlignment="Center"
Text="{Binding PlanDiffSeverityHighRatioPercent, Mode=TwoWay}"
Style="{StaticResource ModernTextBox}"/>
</StackPanel>
</Grid>
</Border>
<!-- ── 호출 제한 및 통계 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="호출 제한 및 통계"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="무료 티어 호출 제한"/>
<TextBlock Style="{StaticResource RowHint}" Text="Gemini 무료 등 RPM 제한이 있는 서비스 사용 시 LLM 호출 간 딜레이를 자동 추가합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding FreeTierMode, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="호출 간 딜레이 (초)"/>
<TextBlock Style="{StaticResource RowHint}" Text="무료 티어 모드에서 LLM 호출 사이에 대기할 시간. Gemini 무료는 15 RPM → 4초 권장."/>
</StackPanel>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Center"
Width="60" TextAlignment="Center"
Text="{Binding FreeTierDelaySeconds, Mode=TwoWay}"
Style="{StaticResource ModernTextBox}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="전체 호출·토큰 합계 표시"/>
<TextBlock Style="{StaticResource RowHint}" Text="활성화하면 에이전트 완료 시 전체 LLM 호출 횟수와 누적 토큰량을 별도 색상으로 표시합니다."/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding ShowTotalCallStats, Mode=TwoWay}"/>
</Grid>
</Border>
<!-- ── 보안 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="보안"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="감사 로그"/>
<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">
AI가 파일 읽기/쓰기, 명령 실행 등 도구를 사용한 이력을 날짜별 JSON 파일로 기록합니다.
<LineBreak/>30일이 지난 로그는 자동 삭제됩니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="에이전트 도구 호출 이력을 로컬에 기록합니다. 보안 감사 및 디버깅 용도. (기본: 켜짐)"/>
</StackPanel>
<CheckBox Style="{StaticResource ToggleSwitch}" HorizontalAlignment="Right" VerticalAlignment="Center"
IsChecked="{Binding EnableAuditLog, Mode=TwoWay}"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left" Margin="0,0,60,0">
<TextBlock Style="{StaticResource RowLabel}" Text="감사 로그 보기"/>
<TextBlock Style="{StaticResource RowHint}" Text="에이전트 도구 호출 이력이 저장된 폴더를 엽니다."/>
</StackPanel>
<Button HorizontalAlignment="Right" VerticalAlignment="Center"
Click="BtnOpenAuditLog_Click" Padding="12,6" Cursor="Hand"
Background="Transparent" BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1" Foreground="{DynamicResource PrimaryText}">
<TextBlock Text="폴더 열기" FontSize="12"/>
</Button>
</Grid>
</Border>
<!-- ── 에이전트 고급 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="에이전트 고급"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="30"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="서브에이전트 최대 수"/>
<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">
AI가 큰 작업을 여러 개의 작은 작업으로 나누어 동시에 실행할 수 있습니다.
<LineBreak/>이 값은 동시에 실행할 수 있는 최대 작업 수를 제한합니다.
<LineBreak/><LineBreak/>값이 클수록 빠르지만 CPU/메모리 사용량이 증가합니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="동시 실행 제한 (CPU/메모리 보호)"/>
</StackPanel>
<Slider Grid.Column="1" Minimum="1" Maximum="10"
Value="{Binding MaxSubAgents, Mode=TwoWay}"
TickFrequency="1" IsSnapToTickEnabled="True"
VerticalAlignment="Center"/>
<TextBlock Grid.Column="2" Text="{Binding MaxSubAgents}"
FontFamily="Consolas" FontSize="13" FontWeight="SemiBold"
Foreground="{DynamicResource AccentColor}" VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Grid>
</Border>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBlock Style="{StaticResource RowLabel}" Text="오류 재시도 횟수"/>
<TextBlock Style="{StaticResource RowHint}" Text="도구 실행 실패 시 자동 복구를 위해 재시도할 최대 횟수입니다. (0~10)"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Slider Width="100" Minimum="0" Maximum="10" TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding MaxRetryOnError, Mode=TwoWay}"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding MaxRetryOnError}"
FontSize="13" FontWeight="SemiBold" Foreground="{DynamicResource AccentColor}"
Width="24" TextAlignment="Center" VerticalAlignment="Center"
Margin="8,0,0,0"/>
</StackPanel>
</Grid>
</Border>
<!-- ── 모델 폴백 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="모델 폴백"/>
<Border Style="{StaticResource SettingsRow}">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="폴백 모델 목록"/>
<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">
현재 사용 중인 AI 모델이 응답하지 않을 때, 여기서 선택한 모델을 순서대로 시도합니다.
<LineBreak/><LineBreak/>여러 모델을 켜두면 안정성이 높아집니다.
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="API 실패 시 순차 시도할 모델을 선택하세요."/>
<StackPanel x:Name="FallbackModelsPanel" Margin="0,8,0,0"/>
<TextBox x:Name="FallbackModelsBox" Visibility="Collapsed"/>
</StackPanel>
</Border>
<!-- ── MCP 서버 ── -->
<TextBlock Style="{StaticResource SectionHeader}" Text="MCP 서버"/>
<Border Style="{StaticResource SettingsRow}">
<Grid>
<StackPanel HorizontalAlignment="Left">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource RowLabel}" Text="MCP 서버 관리"/>
<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">
외부 도구 서버를 연결하여 AI가 다양한 작업을 수행할 수 있게 합니다.
<LineBreak/>예: DB 조회, Jira 이슈 관리, Slack 메시지 등
</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<TextBlock Style="{StaticResource RowHint}" Text="외부 MCP 서버를 등록하면 에이전트가 해당 도구를 사용할 수 있습니다."/>
</StackPanel>
<Button HorizontalAlignment="Right" VerticalAlignment="Center"
Content="+ 서버 추가" Padding="12,6" Cursor="Hand"
Click="BtnAddMcpServer_Click"/>
</Grid>
</Border>
<StackPanel x:Name="McpServerListPanel" Margin="0,2,0,8"/>
<Border Style="{StaticResource SettingsRow}" Margin="0,0,0,0">
<Expander Header="JSON 편집 (고급)" FontSize="12" Foreground="{DynamicResource SecondaryText}">
<StackPanel Margin="0,8,0,0">
<TextBox x:Name="McpServersBox" FontSize="11.5" Padding="8,6"
FontFamily="Consolas, Malgun Gothic"
AcceptsReturn="True" TextWrapping="Wrap" MinHeight="60" MaxHeight="140"
VerticalScrollBarVisibility="Auto"
Foreground="{DynamicResource PrimaryText}"
Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"/>
</StackPanel>
</Expander>
</Border>
</StackPanel>
</StackPanel>
</ScrollViewer>
<!-- ═══ 기타 서브탭 (차단 경로/확장자 — 공통에서 런타임 이동) ═══ -->
<ScrollViewer x:Name="AgentPanelEtc" Grid.Row="2" Visibility="Collapsed"
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
Padding="0,0,8,0">
<StackPanel x:Name="AgentEtcContent"/>
</ScrollViewer>
<!-- ═══ 도구 관리 서브탭 ═══ -->
<ScrollViewer x:Name="AgentPanelTools" Grid.Row="2" Visibility="Collapsed"
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled"
Padding="0,0,8,0">
<StackPanel>
<TextBlock Style="{StaticResource SectionHeader}" Text="에이전트 도구 관리"/>
<TextBlock FontSize="12" Foreground="{DynamicResource SecondaryText}" Margin="0,0,0,12"
TextWrapping="Wrap"
Text="AI에 노출할 도구를 선택합니다. 비활성화된 도구는 LLM에 전달되지 않습니다."/>
<StackPanel x:Name="ToolCardsPanel"/>
<TextBlock Style="{StaticResource SectionHeader}" Text="MCP 서버" Margin="0,16,0,0"/>
<TextBlock FontSize="12" Foreground="{DynamicResource SecondaryText}" Margin="0,0,0,12"
TextWrapping="Wrap"
Text="연결된 외부 도구 서버의 상태를 확인합니다."/>
<StackPanel x:Name="McpStatusPanel"/>
</StackPanel>
</ScrollViewer>
</Grid>
</TabItem>
</TabControl>
<!-- ═════════════════════════════════════════════════════════════════ -->
<!-- 하단 버튼 바 -->
<!-- ═════════════════════════════════════════════════════════════════ -->
<Border Grid.Row="1" Background="White"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="0,1,0,0"
Padding="20,12">
<Grid>
<!-- 버전 + 내보내기/불러오기 -->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
<TextBlock Text="&#xE700;" FontFamily="Segoe MDL2 Assets" FontSize="11"
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center" Margin="0,0,6,0"/>
<!-- 버전 텍스트: AxCopilot.csproj <Version> 태그에서 자동으로 읽어옵니다.
버전을 변경할 때는 반드시 AxCopilot.csproj → <Version> 값만 수정하세요.
이 TextBlock의 Text는 SettingsWindow.xaml.cs → SetVersionText()에서 설정됩니다. -->
<TextBlock x:Name="VersionInfoText"
FontSize="11" Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"
Margin="0,0,16,0"/>
<Button Content="내보내기" Style="{StaticResource SecondaryButton}"
Click="ExportSettings_Click" Margin="0,0,4,0"
FontSize="10" Padding="8,3"/>
<Button Content="불러오기" Style="{StaticResource SecondaryButton}"
Click="ImportSettings_Click"
FontSize="10" Padding="8,3"/>
</StackPanel>
<!-- 저장 / 취소 -->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button Content="취소" Style="{StaticResource SecondaryButton}"
Margin="0,0,8,0" Click="Cancel_Click"/>
<Button Style="{StaticResource PrimaryButton}" Click="Save_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE74E;" FontFamily="Segoe MDL2 Assets"
FontSize="13" Margin="0,0,6,0" VerticalAlignment="Center"/>
<TextBlock Text="저장" VerticalAlignment="Center"/>
</StackPanel>
</Button>
</StackPanel>
</Grid>
</Border>
</Grid>
</Window>