권한 팝업 단순화: 핵심 4모드 전면 배치 + 고급 모드 분리
Some checks failed
Release Gate / gate (push) Has been cancelled

- ChatWindow 권한 팝업에서 기본 노출 모드를 소극/적극/계획/완전 자동 4개로 재정렬

- 활용하지 않음(Deny), 질문 없이 진행(DontAsk)은 고급 모드 접힘 섹션으로 분리

- permission_advanced_modes 섹션 상태를 설정에 저장/복원하도록 연결

- README.md, docs/DEVELOPMENT.md에 2026-04-04 13:55(KST) 기준 이력 추가

- 품질 확인: dotnet build 통과(0 경고/0 오류), 테스트는 wpftmp 간헐 이슈로 --no-build 필터 86건 통과
This commit is contained in:
2026-04-04 13:56:02 +09:00
parent b1fa8f692a
commit 0bb37d9390
3 changed files with 48 additions and 3 deletions

View File

@@ -222,7 +222,7 @@ public class MyHandler : IActionHandler
### v0.7.3 — AX Agent 권한 코어 재구성 + 입력 계층 정리
업데이트: 2026-04-04 13:40 (KST)
업데이트: 2026-04-04 13:55 (KST)
| 분류 | 내용 |
|------|------|
@@ -280,6 +280,7 @@ public class MyHandler : IActionHandler
| 권한 표시 카탈로그 분리 | 권한 모드 라벨/설명/아이콘/색을 `PermissionModePresentationCatalog`로 분리해 팝업 표면 기준을 단일화 |
| 탭별 설정 해석기 도입 | `AgentTabSettingsResolver`를 추가해 Cowork/Code 분기(검증 활성/Code 전용 도구 비활성)를 단일 경로로 정리 |
| L4 통합 회귀 보강 | `PermissionModeCatalogTests`/`PermissionModePresentationCatalogTests`/`SlashCommandCatalogTests`를 추가하고 deny 우선 규칙을 `OperationModePolicyTests`에 반영해 권한·슬래시 회귀망을 강화 |
| 권한 팝업 핵심 4모드 정렬 | 권한 팝업을 `소극 활용/적극 활용/계획 중심/완전 자동` 중심으로 단순화하고 `활용하지 않음/질문 없이 진행``고급 모드` 접힘 섹션으로 분리 |
| Slash palette 상태 분리 시작 | `ChatWindow`에 몰려 있던 slash 상태를 `SlashPaletteState`로 분리해 이후 Codex/Claude형 composer 개편 기반 마련 |
| 런처 이미지 미리보기 추가 | `#` 클립보드 이미지 항목에서 `Shift+Enter`로 전용 미리보기 창을 열고, 줌·원본 해상도 확인·PNG/JPEG/BMP 저장·클립보드 복사를 지원 |
| 검증 | `dotnet build` 경고 0 / 오류 0, `dotnet test` 436 passed / 0 failed |

View File

@@ -3393,3 +3393,23 @@ else:
### 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~PermissionModePresentationCatalogTests|FullyQualifiedName~SlashCommandCatalogTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~OperationModeReadinessTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` 통과 (88 passed, 0 failed).
## 2026-04-04 추가 진행 기록 (연속 실행 30차: 권한 팝업 핵심 4모드 정렬)
업데이트: 2026-04-04 13:55 (KST)
### 1) 권한 팝업 구조 단순화 (claw-code 흐름 반영)
- 권한 팝업 최상단 노출 모드를 핵심 4개로 정리:
- 소극 활용
- 적극 활용
- 계획 중심
- 완전 자동
- `활용하지 않음`, `질문 없이 진행`은 `고급 모드` 접힘 섹션으로 분리.
### 2) 고급 모드 접힘 상태 저장
- `permission_advanced_modes` 키를 사용해 고급 모드 섹션의 펼침/접힘 상태를 설정에 저장하고 재오픈 시 복원.
### 3) 품질 게이트
- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0).
- 테스트 재빌드 시 WPF 임시 생성물 누락(CS2001, `AxCopilot_*_wpftmp.csproj`)이 간헐 발생하여 다음으로 회귀 확인:
- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests|FullyQualifiedName~OperationModeReadinessTests"` 통과 (86 passed, 0 failed).

View File

@@ -1901,7 +1901,18 @@ public partial class ChatWindow : Window
};
}
var coreLevels = PermissionModePresentationCatalog.Ordered;
var coreLevels = PermissionModePresentationCatalog.Ordered
.Where(x =>
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))
.ToList();
var current = PermissionModeCatalog.NormalizeGlobalMode(_settings.Settings.Llm.FilePermission);
void AddPermissionRows(Panel container, IEnumerable<PermissionModePresentation> levels)
{
@@ -2010,7 +2021,7 @@ public partial class ChatWindow : Window
PermissionItems.Children.Add(new TextBlock
{
Text = "권한 모드",
Text = "핵심 권한 모드",
FontSize = 10.5,
FontWeight = FontWeights.SemiBold,
Foreground = secondaryText,
@@ -2018,6 +2029,19 @@ public partial class ChatWindow : Window
});
AddPermissionRows(PermissionItems, coreLevels);
if (advancedLevels.Count > 0)
{
var advancedPanel = new StackPanel();
AddPermissionRows(advancedPanel, advancedLevels);
PermissionItems.Children.Add(CreateCollapsibleSection(
"permission_advanced_modes",
"\uE9D9",
"고급 모드",
advancedPanel,
expanded: GetPermissionPopupSectionExpanded("permission_advanced_modes", false),
accentHex: "#64748B"));
}
PermissionItems.Children.Add(CreateCollapsibleSection(
"permission_summary",
"\uE946",