Files
AX-Copilot-Codex/src/AxCopilot/Services/Agent/OperationalStatusPresentationCatalog.cs
lacvet d5c1266d3e
Some checks failed
Release Gate / gate (push) Has been cancelled
상태선/권한 카탈로그 구조 정리와 계획 모드 표현 잔재 제거
- OperationalStatusPresentationCatalog를 추가해 compact strip과 quick strip의 색상/노출 계산을 AppStateService 밖으로 분리함

- PermissionRequestPresentationCatalog와 ToolResultPresentationCatalog에 Kind/Description 메타를 추가해 transcript fallback 설명을 타입 기반으로 정리함

- PermissionModePresentationCatalog와 ChatWindow.PermissionPresentation에서 제거된 계획 모드 표현 분기를 걷어 권한 UI를 실제 지원 모드만 다루도록 단순화함

- README, DEVELOPMENT, claw-code parity plan 문서를 2026-04-06 09:36 (KST) 기준으로 갱신함

- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ (경고 0 / 오류 0)
2026-04-06 09:44:53 +09:00

69 lines
3.4 KiB
C#

using AxCopilot.Services;
namespace AxCopilot.Services.Agent;
internal static class OperationalStatusPresentationCatalog
{
public static AppStateService.OperationalStatusPresentationState Resolve(
AppStateService.OperationalStatusState status,
string tab,
bool hasLiveRuntimeActivity,
int runningConversationCount,
int spotlightConversationCount,
bool runningOnlyFilter,
bool sortConversationsByRecent)
{
var showCompactStrip = !string.Equals(tab, "Chat", StringComparison.OrdinalIgnoreCase)
&& (string.Equals(status.StripKind, "permission_waiting", StringComparison.OrdinalIgnoreCase)
|| string.Equals(status.StripKind, "failed_run", StringComparison.OrdinalIgnoreCase)
|| string.Equals(status.StripKind, "permission_denied", StringComparison.OrdinalIgnoreCase));
var (stripBackgroundHex, stripBorderHex, stripForegroundHex) = ResolveStripColors(status.StripKind, showCompactStrip);
var allowQuickStrip = !string.Equals(tab, "Chat", StringComparison.OrdinalIgnoreCase);
var quickRunningActive = runningOnlyFilter && runningConversationCount > 0;
var quickHotActive = !sortConversationsByRecent && spotlightConversationCount > 0;
var showQuickStrip = allowQuickStrip && (quickRunningActive || quickHotActive);
return new AppStateService.OperationalStatusPresentationState
{
ShowRuntimeBadge = status.ShowRuntimeBadge && hasLiveRuntimeActivity,
RuntimeLabel = status.RuntimeLabel,
ShowLastCompleted = status.ShowLastCompleted,
LastCompletedText = status.LastCompletedText,
ShowCompactStrip = showCompactStrip,
StripKind = showCompactStrip ? status.StripKind : "none",
StripText = showCompactStrip ? status.StripText : "",
StripBackgroundHex = stripBackgroundHex,
StripBorderHex = stripBorderHex,
StripForegroundHex = stripForegroundHex,
ShowQuickStrip = showQuickStrip,
QuickRunningText = runningConversationCount > 0 ? $"진행 {runningConversationCount}" : "진행",
QuickHotText = spotlightConversationCount > 0 ? $"활동 {spotlightConversationCount}" : "활동",
QuickRunningActive = quickRunningActive,
QuickHotActive = quickHotActive,
QuickRunningBackgroundHex = quickRunningActive ? "#DBEAFE" : "#F8FAFC",
QuickRunningBorderHex = quickRunningActive ? "#93C5FD" : "#E5E7EB",
QuickRunningForegroundHex = quickRunningActive ? "#1D4ED8" : "#6B7280",
QuickHotBackgroundHex = quickHotActive ? "#F5F3FF" : "#F8FAFC",
QuickHotBorderHex = quickHotActive ? "#C4B5FD" : "#E5E7EB",
QuickHotForegroundHex = quickHotActive ? "#6D28D9" : "#6B7280",
};
}
private static (string backgroundHex, string borderHex, string foregroundHex) ResolveStripColors(string stripKind, bool visible)
{
if (!visible)
return ("", "", "");
if (string.Equals(stripKind, "permission_waiting", StringComparison.OrdinalIgnoreCase))
return ("#FFF7ED", "#FDBA74", "#C2410C");
if (string.Equals(stripKind, "failed_run", StringComparison.OrdinalIgnoreCase)
|| string.Equals(stripKind, "permission_denied", StringComparison.OrdinalIgnoreCase))
return ("#FEF2F2", "#FECACA", "#991B1B");
return ("", "", "");
}
}