AX Agent transcript 호스트를 컬렉션 기반으로 재구성해 코워크·코드 스트리밍 중 UI 부하를 줄임
Some checks failed
Release Gate / gate (push) Has been cancelled

- 메시지 영역을 ScrollViewer+StackPanel 직접 조작 구조에서 ListBox+ObservableCollection 기반 transcript 호스트로 전환
- ChatWindow.TranscriptHost 도입으로 transcript 요소 추가·교체·삭제·스크롤 접근을 공용 helper로 정리
- 코워크/코드 실행 중 RenderMessages와 라이브 카드가 MessagePanel.Children 직접 조작에 덜 의존하도록 정리
- MessageBubble, AgentEventRendering, Timeline, UserAsk, ConversationManagement 등 transcript 관련 partial을 새 호스트 구조에 맞게 전환
- 향후 claw-code의 VirtualMessageList 수준 가상화를 적용할 수 있는 기반을 마련
- README와 DEVELOPMENT 문서를 2026-04-08 12:52 (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-09 00:00:37 +09:00
parent 8db1a1ffb0
commit 74d43e701c
11 changed files with 235 additions and 86 deletions

View File

@@ -5478,3 +5478,28 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
- 코워크/코드 실행 중 누적 애니메이션 수 감소
- 긴 세션에서 opacity/translate/scale animation이 UI 스레드에 주는 부담 완화
- 진행 카드는 유지하되 시각 효과 비용은 더 낮춘 상태로 동작
## 2026-04-08 12:52 (KST)
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml)
- transcript 호스트를 `ScrollViewer + StackPanel`에서 `ListBox + VirtualizingStackPanel` 구조로 교체했다.
- `ListBoxItem` 기본 chrome를 제거해 기존 수제 버블/카드 레이아웃을 유지하면서, 이후 실제 가상화 적용을 더 밀어 넣을 수 있는 기반 형태로 맞췄다.
- [ChatWindow.TranscriptHost.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.TranscriptHost.cs)
- `ObservableCollection<UIElement>` 기반 transcript 컬렉션을 추가했다.
- transcript 요소 추가/교체/삭제/인덱스 조회/Contains/scroll access를 helper로 통합했다.
- `ListBox` 내부 `ScrollViewer`를 visual tree에서 한 번 찾아 재사용하고, 스크롤 이벤트도 그 경로를 통해 연결하도록 정리했다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)
- `RenderMessages()`와 스크롤/증분 렌더 경로를 모두 transcript helper 위로 옮겼다.
- 이전처럼 `MessagePanel.Children``MessageScroll`에 직접 의존하지 않게 바꿔, transcript 조작이 한 컬렉션/래퍼를 통해서만 이뤄지도록 정리했다.
- 메시지 폭 계산과 반응형 레이아웃도 `MessageList` 기준으로 다시 계산하도록 수정했다.
- [ChatWindow.MessageBubblePresentation.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.MessageBubblePresentation.cs)
- [ChatWindow.AgentEventRendering.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.AgentEventRendering.cs)
- [ChatWindow.MessageInteractions.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.MessageInteractions.cs)
- [ChatWindow.TimelinePresentation.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.TimelinePresentation.cs)
- [ChatWindow.UserAskPresentation.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.UserAskPresentation.cs)
- [ChatWindow.ConversationManagementPresentation.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.ConversationManagementPresentation.cs)
- transcript 요소 추가/제거/치환 로직을 모두 새 helper 기반으로 전환했다.
- 구조 효과
- 실행 중 `Children.Add/Remove`에 직접 매달리던 경로를 줄여 레이아웃 churn을 완화했다.
- `claw-code``VirtualMessageList`처럼 완전한 전면 가상화는 아니지만, 그 단계로 가기 위한 transcript host 분리를 마쳤다.
- 이후 단계에서는 이 컬렉션 호스트 위에 실제 item virtualization/placeholder/windowing을 더 강하게 적용할 수 있다.