[Phase 17-E/F/G] NEXT_ROADMAP 완료 기록 추가

Phase 17-E 계층 메모리/컨텍스트 고도화 완료 기록:
- AxMdIncludeResolver.cs (@include 재귀 해석, 최대 5단계)
- PathScopedRuleInjector.cs (paths: 프론트매터 경로 규칙 주입)
- HierarchicalMemoryService.cs (4-layer 계층 메모리)
- AgentLoopService.Memory.cs (105줄, 세션 시작 시 주입)

Phase 17-F 권한 시스템 고도화 완료 기록:
- AgentLoopService.Permissions.cs (97줄, acceptEdits 모드)
- PermissionSystem.cs (패턴 기반 Allow/Deny 규칙)
- CompoundCommandParser.cs (&&·||·; 복합 명령 분해)

Phase 17-G 멀티파일 Diff + 자동 컨텍스트 수집 완료 기록:
- AgentLoopService.DiffTracker.cs (99줄, 원본 캡처→Diff 기록)
- AutoContextCollector.cs (@멘션·경로 자동 컨텍스트 수집)
- 최종 업데이트 라인: "17-A~D" → "17-A~G"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-04 09:49:44 +09:00
parent 8997d3b330
commit cc14de8da3

View File

@@ -5054,5 +5054,84 @@ ThemeResourceHelper에 5개 정적 필드 추가:
--- ---
최종 업데이트: 2026-04-04 (Phase 22~52 + Phase 17-UI-A~E + Phase 17-A~D 구현 완료) ---
## Phase 17-E — 메모리/컨텍스트 고도화 (v1.8.0) ✅ 완료
> **목표**: @include 지시어·4-layer 계층 메모리·경로 기반 규칙 주입·컨텍스트 압축 완전 구현
### 변경 파일
| 파일 | 변경 내용 |
|------|----------|
| `AxMdIncludeResolver.cs` (신규) | `ResolveAsync()` — AX.md·rules/*.md의 `@파일경로` 지시어 재귀 해석. 최대 5단계 깊이, 순환 참조 감지. 40K자 초과 시 경고. |
| `PathScopedRuleInjector.cs` (신규) | `.ax/rules/*.md` `paths:` 프론트매터 파싱 → GlobMatcher로 현재 파일 경로 매칭 → 해당 규칙만 컨텍스트에 주입. |
| `HierarchicalMemoryService.cs` (신규) | 4-layer(Managed/User/Project/Local) AX.md 파일 수집·병합. 우선순위 낮은 레이어부터 쌓아 높은 레이어가 재정의. |
| `AgentLoopService.Memory.cs` (신규, 105줄) | `InjectHierarchicalMemoryAsync()` — 세션 시작 시 계층 메모리를 시스템 메시지에 in-place 주입. `InjectPathScopedRulesAsync()` — 파일 도구 성공 후 경로 규칙 주입. |
| `AgentLoopService.cs` | 세션 시작: `InjectHierarchicalMemoryAsync()` 호출. 도구 성공 후: `InjectPathScopedRulesAsync(filePath)` 호출. |
### 구현 세부사항
- **4-layer 우선순위**: Managed(%APPDATA%\AxCopilot\system.md) → User(%USERPROFILE%\.axcopilot\AX.md) → Project(cwd/AX.md + .ax/rules/*.md) → Local(cwd/AX.local.md)
- **@include 재귀**: `@상대경로` 지시어 탐지 → 파일 읽기 → 재귀 치환 (최대 5단계, 방문 집합으로 순환 감지)
- **경로 규칙 in-place**: `## 현재 파일에 적용된 경로 규칙` 마커로 기존 섹션 탐지 후 교체 → 중복 방지
- **자동 압축**: ContextCondenser.cs — 컨텍스트 토큰 초과 시 오래된 메시지 요약 후 압축. AutoCompactMonitor.cs — 주기적 자동 압축 감시.
- **설정 연동**: `EnableMemorySystem` (기본 true)
- **빌드**: 경고 0, 오류 0
---
---
## Phase 17-F — 권한 시스템 고도화 (v1.8.0) ✅ 완료
> **목표**: acceptEdits 권한 모드·패턴 기반 Allow/Deny 규칙·복합 Bash 명령 분해
### 변경 파일
| 파일 | 변경 내용 |
|------|----------|
| `AgentLoopService.Permissions.cs` (신규, 97줄) | `GetPermissionService()` — 모드 변경 시 PermissionDecisionService 재생성 및 캐시. `EvaluateToolPermission()` — Chain: Deny규칙→Allow규칙→AcceptEdits/Plan/Bypass→기본(Ask). |
| `PermissionSystem.cs` | `PermissionDecisionService` 빌드 로직. AcceptEditsHandler: 파일 편집 도구 자동 승인, bash/process 확인 유지. PatternRuleHandler: glob 패턴 기반 Allow/Deny. |
| `CompoundCommandParser.cs` (신규) | `&&`, `\|\|`, `;`, `\|` 연산자로 bash 명령 분해. `SplitCommands()` → 모든 서브 명령 개별 검사. |
| `AppSettings.PermissionsConfig.cs` | `AllowRules`/`DenyRules` 리스트 추가. 패턴 예: `process(git *)` 허용, `process(rm -rf *)` 차단. |
### 구현 세부사항
- **acceptEdits 모드**: file_write/file_edit/file_manage 도구 → 자동 승인. bash/process → 여전히 Ask 확인.
- **패턴 매칭**: `tool(pattern)` 형식. `*` 와일드카드 지원. 대소문자 무시.
- **Chain of Responsibility**: Deny규칙(즉시차단) → Allow규칙(CheckRequired 스킵) → 모드 기본값(AcceptEdits/Plan/Bypass/Ask)
- **복합 명령**: `git add . && git commit -m "msg"``git add .`·`git commit -m "msg"` 각각 검사
- **하드코딩 차단**: `rd /s`, `format`, `reg delete`, `del /s /q` 등 위험 명령 항상 차단
- **빌드**: 경고 0, 오류 0
---
---
## Phase 17-G — 멀티파일 Diff + 자동 컨텍스트 수집 (v1.8.0) ✅ 완료
> **목표**: 쓰기 도구 실행 전후 원본·변경 캡처 → Diff 패널 실시간 표시 + @멘션 자동 컨텍스트 수집
### 변경 파일
| 파일 | 변경 내용 |
|------|----------|
| `AgentLoopService.DiffTracker.cs` (신규, 99줄) | `CaptureOriginalFileContent()` — 쓰기 도구 실행 전 원본 캡처. `TrackFileModificationForDiff()` — 성공 후 변경 내용을 MultiFileDiffViewModel에 기록. `ResetDiffTracker()` — 세션 시작 시 초기화. |
| `AutoContextCollector.cs` (신규) | `@파일명` 멘션·절대 경로·따옴표 파일명·백틱 참조 Regex 패턴으로 사용자 메시지에서 파일 참조 자동 감지. `CollectContextAsync()` — 감지된 파일 내용 읽어 컨텍스트에 추가. |
| `AgentLoopService.Execution.cs` | 쓰기 도구 실행 전: `CaptureOriginalFileContent(filePath)`. 성공 후: `TrackFileModificationForDiff(filePath, result)`. |
| `AgentLoopService.cs` | 사용자 메시지 처리 전: `AutoContextCollector.CollectContextAsync(userMessage, messages)`. 세션 시작: `ResetDiffTracker()`. |
### 구현 세부사항
- **Diff 추적 도구**: file_write, file_edit, file_manage 성공 시만 Diff 기록 (읽기 전용 도구 제외)
- **MultiFileDiffViewModel**: ChatWindow Diff 패널에 바인딩. 변경된 파일 목록 + 선택 파일 Diff 표시.
- **자동 컨텍스트**: `@파일명.ext` → 파일 읽기 후 `## 자동 수집된 컨텍스트 [파일명]` 블록으로 시스템 메시지에 추가
- **도구 위험도 표시**: ToolRiskMapper 연계 — ToolCall 이벤트에 `[⚠ 높음]`/`[• 보통]` 태그 접미사
- **설정 연동**: `EnableDiffTracker` (기본 true)
- **빌드**: 경고 0, 오류 0
---
최종 업데이트: 2026-04-04 (Phase 22~52 + Phase 17-UI-A~E + Phase 17-A~G 구현 완료)