AX Agent 상단 헤더와 대화 목록 메타를 claw-code 쪽으로 정리
Some checks failed
Release Gate / gate (push) Has been cancelled

- 상단 탭 그룹과 사이드바 토글 버튼을 더 얇은 세그먼트형 UI로 조정

- 좌측 대화 목록의 실행 메타와 편집 아이콘을 더 약하게 줄여 제목 중심의 목록 밀도로 재정렬

- 검증: 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 14:46:31 +09:00
parent f3c0366ee6
commit 3b223dc7dc
4 changed files with 31 additions and 25 deletions

View File

@@ -22,6 +22,11 @@ Windows 전용 시맨틱 런처 & 워크스페이스 매니저
- 메시지 내부 액션 바와 Cowork/Code 실행 배너를 더 `claw-code`처럼 보조 레이어로 낮췄습니다. 메시지 액션은 텍스트 버튼 대신 작은 아이콘 버튼 중심으로 바꾸고, 실행 배너는 여백·폰트·토큰 배지·파일 경로 표시를 한 단계 더 얇게 줄여 본문보다 덜 튀게 정리했습니다. - 메시지 내부 액션 바와 Cowork/Code 실행 배너를 더 `claw-code`처럼 보조 레이어로 낮췄습니다. 메시지 액션은 텍스트 버튼 대신 작은 아이콘 버튼 중심으로 바꾸고, 실행 배너는 여백·폰트·토큰 배지·파일 경로 표시를 한 단계 더 얇게 줄여 본문보다 덜 튀게 정리했습니다.
- 검증 예정: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` - 검증 예정: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\`
- 업데이트: 2026-04-05 17:19 (KST)
- 상단 헤더와 탭 그룹, 좌측 대화 목록 행 메타를 더 `claw-code` 쪽 밀도로 조정했습니다. 상단 탭은 더 얇은 세그먼트형으로 줄였고, 사이드바 토글 버튼도 크기와 선 두께를 낮췄습니다.
- 대화 목록은 실행 상태/요약 텍스트와 우측 편집 아이콘을 더 약하게 줄여 제목 중심으로 읽히게 정리했습니다.
- 검증 예정: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\`
- 업데이트: 2026-04-05 16:02 (KST) - 업데이트: 2026-04-05 16:02 (KST)
- `document_plan` 후속 실행 분기를 `claw-code` 기준으로 다시 보강했습니다. 이제 문서 플래너 출력에서 body 골격과 즉시 실행 지시를 깨진 문자열 비교에 의존하지 않고 안정적으로 추출해, `html_create / document_assemble / docx_create / markdown_create` 후속 호출 유도가 실제로 이어집니다. - `document_plan` 후속 실행 분기를 `claw-code` 기준으로 다시 보강했습니다. 이제 문서 플래너 출력에서 body 골격과 즉시 실행 지시를 깨진 문자열 비교에 의존하지 않고 안정적으로 추출해, `html_create / document_assemble / docx_create / markdown_create` 후속 호출 유도가 실제로 이어집니다.
- 코워크 문서형 작업은 설정이 `planMode=off`여도 내부적으로 `always` 플랜 경로를 타도록 보정했습니다. 그래서 문서/보고서/제안서 요청은 먼저 계획을 세우고, 그 계획을 바탕으로 실제 문서 생성 단계까지 이어가도록 정리했습니다. - 코워크 문서형 작업은 설정이 `planMode=off`여도 내부적으로 `always` 플랜 경로를 타도록 보정했습니다. 그래서 문서/보고서/제안서 요청은 먼저 계획을 세우고, 그 계획을 바탕으로 실제 문서 생성 단계까지 이어가도록 정리했습니다.

View File

@@ -6,6 +6,7 @@
- Document update: 2026-04-05 17:03 (KST) - Reworked the AX Agent UI skeleton further toward `claw-code`: sidebar width and row heights were tightened, the collapsed icon rail and sidebar header were flattened, status strips were reduced, and the composer shell/input chrome was made slimmer and less card-like. - Document update: 2026-04-05 17:03 (KST) - Reworked the AX Agent UI skeleton further toward `claw-code`: sidebar width and row heights were tightened, the collapsed icon rail and sidebar header were flattened, status strips were reduced, and the composer shell/input chrome was made slimmer and less card-like.
- Document update: 2026-04-05 17:03 (KST) - Re-tuned responsive width calculation for the new shell so the message axis now scales up to `880` and the composer up to `820`, keeping both aligned on the same center line as the window narrows or expands. - Document update: 2026-04-05 17:03 (KST) - Re-tuned responsive width calculation for the new shell so the message axis now scales up to `880` and the composer up to `820`, keeping both aligned on the same center line as the window narrows or expands.
- Document update: 2026-04-05 17:12 (KST) - Reduced message action chrome and event-banner density further toward `claw-code`. Message actions now use compact icon-only buttons, and Cowork/Code event banners use tighter margins, smaller metadata, and lighter file-path summaries so execution status stays subordinate to the main transcript. - Document update: 2026-04-05 17:12 (KST) - Reduced message action chrome and event-banner density further toward `claw-code`. Message actions now use compact icon-only buttons, and Cowork/Code event banners use tighter margins, smaller metadata, and lighter file-path summaries so execution status stays subordinate to the main transcript.
- Document update: 2026-04-05 17:19 (KST) - Tightened the top header/tab group and sidebar conversation-row chrome further toward `claw-code`. The top tabs now use a slimmer segmented control, the sidebar toggle button is smaller/lighter, and conversation-row metadata plus the edit affordance were reduced so the title remains the dominant visual anchor.
- Document update: 2026-04-05 16:02 (KST) - Fixed the Cowork document execution handoff around `document_plan`. The loop no longer depends on broken localized marker strings to detect the scaffold/body block or the immediate-next-step hint; it now extracts body markers robustly and resolves the correct follow-up tool (`html_create`, `document_assemble`, `docx_create`, `markdown_create`) before re-prompting the model. - Document update: 2026-04-05 16:02 (KST) - Fixed the Cowork document execution handoff around `document_plan`. The loop no longer depends on broken localized marker strings to detect the scaffold/body block or the immediate-next-step hint; it now extracts body markers robustly and resolves the correct follow-up tool (`html_create`, `document_assemble`, `docx_create`, `markdown_create`) before re-prompting the model.
- Document update: 2026-04-05 16:02 (KST) - Added `ResolveEffectivePlanMode(...)` so Cowork document/content tasks automatically use the `always` plan path even when the persisted plan mode is `off`. This brings Cowork closer to the `claw-code` expectation of plan-first execution for document-heavy work. - Document update: 2026-04-05 16:02 (KST) - Added `ResolveEffectivePlanMode(...)` so Cowork document/content tasks automatically use the `always` plan path even when the persisted plan mode is `off`. This brings Cowork closer to the `claw-code` expectation of plan-first execution for document-heavy work.
- Document update: 2026-04-05 16:02 (KST) - Strengthened `BuildCoworkSystemPrompt()` so document/report/proposal/manual requests must produce an execution plan first and are not considered complete until a real output file path has been created or updated. - Document update: 2026-04-05 16:02 (KST) - Strengthened `BuildCoworkSystemPrompt()` so document/report/proposal/manual requests must produce an execution plan first and are not considered complete until a real output file path has been created or updated.

View File

@@ -174,15 +174,15 @@
<!-- 탭 버튼 --> <!-- 탭 버튼 -->
<Style x:Key="TopTabBtn" TargetType="RadioButton"> <Style x:Key="TopTabBtn" TargetType="RadioButton">
<Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/> <Setter Property="Foreground" Value="{DynamicResource SecondaryText}"/>
<Setter Property="FontSize" Value="13"/> <Setter Property="FontSize" Value="12"/>
<Setter Property="FontWeight" Value="SemiBold"/> <Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Cursor" Value="Hand"/> <Setter Property="Cursor" Value="Hand"/>
<Setter Property="Padding" Value="18,6"/> <Setter Property="Padding" Value="16,5"/>
<Setter Property="Template"> <Setter Property="Template">
<Setter.Value> <Setter.Value>
<ControlTemplate TargetType="RadioButton"> <ControlTemplate TargetType="RadioButton">
<Border x:Name="Bd" Background="Transparent" <Border x:Name="Bd" Background="Transparent"
CornerRadius="8" Padding="{TemplateBinding Padding}"> CornerRadius="7" Padding="{TemplateBinding Padding}">
<ContentPresenter x:Name="Cp" HorizontalAlignment="Center" VerticalAlignment="Center"/> <ContentPresenter x:Name="Cp" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border> </Border>
<ControlTemplate.Triggers> <ControlTemplate.Triggers>
@@ -1037,8 +1037,8 @@
<!-- 좌: 사이드바 토글 --> <!-- 좌: 사이드바 토글 -->
<Button x:Name="BtnToggleSidebar" <Button x:Name="BtnToggleSidebar"
HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"
Width="30" Width="28"
Height="30" Height="28"
Background="{DynamicResource HintBackground}" Background="{DynamicResource HintBackground}"
BorderBrush="{DynamicResource BorderColor}" BorderBrush="{DynamicResource BorderColor}"
BorderThickness="1" BorderThickness="1"
@@ -1051,25 +1051,25 @@
Background="{TemplateBinding Background}" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}" BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="8"> CornerRadius="7">
<Grid Width="30" Height="30"> <Grid Width="28" Height="28">
<StackPanel HorizontalAlignment="Center" <StackPanel HorizontalAlignment="Center"
VerticalAlignment="Center"> VerticalAlignment="Center">
<Border x:Name="SidebarLine1" <Border x:Name="SidebarLine1"
Width="12" Width="11"
Height="1.6" Height="1.4"
CornerRadius="1" CornerRadius="1"
Background="{DynamicResource SecondaryText}"/> Background="{DynamicResource SecondaryText}"/>
<Border x:Name="SidebarLine2" <Border x:Name="SidebarLine2"
Width="12" Width="11"
Height="1.6" Height="1.4"
Margin="0,3,0,0" Margin="0,2.5,0,0"
CornerRadius="1" CornerRadius="1"
Background="{DynamicResource SecondaryText}"/> Background="{DynamicResource SecondaryText}"/>
<Border x:Name="SidebarLine3" <Border x:Name="SidebarLine3"
Width="12" Width="11"
Height="1.6" Height="1.4"
Margin="0,3,0,0" Margin="0,2.5,0,0"
CornerRadius="1" CornerRadius="1"
Background="{DynamicResource SecondaryText}"/> Background="{DynamicResource SecondaryText}"/>
</StackPanel> </StackPanel>
@@ -1095,7 +1095,7 @@
<Border Grid.Column="1" <Border Grid.Column="1"
HorizontalAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center"
Background="{DynamicResource HintBackground}" Background="{DynamicResource HintBackground}"
CornerRadius="12" Padding="4" CornerRadius="10" Padding="3"
WindowChrome.IsHitTestVisibleInChrome="True"> WindowChrome.IsHitTestVisibleInChrome="True">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<RadioButton x:Name="TabChat" Content="Chat" Style="{StaticResource TopTabBtn}" <RadioButton x:Name="TabChat" Content="Chat" Style="{StaticResource TopTabBtn}"
@@ -1113,7 +1113,7 @@
<!-- 우: 최소화 + 최대화 + 닫기 --> <!-- 우: 최소화 + 최대화 + 닫기 -->
<StackPanel Grid.Column="2" <StackPanel Grid.Column="2"
Orientation="Horizontal" HorizontalAlignment="Right" Orientation="Horizontal" HorizontalAlignment="Right"
VerticalAlignment="Center" Margin="0,0,8,0" VerticalAlignment="Center" Margin="0,0,6,0"
WindowChrome.IsHitTestVisibleInChrome="True"> WindowChrome.IsHitTestVisibleInChrome="True">
<Button Style="{StaticResource TitleBarActionButton}" Click="BtnMinimize_Click" ToolTip="최소화"> <Button Style="{StaticResource TitleBarActionButton}" Click="BtnMinimize_Click" ToolTip="최소화">
<TextBlock Text="&#xE921;" FontFamily="Segoe MDL2 Assets" FontSize="12" <TextBlock Text="&#xE921;" FontFamily="Segoe MDL2 Assets" FontSize="12"

View File

@@ -3291,10 +3291,10 @@ public partial class ChatWindow : Window
Text = _appState.ActiveTasks.Count > 0 Text = _appState.ActiveTasks.Count > 0
? $"진행 중 {_appState.ActiveTasks.Count}" ? $"진행 중 {_appState.ActiveTasks.Count}"
: "진행 중", : "진행 중",
FontSize = 8, FontSize = 7.75,
FontWeight = FontWeights.Medium, FontWeight = FontWeights.Medium,
Foreground = BrushFromHex("#4F46E5"), Foreground = BrushFromHex("#4F46E5"),
Margin = new Thickness(0, 2, 0, 0), Margin = new Thickness(0, 1.5, 0, 0),
}); });
} }
if (item.AgentRunCount > 0) if (item.AgentRunCount > 0)
@@ -3304,11 +3304,11 @@ public partial class ChatWindow : Window
Text = item.FailedAgentRunCount > 0 Text = item.FailedAgentRunCount > 0
? $"실패 {item.FailedAgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 26)}" ? $"실패 {item.FailedAgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 26)}"
: $"실행 {item.AgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 28)}", : $"실행 {item.AgentRunCount} · {TruncateForStatus(item.LastAgentRunSummary, 28)}",
FontSize = 8.25, FontSize = 7.9,
Foreground = item.FailedAgentRunCount > 0 Foreground = item.FailedAgentRunCount > 0
? BrushFromHex("#B91C1C") ? BrushFromHex("#B91C1C")
: (TryFindResource("SecondaryText") as Brush ?? Brushes.Gray), : (TryFindResource("SecondaryText") as Brush ?? Brushes.Gray),
Margin = new Thickness(0, 2, 0, 0), Margin = new Thickness(0, 1.5, 0, 0),
TextTrimming = TextTrimming.CharacterEllipsis TextTrimming = TextTrimming.CharacterEllipsis
}; };
if (!string.IsNullOrWhiteSpace(item.LastAgentRunSummary)) if (!string.IsNullOrWhiteSpace(item.LastAgentRunSummary))
@@ -3329,7 +3329,7 @@ public partial class ChatWindow : Window
{ {
Text = "\uE70F", // Edit Text = "\uE70F", // Edit
FontFamily = new FontFamily("Segoe MDL2 Assets"), FontFamily = new FontFamily("Segoe MDL2 Assets"),
FontSize = 8.5, FontSize = 8,
Foreground = (TryFindResource("SecondaryText") as Brush ?? Brushes.Gray) Foreground = (TryFindResource("SecondaryText") as Brush ?? Brushes.Gray)
}, },
Background = Brushes.Transparent, Background = Brushes.Transparent,
@@ -3337,10 +3337,10 @@ public partial class ChatWindow : Window
Cursor = Cursors.Hand, Cursor = Cursors.Hand,
VerticalAlignment = VerticalAlignment.Center, VerticalAlignment = VerticalAlignment.Center,
Visibility = Visibility.Collapsed, Visibility = Visibility.Collapsed,
Width = 22, Width = 20,
Height = 22, Height = 20,
Padding = new Thickness(0), Padding = new Thickness(0),
Opacity = 0.85, Opacity = 0.72,
ToolTip = _activeTab == "Cowork" ? "작업 유형" : "대화 주제 변경" ToolTip = _activeTab == "Cowork" ? "작업 유형" : "대화 주제 변경"
}; };
var capturedId = item.Id; var capturedId = item.Id;