diff --git a/README.md b/README.md index ea622ea..64aa07b 100644 --- a/README.md +++ b/README.md @@ -222,7 +222,7 @@ public class MyHandler : IActionHandler ### v0.7.3 — AX Agent 권한 코어 재구성 + 입력 계층 정리 -업데이트: 2026-04-04 14:55 (KST) +업데이트: 2026-04-04 14:57 (KST) | 분류 | 내용 | |------|------| @@ -287,6 +287,7 @@ public class MyHandler : IActionHandler | 입력 하단/모델 선택 컴팩트 정렬 | 입력 박스·모델 선택 버튼·인라인 설정 패널·전송 버튼 크기를 축소해 Codex형 컴포저 밀도로 정렬 | | 로직 안정화 회귀 보강 | `ContextCondenserTests`와 `LlmRuntimeOverrideTests`를 보강해 compact 실동작과 vLLM 암호화 API키/SSL 우회 해석 규칙을 회귀 검증 | | 권한 패턴 구문 호환성 보강 | 권한 규칙 파서를 `tool@pattern` 외 `tool|pattern`, `tool(pattern)`도 해석하도록 확장하고 deny→allow 우선순위 회귀를 보강 | +| 권한 모드 별칭 정합 보강 | `/permissions`, `/allowed-tools`에서 `none/passive/active/planning/fullauto/silent` 별칭을 지원하고 카탈로그 정규화와 일치시킴 | | Slash palette 상태 분리 시작 | `ChatWindow`에 몰려 있던 slash 상태를 `SlashPaletteState`로 분리해 이후 Codex/Claude형 composer 개편 기반 마련 | | 런처 이미지 미리보기 추가 | `#` 클립보드 이미지 항목에서 `Shift+Enter`로 전용 미리보기 창을 열고, 줌·원본 해상도 확인·PNG/JPEG/BMP 저장·클립보드 복사를 지원 | | 검증 | `dotnet build` 경고 0 / 오류 0, `dotnet test` 436 passed / 0 failed | diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index f37d193..f8c79e8 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -3530,3 +3530,26 @@ else: ### 3) 품질 게이트 - `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests"` 통과 (45 passed, 0 failed). + +## 2026-04-04 추가 진행 기록 (연속 실행 37차: 권한 모드 별칭 정합 보강) + +업데이트: 2026-04-04 14:57 (KST) + +### 1) 권한 모드 정규화 별칭 확장 +- `PermissionModeCatalog.NormalizeGlobalMode`에 별칭 추가: + - `none`, `disabled` → `Deny` + - `passive` → `Default` + - `active` → `AcceptEdits` + - `planning` → `Plan` + - `fullauto` → `BypassPermissions` + - `silent` → `DontAsk` + +### 2) Slash 권한 명령 별칭 동기화 +- `ChatWindow.TryApplyPermissionModeFromAction`에도 동일 별칭을 반영해 `/permissions`, `/allowed-tools` 입력과 내부 정규화 규칙을 일치시킴. + +### 3) 회귀 테스트 보강 +- `PermissionModeCatalogTests`에 신규 별칭 입력 케이스를 추가해 정규화 회귀 검증 강화. + +### 4) 품질 게이트 +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` 통과 (88 passed, 0 failed). diff --git a/src/AxCopilot.Tests/Services/PermissionModeCatalogTests.cs b/src/AxCopilot.Tests/Services/PermissionModeCatalogTests.cs index a21d382..ae0e692 100644 --- a/src/AxCopilot.Tests/Services/PermissionModeCatalogTests.cs +++ b/src/AxCopilot.Tests/Services/PermissionModeCatalogTests.cs @@ -10,11 +10,17 @@ public class PermissionModeCatalogTests [InlineData(null, PermissionModeCatalog.Default)] [InlineData("", PermissionModeCatalog.Default)] [InlineData("ask", PermissionModeCatalog.Default)] + [InlineData("passive", PermissionModeCatalog.Default)] [InlineData("auto", PermissionModeCatalog.AcceptEdits)] + [InlineData("active", PermissionModeCatalog.AcceptEdits)] [InlineData("accept", PermissionModeCatalog.AcceptEdits)] [InlineData("plan", PermissionModeCatalog.Plan)] [InlineData("bypass", PermissionModeCatalog.BypassPermissions)] + [InlineData("fullauto", PermissionModeCatalog.BypassPermissions)] [InlineData("dontask", PermissionModeCatalog.DontAsk)] + [InlineData("silent", PermissionModeCatalog.DontAsk)] + [InlineData("none", PermissionModeCatalog.Deny)] + [InlineData("disabled", PermissionModeCatalog.Deny)] [InlineData("deny", PermissionModeCatalog.Deny)] [InlineData("unknown", PermissionModeCatalog.Default)] public void NormalizeGlobalMode_ShouldMapExpectedModes(string? input, string expected) diff --git a/src/AxCopilot/Services/Agent/PermissionModeCatalog.cs b/src/AxCopilot/Services/Agent/PermissionModeCatalog.cs index 6dcea6f..de07837 100644 --- a/src/AxCopilot/Services/Agent/PermissionModeCatalog.cs +++ b/src/AxCopilot/Services/Agent/PermissionModeCatalog.cs @@ -38,15 +38,34 @@ public static class PermissionModeCatalog { "default" => Default, "ask" => Ask, + "passive" => Default, + "소극활용" => Default, + "소극 활용" => Default, "acceptedits" => AcceptEdits, "accept" => AcceptEdits, "auto" => Auto, + "active" => AcceptEdits, + "적극활용" => AcceptEdits, + "적극 활용" => AcceptEdits, "plan" => Plan, + "planning" => Plan, + "계획중심" => Plan, + "계획 중심" => Plan, "bypasspermissions" => BypassPermissions, "bypass" => BypassPermissions, + "fullauto" => BypassPermissions, + "완전자동" => BypassPermissions, + "완전 자동" => BypassPermissions, "dontask" => DontAsk, "don't ask" => DontAsk, + "silent" => DontAsk, + "질문없이진행" => DontAsk, + "질문 없이 진행" => DontAsk, "allow" => AcceptEdits, + "none" => Deny, + "disabled" => Deny, + "활용하지않음" => Deny, + "활용하지 않음" => Deny, "deny" => Deny, _ => Default, }; diff --git a/src/AxCopilot/Views/ChatWindow.xaml.cs b/src/AxCopilot/Views/ChatWindow.xaml.cs index 376ff52..c215c89 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml.cs +++ b/src/AxCopilot/Views/ChatWindow.xaml.cs @@ -2273,9 +2273,14 @@ public partial class ChatWindow : Window "active" => PermissionModeCatalog.AcceptEdits, "deny" => PermissionModeCatalog.Deny, "plan" => PermissionModeCatalog.Plan, + "planning" => PermissionModeCatalog.Plan, "bypass" => PermissionModeCatalog.BypassPermissions, "bypasspermissions" => PermissionModeCatalog.BypassPermissions, + "fullauto" => PermissionModeCatalog.BypassPermissions, "dontask" => PermissionModeCatalog.DontAsk, + "silent" => PermissionModeCatalog.DontAsk, + "none" => PermissionModeCatalog.Deny, + "disabled" => PermissionModeCatalog.Deny, _ => null, };