- 좌측 패널, 축소 아이콘 바, 상태 스트립, 메시지 축, 컴포저를 더 얇고 평평한 업무형 레이아웃으로 조정 - 메시지 최대 폭 880, 컴포저 최대 폭 820 기준으로 반응형 폭 계산을 다시 맞춰 창 크기 변화에도 중심선이 자연스럽게 유지되도록 수정 - 검증: 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:
@@ -13,6 +13,11 @@ Windows 전용 시맨틱 런처 & 워크스페이스 매니저
|
||||
- 메시지 행과 좌측 대화 목록도 `claw-code` 방향으로 다시 단순화했습니다. 사용자/assistant 버블의 패딩, 라운드, 메타 텍스트를 줄였고, 대화 목록의 실행 상태도 배지 카드보다 얇은 텍스트 요약 중심으로 바꿔 읽는 축이 먼저 보이도록 눌렀습니다.
|
||||
- 검증 예정: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\`
|
||||
|
||||
- 업데이트: 2026-04-05 17:03 (KST)
|
||||
- AX Agent UI를 `claw-code` 쪽 시각 언어에 더 가깝게 맞추기 위해 레이아웃 골격을 다시 조정했습니다. 좌측 패널 폭과 헤더/액션 행 높이, 축소 아이콘 바, 상태 스트립, 메시지 축, 컴포저 폭과 코너 반경을 전반적으로 더 얇고 평평하게 정리했습니다.
|
||||
- 반응형 폭 계산도 새 골격에 맞춰 다시 조정했습니다. 메시지 축은 최대 `880`, 컴포저는 최대 `820` 기준으로 더 자연스럽게 줄어들도록 바꿔 창 크기가 변해도 `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)
|
||||
- `document_plan` 후속 실행 분기를 `claw-code` 기준으로 다시 보강했습니다. 이제 문서 플래너 출력에서 body 골격과 즉시 실행 지시를 깨진 문자열 비교에 의존하지 않고 안정적으로 추출해, `html_create / document_assemble / docx_create / markdown_create` 후속 호출 유도가 실제로 이어집니다.
|
||||
- 코워크 문서형 작업은 설정이 `planMode=off`여도 내부적으로 `always` 플랜 경로를 타도록 보정했습니다. 그래서 문서/보고서/제안서 요청은 먼저 계획을 세우고, 그 계획을 바탕으로 실제 문서 생성 단계까지 이어가도록 정리했습니다.
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
- Document update: 2026-04-05 16:55 (KST) - Recorded the current `claw-code` parity estimate for AX Agent: core execution engine `82%`, main chat UI `68%`, Cowork/Code status UX `63%`, internal settings linkage `88%`, overall AX Agent parity `74%`.
|
||||
- Document update: 2026-04-05 16:55 (KST) - Added an engine-settings review rule for ongoing cleanup: settings that materially alter the main execution route should be minimized, kept developer-only when necessary, or removed from user-facing surfaces when they no longer represent real runtime choices. Plan-mode remnants were reduced further as part of this pass.
|
||||
- Document update: 2026-04-05 16:55 (KST) - Simplified AX Agent message rows and sidebar conversation items toward the `claw-code` reading model. Message bubbles now use tighter padding/radius/meta text, and conversation rows now prefer lightweight running/failure summary text over heavier success/failure badge cards.
|
||||
- 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 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) - 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.
|
||||
|
||||
@@ -406,7 +406,7 @@
|
||||
<!-- 축소 아이콘 바 (사이드바 닫힘 시 표시) -->
|
||||
<ColumnDefinition x:Name="IconBarColumn" Width="0"/>
|
||||
<!-- 사이드바 (열림 시 표시) -->
|
||||
<ColumnDefinition x:Name="SidebarColumn" Width="220" MinWidth="0"/>
|
||||
<ColumnDefinition x:Name="SidebarColumn" Width="236" MinWidth="0"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<!-- 미리보기 스플리터 -->
|
||||
<ColumnDefinition x:Name="SplitterColumn" Width="0"/>
|
||||
@@ -422,32 +422,32 @@
|
||||
Visibility="Collapsed">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="46"/>
|
||||
<RowDefinition Height="44"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="46"/>
|
||||
<RowDefinition Height="44"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- 상단 아이콘들 -->
|
||||
<StackPanel Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,2,0,0">
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="6,5" Width="32" Height="32"
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="5,4" Width="30" Height="30"
|
||||
Click="BtnNewChat_Click" ToolTip="새 대화"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="12"
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="11.5"
|
||||
Foreground="{DynamicResource SecondaryText}"/>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="1" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,6,0,0">
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="6,5" Width="32" Height="32"
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="5,4" Width="30" Height="30"
|
||||
Click="BtnToggleSidebar_Click" ToolTip="검색"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="11.5"
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="11"
|
||||
Foreground="{DynamicResource SecondaryText}"/>
|
||||
</Button>
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="6,5" Width="32" Height="32" Margin="0,2,0,0"
|
||||
<Button Style="{StaticResource GhostBtn}" Padding="5,4" Width="30" Height="30" Margin="0,2,0,0"
|
||||
Click="BtnCategoryDrop_Click" ToolTip="대화 필터"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="11.5"
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="11"
|
||||
Foreground="{DynamicResource SecondaryText}"/>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
@@ -457,11 +457,11 @@
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||||
ToolTip="" Padding="0"
|
||||
WindowChrome.IsHitTestVisibleInChrome="True">
|
||||
<Border Width="28" Height="28" CornerRadius="14"
|
||||
<Border Width="26" Height="26" CornerRadius="13"
|
||||
Background="{DynamicResource HintBackground}"
|
||||
BorderBrush="{DynamicResource BorderColor}"
|
||||
BorderThickness="1">
|
||||
<TextBlock x:Name="UserInitialIconBar" Text="U" FontSize="11.5" FontWeight="SemiBold"
|
||||
<TextBlock x:Name="UserInitialIconBar" Text="U" FontSize="11" FontWeight="SemiBold"
|
||||
Foreground="{DynamicResource PrimaryText}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
</Button>
|
||||
@@ -477,7 +477,7 @@
|
||||
BorderThickness="0,0,1,0">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="48"/>
|
||||
<RowDefinition Height="44"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
@@ -492,11 +492,11 @@
|
||||
<Border Background="{DynamicResource HintBackground}" CornerRadius="6"
|
||||
BorderBrush="{DynamicResource BorderColor}"
|
||||
BorderThickness="1"
|
||||
Width="22" Height="22">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="11"
|
||||
Width="20" Height="20">
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="10.5"
|
||||
Foreground="{DynamicResource AccentColor}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
<TextBlock Text="AX Agent" FontSize="13" FontWeight="SemiBold"
|
||||
<TextBlock Text="AX Agent" FontSize="12.5" FontWeight="SemiBold"
|
||||
Foreground="{DynamicResource PrimaryText}"
|
||||
VerticalAlignment="Center" Margin="8,0,0,0"/>
|
||||
</StackPanel>
|
||||
@@ -507,8 +507,8 @@
|
||||
<StackPanel>
|
||||
<Border x:Name="SidebarNewChatTrigger"
|
||||
Background="Transparent"
|
||||
CornerRadius="7"
|
||||
Padding="8,6"
|
||||
CornerRadius="6"
|
||||
Padding="7,5"
|
||||
Cursor="Hand"
|
||||
MouseEnter="SidebarNewChatTrigger_MouseEnter"
|
||||
MouseLeave="SidebarNewChatTrigger_MouseLeave"
|
||||
@@ -519,25 +519,25 @@
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="11"
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="10.5"
|
||||
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1" Text="새 대화"
|
||||
Foreground="{DynamicResource PrimaryText}"
|
||||
FontSize="10.8" Margin="7,0,0,0" VerticalAlignment="Center"/>
|
||||
FontSize="10.5" Margin="7,0,0,0" VerticalAlignment="Center"/>
|
||||
<TextBlock x:Name="SidebarNewChatShortcutHint"
|
||||
Grid.Column="2"
|
||||
Text="Ctrl+N"
|
||||
Visibility="Collapsed"
|
||||
Foreground="{DynamicResource SecondaryText}"
|
||||
FontSize="10.5"
|
||||
FontSize="10"
|
||||
VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border x:Name="SidebarSearchTrigger"
|
||||
Background="Transparent"
|
||||
CornerRadius="7"
|
||||
Padding="8,6"
|
||||
CornerRadius="6"
|
||||
Padding="7,5"
|
||||
Cursor="Hand"
|
||||
MouseEnter="SidebarSearchTrigger_MouseEnter"
|
||||
MouseLeave="SidebarSearchTrigger_MouseLeave"
|
||||
@@ -548,25 +548,25 @@
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="11"
|
||||
<TextBlock Text="" FontFamily="Segoe MDL2 Assets" FontSize="10.5"
|
||||
Foreground="{DynamicResource SecondaryText}" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1" Text="검색"
|
||||
Foreground="{DynamicResource PrimaryText}"
|
||||
FontSize="10.8" Margin="7,0,0,0" VerticalAlignment="Center"/>
|
||||
FontSize="10.5" Margin="7,0,0,0" VerticalAlignment="Center"/>
|
||||
<TextBlock x:Name="SidebarSearchShortcutHint"
|
||||
Grid.Column="2"
|
||||
Text="Ctrl+K"
|
||||
Visibility="Collapsed"
|
||||
Foreground="{DynamicResource SecondaryText}"
|
||||
FontSize="10.5"
|
||||
FontSize="10"
|
||||
VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border x:Name="SidebarSearchEditor"
|
||||
Background="{DynamicResource ItemBackground}"
|
||||
CornerRadius="10"
|
||||
Padding="9,6"
|
||||
CornerRadius="8"
|
||||
Padding="8,5"
|
||||
Visibility="Collapsed"
|
||||
Opacity="0"
|
||||
RenderTransformOrigin="0,0.5">
|
||||
@@ -586,7 +586,7 @@
|
||||
<TextBox x:Name="SearchBox" Grid.Column="1"
|
||||
Background="Transparent" BorderThickness="0"
|
||||
Foreground="{DynamicResource PrimaryText}"
|
||||
CaretBrush="{DynamicResource AccentColor}" FontSize="11.5"
|
||||
CaretBrush="{DynamicResource AccentColor}" FontSize="11"
|
||||
VerticalAlignment="Center" Margin="10,0,8,0"
|
||||
TextChanged="SearchBox_TextChanged"/>
|
||||
<Button x:Name="BtnConversationSort" Grid.Column="2"
|
||||
@@ -872,25 +872,25 @@
|
||||
KeyDown="ChatTitleEdit_KeyDown"/>
|
||||
</Grid>
|
||||
<Border x:Name="ConversationStatusStrip" Visibility="Collapsed"
|
||||
Margin="8,0,0,0" Padding="6,1.5"
|
||||
CornerRadius="7"
|
||||
Margin="8,0,0,0" Padding="5,1.5"
|
||||
CornerRadius="6"
|
||||
Background="{DynamicResource HintBackground}"
|
||||
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1">
|
||||
<TextBlock x:Name="ConversationStatusStripLabel" Text=""
|
||||
FontSize="9.5" FontWeight="SemiBold"
|
||||
FontSize="9" FontWeight="SemiBold"
|
||||
Foreground="{DynamicResource AccentColor}"
|
||||
VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
<WrapPanel x:Name="ConversationQuickStrip" Visibility="Collapsed"
|
||||
Margin="0,3,0,0">
|
||||
Margin="0,2,0,0">
|
||||
<Button x:Name="BtnQuickRunningFilter" Style="{StaticResource GhostBtn}"
|
||||
Padding="7,1.5" Margin="0,0,5,0"
|
||||
Padding="6,1.5" Margin="0,0,4,0"
|
||||
Click="BtnQuickRunningFilter_Click"
|
||||
Visibility="Collapsed"
|
||||
IsEnabled="False">
|
||||
<TextBlock x:Name="QuickRunningLabel" Text="진행"
|
||||
FontSize="9.5" FontWeight="SemiBold"/>
|
||||
FontSize="9" FontWeight="SemiBold"/>
|
||||
</Button>
|
||||
<Button x:Name="BtnQuickHotSort" Style="{StaticResource GhostBtn}"
|
||||
Padding="7,1.5"
|
||||
@@ -1183,8 +1183,8 @@
|
||||
Background="{DynamicResource LauncherBackground}"
|
||||
Padding="18,10,18,6">
|
||||
<StackPanel x:Name="MessagePanel"
|
||||
Margin="0,0,0,14"
|
||||
MaxWidth="840"
|
||||
Margin="0,0,0,12"
|
||||
MaxWidth="880"
|
||||
HorizontalAlignment="Center">
|
||||
<StackPanel.RenderTransform>
|
||||
<TranslateTransform/>
|
||||
@@ -1560,9 +1560,9 @@
|
||||
|
||||
<!-- ── 입력 바 ── -->
|
||||
<Border x:Name="ComposerShell" Grid.Row="4"
|
||||
Margin="18,0,18,16"
|
||||
Margin="18,0,18,14"
|
||||
Width="Auto"
|
||||
MaxWidth="760"
|
||||
MaxWidth="820"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Bottom">
|
||||
<StackPanel HorizontalAlignment="Stretch">
|
||||
@@ -1651,7 +1651,7 @@
|
||||
<!-- 실제 입력 영역 -->
|
||||
<Border x:Name="InputBorder"
|
||||
Background="{DynamicResource LauncherBackground}"
|
||||
CornerRadius="10" Padding="5"
|
||||
CornerRadius="9" Padding="4"
|
||||
BorderBrush="{DynamicResource BorderColor}" BorderThickness="1">
|
||||
<Border.Effect>
|
||||
<DropShadowEffect BlurRadius="10" ShadowDepth="0" Opacity="0.04"/>
|
||||
|
||||
@@ -10975,14 +10975,14 @@ public partial class ChatWindow : Window
|
||||
|
||||
// claw-code처럼 메시지 축과 입력축이 같은 중심선을 공유하도록,
|
||||
// 본문 폭 상한을 조금 더 낮추고 창 폭 변화에 더 부드럽게 반응시킵니다.
|
||||
var contentWidth = Math.Max(340, viewportWidth - 32);
|
||||
var messageWidth = Math.Clamp(contentWidth * 0.86, 340, 840);
|
||||
var composerWidth = Math.Clamp(contentWidth * 0.78, 340, 760);
|
||||
var contentWidth = Math.Max(340, viewportWidth - 28);
|
||||
var messageWidth = Math.Clamp(contentWidth * 0.88, 340, 880);
|
||||
var composerWidth = Math.Clamp(contentWidth * 0.82, 340, 820);
|
||||
|
||||
if (contentWidth < 760)
|
||||
{
|
||||
messageWidth = Math.Clamp(contentWidth - 10, 332, 760);
|
||||
composerWidth = Math.Clamp(contentWidth - 20, 328, 700);
|
||||
messageWidth = Math.Clamp(contentWidth - 8, 332, 780);
|
||||
composerWidth = Math.Clamp(contentWidth - 14, 328, 740);
|
||||
}
|
||||
|
||||
var changed = false;
|
||||
|
||||
Reference in New Issue
Block a user