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:
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
@@ -14,6 +15,13 @@ public partial class ChatWindow
|
||||
if (MessageList == null) return;
|
||||
if (!string.Equals(runTab, _activeTab, StringComparison.OrdinalIgnoreCase)) return;
|
||||
|
||||
// V2 분기
|
||||
if (_settings.Settings.Llm.EnableNewChatRendering)
|
||||
{
|
||||
ShowAgentLiveCardV2(runTab);
|
||||
return;
|
||||
}
|
||||
|
||||
RemoveAgentLiveCard(animated: false);
|
||||
|
||||
_agentLiveStartTime = DateTime.UtcNow;
|
||||
@@ -52,23 +60,25 @@ public partial class ChatWindow
|
||||
headerGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });
|
||||
headerGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
|
||||
|
||||
var liveIcon = CreateMiniLauncherIcon(pixelSize: 4.0);
|
||||
if (!IsLightweightLiveProgressMode(runTab))
|
||||
var (agentName, _, _) = GetAgentIdentity();
|
||||
var (liveIconHost, livePixels, liveGlows, liveRotate, liveScale) = CreateMiniLauncherIconEx(4.0, "none");
|
||||
{
|
||||
liveIcon.BeginAnimation(
|
||||
UIElement.OpacityProperty,
|
||||
new DoubleAnimation(1.0, 0.35, TimeSpan.FromMilliseconds(750))
|
||||
// 모든 모드에서 동일한 순차 점멸 애니메이션 적용
|
||||
var canvas = liveIconHost.Children.OfType<Canvas>().FirstOrDefault();
|
||||
if (canvas != null)
|
||||
{
|
||||
var animState = new ChatIconAnimState
|
||||
{
|
||||
AutoReverse = true,
|
||||
RepeatBehavior = RepeatBehavior.Forever,
|
||||
EasingFunction = new SineEase()
|
||||
});
|
||||
Host = liveIconHost, Canvas = canvas, Pixels = livePixels,
|
||||
Glows = liveGlows, Rotate = liveRotate, Scale = liveScale,
|
||||
IsRandomMode = _settings.Settings.Launcher.EnableChatIconRandomAnimation,
|
||||
};
|
||||
StartChatIconAnimation(animState);
|
||||
}
|
||||
}
|
||||
|
||||
Grid.SetColumn(liveIcon, 0);
|
||||
headerGrid.Children.Add(liveIcon);
|
||||
|
||||
var (agentName, _, _) = GetAgentIdentity();
|
||||
Grid.SetColumn(liveIconHost, 0);
|
||||
headerGrid.Children.Add(liveIconHost);
|
||||
var nameTb = new TextBlock
|
||||
{
|
||||
Text = agentName,
|
||||
@@ -108,7 +118,7 @@ public partial class ChatWindow
|
||||
{
|
||||
Text = "준비 중...",
|
||||
FontSize = 12,
|
||||
FontFamily = new FontFamily("Segoe UI, Malgun Gothic"),
|
||||
FontFamily = s_segoeUiFont,
|
||||
Foreground = secondaryText,
|
||||
TextWrapping = TextWrapping.Wrap,
|
||||
};
|
||||
@@ -168,7 +178,7 @@ public partial class ChatWindow
|
||||
{
|
||||
Text = $"› {subItem}",
|
||||
FontSize = 10.5,
|
||||
FontFamily = new FontFamily("Segoe UI, Malgun Gothic"),
|
||||
FontFamily = s_segoeUiFont,
|
||||
Foreground = secondary,
|
||||
Opacity = 0.62,
|
||||
TextTrimming = TextTrimming.CharacterEllipsis,
|
||||
@@ -181,12 +191,19 @@ public partial class ChatWindow
|
||||
|
||||
private void RemoveAgentLiveCard(bool animated = true)
|
||||
{
|
||||
// V2 분기 — V2 라이브 컨테이너도 함께 정리
|
||||
if (_v2LiveContainer != null)
|
||||
RemoveAgentLiveCardV2(animated);
|
||||
|
||||
_agentLiveElapsedTimer?.Stop();
|
||||
_agentLiveElapsedTimer = null;
|
||||
|
||||
if (_agentLiveContainer == null)
|
||||
return;
|
||||
|
||||
// 라이브 카드에 연결된 아이콘 애니메이션 상태 제거
|
||||
_chatIconAnimStates.RemoveAll(s => s.Host != null && !s.Host.IsVisible);
|
||||
|
||||
var toRemove = _agentLiveContainer;
|
||||
_agentLiveContainer = null;
|
||||
_agentLiveStatusText = null;
|
||||
|
||||
Reference in New Issue
Block a user