- 내부 설정 공통 탭에서 등록 모델 상단 중복 선택 칩 UI 제거 - 등록 모델 관리 영역을 리스트 중심 구조로 정리 - 선택 편집 삭제 액션을 팝업 친화적인 클릭 row 방식으로 변경 - 오버레이 동기화 경로에서 제거된 모델 칩 렌더 호출 삭제 - README 및 DEVELOPMENT 문서에 2026-04-06 00:08 (KST) 기준 이력 반영 - 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:
@@ -1067,3 +1067,6 @@ MIT License
|
|||||||
- 하단 컨텍스트 토큰 심볼의 파이 아크가 왼쪽에서 잘려 보이던 문제를 수정했다. 원형 아크 계산 기준을 실제 카드 크기에 맞게 조정하고, hover 라벨은 비상호작용 툴팁처럼 바꿔 카드에서 마우스를 벗어나면 더 깔끔하게 사라지도록 정리했다.
|
- 하단 컨텍스트 토큰 심볼의 파이 아크가 왼쪽에서 잘려 보이던 문제를 수정했다. 원형 아크 계산 기준을 실제 카드 크기에 맞게 조정하고, hover 라벨은 비상호작용 툴팁처럼 바꿔 카드에서 마우스를 벗어나면 더 깔끔하게 사라지도록 정리했다.
|
||||||
- 업데이트: 2026-04-06 00:01 (KST)
|
- 업데이트: 2026-04-06 00:01 (KST)
|
||||||
- 하단 컨텍스트 토큰 hover 라벨이 남아 있던 문제를 창 전체 마우스 이동/클릭/비활성화 기준으로 한 번 더 보강해 줄였다. 함께 전송 버튼은 크기와 아이콘 정렬을 다시 맞춰 작고 치우쳐 보이던 인상을 보정했다.
|
- 하단 컨텍스트 토큰 hover 라벨이 남아 있던 문제를 창 전체 마우스 이동/클릭/비활성화 기준으로 한 번 더 보강해 줄였다. 함께 전송 버튼은 크기와 아이콘 정렬을 다시 맞춰 작고 치우쳐 보이던 인상을 보정했다.
|
||||||
|
- 업데이트: 2026-04-06 00:08 (KST)
|
||||||
|
- AX Agent 내부 설정의 등록 모델 영역에서 상단 중복 선택 칩 UI를 제거하고, 하단 등록 모델 리스트만 남기도록 정리했다.
|
||||||
|
- 등록 모델 리스트의 `선택 / 편집 / 삭제` 액션은 기본 버튼 대신 팝업 친화적인 클릭 row 스타일로 바꿔 내부 설정 오버레이에서도 더 안정적으로 동작하게 맞췄다.
|
||||||
|
|||||||
@@ -4822,3 +4822,6 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
|
|||||||
- 업데이트: 2026-04-06 00:01 (KST)
|
- 업데이트: 2026-04-06 00:01 (KST)
|
||||||
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서 토큰 hover popup 닫힘 경로를 추가 보강했다. 카드 hover 종료 외에도 창 전체 마우스 이동, 마우스 클릭, 창 비활성화 시 popup 닫힘을 다시 검사하도록 해 라벨이 남는 경우를 줄였다.
|
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서 토큰 hover popup 닫힘 경로를 추가 보강했다. 카드 hover 종료 외에도 창 전체 마우스 이동, 마우스 클릭, 창 비활성화 시 popup 닫힘을 다시 검사하도록 해 라벨이 남는 경우를 줄였다.
|
||||||
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 전송 버튼은 42 기준으로 키우고 내부 send glyph 크기와 오프셋을 다시 조정해 아이콘이 작고 아래로 치우쳐 보이던 문제를 보정했다.
|
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 전송 버튼은 42 기준으로 키우고 내부 send glyph 크기와 오프셋을 다시 조정해 아이콘이 작고 아래로 치우쳐 보이던 문제를 보정했다.
|
||||||
|
- 업데이트: 2026-04-06 00:08 (KST)
|
||||||
|
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 내부 설정 동기화 경로에서 `BuildOverlayModelChips(...)` 호출을 제거해, XAML에서 제거한 등록 모델 상단 중복 선택 UI를 더 이상 다시 그리지 않게 정리했다.
|
||||||
|
- 같은 파일의 `BuildOverlayRegisteredModelsPanel(...)` 에서는 `선택 / 편집 / 삭제` 액션을 기본 `Button` 대신 `Border + MouseLeftButtonUp` 기반 클릭 row로 교체했다. 이로써 AX Agent 내부 설정 오버레이 안에서도 액션 클릭이 더 안정적으로 반응하고, 등록 모델 관리 UI가 리스트 중심 구조로 일관되게 유지된다.
|
||||||
|
|||||||
@@ -3286,18 +3286,13 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
<StackPanel x:Name="OverlayModelEditorPanel">
|
<StackPanel x:Name="OverlayModelEditorPanel">
|
||||||
<TextBlock Text="등록된 모델 선택"
|
|
||||||
FontSize="11"
|
|
||||||
Foreground="{DynamicResource SecondaryText}"
|
|
||||||
Margin="0,4,0,6"/>
|
|
||||||
<TextBlock Text="사내 서비스는 등록한 모델 중에서 선택하고, 여기서 바로 추가/편집할 수 있습니다."
|
<TextBlock Text="사내 서비스는 등록한 모델 중에서 선택하고, 여기서 바로 추가/편집할 수 있습니다."
|
||||||
FontSize="11"
|
FontSize="11"
|
||||||
TextWrapping="Wrap"
|
TextWrapping="Wrap"
|
||||||
Foreground="{DynamicResource SecondaryText}"
|
Foreground="{DynamicResource SecondaryText}"
|
||||||
Margin="0,0,0,8"/>
|
Margin="0,4,0,8"/>
|
||||||
<WrapPanel x:Name="OverlayModelChipPanel" Margin="0,2,0,0"/>
|
|
||||||
<Grid x:Name="OverlayRegisteredModelsHeader"
|
<Grid x:Name="OverlayRegisteredModelsHeader"
|
||||||
Margin="0,10,0,8">
|
Margin="0,6,0,8">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="Auto"/>
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
|||||||
@@ -14548,7 +14548,6 @@ public partial class ChatWindow : Window
|
|||||||
RefreshOverlayTokenPresetCards();
|
RefreshOverlayTokenPresetCards();
|
||||||
RefreshOverlayServiceFieldLabels(service);
|
RefreshOverlayServiceFieldLabels(service);
|
||||||
RefreshOverlayServiceFieldVisibility(service);
|
RefreshOverlayServiceFieldVisibility(service);
|
||||||
BuildOverlayModelChips(service);
|
|
||||||
BuildOverlayRegisteredModelsPanel(service);
|
BuildOverlayRegisteredModelsPanel(service);
|
||||||
RefreshOverlayAdvancedChoiceButtons();
|
RefreshOverlayAdvancedChoiceButtons();
|
||||||
}
|
}
|
||||||
@@ -16470,71 +16469,6 @@ public partial class ChatWindow : Window
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BuildOverlayModelChips(string service)
|
|
||||||
{
|
|
||||||
if (OverlayModelChipPanel == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
OverlayModelChipPanel.Children.Clear();
|
|
||||||
foreach (var model in GetModelCandidates(service))
|
|
||||||
{
|
|
||||||
var captured = model.Id;
|
|
||||||
var isActive = string.Equals(model.Id, _settings.Settings.Llm.Model, StringComparison.OrdinalIgnoreCase);
|
|
||||||
var border = new Border
|
|
||||||
{
|
|
||||||
Cursor = Cursors.Hand,
|
|
||||||
CornerRadius = new CornerRadius(8),
|
|
||||||
BorderThickness = new Thickness(1),
|
|
||||||
BorderBrush = isActive
|
|
||||||
? BrushFromHex("#C7D2FE")
|
|
||||||
: (TryFindResource("BorderColor") as Brush ?? Brushes.Gray),
|
|
||||||
Background = isActive
|
|
||||||
? BrushFromHex("#EEF2FF")
|
|
||||||
: Brushes.Transparent,
|
|
||||||
Padding = new Thickness(10, 7, 10, 7),
|
|
||||||
Margin = new Thickness(0, 0, 8, 8),
|
|
||||||
Child = new StackPanel
|
|
||||||
{
|
|
||||||
Children =
|
|
||||||
{
|
|
||||||
new TextBlock
|
|
||||||
{
|
|
||||||
Text = model.Label,
|
|
||||||
FontSize = 11.5,
|
|
||||||
FontWeight = isActive ? FontWeights.SemiBold : FontWeights.Normal,
|
|
||||||
Foreground = isActive
|
|
||||||
? BrushFromHex("#1D4ED8")
|
|
||||||
: (TryFindResource("PrimaryText") as Brush ?? Brushes.Black),
|
|
||||||
},
|
|
||||||
new TextBlock
|
|
||||||
{
|
|
||||||
Text = model.Id,
|
|
||||||
Margin = new Thickness(0, 2, 0, 0),
|
|
||||||
FontSize = 10,
|
|
||||||
Foreground = TryFindResource("SecondaryText") as Brush ?? Brushes.Gray,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
border.MouseEnter += (_, _) =>
|
|
||||||
{
|
|
||||||
if (!isActive)
|
|
||||||
border.Background = TryFindResource("ItemHoverBackground") as Brush ?? Brushes.LightGray;
|
|
||||||
};
|
|
||||||
border.MouseLeave += (_, _) =>
|
|
||||||
{
|
|
||||||
if (!isActive)
|
|
||||||
border.Background = Brushes.Transparent;
|
|
||||||
};
|
|
||||||
border.MouseLeftButtonUp += (_, _) =>
|
|
||||||
{
|
|
||||||
CommitOverlayModelSelection(captured);
|
|
||||||
PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
|
|
||||||
};
|
|
||||||
OverlayModelChipPanel.Children.Add(border);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void BuildOverlayRegisteredModelsPanel(string service)
|
private void BuildOverlayRegisteredModelsPanel(string service)
|
||||||
{
|
{
|
||||||
if (OverlayRegisteredModelsPanel == null || OverlayRegisteredModelsHeader == null || BtnOverlayAddModel == null)
|
if (OverlayRegisteredModelsPanel == null || OverlayRegisteredModelsHeader == null || BtnOverlayAddModel == null)
|
||||||
@@ -16638,29 +16572,53 @@ public partial class ChatWindow : Window
|
|||||||
VerticalAlignment = VerticalAlignment.Top,
|
VerticalAlignment = VerticalAlignment.Top,
|
||||||
};
|
};
|
||||||
|
|
||||||
Button CreateAction(string text, RoutedEventHandler onClick, Brush foreground)
|
Border CreateAction(string text, Action onClick, Brush foreground)
|
||||||
{
|
{
|
||||||
var button = new Button
|
var label = new TextBlock
|
||||||
{
|
{
|
||||||
Content = text,
|
Text = text,
|
||||||
Style = TryFindResource("GhostBtn") as Style,
|
FontSize = 11.5,
|
||||||
|
FontWeight = FontWeights.SemiBold,
|
||||||
|
Foreground = foreground,
|
||||||
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
|
};
|
||||||
|
|
||||||
|
var action = new Border
|
||||||
|
{
|
||||||
|
Cursor = Cursors.Hand,
|
||||||
|
CornerRadius = new CornerRadius(8),
|
||||||
Padding = new Thickness(8, 4, 8, 4),
|
Padding = new Thickness(8, 4, 8, 4),
|
||||||
Margin = new Thickness(6, 0, 0, 0),
|
Margin = new Thickness(6, 0, 0, 0),
|
||||||
Foreground = foreground,
|
Background = Brushes.Transparent,
|
||||||
Cursor = Cursors.Hand,
|
Child = label,
|
||||||
};
|
};
|
||||||
button.Click += onClick;
|
action.MouseEnter += (_, _) =>
|
||||||
return button;
|
{
|
||||||
|
action.Background = hoverBg;
|
||||||
|
};
|
||||||
|
action.MouseLeave += (_, _) =>
|
||||||
|
{
|
||||||
|
action.Background = Brushes.Transparent;
|
||||||
|
};
|
||||||
|
action.MouseLeftButtonUp += (_, _) => onClick();
|
||||||
|
return action;
|
||||||
}
|
}
|
||||||
|
|
||||||
actions.Children.Add(CreateAction("선택", (_, _) =>
|
actions.Children.Add(CreateAction("선택", () =>
|
||||||
{
|
{
|
||||||
CommitOverlayModelSelection(model.EncryptedModelName);
|
CommitOverlayModelSelection(model.EncryptedModelName);
|
||||||
PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
|
PersistOverlaySettingsState(refreshOverlayDeferredInputs: false);
|
||||||
}, accentBrush));
|
}, accentBrush));
|
||||||
|
|
||||||
actions.Children.Add(CreateAction("편집", (_, _) => EditOverlayRegisteredModel(model), primaryText));
|
actions.Children.Add(CreateAction("편집", () =>
|
||||||
actions.Children.Add(CreateAction("삭제", (_, _) => DeleteOverlayRegisteredModel(model), BrushFromHex("#DC2626")));
|
{
|
||||||
|
EditOverlayRegisteredModel(model);
|
||||||
|
BuildOverlayRegisteredModelsPanel(service);
|
||||||
|
}, primaryText));
|
||||||
|
actions.Children.Add(CreateAction("삭제", () =>
|
||||||
|
{
|
||||||
|
DeleteOverlayRegisteredModel(model);
|
||||||
|
}, BrushFromHex("#DC2626")));
|
||||||
|
|
||||||
Grid.SetColumn(actions, 1);
|
Grid.SetColumn(actions, 1);
|
||||||
grid.Children.Add(actions);
|
grid.Children.Add(actions);
|
||||||
|
|||||||
Reference in New Issue
Block a user