- 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)
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
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 ("", "", "");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user