AX Agent 계획 승인 흐름과 상태선 표현 계층 정리
Some checks failed
Release Gate / gate (push) Has been cancelled

- 계획 승인 기본 흐름을 transcript inline 우선 구조로 더 정리하고, 계획 버튼은 저장된 계획을 여는 상세 보기 성격으로 분리했습니다.

- OperationalStatusPresentationState를 확장해 runtime badge, compact strip, quick strip의 문구·강조색·노출 여부를 한 번에 계산하도록 통합했습니다.

- ChatWindow 상태선/quick strip/status token 로직을 StatusPresentation partial로 분리해 메인 창 코드의 직접 분기와 렌더 책임을 줄였습니다.

- 문서 이력(README, DEVELOPMENT)을 2026-04-06 01:37 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-06 07:17:16 +09:00
parent 95e40df354
commit 90bd77f945
7 changed files with 290 additions and 165 deletions

View File

@@ -167,6 +167,20 @@ public sealed class AppStateService
public bool ShowCompactStrip { get; init; }
public string StripKind { get; init; } = "none";
public string StripText { get; init; } = "";
public string StripBackgroundHex { get; init; } = "";
public string StripBorderHex { get; init; } = "";
public string StripForegroundHex { get; init; } = "";
public bool ShowQuickStrip { get; init; }
public string QuickRunningText { get; init; } = "";
public string QuickHotText { get; init; } = "";
public bool QuickRunningActive { get; init; }
public bool QuickHotActive { get; init; }
public string QuickRunningBackgroundHex { get; init; } = "#F8FAFC";
public string QuickRunningBorderHex { get; init; } = "#E5E7EB";
public string QuickRunningForegroundHex { get; init; } = "#6B7280";
public string QuickHotBackgroundHex { get; init; } = "#F8FAFC";
public string QuickHotBorderHex { get; init; } = "#E5E7EB";
public string QuickHotForegroundHex { get; init; } = "#6B7280";
}
public ChatSessionStateService? ChatSession { get; private set; }
@@ -631,7 +645,13 @@ public sealed class AppStateService
};
}
public OperationalStatusPresentationState GetOperationalStatusPresentation(string tab, bool hasLiveRuntimeActivity)
public OperationalStatusPresentationState GetOperationalStatusPresentation(
string tab,
bool hasLiveRuntimeActivity,
int runningConversationCount,
int spotlightConversationCount,
bool runningOnlyFilter,
bool sortConversationsByRecent)
{
var status = GetOperationalStatus(tab);
var showCompactStrip = !string.Equals(tab, "Chat", StringComparison.OrdinalIgnoreCase)
@@ -639,6 +659,31 @@ public sealed class AppStateService
|| string.Equals(status.StripKind, "failed_run", StringComparison.OrdinalIgnoreCase)
|| string.Equals(status.StripKind, "permission_denied", StringComparison.OrdinalIgnoreCase));
var stripBackgroundHex = "";
var stripBorderHex = "";
var stripForegroundHex = "";
if (showCompactStrip)
{
if (string.Equals(status.StripKind, "permission_waiting", StringComparison.OrdinalIgnoreCase))
{
stripBackgroundHex = "#FFF7ED";
stripBorderHex = "#FDBA74";
stripForegroundHex = "#C2410C";
}
else if (string.Equals(status.StripKind, "failed_run", StringComparison.OrdinalIgnoreCase)
|| string.Equals(status.StripKind, "permission_denied", StringComparison.OrdinalIgnoreCase))
{
stripBackgroundHex = "#FEF2F2";
stripBorderHex = "#FECACA";
stripForegroundHex = "#991B1B";
}
}
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 OperationalStatusPresentationState
{
ShowRuntimeBadge = status.ShowRuntimeBadge && hasLiveRuntimeActivity,
@@ -648,6 +693,20 @@ public sealed class AppStateService
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",
};
}