composer 상태줄 언어와 상태 표현 통일
Some checks failed
Release Gate / gate (push) Has been cancelled

- 하단 composer 상태줄에서 모델·데이터 활용·권한·브랜치가 같은 문법으로 읽히도록 문구를 정리하고 모델 버튼 툴팁에 현재 서비스/모델 정보를 보강함

- 데이터 활용과 권한 칩에 상태 색상 기반 테두리와 설명 툴팁을 추가해 현재 모드 인지가 더 쉬워지도록 정리함

- README.md와 docs/DEVELOPMENT.md에 2026-04-05 00:52 (KST) 기준 이력을 반영함

- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ / 경고 0 / 오류 0
This commit is contained in:
2026-04-05 00:33:01 +09:00
parent d657539556
commit 4353998cf2
3 changed files with 36 additions and 7 deletions

View File

@@ -8,6 +8,11 @@ Windows 전용 시맨틱 런처 & 워크스페이스 매니저
`docs/claw-code-parity-plan.md` `docs/claw-code-parity-plan.md`
- 업데이트: 2026-04-05 00:52 (KST)
- 하단 composer 상태줄의 표시 문구를 더 통일해 `서비스 ... · 모델 ...`, `데이터 ...`, `브랜치 ...`처럼 같은 문법으로 읽히도록 정리했습니다.
- 데이터 활용/권한 칩은 현재 상태 색에 맞는 테두리와 툴팁 설명을 같이 보여줘 상태 인지가 더 쉬워졌습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0
- 업데이트: 2026-04-05 00:43 (KST) - 업데이트: 2026-04-05 00:43 (KST)
- Cowork/Code 하단 바에 `워크스페이스` 진입 칩을 공통으로 추가해, 작업 위치 전환을 파일/워크트리보다 먼저 찾을 수 있게 정리했습니다. - Cowork/Code 하단 바에 `워크스페이스` 진입 칩을 공통으로 추가해, 작업 위치 전환을 파일/워크트리보다 먼저 찾을 수 있게 정리했습니다.
- 워크스페이스 검색 패널 상단에는 `현재 / 최근 / 전체` 요약 strip을 넣어 현재 선택과 탐색 범위를 한눈에 보이게 보강했습니다. - 워크스페이스 검색 패널 상단에는 `현재 / 최근 / 전체` 요약 strip을 넣어 현재 선택과 탐색 범위를 한눈에 보이게 보강했습니다.

View File

@@ -1,5 +1,9 @@
# AX Copilot - 媛쒕컻 臾몄꽌 # AX Copilot - 媛쒕컻 臾몄꽌
- Document update: 2026-04-05 00:52 (KST) - Normalized the composer/footer wording so model, data-usage, permission, and Git branch surfaces read in the same status language instead of mixing short labels and raw values.
- Document update: 2026-04-05 00:52 (KST) - Added state-colored border cues and clearer tooltips for the data-usage and permission chips so the bottom status row communicates the active mode more directly.
- 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) - 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: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.

View File

@@ -2264,6 +2264,8 @@ public partial class ChatWindow : Window
{ {
var operationMode = OperationModePolicy.Normalize(_settings.Settings.OperationMode); var operationMode = OperationModePolicy.Normalize(_settings.Settings.OperationMode);
BtnPermission.ToolTip = $"{summary.Description}\n운영 모드: {operationMode}\n기본값 {PermissionModeCatalog.ToDisplayLabel(summary.DefaultMode)} · 예외 {summary.OverrideCount}개"; BtnPermission.ToolTip = $"{summary.Description}\n운영 모드: {operationMode}\n기본값 {PermissionModeCatalog.ToDisplayLabel(summary.DefaultMode)} · 예외 {summary.OverrideCount}개";
BtnPermission.Background = Brushes.Transparent;
BtnPermission.BorderThickness = new Thickness(1);
} }
if (!string.Equals(_lastPermissionBannerMode, perm, StringComparison.OrdinalIgnoreCase)) if (!string.Equals(_lastPermissionBannerMode, perm, StringComparison.OrdinalIgnoreCase))
@@ -2277,6 +2279,8 @@ public partial class ChatWindow : Window
var activeColor = new SolidColorBrush(Color.FromRgb(0x10, 0x7C, 0x10)); var activeColor = new SolidColorBrush(Color.FromRgb(0x10, 0x7C, 0x10));
PermissionLabel.Foreground = activeColor; PermissionLabel.Foreground = activeColor;
PermissionIcon.Foreground = activeColor; PermissionIcon.Foreground = activeColor;
if (BtnPermission != null)
BtnPermission.BorderBrush = BrushFromHex("#86EFAC");
if (PermissionTopBanner != null) if (PermissionTopBanner != null)
{ {
PermissionTopBanner.BorderBrush = BrushFromHex("#86EFAC"); PermissionTopBanner.BorderBrush = BrushFromHex("#86EFAC");
@@ -2293,6 +2297,8 @@ public partial class ChatWindow : Window
var denyColor = new SolidColorBrush(Color.FromRgb(0x10, 0x7C, 0x10)); var denyColor = new SolidColorBrush(Color.FromRgb(0x10, 0x7C, 0x10));
PermissionLabel.Foreground = denyColor; PermissionLabel.Foreground = denyColor;
PermissionIcon.Foreground = denyColor; PermissionIcon.Foreground = denyColor;
if (BtnPermission != null)
BtnPermission.BorderBrush = BrushFromHex("#86EFAC");
if (PermissionTopBanner != null) if (PermissionTopBanner != null)
{ {
PermissionTopBanner.BorderBrush = BrushFromHex("#86EFAC"); PermissionTopBanner.BorderBrush = BrushFromHex("#86EFAC");
@@ -2309,6 +2315,8 @@ public partial class ChatWindow : Window
var autoColor = new SolidColorBrush(Color.FromRgb(0xC2, 0x41, 0x0C)); var autoColor = new SolidColorBrush(Color.FromRgb(0xC2, 0x41, 0x0C));
PermissionLabel.Foreground = autoColor; PermissionLabel.Foreground = autoColor;
PermissionIcon.Foreground = autoColor; PermissionIcon.Foreground = autoColor;
if (BtnPermission != null)
BtnPermission.BorderBrush = BrushFromHex("#FDBA74");
if (PermissionTopBanner != null) if (PermissionTopBanner != null)
{ {
PermissionTopBanner.BorderBrush = BrushFromHex("#FDBA74"); PermissionTopBanner.BorderBrush = BrushFromHex("#FDBA74");
@@ -2330,6 +2338,10 @@ public partial class ChatWindow : Window
}; };
PermissionLabel.Foreground = defaultFg; PermissionLabel.Foreground = defaultFg;
PermissionIcon.Foreground = iconFg; PermissionIcon.Foreground = iconFg;
if (BtnPermission != null)
BtnPermission.BorderBrush = perm == PermissionModeCatalog.Plan
? BrushFromHex("#C7D2FE")
: BrushFromHex("#BFDBFE");
if (PermissionTopBanner != null) if (PermissionTopBanner != null)
{ {
if (perm == PermissionModeCatalog.Plan) if (perm == PermissionModeCatalog.Plan)
@@ -2493,9 +2505,9 @@ public partial class ChatWindow : Window
if (DataUsageLabel == null || DataUsageIcon == null) return; if (DataUsageLabel == null || DataUsageIcon == null) return;
var (label, icon, color) = _folderDataUsage switch var (label, icon, color) = _folderDataUsage switch
{ {
"none" => ("미활용", "\uE8D8", "#6B7280"), "none" => ("데이터 미활용", "\uE8D8", "#6B7280"),
"passive" => ("소극", "\uE8FD", "#D97706"), "passive" => ("데이터 소극", "\uE8FD", "#D97706"),
_ => ("적극", "\uE9F5", "#107C10"), _ => ("데이터 적극", "\uE9F5", "#107C10"),
}; };
DataUsageLabel.Text = label; DataUsageLabel.Text = label;
DataUsageIcon.Text = icon; DataUsageIcon.Text = icon;
@@ -2503,8 +2515,14 @@ public partial class ChatWindow : Window
if (BtnDataUsage != null) if (BtnDataUsage != null)
{ {
BtnDataUsage.Background = Brushes.Transparent; BtnDataUsage.Background = Brushes.Transparent;
BtnDataUsage.BorderBrush = TryFindResource("BorderColor") as Brush ?? Brushes.Gray; BtnDataUsage.BorderBrush = BrushFromHex($"{color}66");
BtnDataUsage.BorderThickness = new Thickness(1); BtnDataUsage.BorderThickness = new Thickness(1);
BtnDataUsage.ToolTip = _folderDataUsage switch
{
"none" => "폴더 문서와 파일을 읽지 않거나 참조하지 않습니다.",
"passive" => "사용자가 요청할 때만 폴더 데이터를 참조합니다.",
_ => "폴더 문서와 파일을 자동 탐색해 작업에 적극 활용합니다."
};
} }
} }
@@ -13849,10 +13867,12 @@ public partial class ChatWindow : Window
_ => "Ollama", _ => "Ollama",
}; };
var model = GetCurrentModelDisplayName(); var model = GetCurrentModelDisplayName();
const int maxLen = 26; const int maxLen = 22;
if (model.Length > maxLen) if (model.Length > maxLen)
model = model[..(maxLen - 1)] + "…"; model = model[..(maxLen - 1)] + "…";
ModelLabel.Text = $"{serviceLabel} · {model}"; ModelLabel.Text = $"서비스 {serviceLabel} · {model}";
if (BtnModelSelector != null)
BtnModelSelector.ToolTip = $"현재 서비스: {serviceLabel}\n현재 모델: {GetCurrentModelDisplayName()}\n모델/추론 빠른 설정";
} }
private static string NextPlanMode(string current) => (current ?? "off").ToLowerInvariant() switch private static string NextPlanMode(string current) => (current ?? "off").ToLowerInvariant() switch
@@ -17056,7 +17076,7 @@ private static (string icon, string label, string bgHex, string fgHex) GetDecisi
} }
if (GitBranchLabel != null) if (GitBranchLabel != null)
GitBranchLabel.Text = string.IsNullOrWhiteSpace(branchName) ? "브랜치 없음" : branchName; GitBranchLabel.Text = string.IsNullOrWhiteSpace(branchName) ? "브랜치 없음" : $"브랜치 {branchName}";
if (GitBranchFilesText != null) if (GitBranchFilesText != null)
GitBranchFilesText.Text = filesText; GitBranchFilesText.Text = filesText;
if (GitBranchAddedText != null) if (GitBranchAddedText != null)