From d65753955645f24bb836f32313eb576ce48eea42 Mon Sep 17 00:00:00 2001 From: lacvet Date: Sun, 5 Apr 2026 00:27:54 +0900 Subject: [PATCH] =?UTF-8?q?=ED=95=98=EB=8B=A8=20=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=EC=8A=A4=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=A7=84=EC=9E=85=20?= =?UTF-8?q?=ED=9D=90=EB=A6=84=EA=B3=BC=20=ED=8C=A8=EB=84=90=20=EC=9A=94?= =?UTF-8?q?=EC=95=BD=20=EB=B3=B4=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Cowork와 Code 하단 바에 워크스페이스 진입 칩을 공통 추가해 작업 위치 전환 흐름을 먼저 보이도록 정리함 - 워크스페이스 검색 패널 상단에 현재·최근·전체 요약 strip을 넣어 현재 선택과 탐색 범위를 즉시 파악할 수 있게 보강함 - README.md와 docs/DEVELOPMENT.md에 2026-04-05 00:43 (KST) 기준 이력을 반영함 - 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ / 경고 0 / 오류 0 --- README.md | 5 +++++ docs/DEVELOPMENT.md | 4 ++++ src/AxCopilot/Views/ChatWindow.xaml.cs | 30 ++++++++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/README.md b/README.md index 1b9a780..74d40f8 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,11 @@ Windows 전용 시맨틱 런처 & 워크스페이스 매니저 `docs/claw-code-parity-plan.md` +- 업데이트: 2026-04-05 00:43 (KST) +- Cowork/Code 하단 바에 `워크스페이스` 진입 칩을 공통으로 추가해, 작업 위치 전환을 파일/워크트리보다 먼저 찾을 수 있게 정리했습니다. +- 워크스페이스 검색 패널 상단에는 `현재 / 최근 / 전체` 요약 strip을 넣어 현재 선택과 탐색 범위를 한눈에 보이게 보강했습니다. +- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0 + - 업데이트: 2026-04-05 00:34 (KST) - AX Agent 하단 컨텍스트 카드에 현재 서비스·모델 기준 오늘 사용량을 함께 표시하고, hover에는 현재 모델의 일반 사용량·compact 이후 사용량·오늘 상위 모델 사용량까지 보이도록 보강했습니다. - 큰 수 토큰 집계는 `K/M` 단위까지 같은 카드 안에서 일관되게 읽히도록 long 전용 포맷 경로를 추가했습니다. diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index edbe41b..06f6ef6 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -1,5 +1,9 @@ # AX Copilot - 媛쒕컻 臾몄꽌 +- Document update: 2026-04-05 00:43 (KST) - Added a shared workspace entry chip to both Cowork and Code bottom bars so workspace switching now appears in the same position across task modes instead of hiding behind only the path label. +- Document update: 2026-04-05 00:43 (KST) - The workspace search popup now starts with a `current / recent / all` summary strip, making the active workspace and available scope visible before the row list just like the other location-oriented popups. + + - Document update: 2026-04-05 00:34 (KST) - Exposed current service/model daily usage directly in the AX Agent context card, and expanded the hover panel to show current-model usage, current-model post-compaction usage, and top model usage for the day using the new per-model daily token buckets. - Document update: 2026-04-05 00:34 (KST) - Added a long-safe token formatting path for large per-model aggregates so context usage summaries keep the same K/M style even when daily model totals exceed the older int-based formatting path. diff --git a/src/AxCopilot/Views/ChatWindow.xaml.cs b/src/AxCopilot/Views/ChatWindow.xaml.cs index 0f1e8c7..60291ff 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml.cs +++ b/src/AxCopilot/Views/ChatWindow.xaml.cs @@ -1304,6 +1304,16 @@ public partial class ChatWindow : Window .Take(maxDisplay) .ToList(); + var currentWorkspaceName = string.IsNullOrWhiteSpace(currentFolder) + ? "없음" + : System.IO.Path.GetFileName(currentFolder.TrimEnd('\\', '/')); + FolderMenuItems.Children.Add(CreatePopupSummaryStrip(new[] + { + ("현재", currentWorkspaceName, "#F8FAFC", "#E2E8F0", "#475569"), + ("최근", filteredRecent.Count.ToString(), "#EFF6FF", "#BFDBFE", "#1D4ED8"), + ("전체", workspaceFolders.Count.ToString(), "#F5F3FF", "#DDD6FE", "#6D28D9"), + })); + void AddWorkspaceRows(IEnumerable folders) { foreach (var folder in folders) @@ -12540,6 +12550,10 @@ public partial class ChatWindow : Window { MoodIconPanel.Children.Clear(); + var workspaceBtn = CreateWorkspaceFolderBarButton(); + workspaceBtn.MouseLeftButtonUp += (_, e) => { e.Handled = true; ShowFolderMenu(); }; + MoodIconPanel.Children.Add(workspaceBtn); + // ── 파일 탐색기 토글 버튼 ── var fileBrowserBtn = CreateFolderBarButton("\uED25", "파일", "파일 탐색기 열기/닫기", "#D97706"); fileBrowserBtn.MouseLeftButtonUp += (_, e) => { e.Handled = true; ToggleFileBrowser(); }; @@ -12557,6 +12571,10 @@ public partial class ChatWindow : Window { MoodIconPanel.Children.Clear(); + var workspaceBtn = CreateWorkspaceFolderBarButton(); + workspaceBtn.MouseLeftButtonUp += (_, e) => { e.Handled = true; ShowFolderMenu(); }; + MoodIconPanel.Children.Add(workspaceBtn); + var localBtn = CreateFolderBarButton("\uED25", "로컬", "원본 워크스페이스로 전환", "#6B7280"); localBtn.MouseLeftButtonUp += (_, e) => { @@ -12586,6 +12604,18 @@ public partial class ChatWindow : Window if (FormatMoodSeparator != null) FormatMoodSeparator.Visibility = Visibility.Visible; } + private Border CreateWorkspaceFolderBarButton() + { + var currentFolder = GetCurrentWorkFolder(); + var label = string.IsNullOrWhiteSpace(currentFolder) + ? "워크스페이스" + : TruncateForStatus(Path.GetFileName(currentFolder.TrimEnd('\\', '/')), 18); + var tooltip = string.IsNullOrWhiteSpace(currentFolder) + ? "워크스페이스 선택" + : $"워크스페이스 선택\n현재: {currentFolder}"; + return CreateFolderBarButton("\uE8B7", label, tooltip, "#4B5EFC"); + } + private string GetWorktreeModeLabel() { var folder = GetCurrentWorkFolder();