- 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:
@@ -14,9 +14,91 @@ namespace AxCopilot.Views;
|
||||
|
||||
public partial class ChatWindow
|
||||
{
|
||||
// ── A-2: PermissionItems 이벤트 위임 ──
|
||||
private bool _permPanelDelegationInitialized;
|
||||
|
||||
private sealed class PermissionItemTag
|
||||
{
|
||||
public required string Level { get; init; }
|
||||
public required bool IsActive { get; init; }
|
||||
public required Brush SelectedBackground { get; init; }
|
||||
public required Brush HoverBackground { get; init; }
|
||||
}
|
||||
|
||||
private void InitPermissionPanelDelegation()
|
||||
{
|
||||
if (_permPanelDelegationInitialized || PermissionItems == null)
|
||||
return;
|
||||
_permPanelDelegationInitialized = true;
|
||||
|
||||
PermissionItems.MouseMove += PermissionItems_DelegatedMouseMove;
|
||||
PermissionItems.MouseLeave += PermissionItems_DelegatedMouseLeave;
|
||||
PermissionItems.PreviewMouseLeftButtonDown += PermissionItems_DelegatedLeftButtonDown;
|
||||
PermissionItems.PreviewKeyDown += PermissionItems_DelegatedKeyDown;
|
||||
}
|
||||
|
||||
private Border? _lastHoveredPermBorder;
|
||||
|
||||
private void PermissionItems_DelegatedMouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
var border = FindAncestorWithTag<Border>(e.OriginalSource as DependencyObject);
|
||||
if (ReferenceEquals(border, _lastHoveredPermBorder))
|
||||
return;
|
||||
|
||||
if (_lastHoveredPermBorder?.Tag is PermissionItemTag prevTag)
|
||||
_lastHoveredPermBorder.Background = prevTag.IsActive ? prevTag.SelectedBackground : Brushes.Transparent;
|
||||
_lastHoveredPermBorder = border;
|
||||
|
||||
if (border?.Tag is PermissionItemTag tag)
|
||||
border.Background = tag.IsActive ? tag.SelectedBackground : tag.HoverBackground;
|
||||
}
|
||||
|
||||
private void PermissionItems_DelegatedMouseLeave(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (_lastHoveredPermBorder?.Tag is PermissionItemTag prevTag)
|
||||
_lastHoveredPermBorder.Background = prevTag.IsActive ? prevTag.SelectedBackground : Brushes.Transparent;
|
||||
_lastHoveredPermBorder = null;
|
||||
}
|
||||
|
||||
private void PermissionItems_DelegatedLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
var border = FindAncestorWithTag<Border>(e.OriginalSource as DependencyObject);
|
||||
if (border?.Tag is PermissionItemTag tag)
|
||||
{
|
||||
e.Handled = true;
|
||||
ApplyPermissionLevel(tag.Level);
|
||||
}
|
||||
}
|
||||
|
||||
private void PermissionItems_DelegatedKeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.Key is not (Key.Enter or Key.Space))
|
||||
return;
|
||||
var border = FindAncestorWithTag<Border>(e.OriginalSource as DependencyObject);
|
||||
if (border?.Tag is PermissionItemTag tag)
|
||||
{
|
||||
e.Handled = true;
|
||||
ApplyPermissionLevel(tag.Level);
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyPermissionLevel(string level)
|
||||
{
|
||||
_settings.Settings.Llm.FilePermission = PermissionModeCatalog.NormalizeGlobalMode(level);
|
||||
try { _settings.Save(); } catch { }
|
||||
_appState.LoadFromSettings(_settings);
|
||||
UpdatePermissionUI();
|
||||
SaveConversationSettings();
|
||||
RefreshInlineSettingsPanel();
|
||||
RefreshOverlayModeButtons();
|
||||
PermissionPopup.IsOpen = false;
|
||||
}
|
||||
|
||||
private void BtnPermission_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (PermissionPopup == null) return;
|
||||
InitPermissionPanelDelegation();
|
||||
_lastHoveredPermBorder = null;
|
||||
PermissionItems.Children.Clear();
|
||||
|
||||
ChatConversation? currentConversation;
|
||||
@@ -96,30 +178,14 @@ public partial class ChatWindow
|
||||
row.Children.Add(check);
|
||||
|
||||
rowBorder.Child = row;
|
||||
rowBorder.MouseEnter += (_, _) => rowBorder.Background = isActive ? selectedBackground : hoverBackground;
|
||||
rowBorder.MouseLeave += (_, _) => rowBorder.Background = isActive ? selectedBackground : Brushes.Transparent;
|
||||
|
||||
var capturedLevel = level;
|
||||
void ApplyPermission()
|
||||
// A-2: 이벤트 위임 — 개별 람다 대신 Tag에 메타 저장
|
||||
rowBorder.Tag = new PermissionItemTag
|
||||
{
|
||||
_settings.Settings.Llm.FilePermission = PermissionModeCatalog.NormalizeGlobalMode(capturedLevel);
|
||||
try { _settings.Save(); } catch { }
|
||||
_appState.LoadFromSettings(_settings);
|
||||
UpdatePermissionUI();
|
||||
SaveConversationSettings();
|
||||
RefreshInlineSettingsPanel();
|
||||
RefreshOverlayModeButtons();
|
||||
PermissionPopup.IsOpen = false;
|
||||
}
|
||||
|
||||
rowBorder.MouseLeftButtonDown += (_, _) => ApplyPermission();
|
||||
rowBorder.KeyDown += (_, ke) =>
|
||||
{
|
||||
if (ke.Key is Key.Enter or Key.Space)
|
||||
{
|
||||
ke.Handled = true;
|
||||
ApplyPermission();
|
||||
}
|
||||
Level = level,
|
||||
IsActive = isActive,
|
||||
SelectedBackground = selectedBackground,
|
||||
HoverBackground = hoverBackground,
|
||||
};
|
||||
|
||||
container.Children.Add(rowBorder);
|
||||
|
||||
Reference in New Issue
Block a user