구조 개선: transcript 지연 가상화와 tool executor 분리 적용
이번 변경은 claude-code 기준 구조 강건성을 높이기 위한 리팩터링입니다. 핵심 수정 사항: - AX Agent transcript를 TranscriptVisualItem/TranscriptVisualHost 기반 지연 materialization 구조로 전환해 MessageList 가상화 기반을 강화했습니다. - StreamingToolExecutionCoordinator를 IToolExecutionCoordinator 뒤로 분리해 AgentLoopService가 구체 구현에 직접 묶이지 않도록 정리했습니다. - 라이브 진행 카드 렌더를 ChatWindow.LiveProgressPresentation partial로 이동해 ChatWindow.xaml.cs의 책임을 더 줄였습니다. - 기존 메시지 bubble 조립 로직을 유지하면서 transcript host가 필요 시점에 bubble을 만들 수 있도록 helper 경로를 추가했습니다. 검증 결과: - 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:
@@ -116,11 +116,21 @@ public partial class ChatWindow
|
||||
var cacheKey = $"m_{msg.MsgId}";
|
||||
timeline.Add((cacheKey, msg.Timestamp, 0, () =>
|
||||
{
|
||||
// 캐시된 버블이 있으면 재생성 없이 재사용 (O(1) Add vs 전체 재생성)
|
||||
if (_elementCache.TryGetValue(cacheKey, out var cached))
|
||||
AddTranscriptElement(cached);
|
||||
else
|
||||
AddMessageBubble(capturedMsg.Role, capturedMsg.Content, animate: false, message: capturedMsg);
|
||||
AddDeferredTranscriptElement(
|
||||
cacheKey,
|
||||
() =>
|
||||
{
|
||||
if (_elementCache.TryGetValue(cacheKey, out var cached))
|
||||
return cached;
|
||||
|
||||
var element = CreateMessageBubbleElement(
|
||||
capturedMsg.Role,
|
||||
capturedMsg.Content,
|
||||
animate: false,
|
||||
message: capturedMsg);
|
||||
_elementCache[cacheKey] = element;
|
||||
return element;
|
||||
});
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user