AX Agent transcript 렌더 구조를 분리하고 권한/도구 결과 표시 체계를 정리한다
Some checks failed
Release Gate / gate (push) Has been cancelled
Some checks failed
Release Gate / gate (push) Has been cancelled
- ChatWindow.xaml.cs에 몰려 있던 의견 요청, 계획 승인, 작업 요약 렌더를 partial 파일로 분리해 transcript 책임을 낮췄다. - PermissionRequestPresentationCatalog와 ToolResultPresentationCatalog를 추가해 권한 요청 및 도구 결과 badge를 타입별로 해석하도록 정리했다. - AppStateService에 OperationalStatusPresentationState를 추가하고 상태선 계산을 presentation 계층으로 한 번 더 분리했다. - README.md, docs/DEVELOPMENT.md, docs/claw-code-parity-plan.md에 2026-04-06 00:58 (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:
@@ -158,6 +158,17 @@ public sealed class AppStateService
|
||||
public string StripText { get; init; } = "";
|
||||
}
|
||||
|
||||
public sealed class OperationalStatusPresentationState
|
||||
{
|
||||
public bool ShowRuntimeBadge { get; init; }
|
||||
public string RuntimeLabel { get; init; } = "";
|
||||
public bool ShowLastCompleted { get; init; }
|
||||
public string LastCompletedText { get; init; } = "";
|
||||
public bool ShowCompactStrip { get; init; }
|
||||
public string StripKind { get; init; } = "none";
|
||||
public string StripText { get; init; } = "";
|
||||
}
|
||||
|
||||
public ChatSessionStateService? ChatSession { get; private set; }
|
||||
public SkillCatalogState Skills { get; } = new();
|
||||
public McpCatalogState Mcp { get; } = new();
|
||||
@@ -620,6 +631,26 @@ public sealed class AppStateService
|
||||
};
|
||||
}
|
||||
|
||||
public OperationalStatusPresentationState GetOperationalStatusPresentation(string tab, bool hasLiveRuntimeActivity)
|
||||
{
|
||||
var status = GetOperationalStatus(tab);
|
||||
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));
|
||||
|
||||
return new 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 : "",
|
||||
};
|
||||
}
|
||||
|
||||
public IReadOnlyList<DraftQueueItem> GetDraftQueueItems(string tab)
|
||||
=> ChatSession?.GetDraftQueueItems(tab) ?? Array.Empty<DraftQueueItem>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user