Files
AX-Copilot-Codex/src/AxCopilot/Views/TranscriptVisualItem.cs
lacvet 7931566212 구조 개선: 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
2026-04-09 01:37:08 +09:00

44 lines
1.0 KiB
C#

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;
}
}