- 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)
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
using System;
|
||||
|
||||
namespace AxCopilot.Services.Agent;
|
||||
|
||||
internal sealed record PermissionRequestPresentation(
|
||||
string Kind,
|
||||
string Icon,
|
||||
string Label,
|
||||
string Description,
|
||||
string BackgroundHex,
|
||||
string ForegroundHex);
|
||||
|
||||
@@ -15,49 +15,106 @@ internal static class PermissionRequestPresentationCatalog
|
||||
var tool = (toolName ?? string.Empty).Trim().ToLowerInvariant();
|
||||
|
||||
if (tool.Contains("bash") || tool.Contains("powershell") || tool.Contains("process"))
|
||||
{
|
||||
return pending
|
||||
? new PermissionRequestPresentation("\uE756", "명령 실행 권한 요청", "#FEF2F2", "#DC2626")
|
||||
: new PermissionRequestPresentation("\uE73E", "명령 실행 권한 승인", "#ECFDF5", "#059669");
|
||||
}
|
||||
return Build(
|
||||
"command",
|
||||
pending,
|
||||
"\uE756",
|
||||
"명령 실행 권한 요청",
|
||||
"명령 실행 권한 확인",
|
||||
"터미널 명령을 실행하기 전에 확인이 필요합니다.",
|
||||
"명령 실행이 승인되어 계속 진행합니다.",
|
||||
"#FEF2F2",
|
||||
"#DC2626");
|
||||
|
||||
if (tool.Contains("web") || tool.Contains("fetch") || tool.Contains("http"))
|
||||
{
|
||||
return pending
|
||||
? new PermissionRequestPresentation("\uE774", "웹 요청 권한 요청", "#FFF7ED", "#C2410C")
|
||||
: new PermissionRequestPresentation("\uE73E", "웹 요청 권한 승인", "#ECFDF5", "#059669");
|
||||
}
|
||||
return Build(
|
||||
"web",
|
||||
pending,
|
||||
"\uE774",
|
||||
"웹 요청 권한 요청",
|
||||
"웹 요청 권한 확인",
|
||||
"외부 웹 요청 전 사용자 확인이 필요합니다.",
|
||||
"웹 요청이 승인되어 계속 진행합니다.",
|
||||
"#FFF7ED",
|
||||
"#C2410C");
|
||||
|
||||
if (tool.Contains("skill"))
|
||||
{
|
||||
return pending
|
||||
? new PermissionRequestPresentation("\uE8A5", "스킬 실행 권한 요청", "#F5F3FF", "#7C3AED")
|
||||
: new PermissionRequestPresentation("\uE73E", "스킬 실행 권한 승인", "#ECFDF5", "#059669");
|
||||
}
|
||||
return Build(
|
||||
"skill",
|
||||
pending,
|
||||
"\uE8A5",
|
||||
"스킬 실행 권한 요청",
|
||||
"스킬 실행 권한 확인",
|
||||
"연결된 스킬 실행 전 확인이 필요합니다.",
|
||||
"스킬 실행이 승인되어 계속 진행합니다.",
|
||||
"#F5F3FF",
|
||||
"#7C3AED");
|
||||
|
||||
if (tool.Contains("ask"))
|
||||
{
|
||||
return pending
|
||||
? new PermissionRequestPresentation("\uE897", "의견 요청 권한 확인", "#EFF6FF", "#2563EB")
|
||||
: new PermissionRequestPresentation("\uE73E", "의견 요청 권한 승인", "#ECFDF5", "#059669");
|
||||
}
|
||||
return Build(
|
||||
"question",
|
||||
pending,
|
||||
"\uE897",
|
||||
"의견 요청 확인",
|
||||
"의견 요청 완료",
|
||||
"사용자에게 선택이나 답변을 요청합니다.",
|
||||
"사용자 의견을 받아 다음 단계로 진행합니다.",
|
||||
"#EFF6FF",
|
||||
"#2563EB");
|
||||
|
||||
if (tool.Contains("file_edit") || tool.Contains("file_write") || tool.Contains("edit"))
|
||||
{
|
||||
return pending
|
||||
? new PermissionRequestPresentation("\uE70F", "파일 수정 권한 요청", "#FFF7ED", "#C2410C")
|
||||
: new PermissionRequestPresentation("\uE73E", "파일 수정 권한 승인", "#ECFDF5", "#059669");
|
||||
}
|
||||
return Build(
|
||||
"file_edit",
|
||||
pending,
|
||||
"\uE70F",
|
||||
"파일 수정 권한 요청",
|
||||
"파일 수정 권한 확인",
|
||||
"파일을 만들거나 수정하기 전에 확인이 필요합니다.",
|
||||
"파일 수정이 승인되어 계속 진행합니다.",
|
||||
"#FFF7ED",
|
||||
"#C2410C");
|
||||
|
||||
if (tool.Contains("file") || tool.Contains("glob") || tool.Contains("grep") || tool.Contains("folder"))
|
||||
{
|
||||
return pending
|
||||
? new PermissionRequestPresentation("\uE8A5", "파일 접근 권한 요청", "#FFF7ED", "#C2410C")
|
||||
: new PermissionRequestPresentation("\uE73E", "파일 접근 권한 승인", "#ECFDF5", "#059669");
|
||||
}
|
||||
return Build(
|
||||
"file_access",
|
||||
pending,
|
||||
"\uE8A5",
|
||||
"파일 접근 권한 요청",
|
||||
"파일 접근 권한 확인",
|
||||
"폴더와 파일 내용을 읽기 전에 확인이 필요합니다.",
|
||||
"파일 접근이 승인되어 계속 진행합니다.",
|
||||
"#FFF7ED",
|
||||
"#C2410C");
|
||||
|
||||
return pending
|
||||
? new PermissionRequestPresentation("\uE897", "권한 요청", "#FFF7ED", "#C2410C")
|
||||
: new PermissionRequestPresentation("\uE73E", "권한 승인", "#ECFDF5", "#059669");
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user