AX Agent 진행 표시를 Claude Code 스타일에 가깝게 정리
Some checks failed
Release Gate / gate (push) Has been cancelled

- execution history를 접은 상태에서도 대기/압축/중요 진행 이벤트가 transcript에 계속 노출되도록 필터를 조정함

- 진행 줄 메타를 경과 시간 · 누적 토큰 형식으로 통일하고 일반 진행 이벤트를 평평한 line 스타일로 정리함

- 장기 대기/컨텍스트 압축 상태만 강조 배경과 펄스 마커를 유지해 살아 있는 작업이 더 잘 보이도록 개선함

- README와 DEVELOPMENT 문서에 2026-04-06 23:26 (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 23:29:08 +09:00
parent 45dfa70951
commit dc2574bb17
5 changed files with 315 additions and 20 deletions

View File

@@ -28,9 +28,32 @@ public partial class ChatWindow
private List<ChatExecutionEvent> GetVisibleTimelineEvents(ChatConversation? conversation)
{
return (conversation?.ShowExecutionHistory ?? true)
? conversation?.ExecutionEvents?.ToList() ?? new List<ChatExecutionEvent>()
: new List<ChatExecutionEvent>();
var events = conversation?.ExecutionEvents?.ToList() ?? new List<ChatExecutionEvent>();
if (conversation?.ShowExecutionHistory ?? true)
return events;
return events
.Where(ShouldShowCollapsedProgressEvent)
.ToList();
}
private static bool ShouldShowCollapsedProgressEvent(ChatExecutionEvent executionEvent)
{
var restoredEvent = ToAgentEvent(executionEvent);
if (restoredEvent.Type == AgentEventType.Complete || restoredEvent.Type == AgentEventType.Error)
return true;
if (restoredEvent.Type == AgentEventType.Thinking)
{
if (string.Equals(restoredEvent.ToolName, "agent_wait", StringComparison.OrdinalIgnoreCase)
|| string.Equals(restoredEvent.ToolName, "context_compaction", StringComparison.OrdinalIgnoreCase))
return true;
if (!string.IsNullOrWhiteSpace(restoredEvent.Summary))
return true;
}
return IsProcessFeedEvent(restoredEvent);
}
private List<(DateTime Timestamp, int Order, Action Render)> BuildTimelineRenderActions(
@@ -48,6 +71,10 @@ public partial class ChatWindow
timeline.Add((executionEvent.Timestamp, 1, () => AddAgentEventBanner(restoredEvent)));
}
var liveProgressHint = GetLiveAgentProgressHint();
if (liveProgressHint != null)
timeline.Add((liveProgressHint.Timestamp, 2, () => AddAgentEventBanner(liveProgressHint)));
return timeline
.OrderBy(x => x.Timestamp)
.ThenBy(x => x.Order)