에이전트 선택적 탐색 구조 개선과 경고 정리 반영
Some checks failed
Release Gate / gate (push) Has been cancelled

- claude-code 선택적 탐색 흐름을 참고해 Cowork/Code 시스템 프롬프트에서 folder_map 상시 선행 지시를 완화하고 glob/grep 기반 좁은 탐색을 우선하도록 조정함

- FolderMapTool 기본 depth를 2로, include_files 기본값을 false로 낮추고 MultiReadTool 최대 파일 수를 8개로 줄여 초기 과탐색 폭을 보수적으로 조정함

- AgentLoopExplorationPolicy partial을 추가해 탐색 범위 분류, broad-scan corrective hint, exploration_breadth 성능 로그를 연결함

- AgentLoopService에 탐색 범위 가이드 주입과 실행 중 탐색 폭 추적을 추가하고, 좁은 질문에서 반복적인 folder_map/대량 multi_read를 교정하도록 정리함

- DocxToHtmlConverter nullable 경고를 수정해 Release 빌드 경고 0 / 오류 0 기준을 다시 충족함

- README와 docs/DEVELOPMENT.md에 2026-04-09 10:36 (KST) 기준 개발 이력을 반영함
This commit is contained in:
2026-04-09 14:27:59 +09:00
parent 7931566212
commit 33c1db4dae
119 changed files with 4453 additions and 6943 deletions

View File

@@ -1053,19 +1053,37 @@
</Button>
</WrapPanel>
</StackPanel>
<!-- 우: 프리뷰 토글 버튼 -->
<!-- 우: 미리보기 Split Button (Claude Desktop 스타일) -->
<StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center">
<Button x:Name="BtnPreviewToggle" Style="{StaticResource GhostBtn}"
Click="BtnPreviewToggle_Click" ToolTip="미리보기 패널"
Padding="5,2.5" MinWidth="0">
<Border CornerRadius="6" Background="Transparent">
<StackPanel Orientation="Horizontal">
<Ellipse x:Name="PreviewDot" Width="5" Height="5" Fill="Gray"
Margin="0,0,4,0" VerticalAlignment="Center"/>
<TextBlock Text="프리뷰" FontSize="10.5"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<!-- 좌: 패널 토글 영역 -->
<Border x:Name="PreviewToggleArea" CornerRadius="6,0,0,6"
Background="Transparent" Padding="5,2.5,3,2.5"
Cursor="Hand" ToolTip="미리보기 패널 열기/닫기"
MouseLeftButtonUp="PreviewToggleArea_Click">
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="PreviewIcon" Text="&#xE768;"
FontFamily="Segoe MDL2 Assets" FontSize="10"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center" Margin="0,0,4,0"/>
<TextBlock Text="미리보기" FontSize="10.5"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
</StackPanel>
</Border>
<!-- 우: 셰브론 드롭다운 영역 -->
<Border x:Name="PreviewChevronArea" CornerRadius="0,6,6,0"
Background="Transparent" Padding="3,2.5,5,2.5"
Cursor="Hand" ToolTip="열린 미리보기 목록"
IsHitTestVisible="False" Opacity="0.35"
MouseLeftButtonUp="PreviewChevron_Click">
<TextBlock Text="&#xE70D;" FontFamily="Segoe MDL2 Assets" FontSize="8"
Foreground="{DynamicResource SecondaryText}"
VerticalAlignment="Center"/>
</Border>
</StackPanel>
</Button>
</Border>
</StackPanel>
</Grid>
</Border>
@@ -1367,12 +1385,12 @@
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.CanContentScroll="True"
ScrollViewer.IsDeferredScrollingEnabled="True"
ScrollViewer.IsDeferredScrollingEnabled="False"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Recycling"
VirtualizingPanel.ScrollUnit="Pixel"
VirtualizingPanel.CacheLength="2"
VirtualizingPanel.CacheLengthUnit="Item"
VirtualizingPanel.CacheLength="3"
VirtualizingPanel.CacheLengthUnit="Page"
UseLayoutRounding="True">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
@@ -1442,6 +1460,7 @@
<!-- 빈 상태 -->
<Grid x:Name="EmptyState" Grid.Row="3"
Background="Transparent"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
MaxWidth="960"
@@ -2810,6 +2829,20 @@
VerticalAlignment="Center"/>
</StackPanel>
</Border>
<!-- 계획 버튼 (실행 계획 존재 시 표시) -->
<Border x:Name="BtnPlanViewer" Visibility="Collapsed"
CornerRadius="4" Padding="3.5,1" Margin="0,0,5,0"
Background="{DynamicResource HintBackground}"
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1"
Cursor="Hand" ToolTip="실행 계획 보기"
MouseLeftButtonUp="BtnPlanViewer_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE8FD;" FontFamily="Segoe MDL2 Assets" FontSize="9"
Foreground="#10B981" VerticalAlignment="Center" Margin="0,0,3,0"/>
<TextBlock x:Name="PlanViewerLabel" Text="계획" FontSize="9" FontWeight="SemiBold"
Foreground="#10B981" VerticalAlignment="Center"/>
</StackPanel>
</Border>
<TextBlock x:Name="StatusElapsed" Text="" FontSize="8.25"
Visibility="Collapsed"
Foreground="{DynamicResource SecondaryText}"
@@ -3590,15 +3623,42 @@
FontSize="11"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<TextBox x:Name="TxtOverlayPdfExportPath"
Grid.Column="1"
LostFocus="TxtOverlayPdfExportPath_LostFocus"
Padding="9,7"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Foreground="{DynamicResource PrimaryText}"
FontSize="12"/>
<Grid Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="TxtOverlayPdfExportPath"
LostFocus="TxtOverlayPdfExportPath_LostFocus"
Padding="9,7"
IsReadOnly="True"
Background="{DynamicResource LauncherBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
Foreground="{DynamicResource PrimaryText}"
FontSize="12"/>
<Border x:Name="BtnBrowsePdfExportPath"
Grid.Column="1"
Cursor="Hand"
Background="{DynamicResource ItemHoverBackground}"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1"
CornerRadius="6"
Padding="8,6"
Margin="6,0,0,0"
VerticalAlignment="Center"
ToolTip="폴더 선택"
MouseLeftButtonUp="BtnBrowsePdfExportPath_Click"
MouseEnter="OverlayActionBtn_MouseEnter"
MouseLeave="OverlayActionBtn_MouseLeave"
MouseLeftButtonDown="OverlayActionBtn_MouseLeftButtonDown">
<TextBlock Text="&#xED25;"
FontFamily="Segoe MDL2 Assets"
FontSize="13"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"/>
</Border>
</Grid>
</Grid>
<Border Background="{DynamicResource ItemBackground}"
BorderBrush="{DynamicResource BorderColor}"
@@ -4497,7 +4557,8 @@
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"/>
</StackPanel>
<Border Grid.Column="1"
<Border x:Name="BtnOverlayOpenAuditLog"
Grid.Column="1"
Cursor="Hand"
Background="{DynamicResource ItemHoverBackground}"
BorderBrush="{DynamicResource BorderColor}"
@@ -4505,7 +4566,10 @@
CornerRadius="8"
Padding="10,6"
Margin="12,0,0,0"
MouseLeftButtonUp="OverlayOpenAuditLogBtn_MouseLeftButtonUp">
MouseLeftButtonUp="OverlayOpenAuditLogBtn_MouseLeftButtonUp"
MouseEnter="OverlayActionBtn_MouseEnter"
MouseLeave="OverlayActionBtn_MouseLeave"
MouseLeftButtonDown="OverlayActionBtn_MouseLeftButtonDown">
<TextBlock Text="폴더 열기"
FontSize="12"
FontWeight="SemiBold"