코워크·코드 실행 중 보조 UI 갱신 부담 완화
Some checks failed
Release Gate / gate (push) Has been cancelled

- claude-code 구조 비교 결과를 바탕으로 코워크/코드 경량 라이브 진행 모드에서 transcript 재렌더에 이어 보조 UI 갱신 빈도도 함께 낮춤

- input UI refresh timer와 task summary refresh timer를 실행 중 경량 모드에서 더 느슨한 간격으로 조정함

- Thinking, ToolCall 같은 고빈도 이벤트는 작업 요약 갱신을 매번 다시 예약하지 않고 상태 변화가 큰 이벤트 중심으로만 갱신하도록 정리함

- README와 DEVELOPMENT 문서를 2026-04-08 12: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-08 23:33:33 +09:00
parent 77b63e7a83
commit 6bccc229b0
3 changed files with 32 additions and 2 deletions

View File

@@ -1503,3 +1503,7 @@ MIT License
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에 `IsLightweightLiveProgressMode()`를 추가해, 코워크/코드 + 실행 히스토리 접힘 상태에서는 라이브 진행 카드를 우선 사용하고 transcript 재렌더 빈도를 더 강하게 낮추도록 조정했습니다.
- 같은 조건에서 `_executionHistoryRenderTimer`, `_agentUiEventTimer` 간격도 더 느슨하게 조정해, 스트리밍 중 작은 진행 이벤트가 여러 타이머를 통해 UI 전체를 자주 흔들던 문제를 줄였습니다.
- 코워크/코드 실행 중 접힌 히스토리 상태에서는 process feed 계열 이벤트가 더 이상 매번 transcript 렌더를 요청하지 않고, 완료/오류/문서 생성 결과처럼 실제로 기록 가치가 큰 이벤트만 강하게 렌더 요청을 남기도록 정리했습니다.
- 업데이트: 2026-04-08 12:26 (KST)
- 코워크/코드 실행 중 보조 UI 갱신도 더 느슨하게 조정했습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서 `입력 보조 UI``작업 요약` 타이머도 경량 라이브 진행 모드일 때 더 긴 간격으로 동작하도록 바꿨습니다.
- 경량 모드에서는 `Thinking`, `ToolCall` 같은 잦은 이벤트마다 `작업 요약` 갱신을 다시 예약하지 않고, `계획`, `권한 요청`, `도구 결과`, `완료/오류`처럼 실제로 요약 상태가 달라지는 이벤트 중심으로만 요약 UI를 갱신하도록 정리했습니다.
- 결과적으로 코워크/코드 처리 중 transcript 외의 보조 UI 측정/배치 비용도 함께 줄어, 입력 지연과 스크롤 버벅임 완화에 직접적으로 기여하도록 조정했습니다.

View File

@@ -5443,3 +5443,14 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
- 코워크/코드 실행 중 잦은 `RenderMessages()` 호출 감소
- 진행 이벤트가 많은 세션에서 입력/스크롤/탭 전환 버벅임 완화
- 실행 중 UI는 라이브 카드 중심, 결과 기록은 완료 시점 중심으로 분리
## 2026-04-08 12:26 (KST)
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)
- `_inputUiRefreshTimer`도 경량 라이브 진행 모드에서는 900ms 간격으로 늦춰, 실행 중 컨텍스트 사용량/드래프트 큐 같은 보조 UI 갱신이 메인 렌더링을 과도하게 방해하지 않게 했다.
- `_taskSummaryRefreshTimer`는 같은 조건에서 1200ms 간격으로 조정해 런타임 배지/상태 스트립이 지나치게 자주 다시 그려지지 않도록 완화했다.
- `OnAgentEvent(...)`에서 경량 모드일 때는 `Thinking`, `ToolCall` 같은 고빈도 이벤트마다 `ScheduleTaskSummaryRefresh()`를 다시 걸지 않고, `Planning`, `PermissionRequest`, `ToolResult`, `Complete`, `Error`처럼 실제 상태 변화가 큰 이벤트 중심으로만 작업 요약 갱신을 예약하게 바꿨다.
- 기대 효과
- transcript 외 보조 UI 재측정/재배치 비용 감소
- 코워크/코드 실행 중 입력 지연과 스크롤 끊김 완화
- 라이브 진행 카드와 상태바는 유지하되, 그 외 UI는 더 느슨하게 갱신

View File

@@ -260,6 +260,11 @@ public partial class ChatWindow : Window
_inputUiRefreshTimer.Tick += (_, _) =>
{
_inputUiRefreshTimer.Stop();
_inputUiRefreshTimer.Interval = _isStreaming
? (IsLightweightLiveProgressMode()
? TimeSpan.FromMilliseconds(900)
: TimeSpan.FromMilliseconds(250))
: TimeSpan.FromMilliseconds(250);
RefreshContextUsageVisual();
RefreshDraftQueueUi();
};
@@ -283,7 +288,9 @@ public partial class ChatWindow : Window
{
_taskSummaryRefreshTimer.Stop();
_taskSummaryRefreshTimer.Interval = _isStreaming
? TimeSpan.FromMilliseconds(800)
? (IsLightweightLiveProgressMode()
? TimeSpan.FromMilliseconds(1200)
: TimeSpan.FromMilliseconds(800))
: TimeSpan.FromMilliseconds(120);
UpdateTaskSummaryIndicators();
};
@@ -6862,8 +6869,16 @@ public partial class ChatWindow : Window
}
ScheduleAgentUiEvent(evt);
if (!lightweightLiveMode
|| evt.Type is AgentEventType.Complete
or AgentEventType.Error
or AgentEventType.Planning
or AgentEventType.PermissionRequest
or AgentEventType.ToolResult)
{
ScheduleTaskSummaryRefresh();
}
}
private void StartLiveAgentProgressHints()
{