From 6ca067c4a6bd1f0728e1471049931bf71406b5b4 Mon Sep 17 00:00:00 2001 From: lacvet Date: Tue, 7 Apr 2026 09:02:18 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BD=94=EC=9B=8C=ED=81=AC=C2=B7=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=ED=95=98=EB=8B=A8=20=EB=A9=94=EB=AA=A8=EB=A6=AC=20?= =?UTF-8?q?=ED=91=9C=EA=B8=B0=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20footer=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC\n\n-=20Cowork/Code=20=ED=95=98=EB=8B=A8=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=20=EB=B0=94=EC=9D=98=20=EB=A9=94=EB=AA=A8?= =?UTF-8?q?=EB=A6=AC=20=EC=83=81=ED=83=9C=20=EC=B9=A9=EC=9D=84=20=ED=95=AD?= =?UTF-8?q?=EC=83=81=20=EC=88=A8=EA=B8=B0=EB=8F=84=EB=A1=9D=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=95\n-=20=EB=A9=94=EB=AA=A8=EB=A6=AC=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=20=EB=B2=84=ED=8A=BC=20=EB=B9=84=EB=85=B8=EC=B6=9C=20=EC=8B=9C?= =?UTF-8?q?=20tooltip=EA=B3=BC=20=ED=8C=9D=EC=97=85=20=EC=A7=84=EC=9E=85?= =?UTF-8?q?=EB=8F=84=20=ED=95=A8=EA=BB=98=20=EC=B0=A8=EB=8B=A8\n-=20README?= =?UTF-8?q?=EC=99=80=20DEVELOPMENT=20=EB=AC=B8=EC=84=9C=EC=97=90=202026-04?= =?UTF-8?q?-07=2003:03=20(KST)=20=EA=B8=B0=EC=A4=80=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=20=EC=9D=B4=EB=A0=A5=20=EB=B0=98=EC=98=81\n-=20dotnet=20build?= =?UTF-8?q?=20=EA=B2=80=EC=A6=9D=20=EC=99=84=EB=A3=8C=20(=EA=B2=BD?= =?UTF-8?q?=EA=B3=A0=200,=20=EC=98=A4=EB=A5=98=200)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 + docs/DEVELOPMENT.md | 6 ++ .../Views/ChatWindow.FooterPresentation.cs | 95 +++++-------------- 3 files changed, 32 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index e283a27..36027ce 100644 --- a/README.md +++ b/README.md @@ -1455,3 +1455,6 @@ MIT License - 업데이트: 2026-04-07 02:56 (KST) - AX Agent 내부 설정 개발자 탭의 `워크플로우 시각화`가 숨은 개발자 모드 의존 때문에 실제로 창을 띄우지 않던 문제를 수정했습니다. 이제 토글을 켜면 즉시 워크플로우 분석기 창이 열리고, 끄면 창이 숨겨집니다. - 일반 설정에만 남아 있던 `문서 미리보기 자동 표시` 옵션을 AX Agent 내부 설정 공통 탭에도 복원해, Cowork/Code에서 프리뷰 자동 열기 정책을 내부 설정에서 바로 바꿀 수 있게 했습니다. +- 업데이트: 2026-04-07 03:03 (KST) + - Cowork/Code 하단 작업 바의 메모리 상태 칩을 숨겼습니다. 이제 footer에는 폴더, 권한, Git 같은 작업 상태만 남고 메모리 관련 표기는 노출되지 않습니다. + - 메모리 상태 버튼이 비노출일 때는 관련 팝업도 열리지 않도록 정리해, 상태 갱신이나 탭 전환 중 다시 나타나는 일이 없게 했습니다. diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index cc636a8..7604372 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -5311,3 +5311,9 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎. - 내부 설정 공통 탭의 자동 프리뷰 콤보 값을 `Llm.AutoPreview`와 동기화하고, 변경 시 바로 저장되도록 `CmbOverlayAutoPreview_SelectionChanged`를 추가했다. - [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) - AX Agent 내부 설정 공통 탭에 `문서 미리보기` 콤보를 추가해 `자동 표시 / 수동 / 비활성화`를 내부 설정에서 직접 제어할 수 있게 했다. + +## 2026-04-07 03:03 (KST) + +- [ChatWindow.FooterPresentation.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.FooterPresentation.cs) + - Cowork/Code 하단 작업 바의 메모리 상태 칩을 항상 숨기도록 조정했다. + - 메모리 상태 버튼이 비노출일 때는 상태 문자열과 tooltip을 초기화하고, 클릭으로 상세 팝업이 열리지 않게 막아 footer에서 메모리 표기가 다시 노출되지 않도록 정리했다. diff --git a/src/AxCopilot/Views/ChatWindow.FooterPresentation.cs b/src/AxCopilot/Views/ChatWindow.FooterPresentation.cs index 2fefcd3..9581e12 100644 --- a/src/AxCopilot/Views/ChatWindow.FooterPresentation.cs +++ b/src/AxCopilot/Views/ChatWindow.FooterPresentation.cs @@ -25,7 +25,7 @@ public partial class ChatWindow ? "문서 작성, 데이터 분석, 파일 작업을 요청하세요. 필요하면 작업 폴더 파일도 함께 참고합니다." : "문서 작성, 데이터 분석, 파일 작업을 요청하세요. 작업 폴더를 선택하면 관련 파일도 함께 참고합니다.", "Code" => hasFolder - ? "코드 수정, 원인 분석, 빌드·테스트를 요청하세요. 작업 폴더 코드를 참고하고, 상단 저장소 배너로 브랜치와 변경 상태를 함께 봅니다." + ? "코드 수정, 원인 분석, 빌드·테스트를 요청하세요. 작업 폴더 코드를 참고하고 저장소 상태도 함께 보여줍니다." : "작업 폴더를 선택한 뒤 코드 수정, 원인 분석, 빌드·테스트를 요청하세요.", _ => "질문, 요약, 초안 작성, 아이디어 정리를 요청하세요.", }; @@ -47,9 +47,9 @@ public partial class ChatWindow return preset.Description.Trim(); if (string.Equals(_activeTab, "Cowork", StringComparison.OrdinalIgnoreCase)) - return "선택된 작업 유형에 맞는 문서·데이터·파일 작업 흐름으로 이어집니다."; + return "선택한 작업 유형에 맞춰 문서·데이터·파일 작업 흐름으로 이어집니다."; - return "선택된 대화 주제에 맞는 응답 방향과 초안 흐름으로 이어집니다."; + return "선택한 대화 주제에 맞춰 응답 방향과 초안 흐름이 정리됩니다."; } private void UpdateFolderBar() @@ -85,7 +85,13 @@ public partial class ChatWindow UpdateMemoryStatusUi(); RefreshContextUsageVisual(); ScheduleGitBranchRefresh(); - UpdateGitBranchUi(_currentGitBranchName, GitBranchFilesText?.Text ?? "", GitBranchAddedText?.Text ?? "", GitBranchDeletedText?.Text ?? "", _currentGitTooltip ?? "", BtnGitBranch?.Visibility ?? Visibility.Collapsed); + UpdateGitBranchUi( + _currentGitBranchName, + GitBranchFilesText?.Text ?? "", + GitBranchAddedText?.Text ?? "", + GitBranchDeletedText?.Text ?? "", + _currentGitTooltip ?? "", + BtnGitBranch?.Visibility ?? Visibility.Collapsed); } private void UpdateDataUsageUI() @@ -98,54 +104,10 @@ public partial class ChatWindow if (BtnMemoryStatus == null || MemoryStatusLabel == null) return; - if (_activeTab == "Chat") - { - BtnMemoryStatus.Visibility = Visibility.Collapsed; - MemoryStatusSeparator.Visibility = Visibility.Collapsed; - return; - } - - var app = System.Windows.Application.Current as App; - var memory = app?.MemoryService; - if (memory == null || !_settings.Settings.Llm.EnableAgentMemory) - { - MemoryStatusLabel.Text = "메모리 꺼짐"; - BtnMemoryStatus.ToolTip = "에이전트 메모리가 비활성화되어 있습니다."; - BtnMemoryStatus.Visibility = Visibility.Visible; - MemoryStatusSeparator.Visibility = Visibility.Visible; - return; - } - - var workFolder = GetCurrentWorkFolder(); - memory.Load(workFolder); - var docs = memory.InstructionDocuments; - var learned = memory.All.Count; - - MemoryStatusLabel.Text = docs.Count > 0 || learned > 0 - ? $"메모리 {docs.Count} · 학습 {learned}" - : "메모리 없음"; - - var lines = docs - .Take(4) - .Select(doc => - { - var priority = doc.Priority > 0 ? $"우선순위 {doc.Priority}" : "우선순위 미정"; - var description = string.IsNullOrWhiteSpace(doc.Description) ? "" : $" · {doc.Description}"; - return $"[{doc.Label}] {priority}{description}"; - }) - .ToList(); - - if (docs.Count > lines.Count) - lines.Add($"외 {docs.Count - lines.Count}개 규칙"); - - var includePolicy = _settings.Settings.Llm.AllowExternalMemoryIncludes - ? "외부 include 허용" - : "외부 include 차단"; - BtnMemoryStatus.ToolTip = lines.Count == 0 - ? $"계층형 규칙이 없습니다.\n학습 메모리 {learned}개\n{includePolicy}" - : $"계층형 규칙 {docs.Count}개 · 학습 메모리 {learned}개\n{string.Join("\n", lines)}\n{includePolicy}"; - BtnMemoryStatus.Visibility = Visibility.Visible; - MemoryStatusSeparator.Visibility = Visibility.Visible; + BtnMemoryStatus.Visibility = Visibility.Collapsed; + MemoryStatusSeparator.Visibility = Visibility.Collapsed; + MemoryStatusLabel.Text = "메모리 없음"; + BtnMemoryStatus.ToolTip = null; } private void BtnMemoryStatus_Click(object sender, RoutedEventArgs e) @@ -153,6 +115,9 @@ public partial class ChatWindow if (BtnMemoryStatus == null) return; + if (BtnMemoryStatus.Visibility != Visibility.Visible) + return; + _memoryStatusPopup?.SetCurrentValue(Popup.IsOpenProperty, false); var app = System.Windows.Application.Current as App; @@ -164,9 +129,7 @@ public partial class ChatWindow memory.Load(workFolder); var docs = memory.InstructionDocuments; var learned = memory.All.Count; - var includePolicy = _settings.Settings.Llm.AllowExternalMemoryIncludes - ? "외부 include 허용" - : "외부 include 차단"; + var includePolicy = _settings.Settings.Llm.AllowExternalMemoryIncludes ? "외부 include 허용" : "외부 include 차단"; var auditEnabled = _settings.Settings.Llm.EnableAuditLog; var recentIncludeEntries = AuditLogService.LoadRecent("MemoryInclude", maxCount: 5, daysBack: 3); @@ -236,7 +199,7 @@ public partial class ChatWindow { panel.Children.Add(new TextBlock { - Text = "감사 로그가 꺼져 있어 include 이력이 기록되지 않습니다.", + Text = "감사 로그가 꺼져 있어 include 이력을 기록하지 않습니다.", FontSize = 11, Foreground = secondaryText, TextWrapping = TextWrapping.Wrap, @@ -247,7 +210,7 @@ public partial class ChatWindow { panel.Children.Add(new TextBlock { - Text = "최근 3일 include 감사 기록이 없습니다.", + Text = "최근 3일간 include 감사 기록이 없습니다.", FontSize = 11, Foreground = secondaryText, Margin = new Thickness(8, 0, 8, 6), @@ -282,9 +245,7 @@ public partial class ChatWindow return path; var directory = Path.GetDirectoryName(path); - return string.IsNullOrWhiteSpace(directory) - ? fileName - : $"{fileName} · {directory}"; + return string.IsNullOrWhiteSpace(directory) ? fileName : $"{fileName} · {directory}"; } catch { @@ -330,12 +291,7 @@ public partial class ChatWindow }); } - return new Border - { - Background = Brushes.Transparent, - CornerRadius = new CornerRadius(8), - Child = stack, - }; + return new Border { Background = Brushes.Transparent, CornerRadius = new CornerRadius(8), Child = stack }; } private Border BuildMemoryPopupAuditRow(AuditEntry entry, Brush primaryText, Brush secondaryText, Brush okBrush, Brush warnBrush, Brush dangerBrush) @@ -369,12 +325,7 @@ public partial class ChatWindow Margin = new Thickness(0, 2, 0, 0), }); - return new Border - { - Background = Brushes.Transparent, - CornerRadius = new CornerRadius(8), - Child = stack, - }; + return new Border { Background = Brushes.Transparent, CornerRadius = new CornerRadius(8), Child = stack }; } private string? BuildMemoryContextEvidenceText()