코워크/코드 실행 중 UI 렌더 부담 완화 및 claude-code 구조 비교 반영
Some checks failed
Release Gate / gate (push) Has been cancelled

- claude-code의 Messages, VirtualMessageList, StatusLine, StreamingToolExecutor 흐름을 다시 비교해 AX의 구조적 병목을 점검함

- Cowork/Code에서 실행 히스토리를 접어 둔 상태일 때 process feed 이벤트가 transcript 전체 재렌더를 자주 유발하던 경로를 줄임

- 경량 라이브 진행 모드를 도입해 라이브 카드와 상태 표시를 우선 사용하고 execution history render / agent UI event timer 간격을 더 느슨하게 조정함

- 완료/오류/문서 결과처럼 기록 가치가 큰 이벤트만 적극적으로 transcript 렌더를 요청하도록 정리함

- README와 DEVELOPMENT 문서를 2026-04-08 12:18 (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:29:04 +09:00
parent 1b4a2bfb1c
commit 77b63e7a83
3 changed files with 55 additions and 5 deletions

View File

@@ -5427,3 +5427,19 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
- 글로우 설정 정책 정리
- 런처 글로우(`런처 무지개 글로우`, `런처 선택 글로우`)는 일반 설정에 그대로 유지한다.
- AX Agent 내부 설정은 채팅 입력창 글로우만 조정하도록 역할을 분리했다.
## 2026-04-08 12:18 (KST)
- `claw-code` 구조 비교
- [Messages.tsx](/E:/AX%20Copilot%20-%20Codex/claw-code/claw-code-f5a40b86dede580f6543bf8926c9af017eea9409/src/components/Messages.tsx), [VirtualMessageList.tsx](/E:/AX%20Copilot%20-%20Codex/claw-code/claw-code-f5a40b86dede580f6543bf8926c9af017eea9409/src/components/VirtualMessageList.tsx), [StatusLine.tsx](/E:/AX%20Copilot%20-%20Codex/claw-code/claw-code-f5a40b86dede580f6543bf8926c9af017eea9409/src/components/StatusLine.tsx), [StreamingToolExecutor.ts](/E:/AX%20Copilot%20-%20Codex/claw-code/claw-code-f5a40b86dede580f6543bf8926c9af017eea9409/src/services/tools/StreamingToolExecutor.ts)를 다시 대조했다.
- `claw-code`는 가상화된 메시지 리스트, memoized header/status line, 실행 중 라이브 영역과 최종 transcript 분리를 통해 CPU 쓰기를 크게 줄인다.
- AX는 코워크/코드 스트리밍 중에도 process feed 이벤트가 transcript 재렌더를 자주 유발해 `claw-code`보다 UI 스레드 부담이 큰 상태였다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)
- `IsLightweightLiveProgressMode()`를 추가해 `Cowork/Code + 실행 히스토리 접힘` 조합을 별도 경량 모드로 판단하도록 했다.
- 경량 모드에서는 `_executionHistoryRenderTimer` 간격을 2200ms, `_agentUiEventTimer` 간격을 420ms로 더 늦춰 진행 이벤트 폭주 시 UI 스레드 부하를 줄였다.
- 경량 모드에서는 process feed/대기/압축 계열 이벤트가 매번 transcript 렌더를 요청하지 않도록 조정하고, 완료/오류/문서 생성 결과처럼 실제 기록 가치가 큰 이벤트만 transcript 렌더 요청을 남기도록 정리했다.
- 라이브 진행 힌트(`UpdateLiveAgentProgressHint`)도 경량 모드에서는 transcript 렌더를 직접 깨우지 않고, 기존 라이브 카드/펄스 상태만 갱신하도록 바꿨다.
- 기대 효과
- 코워크/코드 실행 중 잦은 `RenderMessages()` 호출 감소
- 진행 이벤트가 많은 세션에서 입력/스크롤/탭 전환 버벅임 완화
- 실행 중 UI는 라이브 카드 중심, 결과 기록은 완료 시점 중심으로 분리