namespace AxCopilot.Services.Agent; internal sealed record PermissionRequestPresentation( string Kind, string Icon, string Label, string Description, string BackgroundHex, string ForegroundHex); internal static class PermissionRequestPresentationCatalog { public static PermissionRequestPresentation Resolve(string? toolName, bool pending) { var tool = (toolName ?? string.Empty).Trim().ToLowerInvariant(); if (tool.Contains("bash") || tool.Contains("powershell") || tool.Contains("process")) return Build( "command", pending, "\uE756", "명령 실행 권한 요청", "명령 실행 권한 확인", "터미널 명령을 실행하기 전에 확인이 필요합니다.", "명령 실행이 승인되어 계속 진행합니다.", "#FEF2F2", "#DC2626"); if (tool.Contains("web") || tool.Contains("fetch") || tool.Contains("http")) return Build( "web", pending, "\uE774", "웹 요청 권한 요청", "웹 요청 권한 확인", "외부 웹 요청 전 사용자 확인이 필요합니다.", "웹 요청이 승인되어 계속 진행합니다.", "#FFF7ED", "#C2410C"); if (tool.Contains("skill")) return Build( "skill", pending, "\uE8A5", "스킬 실행 권한 요청", "스킬 실행 권한 확인", "연결된 스킬 실행 전 확인이 필요합니다.", "스킬 실행이 승인되어 계속 진행합니다.", "#F5F3FF", "#7C3AED"); if (tool.Contains("ask")) return Build( "question", pending, "\uE897", "의견 요청 확인", "의견 요청 완료", "사용자에게 선택이나 답변을 요청합니다.", "사용자 의견을 받아 다음 단계로 진행합니다.", "#EFF6FF", "#2563EB"); if (tool.Contains("file_edit") || tool.Contains("file_write") || tool.Contains("edit")) return Build( "file_edit", pending, "\uE70F", "파일 수정 권한 요청", "파일 수정 권한 확인", "파일을 만들거나 수정하기 전에 확인이 필요합니다.", "파일 수정이 승인되어 계속 진행합니다.", "#FFF7ED", "#C2410C"); if (tool.Contains("file") || tool.Contains("glob") || tool.Contains("grep") || tool.Contains("folder")) return Build( "file_access", pending, "\uE8A5", "파일 접근 권한 요청", "파일 접근 권한 확인", "폴더와 파일 내용을 읽기 전에 확인이 필요합니다.", "파일 접근이 승인되어 계속 진행합니다.", "#FFF7ED", "#C2410C"); return Build( "generic", pending, "\uE897", "권한 요청", "권한 확인", "계속 진행하기 전에 사용자 확인이 필요합니다.", "요청이 승인되어 계속 진행합니다.", "#FFF7ED", "#C2410C"); } private static PermissionRequestPresentation Build( string kind, bool pending, string icon, string pendingLabel, string resolvedLabel, string pendingDescription, string resolvedDescription, string backgroundHex, string foregroundHex) { return new PermissionRequestPresentation( kind, pending ? icon : "\uE73E", pending ? pendingLabel : resolvedLabel, pending ? pendingDescription : resolvedDescription, pending ? backgroundHex : "#ECFDF5", pending ? foregroundHex : "#059669"); } }