코워크·코드 스트리밍 렌더 윈도우 축소 및 타이머 재예약 최적화
Some checks failed
Release Gate / gate (push) Has been cancelled

- claude-code의 virtualized message list 방향을 참고해 AX transcript에 실행 중 경량 렌더 윈도우를 도입함

- 코워크/코드 스트리밍 중 최근 항목 위주로 더 작은 타임라인만 렌더하도록 조정해 render 대상 수를 줄임

- execution history, agent UI event, task summary, input UI 타이머는 경량 라이브 진행 모드에서 이미 예약되어 있으면 다시 stop/start 하지 않도록 정리함

- README와 DEVELOPMENT 문서를 2026-04-08 12:33 (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-08 23:44:52 +09:00
parent 6bccc229b0
commit 117320af02
3 changed files with 42 additions and 1 deletions

View File

@@ -2280,9 +2280,22 @@ public partial class ChatWindow : Window
// ─── 메시지 렌더링 ───────────────────────────────────────────────────
private const int TimelineRenderPageSize = 180;
private const int TimelineStreamingRenderLimit = 96;
private const int TimelineLightweightStreamingRenderLimit = 60;
private string? _lastRenderedConversationId;
private int _timelineRenderLimit = TimelineRenderPageSize;
private int GetActiveTimelineRenderLimit()
{
if (!_isStreaming)
return _timelineRenderLimit;
var streamingLimit = IsLightweightLiveProgressMode()
? TimelineLightweightStreamingRenderLimit
: TimelineStreamingRenderLimit;
return Math.Min(_timelineRenderLimit, streamingLimit);
}
private void RenderMessages(bool preserveViewport = false)
{
var previousScrollableHeight = MessageScroll?.ScrollableHeight ?? 0;
@@ -2330,7 +2343,8 @@ public partial class ChatWindow : Window
EmptyState.Visibility = Visibility.Collapsed;
var orderedTimeline = BuildTimelineRenderActions(visibleMessages, visibleEvents);
var hiddenCount = Math.Max(0, orderedTimeline.Count - _timelineRenderLimit);
var effectiveRenderLimit = GetActiveTimelineRenderLimit();
var hiddenCount = Math.Max(0, orderedTimeline.Count - effectiveRenderLimit);
var visibleTimeline = hiddenCount > 0
? orderedTimeline.GetRange(hiddenCount, orderedTimeline.Count - hiddenCount)
: orderedTimeline;
@@ -2962,6 +2976,9 @@ public partial class ChatWindow : Window
return;
}
if (IsLightweightLiveProgressMode() && _inputUiRefreshTimer.IsEnabled)
return;
_inputUiRefreshTimer.Stop();
_inputUiRefreshTimer.Start();
}
@@ -6066,6 +6083,9 @@ public partial class ChatWindow : Window
_pendingHiddenExecutionHistoryRender = true;
return;
}
if (IsLightweightLiveProgressMode() && _executionHistoryRenderTimer.IsEnabled)
return;
_executionHistoryRenderTimer.Stop();
_executionHistoryRenderTimer.Start();
}
@@ -6112,6 +6132,9 @@ public partial class ChatWindow : Window
return;
}
if (IsLightweightLiveProgressMode() && _taskSummaryRefreshTimer.IsEnabled)
return;
_taskSummaryRefreshTimer.Stop();
_taskSummaryRefreshTimer.Start();
}
@@ -6135,6 +6158,9 @@ public partial class ChatWindow : Window
return;
}
if (IsLightweightLiveProgressMode() && _agentUiEventTimer.IsEnabled)
return;
_agentUiEventTimer.Stop();
_agentUiEventTimer.Start();
}