AX Agent 공통 설정 섹션 순서 재정리 및 운영 모드 하단 배치
Some checks failed
Release Gate / gate (push) Has been cancelled

- 내부 설정 공통 탭에서 서비스와 모델 바로 아래에 등록 모델 관리를 배치해 모델 관리 흐름을 연속되게 정리함
- 운영 모드를 대화 관리와 저장 공간 영역 아래로 이동하고 섹션 구분선을 다시 맞춰 가독성을 개선함
- 공통 탭의 섹션 그룹이 실제 사용 순서와 더 가깝게 보이도록 XAML 레이아웃을 정리함
- README와 DEVELOPMENT 문서에 로컬 시각 기준 변경 이력과 목적을 기록함
- 검증: 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-06 15:34:37 +09:00
parent d45698d397
commit b3b301b9b6
3 changed files with 98 additions and 78 deletions

View File

@@ -1252,3 +1252,6 @@ MIT License
- AX Agent 창을 PC에서 드래그로 이동할 때 버벅이던 문제를 줄이기 위해 [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)에 `WM_ENTERSIZEMOVE` / `WM_EXITSIZEMOVE` 기반 이동·리사이즈 감지를 추가했다. - AX Agent 창을 PC에서 드래그로 이동할 때 버벅이던 문제를 줄이기 위해 [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)에 `WM_ENTERSIZEMOVE` / `WM_EXITSIZEMOVE` 기반 이동·리사이즈 감지를 추가했다.
- 이동/리사이즈 루프 중에는 창 루트를 `BitmapCache`로 묶고, `SizeChanged`에 연결돼 있던 `UpdateTopicPresetScrollMode()`, `UpdateResponsiveChatLayout()`, `RenderMessages()` 재계산은 잠시 지연시킨 뒤 루프 종료 시 한 번만 반영하도록 바꿨다. - 이동/리사이즈 루프 중에는 창 루트를 `BitmapCache`로 묶고, `SizeChanged`에 연결돼 있던 `UpdateTopicPresetScrollMode()`, `UpdateResponsiveChatLayout()`, `RenderMessages()` 재계산은 잠시 지연시킨 뒤 루프 종료 시 한 번만 반영하도록 바꿨다.
- 이 변경으로 창을 끌 때마다 무거운 transcript/레이아웃이 반복 갱신되던 경로를 줄여, AX Agent 창 이동 체감 속도를 개선했다. - 이 변경으로 창을 끌 때마다 무거운 transcript/레이아웃이 반복 갱신되던 경로를 줄여, AX Agent 창 이동 체감 속도를 개선했다.
- 업데이트: 2026-04-06 15:35 (KST)
- AX Agent 내부 설정 공통 탭의 섹션 순서를 다시 정리했다. [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 `서비스와 모델` 바로 아래에 `등록 모델 관리`를 연달아 배치해 흐름을 자연스럽게 맞췄다.
- `운영 모드``대화 관리 / 대화 보관 기간 / 저장 공간` 아래쪽으로 이동시키고, 섹션 경계도 다시 `BorderThickness="0,0,0,1"` 기반으로 정리해 구분선이 끊기지 않도록 맞췄다.

View File

@@ -4962,3 +4962,5 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
- Document update: 2026-04-06 14:06 (KST) - Updated the registered-model schema and UI surfaces to expose the new auth mode. `AppSettings.cs`, `SettingsViewModel.cs`, `ModelRegistrationDialog.cs`, and the AX Agent overlay model list in `ChatWindow.xaml.cs` now save/display `IBM IAM` alongside existing `Bearer` and `CP4D` modes. - Document update: 2026-04-06 14:06 (KST) - Updated the registered-model schema and UI surfaces to expose the new auth mode. `AppSettings.cs`, `SettingsViewModel.cs`, `ModelRegistrationDialog.cs`, and the AX Agent overlay model list in `ChatWindow.xaml.cs` now save/display `IBM IAM` alongside existing `Bearer` and `CP4D` modes.
- Document update: 2026-04-06 15:26 (KST) - Improved AX Agent window drag performance by handling `WM_ENTERSIZEMOVE` / `WM_EXITSIZEMOVE` in `ChatWindow.xaml.cs`. The window now enters a lightweight move-size mode while being dragged or resized. - Document update: 2026-04-06 15:26 (KST) - Improved AX Agent window drag performance by handling `WM_ENTERSIZEMOVE` / `WM_EXITSIZEMOVE` in `ChatWindow.xaml.cs`. The window now enters a lightweight move-size mode while being dragged or resized.
- Document update: 2026-04-06 15:26 (KST) - During move-size loops the root visual is temporarily cached with `BitmapCache`, and the expensive `UpdateTopicPresetScrollMode()`, `UpdateResponsiveChatLayout()`, and `RenderMessages()` refresh path is deferred until the move/resize operation ends. This reduces the “heavy” feeling when moving the AX Agent window on desktop PCs. - Document update: 2026-04-06 15:26 (KST) - During move-size loops the root visual is temporarily cached with `BitmapCache`, and the expensive `UpdateTopicPresetScrollMode()`, `UpdateResponsiveChatLayout()`, and `RenderMessages()` refresh path is deferred until the move/resize operation ends. This reduces the “heavy” feeling when moving the AX Agent window on desktop PCs.
- Document update: 2026-04-06 15:35 (KST) - Reordered the AX Agent internal-settings common tab in `ChatWindow.xaml` so `서비스와 모델` and `등록 모델 관리` now appear consecutively. This matches the actual model-management flow more closely.
- Document update: 2026-04-06 15:35 (KST) - Moved the `운영 모드` chooser below the conversation management/storage area and restored section separators around the moved blocks so the common-tab layout reads in clearer grouped sections.

View File

@@ -2949,6 +2949,55 @@
</Grid> </Grid>
</StackPanel> </StackPanel>
</Border> </Border>
<Border x:Name="OverlaySectionRegisteredModels"
Background="Transparent"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="0,0,0,1"
CornerRadius="0"
Padding="0,0,0,12"
Margin="0,0,0,10">
<StackPanel x:Name="OverlayModelEditorPanel">
<TextBlock Text="사내 서비스는 등록한 모델 중에서 선택하고, 여기서 바로 추가/편집할 수 있습니다."
FontSize="11"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"
Margin="0,4,0,8"/>
<Grid x:Name="OverlayRegisteredModelsHeader"
Margin="0,6,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="등록 모델 관리"
FontSize="11.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Button x:Name="BtnOverlayAddModel"
Grid.Column="1"
Style="{StaticResource OutlineHoverBtn}"
MinHeight="28"
Padding="10,4"
Click="BtnOverlayAddModel_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE710;"
FontFamily="Segoe MDL2 Assets"
FontSize="11"
Foreground="{DynamicResource AccentColor}"
Margin="0,0,5,0"
VerticalAlignment="Center"/>
<TextBlock Text="모델 추가"
FontSize="11.5"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
</Grid>
<StackPanel x:Name="OverlayRegisteredModelsPanel"
Margin="0,0,0,8"/>
<TextBox x:Name="TxtOverlayModelInput" Visibility="Collapsed"/>
</StackPanel>
</Border>
<Border x:Name="OverlaySectionQuick" <Border x:Name="OverlaySectionQuick"
Background="Transparent" Background="Transparent"
BorderBrush="{DynamicResource BorderColor}" BorderBrush="{DynamicResource BorderColor}"
@@ -3347,6 +3396,50 @@
</StackPanel> </StackPanel>
</Grid> </Grid>
</Border> </Border>
<Border x:Name="OverlaySectionOperationMode"
Background="Transparent"
BorderBrush="{DynamicResource BorderColor}"
BorderThickness="0,0,0,1"
CornerRadius="0"
Padding="0,0,0,12"
Margin="0,0,0,10">
<Grid x:Name="OverlayAnchorPermission">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="운영 모드"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">사내 모드는 외부 검색, 외부 URL 열기, 외부 호출을 더 강하게 제한합니다. 사외 모드는 외부 서비스와 웹 작업까지 허용하는 확장 모드입니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<ComboBox x:Name="CmbOverlayOperationMode"
Grid.Column="1"
MinWidth="140"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayOperationMode_SelectionChanged">
<ComboBoxItem Content="모드 · 사내 모드" Tag="internal"/>
<ComboBoxItem Content="모드 · 사외 모드" Tag="external"/>
</ComboBox>
</Grid>
</Border>
<Border x:Name="OverlayToggleImageInput" Style="{StaticResource OverlayAdvancedToggleRowStyle}"> <Border x:Name="OverlayToggleImageInput" Style="{StaticResource OverlayAdvancedToggleRowStyle}">
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@@ -3389,84 +3482,6 @@
Style="{StaticResource ToggleSwitch}"/> Style="{StaticResource ToggleSwitch}"/>
</Grid> </Grid>
</Border> </Border>
<StackPanel x:Name="OverlayModelEditorPanel">
<TextBlock Text="사내 서비스는 등록한 모델 중에서 선택하고, 여기서 바로 추가/편집할 수 있습니다."
FontSize="11"
TextWrapping="Wrap"
Foreground="{DynamicResource SecondaryText}"
Margin="0,4,0,8"/>
<Grid x:Name="OverlayRegisteredModelsHeader"
Margin="0,6,0,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="등록 모델 관리"
FontSize="11.5"
FontWeight="SemiBold"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Button x:Name="BtnOverlayAddModel"
Grid.Column="1"
Style="{StaticResource OutlineHoverBtn}"
MinHeight="28"
Padding="10,4"
Click="BtnOverlayAddModel_Click">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE710;"
FontFamily="Segoe MDL2 Assets"
FontSize="11"
Foreground="{DynamicResource AccentColor}"
Margin="0,0,5,0"
VerticalAlignment="Center"/>
<TextBlock Text="모델 추가"
FontSize="11.5"
Foreground="{DynamicResource AccentColor}"
VerticalAlignment="Center"/>
</StackPanel>
</Button>
</Grid>
<StackPanel x:Name="OverlayRegisteredModelsPanel"
Margin="0,0,0,8"/>
<TextBox x:Name="TxtOverlayModelInput" Visibility="Collapsed"/>
</StackPanel>
<Grid x:Name="OverlayAnchorPermission" Margin="12,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="운영 모드"
Foreground="{DynamicResource PrimaryText}"
VerticalAlignment="Center"/>
<Border Style="{StaticResource OverlayHelpBadge}">
<TextBlock Text="?"
FontSize="10"
FontWeight="Bold"
Foreground="{DynamicResource AccentColor}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<Border.ToolTip>
<ToolTip Style="{StaticResource HelpTooltipStyle}">
<TextBlock TextWrapping="Wrap"
Foreground="White"
FontSize="12"
LineHeight="18"
MaxWidth="280">사내 모드는 외부 검색, 외부 URL 열기, 외부 호출을 더 강하게 제한합니다. 사외 모드는 외부 서비스와 웹 작업까지 허용하는 확장 모드입니다.</TextBlock>
</ToolTip>
</Border.ToolTip>
</Border>
</StackPanel>
<ComboBox x:Name="CmbOverlayOperationMode"
Grid.Column="1"
MinWidth="140"
Style="{StaticResource OverlayComboBox}"
SelectionChanged="CmbOverlayOperationMode_SelectionChanged">
<ComboBoxItem Content="모드 · 사내 모드" Tag="internal"/>
<ComboBoxItem Content="모드 · 사외 모드" Tag="external"/>
</ComboBox>
</Grid>
<Grid x:Name="OverlayTlsRow" Visibility="Collapsed" Margin="0,0,0,0"> <Grid x:Name="OverlayTlsRow" Visibility="Collapsed" Margin="0,0,0,0">
<CheckBox x:Name="OverlayHiddenTlsToggle" Visibility="Collapsed"/> <CheckBox x:Name="OverlayHiddenTlsToggle" Visibility="Collapsed"/>
</Grid> </Grid>