코드 탭에서는 폴더 내 데이터 활용을 항상 적극 활용으로 고정하고 하단 버튼과 내부 설정 옵션을 숨겨 사용 흐름을 단순화했습니다. 코워크와 코드 탭의 사용자 메시지도 파일 경로 강조 렌더러를 사용하도록 바꿔 폴더 하위 파일명 입력 시 파란색으로 표시되게 맞췄습니다. README와 DEVELOPMENT 문서에 변경 이력을 반영했고 Release 빌드에서 경고 0 오류 0을 확인했습니다.
This commit is contained in:
@@ -1101,3 +1101,6 @@ MIT License
|
|||||||
- AX Agent 채팅/코워크 프리셋 카드에서 기본 ToolTip을 제거해 hover 시 깜빡이듯 반복되던 현상을 줄였습니다.
|
- AX Agent 채팅/코워크 프리셋 카드에서 기본 ToolTip을 제거해 hover 시 깜빡이듯 반복되던 현상을 줄였습니다.
|
||||||
- 업데이트: 2026-04-06 00:42 (KST)
|
- 업데이트: 2026-04-06 00:42 (KST)
|
||||||
- 코드 탭 하단 Git 브랜치 버튼을 상태판 형태에서 단순한 브랜치 선택 버튼 형태로 정리했습니다.
|
- 코드 탭 하단 Git 브랜치 버튼을 상태판 형태에서 단순한 브랜치 선택 버튼 형태로 정리했습니다.
|
||||||
|
- 업데이트: 2026-04-05 22:26 (KST)
|
||||||
|
- 코드 탭에서는 폴더 문서/파일을 기본 작업 전제로 삼도록 `폴더 내 데이터 활용`을 항상 `적극 활용(active)`으로 강제했다. 하단 채팅창의 데이터 활용 버튼은 코드 탭에서 숨기고, 내부 설정 오버레이의 같은 옵션도 코드 탭에서는 노출하지 않게 정리했다.
|
||||||
|
- 코워크/코드 탭의 사용자 메시지도 assistant 메시지와 같은 파일 경로 강조 렌더러를 쓰도록 바꿔, 폴더 하위 파일명이나 경로를 입력하면 채팅 본문에서 파란색으로 인식되게 맞췄다.
|
||||||
|
|||||||
@@ -4859,3 +4859,6 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
|
|||||||
- `ChatWindow.xaml.cs`의 프리셋 카드 hover 처리에서 WPF 기본 ToolTip을 제거했습니다. 이제 hover는 배경/테두리만 바뀌고 tooltip에 의한 enter/leave 반복이 줄어듭니다.
|
- `ChatWindow.xaml.cs`의 프리셋 카드 hover 처리에서 WPF 기본 ToolTip을 제거했습니다. 이제 hover는 배경/테두리만 바뀌고 tooltip에 의한 enter/leave 반복이 줄어듭니다.
|
||||||
- 업데이트: 2026-04-06 00:42 (KST)
|
- 업데이트: 2026-04-06 00:42 (KST)
|
||||||
- `ChatWindow` 하단 Git 브랜치 UI를 단순화했습니다. 변경 파일 수/추가/삭제 수치는 기본 버튼에서는 숨기고 브랜치명 중심의 선택 버튼처럼 보이게 조정했습니다.
|
- `ChatWindow` 하단 Git 브랜치 UI를 단순화했습니다. 변경 파일 수/추가/삭제 수치는 기본 버튼에서는 숨기고 브랜치명 중심의 선택 버튼처럼 보이게 조정했습니다.
|
||||||
|
- 업데이트: 2026-04-05 22:26 (KST)
|
||||||
|
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에 `IsFolderDataAlwaysEnabledTab()` helper를 추가하고, 코드 탭에서는 `_folderDataUsage`를 항상 `active`로 로드/저장하도록 고정했다. 이에 맞춰 `BtnDataUsage_Click`, `UpdateDataUsageUI()`, 오버레이의 `OverlayFolderDataUsageRow`, `BtnOverlayFolderDataUsage_Click`, `CmbOverlayFolderDataUsage_SelectionChanged`도 코드 탭에서는 숨김 또는 강제 active만 유지하게 정리했다.
|
||||||
|
- 같은 파일의 사용자 메시지 bubble 렌더에서 코워크/코드 탭은 plain `TextBlock` 대신 [MarkdownRenderer.Render](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/MarkdownRenderer.cs) 경로를 타도록 변경했다. 이로써 코워크/코드 사용자 입력 안의 파일명/파일 경로가 assistant 응답과 동일한 파란 강조 규칙을 쓰게 됐다.
|
||||||
|
|||||||
@@ -1813,7 +1813,9 @@ public partial class ChatWindow : Window
|
|||||||
: fallbackPermission;
|
: fallbackPermission;
|
||||||
_settings.Settings.Llm.FilePermission = conversationPermission;
|
_settings.Settings.Llm.FilePermission = conversationPermission;
|
||||||
|
|
||||||
_folderDataUsage = conv?.DataUsage ?? llm.FolderDataUsage ?? "none";
|
_folderDataUsage = IsFolderDataAlwaysEnabledTab()
|
||||||
|
? "active"
|
||||||
|
: (conv?.DataUsage ?? llm.FolderDataUsage ?? "none");
|
||||||
_selectedMood = conv?.Mood ?? llm.DefaultMood ?? "modern";
|
_selectedMood = conv?.Mood ?? llm.DefaultMood ?? "modern";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1849,7 +1851,7 @@ public partial class ChatWindow : Window
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var normalizedPermission = PermissionModeCatalog.NormalizeGlobalMode(_settings.Settings.Llm.FilePermission);
|
var normalizedPermission = PermissionModeCatalog.NormalizeGlobalMode(_settings.Settings.Llm.FilePermission);
|
||||||
var dataUsage = _folderDataUsage ?? "none";
|
var dataUsage = IsFolderDataAlwaysEnabledTab() ? "active" : (_folderDataUsage ?? "none");
|
||||||
var mood = _selectedMood ?? (_settings.Settings.Llm.DefaultMood ?? "modern");
|
var mood = _selectedMood ?? (_settings.Settings.Llm.DefaultMood ?? "modern");
|
||||||
var outputFormat = conv.OutputFormat ?? "auto";
|
var outputFormat = conv.OutputFormat ?? "auto";
|
||||||
|
|
||||||
@@ -2255,6 +2257,8 @@ public partial class ChatWindow : Window
|
|||||||
|
|
||||||
private void BtnDataUsage_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
private void BtnDataUsage_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||||
{
|
{
|
||||||
|
if (IsFolderDataAlwaysEnabledTab())
|
||||||
|
return;
|
||||||
if (DataUsagePopup == null) return;
|
if (DataUsagePopup == null) return;
|
||||||
DataUsageItems.Children.Clear();
|
DataUsageItems.Children.Clear();
|
||||||
|
|
||||||
@@ -2331,6 +2335,8 @@ public partial class ChatWindow : Window
|
|||||||
private void UpdateDataUsageUI()
|
private void UpdateDataUsageUI()
|
||||||
{
|
{
|
||||||
if (DataUsageLabel == null || DataUsageIcon == null) return;
|
if (DataUsageLabel == null || DataUsageIcon == null) return;
|
||||||
|
if (IsFolderDataAlwaysEnabledTab())
|
||||||
|
_folderDataUsage = "active";
|
||||||
var (label, icon, color) = _folderDataUsage switch
|
var (label, icon, color) = _folderDataUsage switch
|
||||||
{
|
{
|
||||||
"none" => ("데이터 미활용", "\uE8D8", "#6B7280"),
|
"none" => ("데이터 미활용", "\uE8D8", "#6B7280"),
|
||||||
@@ -2342,6 +2348,7 @@ public partial class ChatWindow : Window
|
|||||||
DataUsageIcon.Foreground = BrushFromHex(color);
|
DataUsageIcon.Foreground = BrushFromHex(color);
|
||||||
if (BtnDataUsage != null)
|
if (BtnDataUsage != null)
|
||||||
{
|
{
|
||||||
|
BtnDataUsage.Visibility = IsFolderDataAlwaysEnabledTab() ? Visibility.Collapsed : Visibility.Visible;
|
||||||
BtnDataUsage.Background = Brushes.Transparent;
|
BtnDataUsage.Background = Brushes.Transparent;
|
||||||
BtnDataUsage.BorderBrush = Brushes.Transparent;
|
BtnDataUsage.BorderBrush = Brushes.Transparent;
|
||||||
BtnDataUsage.BorderThickness = new Thickness(0);
|
BtnDataUsage.BorderThickness = new Thickness(0);
|
||||||
@@ -2352,8 +2359,13 @@ public partial class ChatWindow : Window
|
|||||||
_ => "폴더 문서와 파일을 자동 탐색해 작업에 적극 활용합니다."
|
_ => "폴더 문서와 파일을 자동 탐색해 작업에 적극 활용합니다."
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
if (IsFolderDataAlwaysEnabledTab() && DataUsagePopup != null)
|
||||||
|
DataUsagePopup.IsOpen = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsFolderDataAlwaysEnabledTab()
|
||||||
|
=> string.Equals(_activeTab, "Code", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
/// <summary>Cowork/Code 탭 진입 시 설정의 기본 권한을 적용.</summary>
|
/// <summary>Cowork/Code 탭 진입 시 설정의 기본 권한을 적용.</summary>
|
||||||
private void ApplyTabDefaultPermission()
|
private void ApplyTabDefaultPermission()
|
||||||
{
|
{
|
||||||
@@ -4172,7 +4184,18 @@ public partial class ChatWindow : Window
|
|||||||
CornerRadius = new CornerRadius(9),
|
CornerRadius = new CornerRadius(9),
|
||||||
Padding = new Thickness(11, 7, 11, 7),
|
Padding = new Thickness(11, 7, 11, 7),
|
||||||
HorizontalAlignment = HorizontalAlignment.Right,
|
HorizontalAlignment = HorizontalAlignment.Right,
|
||||||
Child = new TextBlock
|
};
|
||||||
|
if (string.Equals(_activeTab, "Cowork", StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
string.Equals(_activeTab, "Code", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
var codeBgBrush = TryFindResource("HintBackground") as Brush ?? Brushes.DarkGray;
|
||||||
|
MarkdownRenderer.EnableFilePathHighlight =
|
||||||
|
(System.Windows.Application.Current as App)?.SettingsService?.Settings.Llm.EnableFilePathHighlight ?? true;
|
||||||
|
bubble.Child = MarkdownRenderer.Render(content, primaryText, secondaryText, accentBrush, codeBgBrush);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bubble.Child = new TextBlock
|
||||||
{
|
{
|
||||||
Text = content,
|
Text = content,
|
||||||
TextAlignment = TextAlignment.Left,
|
TextAlignment = TextAlignment.Left,
|
||||||
@@ -4180,8 +4203,8 @@ public partial class ChatWindow : Window
|
|||||||
Foreground = primaryText,
|
Foreground = primaryText,
|
||||||
TextWrapping = TextWrapping.Wrap,
|
TextWrapping = TextWrapping.Wrap,
|
||||||
LineHeight = 18,
|
LineHeight = 18,
|
||||||
}
|
};
|
||||||
};
|
}
|
||||||
wrapper.Children.Add(bubble);
|
wrapper.Children.Add(bubble);
|
||||||
|
|
||||||
// 액션 버튼 바 (복사 + 편집, hover 시 표시)
|
// 액션 버튼 바 (복사 + 편집, hover 시 표시)
|
||||||
@@ -15213,8 +15236,12 @@ public partial class ChatWindow : Window
|
|||||||
OverlayModelEditorPanel.Visibility = showBasic ? Visibility.Visible : Visibility.Collapsed;
|
OverlayModelEditorPanel.Visibility = showBasic ? Visibility.Visible : Visibility.Collapsed;
|
||||||
if (OverlayAnchorPermission != null)
|
if (OverlayAnchorPermission != null)
|
||||||
OverlayAnchorPermission.Visibility = showBasic ? Visibility.Visible : Visibility.Collapsed;
|
OverlayAnchorPermission.Visibility = showBasic ? Visibility.Visible : Visibility.Collapsed;
|
||||||
|
if (IsFolderDataAlwaysEnabledTab())
|
||||||
|
_folderDataUsage = "active";
|
||||||
if (OverlayFolderDataUsageRow != null)
|
if (OverlayFolderDataUsageRow != null)
|
||||||
OverlayFolderDataUsageRow.Visibility = showShared || showCowork ? Visibility.Visible : Visibility.Collapsed;
|
OverlayFolderDataUsageRow.Visibility = IsFolderDataAlwaysEnabledTab()
|
||||||
|
? Visibility.Collapsed
|
||||||
|
: (showShared || showCowork ? Visibility.Visible : Visibility.Collapsed);
|
||||||
if (OverlayTlsRow != null)
|
if (OverlayTlsRow != null)
|
||||||
OverlayTlsRow.Visibility = showChat ? Visibility.Visible : Visibility.Collapsed;
|
OverlayTlsRow.Visibility = showChat ? Visibility.Visible : Visibility.Collapsed;
|
||||||
if (OverlayAnchorAdvanced != null)
|
if (OverlayAnchorAdvanced != null)
|
||||||
@@ -17024,6 +17051,12 @@ public partial class ChatWindow : Window
|
|||||||
|
|
||||||
private void BtnOverlayFolderDataUsage_Click(object sender, RoutedEventArgs e)
|
private void BtnOverlayFolderDataUsage_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
|
if (IsFolderDataAlwaysEnabledTab())
|
||||||
|
{
|
||||||
|
_folderDataUsage = "active";
|
||||||
|
PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
_folderDataUsage = _folderDataUsage switch
|
_folderDataUsage = _folderDataUsage switch
|
||||||
{
|
{
|
||||||
"none" => "passive",
|
"none" => "passive",
|
||||||
@@ -17108,7 +17141,7 @@ public partial class ChatWindow : Window
|
|||||||
if (_isOverlaySettingsSyncing || CmbOverlayFolderDataUsage.SelectedItem is not ComboBoxItem selected || selected.Tag is not string tag)
|
if (_isOverlaySettingsSyncing || CmbOverlayFolderDataUsage.SelectedItem is not ComboBoxItem selected || selected.Tag is not string tag)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_folderDataUsage = tag;
|
_folderDataUsage = IsFolderDataAlwaysEnabledTab() ? "active" : tag;
|
||||||
PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
|
PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user