Some checks failed
Release Gate / gate (push) Has been cancelled
- OperationalStatusPresentationCatalog를 추가해 compact strip과 quick strip의 색상/노출 계산을 AppStateService 밖으로 분리함 - PermissionRequestPresentationCatalog와 ToolResultPresentationCatalog에 Kind/Description 메타를 추가해 transcript fallback 설명을 타입 기반으로 정리함 - PermissionModePresentationCatalog와 ChatWindow.PermissionPresentation에서 제거된 계획 모드 표현 분기를 걷어 권한 UI를 실제 지원 모드만 다루도록 단순화함 - README, DEVELOPMENT, claw-code parity plan 문서를 2026-04-06 09:36 (KST) 기준으로 갱신함 - 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ (경고 0 / 오류 0)
121 lines
4.2 KiB
C#
121 lines
4.2 KiB
C#
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");
|
|
}
|
|
}
|