AX Agent 라이브 진행 메시지 애니메이션 추가 및 문서 갱신
Some checks failed
Release Gate / gate (push) Has been cancelled

This commit is contained in:
2026-04-06 22:52:35 +09:00
parent 306245524d
commit 30e8218ba4
3 changed files with 49 additions and 0 deletions

View File

@@ -1374,3 +1374,5 @@ MIT License
- 업데이트: 2026-04-06 22:42 (KST)
- AX Agent의 라이브 대기/압축 진행 힌트를 `claw-code`처럼 더 읽기 쉬운 진행 한 줄로 보강했습니다. 이제 Cowork/Code에서 오래 걸릴 때 `처리 중...`, `컨텍스트 압축 중...` 같은 요약줄이 transcript에 살아 있는 진행 상태로 나타납니다.
- 같은 진행 줄 우측에는 `경과 시간``현재 누적 토큰`이 함께 표시되어, 사용자가 “지금 멈춘 건지 아직 처리 중인지”를 기다릴 근거와 함께 바로 확인할 수 있게 조정했습니다.
- 업데이트: 2026-04-06 22:48 (KST)
- AX Agent의 라이브 대기 진행 줄에 작은 펄스 애니메이션을 추가했습니다. 오래 걸리는 `처리 중...`, `컨텍스트 압축 중...` 상태는 이제 좌측 마커가 은은하게 살아 움직여, 멈춘 로그가 아니라 실제 진행 중인 상태라는 점이 더 분명하게 보입니다.

View File

@@ -5075,3 +5075,9 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
- [ChatWindow.AgentEventRendering.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.AgentEventRendering.cs)의 process feed 요약줄에 우측 메타 영역을 추가했다.
- `처리 중...`, `컨텍스트 압축 중...` 같은 라이브 진행 줄에 `6m 46s · 38.8K tokens`처럼 기다릴 근거가 함께 노출된다.
- 라이브 대기/압축 상태는 기존 chevron 대신 강조 마커와 조금 더 진한 제목 톤을 써서 일반 이벤트보다 눈에 잘 들어오도록 구분했다.
## 2026-04-06 22:48 (KST)
- [ChatWindow.AgentEventRendering.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.AgentEventRendering.cs)의 라이브 진행 줄에 작은 펄스 애니메이션을 추가했다.
- `처리 중...`, `컨텍스트 압축 중...`처럼 오래 걸리는 thinking 상태는 좌측 마커가 opacity/scale 펄스를 반복하며 살아 있는 상태임을 보여준다.
- transcript 분위기를 과하게 흔들지 않도록 마커 하나만 은은하게 움직이고, 본문 레이아웃은 그대로 유지해 `claude-code`의 담백한 진행감에 가깝게 맞췄다.

View File

@@ -169,6 +169,8 @@ public partial class ChatWindow
liveWaitingStyle);
summaryRow.Opacity = 0;
summaryRow.BeginAnimation(UIElement.OpacityProperty, new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(140)));
if (liveWaitingStyle)
ApplyLiveWaitingPulse(summaryRow);
stack.Children.Add(summaryRow);
var body = (eventSummaryText ?? string.Empty).Trim();
@@ -212,6 +214,45 @@ public partial class ChatWindow
MessagePanel.Children.Add(stack);
}
private static void ApplyLiveWaitingPulse(Border summaryRow)
{
if (summaryRow.Child is not Grid grid || grid.Children.Count == 0 || grid.Children[0] is not StackPanel panel)
return;
if (panel.Children.Count == 0 || panel.Children[0] is not TextBlock marker)
return;
marker.Text = "✶";
marker.RenderTransformOrigin = new Point(0.5, 0.5);
marker.RenderTransform = new ScaleTransform(1, 1);
var pulse = new DoubleAnimation
{
From = 0.42,
To = 1.0,
Duration = TimeSpan.FromMilliseconds(780),
AutoReverse = true,
RepeatBehavior = RepeatBehavior.Forever,
EasingFunction = new QuadraticEase { EasingMode = EasingMode.EaseInOut },
};
marker.BeginAnimation(UIElement.OpacityProperty, pulse);
if (marker.RenderTransform is ScaleTransform scale)
{
var scaleAnimX = new DoubleAnimation
{
From = 0.92,
To = 1.08,
Duration = TimeSpan.FromMilliseconds(780),
AutoReverse = true,
RepeatBehavior = RepeatBehavior.Forever,
EasingFunction = new QuadraticEase { EasingMode = EasingMode.EaseInOut },
};
var scaleAnimY = scaleAnimX.Clone();
scale.BeginAnimation(ScaleTransform.ScaleXProperty, scaleAnimX);
scale.BeginAnimation(ScaleTransform.ScaleYProperty, scaleAnimY);
}
}
private string BuildProcessFeedMetaText(AgentEvent evt)
{
var parts = new List<string>();