권한 팝업 순서/즉시반영 정렬: Deny 상단 배치와 탭 기본값 강제
Some checks failed
Release Gate / gate (push) Has been cancelled

- 권한 팝업 핵심 영역에 Deny(활용하지 않음) 포함, 고급은 DontAsk만 유지

- LoadConversationSettings가 대화 권한 미설정 시 탭 기본권한(Chat=Deny, Cowork/Code=DefaultAgentPermission) 즉시 적용

- PermissionModePresentationCatalog 한글 라벨/설명 문자열 정리

- README/DEVELOPMENT 이력(2026-04-04 15:52 KST) 동기화
This commit is contained in:
2026-04-04 15:52:58 +09:00
parent f8669c735d
commit 666416ff65
4 changed files with 40 additions and 13 deletions

View File

@@ -1,4 +1,4 @@
namespace AxCopilot.Services.Agent;
namespace AxCopilot.Services.Agent;
internal sealed record PermissionModePresentation(
string Mode,
@@ -15,37 +15,37 @@ internal static class PermissionModePresentationCatalog
PermissionModeCatalog.Deny,
"\uE711",
"활용하지 않음",
"파일 읽기만 허용하고 생성/수정/삭제 차단합니다",
"파일 읽기만 허용하고 생성/수정/삭제 차단합니다.",
"#107C10"),
new PermissionModePresentation(
PermissionModeCatalog.Default,
"\uE8D7",
"소극 활용",
"변경 전 확인하 필요할 때만 파일 접근을 진행합니다",
"변경 전 확인하고, 필요한 경우에만 파일 접근을 진행합니다.",
"#2563EB"),
new PermissionModePresentation(
PermissionModeCatalog.AcceptEdits,
"\uE73E",
"적극 활용",
"파일 편집 도구를 자동 승인하고 명령 실행은 계속 확인합니다",
"파일 편집 도구를 자동 승인하고 명령 실행은 계속 확인합니다.",
"#107C10"),
new PermissionModePresentation(
PermissionModeCatalog.Plan,
"\uE7C3",
"계획 중심",
"쓰기 전 계획/승인 흐름을 우선합니다",
"쓰기 전 계획승인 흐름을 우선합니다.",
"#4338CA"),
new PermissionModePresentation(
PermissionModeCatalog.BypassPermissions,
"\uE814",
"완전 자동",
"권한 확인을 대부분 생략합니다. 민감 작업 주의하세요",
"권한 확인을 대부분 생략합니다. 민감 작업 주의하세요.",
"#B45309"),
new PermissionModePresentation(
PermissionModeCatalog.DontAsk,
"\uE8A5",
"질문 없이 진행",
"권한 질문 없이 진행합니다. 자동 실행 범위를 점검하세요",
"권한 질문 없이 진행합니다. 자동 실행 범위를 점검하세요.",
"#B91C1C"),
};

View File

@@ -1561,8 +1561,13 @@ public partial class ChatWindow : Window
lock (_convLock) conv = _currentConversation;
var llm = _settings.Settings.Llm;
if (conv != null && conv.Permission != null)
_settings.Settings.Llm.FilePermission = PermissionModeCatalog.NormalizeGlobalMode(conv.Permission);
var fallbackPermission = _activeTab == "Chat"
? PermissionModeCatalog.Deny
: PermissionModeCatalog.NormalizeGlobalMode(llm.DefaultAgentPermission);
var conversationPermission = !string.IsNullOrWhiteSpace(conv?.Permission)
? PermissionModeCatalog.NormalizeGlobalMode(conv.Permission)
: fallbackPermission;
_settings.Settings.Llm.FilePermission = conversationPermission;
_folderDataUsage = conv?.DataUsage ?? llm.FolderDataUsage ?? "none";
_selectedMood = conv?.Mood ?? llm.DefaultMood ?? "modern";
@@ -1903,15 +1908,14 @@ public partial class ChatWindow : Window
var coreLevels = PermissionModePresentationCatalog.Ordered
.Where(x =>
string.Equals(x.Mode, PermissionModeCatalog.Deny, StringComparison.OrdinalIgnoreCase) ||
string.Equals(x.Mode, PermissionModeCatalog.Default, StringComparison.OrdinalIgnoreCase) ||
string.Equals(x.Mode, PermissionModeCatalog.AcceptEdits, StringComparison.OrdinalIgnoreCase) ||
string.Equals(x.Mode, PermissionModeCatalog.Plan, StringComparison.OrdinalIgnoreCase) ||
string.Equals(x.Mode, PermissionModeCatalog.BypassPermissions, StringComparison.OrdinalIgnoreCase))
.ToList();
var advancedLevels = PermissionModePresentationCatalog.Ordered
.Where(x =>
string.Equals(x.Mode, PermissionModeCatalog.Deny, StringComparison.OrdinalIgnoreCase) ||
string.Equals(x.Mode, PermissionModeCatalog.DontAsk, StringComparison.OrdinalIgnoreCase))
.Where(x => string.Equals(x.Mode, PermissionModeCatalog.DontAsk, StringComparison.OrdinalIgnoreCase))
.ToList();
var current = PermissionModeCatalog.NormalizeGlobalMode(_settings.Settings.Llm.FilePermission);
void AddPermissionRows(Panel container, IEnumerable<PermissionModePresentation> levels)