연속 개선: 권한 상태 간소화·설정창 외부 진입 안정화·컴포저 반응형 보강
Some checks failed
Release Gate / gate (push) Has been cancelled
Some checks failed
Release Gate / gate (push) Has been cancelled
- 권한 상태 텍스트(/permissions,/allowed-tools)를 운영 모드 포함 축약형으로 재정리 - 하단 권한 버튼 툴팁에 운영 모드/기본값/예외 개수 정보를 일관 반영 - 탭 전환 시 좌측 메뉴 Visibility 재할당을 최소화해 UI 흔들림 완화 - 상단 모델 라벨에 MaxWidth+말줄임 적용으로 긴 모델명 레이아웃 깨짐 방지 - AX Agent 설정창 오픈 시 리소스 병합 예외를 방어하고 외부 진입 경로를 Dispatcher 기반으로 안정화 - UI 체크리스트/개발문서/README에 2026-04-04 12:41 기준 점검 이력 업데이트 - 검증: build 경고0/오류0, 운영모드 필터 18건 통과, 전체 테스트 436건 통과
This commit is contained in:
@@ -717,9 +717,12 @@ public partial class ChatWindow : Window
|
||||
if (SidebarChatMenu == null || SidebarCoworkMenu == null || SidebarCodeMenu == null)
|
||||
return;
|
||||
|
||||
SidebarChatMenu.Visibility = _activeTab == "Chat" ? Visibility.Visible : Visibility.Collapsed;
|
||||
SidebarCoworkMenu.Visibility = _activeTab == "Cowork" ? Visibility.Visible : Visibility.Collapsed;
|
||||
SidebarCodeMenu.Visibility = _activeTab == "Code" ? Visibility.Visible : Visibility.Collapsed;
|
||||
var chatVisible = _activeTab == "Chat" ? Visibility.Visible : Visibility.Collapsed;
|
||||
var coworkVisible = _activeTab == "Cowork" ? Visibility.Visible : Visibility.Collapsed;
|
||||
var codeVisible = _activeTab == "Code" ? Visibility.Visible : Visibility.Collapsed;
|
||||
if (SidebarChatMenu.Visibility != chatVisible) SidebarChatMenu.Visibility = chatVisible;
|
||||
if (SidebarCoworkMenu.Visibility != coworkVisible) SidebarCoworkMenu.Visibility = coworkVisible;
|
||||
if (SidebarCodeMenu.Visibility != codeVisible) SidebarCodeMenu.Visibility = codeVisible;
|
||||
|
||||
if (SidebarModeBadgeTitle != null && SidebarModeBadgeIcon != null)
|
||||
{
|
||||
@@ -2139,7 +2142,10 @@ public partial class ChatWindow : Window
|
||||
_ => "\uE8D7",
|
||||
};
|
||||
if (BtnPermission != null)
|
||||
BtnPermission.ToolTip = $"{summary.Description}\n기본값 {PermissionModeCatalog.ToDisplayLabel(summary.DefaultMode)} · override {summary.OverrideCount}개";
|
||||
{
|
||||
var operationMode = OperationModePolicy.Normalize(_settings.Settings.OperationMode);
|
||||
BtnPermission.ToolTip = $"{summary.Description}\n운영 모드: {operationMode}\n기본값 {PermissionModeCatalog.ToDisplayLabel(summary.DefaultMode)} · 예외 {summary.OverrideCount}개";
|
||||
}
|
||||
|
||||
if (!string.Equals(_lastPermissionBannerMode, perm, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
@@ -2275,10 +2281,11 @@ public partial class ChatWindow : Window
|
||||
lock (_convLock) currentConversation = _currentConversation;
|
||||
var summary = _appState.GetPermissionSummary(currentConversation);
|
||||
var mode = PermissionModeCatalog.NormalizeGlobalMode(summary.EffectiveMode);
|
||||
var operationMode = OperationModePolicy.Normalize(_settings.Settings.OperationMode);
|
||||
var overrides = summary.TopOverrides.Count > 0
|
||||
? string.Join(", ", summary.TopOverrides.Select(x => $"{x.Key}:{x.Value}"))
|
||||
? string.Join(", ", summary.TopOverrides.Take(3).Select(x => $"{x.Key}:{PermissionModeCatalog.ToDisplayLabel(x.Value)}"))
|
||||
: "없음";
|
||||
return $"현재 권한 모드: {PermissionModeCatalog.ToDisplayLabel(mode)} ({mode})\n설명: {summary.Description}\n기본값: {PermissionModeCatalog.ToDisplayLabel(summary.DefaultMode)} · override: {summary.OverrideCount}개\n상위 override: {overrides}";
|
||||
return $"현재 권한 모드: {PermissionModeCatalog.ToDisplayLabel(mode)}\n운영 모드: {operationMode}\n기본값: {PermissionModeCatalog.ToDisplayLabel(summary.DefaultMode)} · 예외 {summary.OverrideCount}개\n예외 미리보기: {overrides}";
|
||||
}
|
||||
|
||||
private void OpenPermissionPanelFromSlash(string command, string usageText)
|
||||
@@ -12972,13 +12979,19 @@ public partial class ChatWindow : Window
|
||||
_agentSettingsWindow = null;
|
||||
}
|
||||
|
||||
var win = new AgentSettingsWindow(_settings)
|
||||
{
|
||||
Owner = IsLoaded && IsVisible ? this : null,
|
||||
};
|
||||
var win = new AgentSettingsWindow(_settings);
|
||||
if (IsLoaded && IsVisible)
|
||||
win.Owner = this;
|
||||
_agentSettingsWindow = win;
|
||||
win.Closed += (_, _) => _agentSettingsWindow = null;
|
||||
win.Resources.MergedDictionaries.Add(Resources);
|
||||
try
|
||||
{
|
||||
win.Resources.MergedDictionaries.Add(Resources);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 리소스 병합 실패 시에도 설정창 자체는 열리도록 유지
|
||||
}
|
||||
|
||||
bool changed;
|
||||
try
|
||||
@@ -12988,8 +13001,12 @@ public partial class ChatWindow : Window
|
||||
catch
|
||||
{
|
||||
// 모달 창 오픈에 실패하면 일반 창으로라도 설정 접근을 보장
|
||||
win.Show();
|
||||
win.Activate();
|
||||
try
|
||||
{
|
||||
win.Show();
|
||||
win.Activate();
|
||||
}
|
||||
catch { }
|
||||
return;
|
||||
}
|
||||
if (!changed)
|
||||
@@ -13006,9 +13023,12 @@ public partial class ChatWindow : Window
|
||||
|
||||
public void OpenAgentSettingsFromExternal()
|
||||
{
|
||||
Show();
|
||||
Activate();
|
||||
OpenAgentSettingsWindow();
|
||||
Dispatcher.BeginInvoke(() =>
|
||||
{
|
||||
Show();
|
||||
Activate();
|
||||
OpenAgentSettingsWindow();
|
||||
}, DispatcherPriority.Input);
|
||||
}
|
||||
|
||||
private void BtnInlineSettingsClose_Click(object sender, RoutedEventArgs e)
|
||||
|
||||
Reference in New Issue
Block a user