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)
69 lines
3.4 KiB
C#
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 ("", "", "");
|
|
}
|
|
}
|