AX Agent 상태 노출과 계획 표시를 claw-code 기준으로 정리

- 대화 상단 빠른 스트립을 자동 카운트 노출 대신 사용자 필터와 정렬 전환 시에만 보이도록 조정
- 상단 상태 스트립은 권한 대기와 실패 계열만 남기고 queue 관련 기본 배너를 제거
- planning 이벤트는 기본 transcript에서 큰 카드 대신 compact pill만 표시되도록 변경
- README와 DEVELOPMENT 문서에 claw-code 비교 기준 정리 이력 및 검증 결과 반영

검증 결과
- 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:
2026-04-05 16:32:40 +09:00
parent 0fd6940975
commit b53af39358
3 changed files with 27 additions and 41 deletions

View File

@@ -9241,8 +9241,7 @@ public partial class ChatWindow : Window
var showCompactStrip = !string.Equals(_activeTab, "Chat", StringComparison.OrdinalIgnoreCase)
&& (string.Equals(status.StripKind, "permission_waiting", StringComparison.OrdinalIgnoreCase)
|| string.Equals(status.StripKind, "failed_run", StringComparison.OrdinalIgnoreCase)
|| string.Equals(status.StripKind, "permission_denied", StringComparison.OrdinalIgnoreCase)
|| string.Equals(status.StripKind, "queue_blocked", StringComparison.OrdinalIgnoreCase));
|| string.Equals(status.StripKind, "permission_denied", StringComparison.OrdinalIgnoreCase));
if (!showCompactStrip)
{
@@ -9266,22 +9265,6 @@ public partial class ChatWindow : Window
ConversationStatusStripLabel.Foreground = BrushFromHex("#991B1B");
ConversationStatusStripLabel.Text = status.StripText;
}
else if (string.Equals(status.StripKind, "queue", StringComparison.OrdinalIgnoreCase))
{
ConversationStatusStrip.Visibility = Visibility.Visible;
ConversationStatusStrip.Background = BrushFromHex("#F5F3FF");
ConversationStatusStrip.BorderBrush = BrushFromHex("#C4B5FD");
ConversationStatusStripLabel.Foreground = BrushFromHex("#6D28D9");
ConversationStatusStripLabel.Text = status.StripText;
}
else if (string.Equals(status.StripKind, "queue_blocked", StringComparison.OrdinalIgnoreCase))
{
ConversationStatusStrip.Visibility = Visibility.Visible;
ConversationStatusStrip.Background = BrushFromHex("#FFFBEB");
ConversationStatusStrip.BorderBrush = BrushFromHex("#FCD34D");
ConversationStatusStripLabel.Foreground = BrushFromHex("#B45309");
ConversationStatusStripLabel.Text = status.StripText;
}
else
{
ConversationStatusStrip.Visibility = Visibility.Collapsed;
@@ -9300,8 +9283,8 @@ public partial class ChatWindow : Window
var allowQuickStrip = !string.Equals(_activeTab, "Chat", StringComparison.OrdinalIgnoreCase);
var hasQuickSignal = allowQuickStrip
&& (_runningConversationCount > 0
|| _spotlightConversationCount > 0);
&& (_runningOnlyFilter
|| !_sortConversationsByRecent);
ConversationQuickStrip.Visibility = hasQuickSignal
? Visibility.Visible
@@ -10343,29 +10326,22 @@ public partial class ChatWindow : Window
{
var logLevel = _settings.Settings.Llm.AgentLogLevel;
// Planning 이벤트는 기본적으로 얇은 요약만 보이고, debug에서만 큰 카드로 펼칩니다.
// Planning 이벤트는 claw-code 기준으로 기본 transcript에 요약 pill만 남깁니다.
if (evt.Type == AgentEventType.Planning && evt.Steps is { Count: > 0 })
{
if (string.Equals(logLevel, "debug", StringComparison.OrdinalIgnoreCase))
{
AddPlanningCard(evt);
}
else
{
var compactPrimaryText = TryFindResource("PrimaryText") as Brush ?? Brushes.White;
var compactSecondaryText = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray;
var compactHintBg = TryFindResource("HintBackground") as Brush
?? new SolidColorBrush(Color.FromArgb(0x18, 0xFF, 0xFF, 0xFF));
var compactBorderBrush = TryFindResource("BorderColor") as Brush ?? Brushes.Gray;
var compactAccentBrush = TryFindResource("AccentColor") as Brush ?? Brushes.CornflowerBlue;
var summary = !string.IsNullOrWhiteSpace(evt.Summary)
? evt.Summary!
: $"계획 {evt.Steps.Count}단계";
var pill = CreateCompactEventPill(summary, compactPrimaryText, compactSecondaryText, compactHintBg, compactBorderBrush, compactAccentBrush);
pill.Opacity = 0;
pill.BeginAnimation(UIElement.OpacityProperty, new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(160)));
MessagePanel.Children.Add(pill);
}
var compactPrimaryText = TryFindResource("PrimaryText") as Brush ?? Brushes.White;
var compactSecondaryText = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray;
var compactHintBg = TryFindResource("HintBackground") as Brush
?? new SolidColorBrush(Color.FromArgb(0x18, 0xFF, 0xFF, 0xFF));
var compactBorderBrush = TryFindResource("BorderColor") as Brush ?? Brushes.Gray;
var compactAccentBrush = TryFindResource("AccentColor") as Brush ?? Brushes.CornflowerBlue;
var summary = !string.IsNullOrWhiteSpace(evt.Summary)
? evt.Summary!
: $"계획 {evt.Steps.Count}단계";
var pill = CreateCompactEventPill(summary, compactPrimaryText, compactSecondaryText, compactHintBg, compactBorderBrush, compactAccentBrush);
pill.Opacity = 0;
pill.BeginAnimation(UIElement.OpacityProperty, new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(160)));
MessagePanel.Children.Add(pill);
return;
}