AX Agent 진행 시간 표기와 글로우 설정 위치를 정리한다\n\n- Cowork/Code 진행 카드에서 스트리밍 시작 시각이 준비되기 전 계산되며 수천만 시간으로 튀는 문제를 수정한다\n- 진행 카드 라이브 대기 색상을 테마 AccentColor 기반으로 조정해 주황색 고정 느낌을 제거한다\n- 채팅 입력창 글로우를 런처와 같은 리듬의 무지개 글로우로 완화하고 외곽선 두께와 블러를 정리한다\n- 일반 설정의 런처/채팅 글로우 토글을 제거하고 AX Agent 내부 설정 공통 탭으로 이동한다\n- README와 DEVELOPMENT 문서에 변경 내용과 시각을 반영한다\n\n검증 결과\n- dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\\n- 경고 0 / 오류 0
This commit is contained in:
@@ -5302,6 +5302,7 @@ public partial class ChatWindow : Window
|
||||
ForceScrollToEnd(); // 사용자 메시지 전송 시 강제 하단 이동
|
||||
PlayRainbowGlow(); // 무지개 글로우 애니메이션
|
||||
|
||||
_streamStartTime = DateTime.UtcNow;
|
||||
_isStreaming = true;
|
||||
_streamRunTab = runTab;
|
||||
StartLiveAgentProgressHints();
|
||||
@@ -5318,7 +5319,6 @@ public partial class ChatWindow : Window
|
||||
_displayedLength = 0;
|
||||
_cursorVisible = true;
|
||||
_aiIconPulseStopped = false;
|
||||
_streamStartTime = DateTime.UtcNow;
|
||||
_elapsedTimer.Start();
|
||||
SetStatus("응답 생성 중...", spinning: true);
|
||||
|
||||
@@ -6415,7 +6415,8 @@ public partial class ChatWindow : Window
|
||||
var normalizedSummary = string.IsNullOrWhiteSpace(summary) ? null : summary.Trim();
|
||||
var currentSummary = _liveAgentProgressHint?.Summary;
|
||||
var currentToolName = _liveAgentProgressHint?.ToolName ?? "";
|
||||
var elapsedMs = _isStreaming
|
||||
var hasValidStreamStart = _streamStartTime.Year >= 2000 && _streamStartTime <= DateTime.UtcNow.AddSeconds(1);
|
||||
var elapsedMs = _isStreaming && hasValidStreamStart
|
||||
? Math.Max(0L, (long)(DateTime.UtcNow - _streamStartTime.ToUniversalTime()).TotalMilliseconds)
|
||||
: 0L;
|
||||
var inputTokens = Math.Max(0, _agentCumulativeInputTokens);
|
||||
@@ -8769,22 +8770,18 @@ public partial class ChatWindow : Window
|
||||
_rainbowTimer?.Stop();
|
||||
_rainbowStartTime = DateTime.UtcNow;
|
||||
|
||||
// 페이드인 (빠르게)
|
||||
InputGlowBorder.Effect = new System.Windows.Media.Effects.BlurEffect { Radius = 6 };
|
||||
InputGlowBorder.BeginAnimation(UIElement.OpacityProperty,
|
||||
new System.Windows.Media.Animation.DoubleAnimation(0, 0.9, TimeSpan.FromMilliseconds(150)));
|
||||
new System.Windows.Media.Animation.DoubleAnimation(0, 0.62, TimeSpan.FromMilliseconds(180)));
|
||||
|
||||
// 그라데이션 회전 타이머 (~60fps) — 스트리밍 종료까지 지속
|
||||
_rainbowTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(16) };
|
||||
_rainbowTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(40) };
|
||||
_rainbowTimer.Tick += (_, _) =>
|
||||
{
|
||||
var elapsed = (DateTime.UtcNow - _rainbowStartTime).TotalMilliseconds;
|
||||
|
||||
// 그라데이션 오프셋 회전
|
||||
var shift = (elapsed / 1500.0) % 1.0; // 1.5초에 1바퀴 (느리게)
|
||||
var shift = (elapsed / 2000.0) % 1.0;
|
||||
var brush = InputGlowBorder.BorderBrush as LinearGradientBrush;
|
||||
if (brush == null) return;
|
||||
|
||||
// 시작/끝점 회전 (원형 이동)
|
||||
var angle = shift * Math.PI * 2;
|
||||
brush.StartPoint = new Point(0.5 + 0.5 * Math.Cos(angle), 0.5 + 0.5 * Math.Sin(angle));
|
||||
brush.EndPoint = new Point(0.5 - 0.5 * Math.Cos(angle), 0.5 - 0.5 * Math.Sin(angle));
|
||||
@@ -10278,6 +10275,9 @@ public partial class ChatWindow : Window
|
||||
llm.WorkflowVisualizer = ChkOverlayWorkflowVisualizer?.IsChecked == true;
|
||||
llm.ShowTotalCallStats = ChkOverlayShowTotalCallStats?.IsChecked == true;
|
||||
llm.EnableAuditLog = ChkOverlayEnableAuditLog?.IsChecked == true;
|
||||
llm.EnableChatRainbowGlow = ChkOverlayEnableChatRainbowGlow?.IsChecked == true;
|
||||
_settings.Settings.Launcher.EnableRainbowGlow = ChkOverlayEnableLauncherRainbowGlow?.IsChecked == true;
|
||||
_settings.Settings.Launcher.EnableSelectionGlow = ChkOverlayEnableSelectionGlow?.IsChecked == true;
|
||||
|
||||
CommitOverlayEndpointInput(normalizeOnInvalid: true);
|
||||
CommitOverlayApiKeyInput();
|
||||
@@ -10482,6 +10482,12 @@ public partial class ChatWindow : Window
|
||||
ChkOverlayShowTotalCallStats.IsChecked = llm.ShowTotalCallStats;
|
||||
if (ChkOverlayEnableAuditLog != null)
|
||||
ChkOverlayEnableAuditLog.IsChecked = llm.EnableAuditLog;
|
||||
if (ChkOverlayEnableChatRainbowGlow != null)
|
||||
ChkOverlayEnableChatRainbowGlow.IsChecked = llm.EnableChatRainbowGlow;
|
||||
if (ChkOverlayEnableLauncherRainbowGlow != null)
|
||||
ChkOverlayEnableLauncherRainbowGlow.IsChecked = _settings.Settings.Launcher.EnableRainbowGlow;
|
||||
if (ChkOverlayEnableSelectionGlow != null)
|
||||
ChkOverlayEnableSelectionGlow.IsChecked = _settings.Settings.Launcher.EnableSelectionGlow;
|
||||
}
|
||||
|
||||
RefreshOverlayThemeCards();
|
||||
|
||||
Reference in New Issue
Block a user