AX Agent 코워크·코드 흐름과 컨텍스트 관리를 claude-code 기준으로 대폭 정리
- 코워크·코드 프롬프트, 도구 선택, 문서 생성/검증 흐름을 claude-code 동등 품질 기준으로 재정렬함 - OpenAI/vLLM 경로의 오래된 tool history를 평탄화하고 최근 이력만 구조화해 컨텍스트 직렬화를 경량화함 - AX Agent UI를 테마 기준으로 재구성하고 플랜 승인/오버레이/이벤트 렌더링/명령 입력 상호작용을 개선함 - 파일 후보 제안, 반복 경로 정체 복구, LSP 보강, 문서·PPT 처리 개선, 설정/서비스 인터페이스 정리를 함께 반영함 - README.md 및 docs/DEVELOPMENT.md를 작업 시점별로 갱신함 - 검증: 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:
@@ -3,12 +3,41 @@ using System.Windows.Controls;
|
||||
|
||||
namespace AxCopilot.Views;
|
||||
|
||||
/// <summary>
|
||||
/// TranscriptVisualItem의 지연 생성 호스트.
|
||||
/// VirtualizingStackPanel Recycling 모드에서 효율적으로 동작합니다:
|
||||
/// - Loaded: 콘텐츠 구체화 (GetOrCreateElement)
|
||||
/// - Unloaded: 콘텐츠 참조 해제 (재활용 시 메모리 절약)
|
||||
/// - DataContextChanged: 재활용된 컨테이너에 새 아이템 바인딩
|
||||
/// </summary>
|
||||
public sealed class TranscriptVisualHost : ContentControl
|
||||
{
|
||||
public TranscriptVisualHost()
|
||||
{
|
||||
DataContextChanged += (_, _) => SyncContent();
|
||||
Loaded += (_, _) => SyncContent();
|
||||
DataContextChanged += OnDataContextChanged;
|
||||
Loaded += OnLoaded;
|
||||
Unloaded += OnUnloaded;
|
||||
}
|
||||
|
||||
private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
// 재활용 시: 이전 콘텐츠 즉시 해제 후 새 아이템 구체화
|
||||
if (e.OldValue != null && e.NewValue != e.OldValue)
|
||||
Content = null;
|
||||
|
||||
if (IsLoaded)
|
||||
SyncContent();
|
||||
}
|
||||
|
||||
private void OnLoaded(object sender, RoutedEventArgs e) => SyncContent();
|
||||
|
||||
private void OnUnloaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// 화면 밖으로 스크롤된 항목의 콘텐츠 참조 해제
|
||||
// 단, DataContext가 이미 새 아이템으로 바뀐 경우(재활용 중)는 건드리지 않음
|
||||
// → Unloaded가 DataContextChanged 이후 호출되는 레이스 컨디션 방지
|
||||
if (DataContext is not TranscriptVisualItem)
|
||||
Content = null;
|
||||
}
|
||||
|
||||
private void SyncContent()
|
||||
|
||||
Reference in New Issue
Block a user