구조 개선: 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:
43
src/AxCopilot/Views/TranscriptVisualItem.cs
Normal file
43
src/AxCopilot/Views/TranscriptVisualItem.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
using System;
|
||||
using System.Windows;
|
||||
|
||||
namespace AxCopilot.Views;
|
||||
|
||||
public sealed class TranscriptVisualItem
|
||||
{
|
||||
private readonly Func<UIElement>? _factory;
|
||||
private readonly Action<UIElement>? _onMaterialized;
|
||||
private UIElement? _element;
|
||||
|
||||
public TranscriptVisualItem(string key, UIElement element)
|
||||
{
|
||||
Key = key;
|
||||
_element = element;
|
||||
}
|
||||
|
||||
public TranscriptVisualItem(string key, Func<UIElement> factory, Action<UIElement>? onMaterialized = null)
|
||||
{
|
||||
Key = key;
|
||||
_factory = factory;
|
||||
_onMaterialized = onMaterialized;
|
||||
}
|
||||
|
||||
public string Key { get; }
|
||||
|
||||
public bool IsMaterialized => _element != null;
|
||||
|
||||
public UIElement? Element => _element;
|
||||
|
||||
public UIElement GetOrCreateElement()
|
||||
{
|
||||
if (_element != null)
|
||||
return _element;
|
||||
|
||||
if (_factory == null)
|
||||
throw new InvalidOperationException("Transcript visual factory is not available.");
|
||||
|
||||
_element = _factory();
|
||||
_onMaterialized?.Invoke(_element);
|
||||
return _element;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user