개발 문서를 AX 기준 계획 중심으로 정리하고 비교성 표현을 제거
- README와 DEVELOPMENT, 로드맵 문서에서 비교·모사 뉘앙스가 강한 문구를 AX 기준 설명으로 정리함 - 비교/패리티 성격의 문서를 AX Agent 구조 리뷰, 실행 개선 계획, 품질 계획, 런타임 품질 계획, 도구 커버리지 문서로 재구성함 - 회귀 프롬프트와 보조 개발 문서의 용어를 공통 핵심 명령과 운영 기준 중심으로 정리함 - 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_docs_cleanup\\ -p:IntermediateOutputPath=obj\\verify_docs_cleanup\\ (경고 0 / 오류 0)
This commit is contained in:
@@ -1,238 +1,46 @@
|
||||
# AX Agent 로드맵 (전면 재작성)
|
||||
# AX Agent 로드맵
|
||||
|
||||
## 1. 보존 이력 (요약만 유지)
|
||||
- v0.5.0: MCP 연동, 모델 폴백, 대화 분기, 프리뷰/토큰 관리, 에이전트 루프 강화.
|
||||
- v0.5.1: 고급 스킬 확장, 워크플로우 분석기, 런타임 감지.
|
||||
- v0.6.0: 멀티패스 문서 생성, 데이터 피벗/템플릿/이미지 분석 계열 도구 확장.
|
||||
- v0.7.0: Plan Mode, 병렬 도구 실행, 프로젝트 규칙 주입, 테스트 루프 자동화.
|
||||
- v0.7.1: 도구 실행 후 검증 게이트 강화, 피드백 컨텍스트 개선.
|
||||
- v0.7.2: 컨텍스트 압축/복원 안정화, UX/성능 보완.
|
||||
업데이트: 2026-04-15 18:20 (KST)
|
||||
|
||||
## 2. 재작성 기준
|
||||
- 기준 레퍼런스: `OpenCode/OpenCode-f5a40b86dede580f6543bf8926c9af017eea9409/src`.
|
||||
- 목표: 동작 순서, 예외/검증 흐름, 세션 내구성에서 동일 품질 달성.
|
||||
- 원칙: AX 코드 스타일로 재구성(표현/구조 변경), 기능적 동등성 유지.
|
||||
## 1. 목표
|
||||
- AX Agent의 실행 신뢰성, 세션 내구성, 결과 품질을 단계적으로 높입니다.
|
||||
- 비교·모사 표현 대신 실제 참조 모듈 경로와 AX 적용 위치만 문서에 남깁니다.
|
||||
- 변경 우선순위는 `상태 -> 실행 -> 렌더 -> UX` 순서로 유지합니다.
|
||||
|
||||
## 3. 2026 실행 계획 (v0.7.3 ~ v0.8.0)
|
||||
## 2. 보존 이력
|
||||
- v0.5.x: MCP, 모델 폴백, 대화 분기, 프리뷰/토큰 관리, 에이전트 루프 기반 구축
|
||||
- v0.6.0: 문서 생성, 데이터 피벗, 템플릿/이미지 분석 도구군 확장
|
||||
- v0.7.0 ~ v0.7.2: Plan Mode, 병렬 도구 실행, 검증 게이트, 컨텍스트 압축 안정화
|
||||
|
||||
| Phase | 참조 대상 (`OpenCode`) | AX 적용 위치 | 완료 조건 | 품질 판정 시나리오 |
|
||||
## 3. 2026 실행 계획
|
||||
|
||||
| Phase | 참조 대상 | AX 적용 위치 | 완료 조건 | 품질 판정 시나리오 |
|
||||
|---|---|---|---|---|
|
||||
| A (v0.7.3) Hook/Permission 계약 고도화 | `src/utils/hooks.ts`, `src/utils/hooks/hookEvents.ts`, `src/utils/permissions/PermissionUpdate.ts`, `src/utils/permissions/permissionSetup.ts` | `src/AxCopilot/Services/Agent/AgentHookRunner.cs`, `src/AxCopilot/Services/Agent/AgentLoopService.cs`, `src/AxCopilot/Models/AppSettings.cs`, `src/AxCopilot/ViewModels/SettingsViewModel.cs`, `src/AxCopilot/Views/SettingsWindow.xaml` | Hook JSON 출력(`updatedInput`, `updatedPermissions`, `additionalContext`) 반영 완료. Plain text 훅 하위호환 유지. 훅 실패 비차단 유지. | Pre-hook 입력 변형 적용 시 도구 입력이 실제 변경되는지 검증. 권한 업데이트 후 동일 run 내 권한 판정이 즉시 반영되는지 검증. |
|
||||
| B (v0.7.4) Plan/Run 상태 내구성 강화 | `src/utils/plans.ts`, `src/utils/sessionStorage.ts` | `src/AxCopilot/Services/ChatSessionStateService.cs`, `src/AxCopilot/Services/TaskRunService.cs`, `src/AxCopilot/Services/TaskRunStore.cs`, `src/AxCopilot/Views/ChatWindow.xaml.cs` | Plan 단계 승인/수정 이력 영속화. 앱 재시작 후 run 재개 시 마지막 실행 지점 정확 복원. 중복 실행/중복 이벤트 0건. | 실행 중 앱 종료 → 재실행 → 같은 탭/대화에서 run 상태와 최근 실행 이력이 일치하는지 검증. |
|
||||
| C (v0.7.5) 세션/이벤트 로그 정규화 | `src/utils/sessionStorage.ts`(이벤트 기록/복원 규약), `src/utils/hooks/hookEvents.ts` | `src/AxCopilot/Models/ChatModels.cs`, `src/AxCopilot/Services/ChatSessionStateService.cs`, `src/AxCopilot/Services/AppStateService.cs` | 이벤트 스키마 정리(도구 호출/결과/권한/훅/요약). replay 시 순서 불일치 0건. run 단위 요약 리포트 생성 가능 상태. | 동일 세션을 여러 번 로드해도 실행 이력 순서/상태가 변하지 않는지 검증. |
|
||||
| D (v0.7.6) 명령/도구 선택 정확도 개선 | `src/commands.ts`, `src/Tool.ts` | `src/AxCopilot/Services/Agent/AgentLoopService.cs`, `src/AxCopilot/Services/Agent/AgentLoopParallelExecution.cs`, `src/AxCopilot/Services/LlmService.ToolUse.cs` | 도구 별칭 정규화 규칙 강화. unknown-tool 재시도 루프 방지. 실패 유형별 복구 흐름 표준화. | 오타/별칭/비활성 도구 요청 시 복구 프롬프트로 정상 도구로 수렴하는지 검증. |
|
||||
| E (v0.8.0) 품질 게이트 최종 정렬 | `src/query.ts`, `src/QueryEngine.ts`(루프 종료/완료 기준), `src/utils/sessionStorage.ts` | `src/AxCopilot/Services/Agent/AgentLoopService.cs`, `src/AxCopilot/Services/Agent/AgentLoopTransitions.Execution.cs`, `src/AxCopilot/Services/Agent/AgentLoopTransitions.cs` | 코드/문서 작업별 완료 게이트를 증거 기반으로 고정. 내부 벤치마크 목표 성공률 충족. 완료 응답 근거 누락률 최소화. | 코드수정/문서생성/권한거부/실패복구 혼합 시나리오에서 조기 완료 없이 근거 기반 종료하는지 검증. |
|
||||
| A (v0.7.3) Hook/Permission 계약 고도화 | `src/utils/hooks.ts`, `src/utils/hooks/hookEvents.ts`, `src/utils/permissions/PermissionUpdate.ts`, `src/utils/permissions/permissionSetup.ts` | `AgentHookRunner.cs`, `AgentLoopService.cs`, `AppSettings.cs`, `SettingsViewModel.cs`, `SettingsWindow.xaml` | Hook JSON 출력(`updatedInput`, `updatedPermissions`, `additionalContext`) 반영, plain text 훅 하위호환 유지, 훅 실패 비차단 유지 | pre-hook 입력 변형과 권한 업데이트가 같은 run 안에서 즉시 적용되는지 검증 |
|
||||
| B (v0.7.4) Plan/Run 상태 내구성 강화 | `src/utils/plans.ts`, `src/utils/sessionStorage.ts` | `ChatSessionStateService.cs`, `TaskRunService.cs`, `TaskRunStore.cs`, `ChatWindow.xaml.cs` | plan 승인/수정 이력 영속화, 재시작 후 마지막 run 지점 복원, 중복 이벤트 0건 | 실행 중 종료 후 재실행 시 같은 탭/대화에서 run 상태와 최근 이력이 일치하는지 검증 |
|
||||
| C (v0.7.5) 세션/이벤트 로그 정규화 | `src/utils/sessionStorage.ts`, `src/utils/hooks/hookEvents.ts` | `ChatModels.cs`, `ChatSessionStateService.cs`, `AppStateService.cs` | 이벤트 스키마 정리, replay 순서 불일치 0건, run 단위 요약 리포트 생성 가능 | 같은 세션을 여러 번 로드해도 실행 이력 순서와 상태가 변하지 않는지 검증 |
|
||||
| D (v0.7.6) 명령/도구 선택 정확도 개선 | `src/commands.ts`, `src/Tool.ts` | `AgentLoopService.cs`, `AgentLoopParallelExecution.cs`, `LlmService.ToolUse.cs` | 도구 별칭 정규화 강화, unknown-tool 재시도 루프 방지, 실패 유형별 복구 표준화 | 오타/별칭/비활성 도구 요청이 정상 도구로 수렴하는지 검증 |
|
||||
| E (v0.8.0) 품질 게이트 정렬 | `src/query.ts`, `src/QueryEngine.ts`, `src/utils/sessionStorage.ts` | `AgentLoopService.cs`, `AgentLoopTransitions.Execution.cs`, `AgentLoopTransitions.cs` | 코드/문서 작업 완료 게이트를 증거 기반으로 고정, 조기 완료 방지 | 코드수정/문서생성/권한거부/복구 혼합 시나리오에서 근거 기반 종료를 검증 |
|
||||
|
||||
## 4. 공통 검증 규칙
|
||||
- 모든 단계: `dotnet build` 경고 0/오류 0.
|
||||
- 고위험 변경: 최소 1개 이상 재현 테스트 추가.
|
||||
- 운영모드(`internal`/`external`) 보안 정책 위반 0건.
|
||||
- 모든 단계에서 `dotnet build` 경고 0 / 오류 0
|
||||
- 고위험 변경마다 최소 1개 이상 재현 테스트 추가
|
||||
- `internal` / `external` 운영 모드 정책 위반 0건
|
||||
|
||||
## 5. 즉시 착수 항목
|
||||
1. 내부 벤치마크(기본 loop/복구/권한/hook) 결과를 릴리즈 체크리스트에 연동 유지.
|
||||
2. 세션 replay 안정성(`Suite=ReplayStability`) 전건 통과를 릴리즈 게이트로 운영.
|
||||
3. 패리티 수치(테스트 통과 수/게이트 상태)를 로드맵 문서 간 동일 문구로 유지.
|
||||
1. 내부 벤치마크 결과를 릴리즈 체크리스트에 계속 연결
|
||||
2. `Suite=ReplayStability` 전건 통과를 릴리즈 게이트로 유지
|
||||
3. 계획/실행/검증 문서 간 수치와 상태 문구를 같은 기준으로 동기화
|
||||
|
||||
## 6. 최신 검증 스냅샷 (2026-04-03)
|
||||
- `dotnet test --filter "Suite=ParityBenchmark"`: 13/13 통과.
|
||||
- `dotnet test --filter "Suite=ReplayStability"`: 14/14 통과.
|
||||
- `dotnet test`: 379/379 통과.
|
||||
## 6. 최신 검증 스냅샷
|
||||
- 기준 시점: 2026-04-03
|
||||
- `dotnet test --filter "Suite=ParityBenchmark"`: 13/13 통과
|
||||
- `dotnet test --filter "Suite=ReplayStability"`: 14/14 통과
|
||||
- `dotnet test`: 379/379 통과
|
||||
|
||||
## 7. 명령/도구 보강 스냅샷 (2026-04-04)
|
||||
- 슬래시 명령 고도화: `/chrome`, `/mcp`, `/verify`, `/commit`, `/settings`, `/permissions` 하위 동작 정리.
|
||||
- `/mcp` 상태 라벨 표준화: `Connected`, `NeedsAuth`, `Configured`, `Disconnected`, `Disabled`.
|
||||
- `/chrome` 런타임 재시도: 초기 probe 실패 시 `/mcp reconnect all` 자동 수행 후 1회 재평가.
|
||||
- Git 정책 정렬: `git_tool`의 `commit` 비활성 문구 제거(로컬 커밋 경로와 정책 일치).
|
||||
- `/commit` 부분 커밋 지원: `files:path1,path2 :: 메시지` 형식으로 선택 파일만 stage+commit 가능.
|
||||
- 테스트 보강:
|
||||
- `ChatWindowSlashPolicyTests`: 슬래시 파서/검증 프롬프트/MCP 상태 라벨 단위 검증 추가.
|
||||
- `AgentParityToolsTests`: `git_tool commit` 레거시 비활성 메시지 회귀 방지 테스트 추가.
|
||||
|
||||
## 7. 권한 Hook 계약 (P2 마감 기준)
|
||||
- lifecycle hook 키:
|
||||
- `__permission_request__` (pre)
|
||||
- `__permission_granted__` (post)
|
||||
- `__permission_denied__` (post)
|
||||
- payload 기준 필드: `runId`, `tool`, `target`, `permission`, `granted`, `reason`.
|
||||
- 우선순위:
|
||||
1. Hook `updatedPermissions`가 현재 run의 `AgentContext.ToolPermissions`를 즉시 갱신.
|
||||
2. 갱신 후 `context.CheckToolPermissionAsync()`로 최종 판정.
|
||||
3. hook 실패/예외는 non-blocking(권한 흐름 지속).
|
||||
4. `additionalContext`는 가능한 경로에서 메시지 컨텍스트로 반영.
|
||||
|
||||
- 2026-04-04(추가): `/mcp add/remove/reset` 확장, `tool_search` 기반 복구 프롬프트 강화, 슬래시 힌트 밀도(`rich/balanced/simple`) 연동.
|
||||
- 2026-04-04(추가2): /mcp login/logout 세션 인증 토큰 지원, /mcp status·/chrome 진단에 Auth(Session) 반영.
|
||||
- 2026-04-04(추가3): 권한 UX 통합(/permissions·/allowed-tools·/settings permissions), 복구 혼합 테스트 보강, 좌측 패널 실패 필터 노출 정책 rich 전용으로 정렬.
|
||||
|
||||
|
||||
- 2026-04-04 20:27 (KST): Added a dedicated AX Agent theme layer and separated in-chat theme selection into style (`claude/codex/slate`) and mode (`system/light/dark`).
|
||||
- 2026-04-04 18:03 (KST): Added a Codex-style context usage ring to the composer, exposed direct `/compact` execution from the footer, and surfaced Git branch/change status in the Cowork/Code footer when a repository is connected.
|
||||
- 2026-04-04 18:03 (KST): Simplified the Cowork footer by removing document format/design selectors and moved those defaults into the AX Agent settings page, with output format centered on AI automatic selection.
|
||||
- 2026-04-04 18:03 (KST): Minimized AX Agent message headers, changed model quick controls to a popup panel, flattened slash command rows into a Codex-style list, and aligned model/permission/template controls to the same dropdown panel language.
|
||||
- 2026-04-04 18:03 (KST): Expanded the Git branch badge into a dropdown panel, flattened permission/template popups into row-based lists, and made AI message action bars remain visible for the selected message.
|
||||
- 2026-04-04 18:03 (KST): Flattened the data-usage popup, added Git branch switching/creation inside the dropdown, and surfaced quick model chips so the inline model panel relies less on ComboBox controls.
|
||||
- 2026-04-04 18:03 (KST): Replaced the visible inline model/service selectors with custom cards and row lists so the AX Agent quick panel more closely follows the Codex/claude-code control feel.
|
||||
- 2026-04-04 18:03 (KST): Added recent/favorite grouping to the preset popup and enabled right-click pinning so the preset picker better matches Codex-style frequent-use navigation.
|
||||
- 2026-04-04 18:03 (KST): Added preset search, made selected messages visually persistent, and flattened more of the permission detail popup into row-based information to keep the panel lighter.
|
||||
- 2026-04-04 18:03 (KST): Switched recent permission-denied actions to flat row actions, exposed Git upstream state in the branch panel, and made inline quick actions read more like custom stateful cards.
|
||||
- 2026-04-04 19:07 (KST): Unified AX Agent popup panels around the same row-driven language by flattening permission override details, simplifying collapsible section chrome, adding keyboard-friendly row actions, and turning Git change stats into compact pills.
|
||||
- 2026-04-04 19:07 (KST): Refined message actions into custom pill buttons with visible labels, fixed the custom action template so border visuals render correctly, and tightened composer/footer density so model, preset, token, permission, and Git controls feel like one system.
|
||||
- 2026-04-04 19:11 (KST): Reworked the AX Agent timeline so execution events render like thin Codex-style inline logs instead of heavy banners, softened older-history loading into an outline pill, and aligned planning cards to the same message-width rhythm.
|
||||
- 2026-04-04 19:25 (KST): Tightened user/assistant/streaming cards under one density rule by compressing vertical spacing, card padding, header typography, and message meta spacing to a more Codex-like rhythm.
|
||||
- 2026-04-04 19:25 (KST): Flattened the composer further by reducing input, model, preset, token, and footer control heights so the bottom work area reads more like a single OpenCode-style strip.
|
||||
- 2026-04-04 19:25 (KST): Matched AX Agent overlay quick settings to inline quick settings with the same `label · value` structure, lighter explanatory copy, and unified section naming.
|
||||
- 2026-04-04 19:48 (KST): Fixed Chat sidebar topic exploration so clicking the left topic entry surfaces the preset cards again, and made preset selection immediately sync category label, conversation metadata, and saved state.
|
||||
- 2026-04-04 19:48 (KST): Reduced permission/data-usage UI lag by synchronizing conversation settings before persistence, switching popup rows to immediate mouse-down activation, and refreshing overlay status labels in the same turn.
|
||||
- 2026-04-04 19:48 (KST): Widened the AX Agent message lane, softened the yellow cast of the Claude-style theme preset, aligned the data-usage button with the permission button language, and routed the tray settings entry directly into AX Agent settings when AI is enabled.
|
||||
- 2026-04-04 20:41 (KST): Permission surface re-aligned to the four OpenCode public modes, legacy `질문 없이 진행` exposure removed from AX Agent popups/slash guidance, and the in-chat settings/sidebar information hierarchy simplified to match the lighter Claude/Codex-style layout direction.
|
||||
- 업데이트: 2026-04-04 22:05 (KST)
|
||||
- AX Agent 고급 설정 오버레이를 설명형 row + 커스텀 On/Off 선택 구조로 개편하고, 내부 기능명을 사용자 친화 문구로 정리함.
|
||||
- 업데이트: 2026-04-04 20:58 (KST)
|
||||
- AX Agent 서비스 설정의 내부 서비스 모델 선택을 등록 모델 칩 기반으로 정리하고, vLLM SSL 우회는 모델 등록/편집 다이얼로그에서만 노출되도록 설정 표면을 축소함.
|
||||
- 업데이트: 2026-04-04 21:02 (KST)
|
||||
- composer 컨텍스트 카드를 hover 중심의 간단 표기(`%` + `K/M` 사용량)로 정리하고, 최대 컨텍스트 설정 상한을 1M까지 확장함.
|
||||
- 업데이트: 2026-04-04 21:02 (KST)
|
||||
- AX Agent 서비스 설정의 `Gemini/Claude`도 모델 칩 선택 구조로 통일하고, composer 모델 버튼을 `서비스 · 모델` 문법으로 맞춰 설정-실행 흐름의 시각 언어를 정리함.
|
||||
- 업데이트: 2026-04-04 23:14 (KST)
|
||||
- 트레이 좌클릭 기본 진입점을 AX Agent로 전환하고, 우클릭 메뉴 상단에 앱 버전 헤더를 추가해 AX Agent 중심 진입 흐름을 강화함.
|
||||
- 메인 설정 저장 완료 후 열린 AX Agent 창이 즉시 테마/모델/권한/하단 상태줄을 다시 읽어오도록 fan-out 경로를 추가해 설정 반영 지연을 줄임.
|
||||
- DraftQueue kind 분류를 message/command/steering/direct/followup 기준으로 재정리해 큐 타입과 실제 입력 성격이 더 잘 맞도록 보강함.
|
||||
- 업데이트: 2026-04-04 23:23 (KST)
|
||||
- AX Agent가 `SettingsService.SettingsChanged`를 직접 구독하도록 바꿔 메인 설정/AX Agent 설정 어느 경로에서 저장하더라도 테마, 모델, 권한, 데이터 활용, composer, 대기열 UI가 즉시 동일 상태를 반영하도록 fan-out을 통합함.
|
||||
- AX Agent 설정 저장 경로에서 표현 수준을 무조건 `rich`로 덮어쓰던 로직을 제거해 `풍부하게 / 적절하게 / 간단하게`가 다른 설정 저장 경로에서도 유지되도록 보정함.
|
||||
- DraftQueue 패널은 `실행 중 / 다음 작업 / 보류 / 완료 / 실패` 개별 섹션 구조로 다시 나눠 현재 실행 흐름과 재시도 대기, 결과 이력을 더 빠르게 파악할 수 있도록 정리함.
|
||||
- ????: 2026-04-04 23:32 (KST)
|
||||
- AX Agent ???? ??? ?? tool-result ?? -> microcompact ?? ?? ?? -> ?? ?? ?? 3?? ??? ???, claude-code? staged compact ??? ? ??? ? ?? ??? ?? ????? ???.
|
||||
- ??? ?? ??, tool_result, ?? ???, ???? ? ???? LLM ?? ?? microcompact_boundary? ?? ??? ?? ?? ?? ?? ?? ?? ??? ??? ???? ?? ??.
|
||||
|
||||
---
|
||||
|
||||
## 8. 지능형 에이전트 고도화 로드맵 (oh-my-openagent 참조)
|
||||
|
||||
> 기준: oh-my-openagent 아키텍처 분석 결과에서 단일 모델 환경에서도 효과적인 기능을 우선 채택.
|
||||
> 원칙: AX 기존 인프라(`ClassifyTaskType`, `SubAgentTool`, `IntentDetector`, `TaskTypePolicy`, `ContextCondenser`) 위에 점진적으로 확장.
|
||||
|
||||
### 8-1. 즉시 개발 (P1~P5)
|
||||
|
||||
#### P1. IntentGate — 고급 의도 분류기
|
||||
- **목적**: 사용자 입력을 분석하여 최적 실행 프로파일(system prompt + temperature + tool 권한 + 최대 반복)을 자동 선택
|
||||
- **현재 상태**: `ClassifyTaskType()` (키워드 6분류) + `IntentDetector` (키워드 7분류, UI 힌트용) 존재하나 실행 프로파일 연동 없음
|
||||
- **구현 계획**:
|
||||
1. `IntentGateService.cs` 신규 — 2단계 분류기
|
||||
- Stage 1: 키워드 기반 빠른 분류 (기존 `ClassifyTaskType` + `IntentDetector` 통합)
|
||||
- Stage 2: LLM 1-shot 분류 (복합 요청 시만 발동, 토큰 최소화)
|
||||
2. `ExecutionProfile` 확장 — 분류 결과별 프로파일 매핑
|
||||
- `code_edit`: temperature 0.3, 코드 도구 우선, 최대 반복 25
|
||||
- `document_create`: temperature 0.7, 문서 도구 우선, 최대 반복 15
|
||||
- `analysis`: temperature 0.4, 검색/읽기 도구 우선, 최대 반복 20
|
||||
- `review`: temperature 0.2, 읽기 전용 도구, 최대 반복 15
|
||||
- `general_chat`: 도구 없음, temperature 0.8
|
||||
- `complex_task`: 전체 도구, temperature 0.5, SubAgent 활성화
|
||||
3. `AgentLoopService.RunAsync()` 진입부에서 `IntentGateService.Classify()` 호출 → 프로파일 적용
|
||||
- **수정 파일**: `IntentGateService.cs`(신규), `AgentLoopService.cs`, `AppSettings.cs`, `TaskTypePolicy.cs`
|
||||
- **검증**: 코드수정/문서생성/분석/리뷰/잡담 5개 시나리오에서 올바른 프로파일 선택 확인
|
||||
|
||||
#### P2. 카테고리 기반 서브에이전트 실행 프로파일
|
||||
- **목적**: 같은 모델이지만 작업 유형별로 다른 system prompt + tool 권한 + temperature를 적용하는 "가상 멀티에이전트"
|
||||
- **현재 상태**: `SubAgentTool`은 고정 system prompt + 읽기 전용 도구만 사용
|
||||
- **구현 계획**:
|
||||
1. `SubAgentProfile.cs` 신규 — 프로파일 정의 클래스
|
||||
- `researcher`: 읽기 전용, 검색 집중, temperature 0.3
|
||||
- `coder`: 파일 편집 가능, 빌드/테스트 도구 포함, temperature 0.2
|
||||
- `writer`: 문서 생성 도구 활성, temperature 0.7
|
||||
- `reviewer`: 코드리뷰 도구 + diff, temperature 0.2
|
||||
- `planner`: 계획/분해 도구, temperature 0.5
|
||||
2. `SubAgentTool` 확장 — `profile` 파라미터 추가
|
||||
- 프로파일별로 system prompt, 도구 레지스트리, temperature를 자동 구성
|
||||
- 기존 동작(profile 미지정)은 `researcher`로 폴백
|
||||
3. `IntentGateService`가 복합 요청 감지 시 자동으로 서브에이전트 프로파일 추천
|
||||
- **수정 파일**: `SubAgentProfile.cs`(신규), `SubAgentTool.cs`, `AgentLoopService.cs`
|
||||
- **검증**: "코드 수정하고 문서도 만들어줘" → coder + writer 프로파일 분리 실행 확인
|
||||
|
||||
#### P3. 누적 학습 (Accumulated Learnings)
|
||||
- **목적**: 세션 내 발견사항(에러 패턴, 파일 구조, 성공 전략)을 자동 수집하여 후속 반복에 주입
|
||||
- **현재 상태**: `AgentMemoryService`에 장기 메모리 존재하나, 세션 내 단기 학습 전파 없음
|
||||
- **구현 계획**:
|
||||
1. `SessionLearningCollector.cs` 신규
|
||||
- 도구 실행 결과에서 자동 학습 포인트 추출:
|
||||
- 빌드 에러 → "이 프로젝트는 .NET 8, nullable 활성"
|
||||
- grep 결과 → "이 패턴은 Services/ 폴더에 집중"
|
||||
- 파일 구조 → "테스트는 Tests/ 폴더, 네이밍 규칙 *Tests.cs"
|
||||
- 최대 10개 항목, FIFO 관리
|
||||
2. `AgentLoopService` — 각 반복 시작 시 누적 학습을 컨텍스트에 주입
|
||||
- `[System:SessionLearnings]` 메시지로 삽입 (압축 시 보존)
|
||||
3. `ContextCondenser` — 학습 메시지는 압축 대상에서 제외
|
||||
- **수정 파일**: `SessionLearningCollector.cs`(신규), `AgentLoopService.cs`, `ContextCondenser.cs`
|
||||
- **검증**: 빌드 에러 발생 후 다음 반복에서 동일 실수 반복 안 하는지 확인
|
||||
|
||||
#### P4. 워크스페이스 컨텍스트 자동 생성 (.ax-context)
|
||||
- **목적**: 작업 폴더의 구조/기술스택/컨벤션을 파일로 자동 생성 → 서브에이전트 컨텍스트 효율화
|
||||
- **현재 상태**: `ProjectRuleTool`이 `.ax-rules` 파일을 읽지만 자동 생성 없음
|
||||
- **구현 계획**:
|
||||
1. `WorkspaceContextGenerator.cs` 신규
|
||||
- 작업 폴더 최초 접근 시 자동 분석:
|
||||
- 파일 트리 (깊이 3), 주요 확장자 분포, 빌드 시스템 감지
|
||||
- README/package.json/csproj 등에서 프로젝트 메타 추출
|
||||
- 기존 `.ax-rules`, `.clinerules`, `CLAUDE.md` 존재 여부
|
||||
- 결과를 `.ax-context.md`로 저장 (1회 생성, 수동 갱신)
|
||||
2. `SubAgentTool` — 서브에이전트 생성 시 `.ax-context.md` 내용을 system prompt에 자동 주입
|
||||
3. `AgentLoopService` — 메인 에이전트도 `.ax-context.md` 존재 시 컨텍스트에 포함
|
||||
- **수정 파일**: `WorkspaceContextGenerator.cs`(신규), `SubAgentTool.cs`, `AgentLoopService.cs`, `ProjectRuleTool.cs`
|
||||
- **검증**: 새 작업 폴더 선택 → `.ax-context.md` 자동 생성 → 서브에이전트가 프로젝트 구조 인지 확인
|
||||
|
||||
#### P5. 병렬 서브에이전트 실행 확장
|
||||
- **목적**: LLM이 한 번의 응답에서 여러 서브에이전트를 동시 생성/실행
|
||||
- **현재 상태**: `SubAgentTool`은 개별 호출 가능하나 LLM이 연속 호출해야 함. `AgentLoopParallelExecution`에서 병렬 도구 실행 지원
|
||||
- **구현 계획**:
|
||||
1. `spawn_agents` (복수형) 도구 신규 — 배열로 여러 서브에이전트를 한 번에 생성
|
||||
- `tasks: [{id, task, profile}, ...]` 형태
|
||||
2. `IntentGateService` — 복합 요청 감지 시 자동 분해
|
||||
- "A 분석하고 B 코드 수정해줘" → 두 개의 서브에이전트로 자동 분해 제안
|
||||
3. `SubAgentTool` — 동시 실행 상한을 설정에서 조정 가능 (기본 3 → 5)
|
||||
4. UI: 서브에이전트 진행 상태를 타임라인에 병렬로 표시
|
||||
- **수정 파일**: `SpawnAgentsTool.cs`(신규), `SubAgentTool.cs`, `AgentLoopService.cs`, `AppSettings.cs`
|
||||
- **검증**: 3개 서브에이전트 동시 실행 → 결과 수집 → 통합 응답 확인
|
||||
|
||||
### 8-2. 추후 개발 (P6~P7)
|
||||
|
||||
#### P6. 폴백 체인 (Fallback Chains)
|
||||
- **목적**: 실행 실패 시 다른 프로파일/전략으로 자동 재시도
|
||||
- **구현 방향**: IntentGate 프로파일에 `fallback` 속성 추가. 1차 실패 → 프로파일 전환 → 재시도 (최대 2회)
|
||||
- **선행 조건**: P1(IntentGate) + P2(카테고리 프로파일) 완료 후
|
||||
- **예상 파일**: `IntentGateService.cs`, `AgentLoopService.cs`
|
||||
|
||||
#### P7. 모델 성격 매칭 (Model Personality Matching)
|
||||
- **목적**: 멀티 모델 환경에서 작업 유형별 최적 모델 자동 선택
|
||||
- **구현 방향**: `RegisteredModel`에 `strengths` 속성 추가 (coding/writing/analysis/speed). IntentGate 분류 결과 + 모델 강점 매칭으로 최적 모델 라우팅
|
||||
- **선행 조건**: 멀티 모델 환경 확보 + P1(IntentGate) 완료 후
|
||||
- **예상 파일**: `IntentGateService.cs`, `ModelRouterService.cs`, `AppSettings.cs`
|
||||
|
||||
### 8-3. 구현 순서 및 의존 관계
|
||||
|
||||
```
|
||||
P1 (IntentGate) ─────┬──→ P2 (카테고리 프로파일) ──→ P5 (병렬 확장)
|
||||
│
|
||||
├──→ P3 (누적 학습) [독립]
|
||||
│
|
||||
└──→ P4 (워크스페이스 컨텍스트) [독립]
|
||||
|
||||
P1 + P2 완료 후 ──→ P6 (폴백 체인)
|
||||
P1 + 멀티모델 후 ──→ P7 (모델 성격 매칭)
|
||||
```
|
||||
|
||||
### 8-4. 단일 모델에서의 멀티에이전트 원리
|
||||
|
||||
> Claude Code, Codex, Cursor 등 주요 AI 코딩 도구는 모두 **단일 모델 + 다른 시스템 프롬프트/도구 권한/temperature** 조합으로 멀티에이전트를 구현합니다.
|
||||
>
|
||||
> - 메인 에이전트: 범용 system prompt + 전체 도구 + 중간 temperature
|
||||
> - 서브에이전트: 특화 system prompt + 제한된 도구 + 작업별 temperature
|
||||
>
|
||||
> AX Copilot도 이 패턴을 따릅니다. `SubAgentTool`이 이미 존재하므로, **프로파일 체계화(P2)**만으로 사실상 멀티에이전트가 됩니다.
|
||||
## 2026-04-15 안정화 마감 메모
|
||||
|
||||
업데이트: 2026-04-15 08:32 (KST)
|
||||
|
||||
- `tool_result` preview 안정화는 분기/저장/재로드 단계를 넘어 query view 생성과 context compact 이전 정규화까지 연결했습니다.
|
||||
- 슬래시 명령은 팔레트 정렬과 실제 실행 해석이 같은 우선순위를 사용하도록 맞춰 skill/builtin 충돌 시 일관성이 높아졌습니다.
|
||||
- 코드 탭은 `LSP 심화 지원 + 정적 fallback` 2단 구조로 정리했습니다. 로컬 언어 서버가 없어도 언어별 매니페스트, build/test/lint 힌트 기반 분석을 계속 제공하는 방향으로 마감 중입니다.
|
||||
- 다음 남은 축은 `AgentLoopService` 세분화, `tool_result replacement state` 장기 세션 고정, 문서 포맷 최종 마감, 릴리즈 게이트 정리입니다.
|
||||
## 7. 최근 보강 메모
|
||||
- 2026-04-04: `/chrome`, `/mcp`, `/verify`, `/commit`, `/settings`, `/permissions` 하위 동작 정리
|
||||
- 2026-04-04: `/mcp` 상태 라벨 표준화 및 `/chrome` 런타임 재시도 경로 보강
|
||||
- 2026-04-04: 전용 AX Agent 테마 레이어 추가, 스타일/모드 분리
|
||||
- 2026-04-04: 컴포저 컨텍스트 사용량 링, footer 직접 `/compact`, Git 상태 노출 보강
|
||||
- 2026-04-04: 권한 UX, popup row 언어, 진행 이력 렌더 밀도를 더 가볍게 정리
|
||||
|
||||
91
docs/AX_AGENT_ARCHITECTURE_REVIEW.md
Normal file
91
docs/AX_AGENT_ARCHITECTURE_REVIEW.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# AX Agent 구조 리뷰
|
||||
|
||||
업데이트: 2026-04-15 18:20 (KST)
|
||||
|
||||
## 1. 목적
|
||||
- AX Agent의 현재 구조를 실행 엔진, 루프 정책, 세션 저장, transcript 렌더 관점에서 정리합니다.
|
||||
- 외부 제품 비교 대신 AX 내부 구조와 참조 모듈 흐름만 문서화합니다.
|
||||
|
||||
## 2. 현재 구조
|
||||
|
||||
### 실행 계층
|
||||
- `src/AxCopilot/Services/Agent/AxAgentExecutionEngine.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopService.cs`
|
||||
- `src/AxCopilot/Services/Agent/StreamingToolExecutionCoordinator.cs`
|
||||
|
||||
### 루프 정책 계층
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopTransitions.Execution.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopTransitions.Verification.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopTransitions.Documents.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopCompactionPolicy.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopRuntimeThresholds.cs`
|
||||
|
||||
### 세션/상태 계층
|
||||
- `src/AxCopilot/Services/ChatSessionStateService.cs`
|
||||
- `src/AxCopilot/Services/ChatStorageService.cs`
|
||||
- `src/AxCopilot/Services/AppStateService.cs`
|
||||
- `src/AxCopilot/Models/ChatModels.cs`
|
||||
|
||||
### transcript/UI 계층
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml`
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptHost.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptRendering.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptRenderPlanner.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptRenderExecution.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptVirtualization.cs`
|
||||
|
||||
## 3. 강점
|
||||
- Chat / Cowork / Code를 하나의 창과 정책 체계 안에서 운영
|
||||
- 등록 모델별 실행 프로파일과 verification gate 지원
|
||||
- 문서 생성 계열 fallback과 품질 리뷰가 루프에 결합되어 있음
|
||||
- 메모리, slash, permissions, queue가 한 세션 상태에 연결되어 있음
|
||||
|
||||
## 4. 구조 리스크
|
||||
1. `ChatWindow.xaml.cs` 책임이 여전히 크고, UI 이벤트와 런타임 상태 조립이 섞여 있습니다.
|
||||
2. transcript와 status line이 더 단일한 런타임 상태를 기준으로 계산되면 유지보수가 쉬워질 여지가 있습니다.
|
||||
3. replay/reopen 경로는 안정화가 많이 진행됐지만, 장기 세션에서는 이벤트 정규화 규칙이 더 중요합니다.
|
||||
4. 설정이 실행 경로를 바꾸는 지점은 사용자용과 개발용 노출 범위를 더 구분할 필요가 있습니다.
|
||||
|
||||
## 5. 개선 우선순위
|
||||
|
||||
### A. 런타임 상태 단일화
|
||||
- 참조 모듈: `src/bootstrap/state.ts`, `src/bridge/initReplBridge.ts`
|
||||
- AX 적용 위치: `ChatWindow.xaml.cs`, `AxAgentExecutionEngine.cs`, `ChatStorageService.cs`
|
||||
- 완료 조건:
|
||||
- 현재 턴, queue, retry, 실행 이벤트, 저장 스냅샷이 같은 런타임 상태 모델을 사용
|
||||
- reopen 뒤 저장 상태와 렌더 결과가 어긋나지 않음
|
||||
|
||||
### B. 이벤트 정규화
|
||||
- 참조 모듈: `src/bridge/sessionRunner.ts`, `src/bridge/bridgeMessaging.ts`
|
||||
- AX 적용 위치: `AgentLoopService.cs`, `AgentLoopTransitions.cs`, `AppStateService.cs`
|
||||
- 완료 조건:
|
||||
- tool start/result/error/progress, permission, retry, complete 이벤트가 안정적인 스키마를 공유
|
||||
- replay 시 visible banner 중복 0건
|
||||
|
||||
### C. timeline 유도 모델 고정
|
||||
- 참조 모듈: `src/screens/REPL.tsx`, `src/components/Messages.tsx`
|
||||
- AX 적용 위치: `ChatWindow.xaml`, `ChatWindow.xaml.cs`
|
||||
- 완료 조건:
|
||||
- assistant/user message, execution log, compact boundary, queue summary를 하나의 derived timeline에서 생성
|
||||
- direct imperative bubble injection 제거
|
||||
|
||||
### D. status/composer 정리
|
||||
- 참조 모듈: `src/components/StatusLine.tsx`
|
||||
- AX 적용 위치: `ChatWindow.xaml`, `ChatWindow.AgentStatusPresentation.cs`
|
||||
- 완료 조건:
|
||||
- status strip, queue summary, runtime activity가 debounce된 같은 상태 소스를 사용
|
||||
- composer는 명시적 줄바꿈 중심으로만 성장
|
||||
|
||||
## 6. 검증 기준
|
||||
- reopen 후 최신 assistant state가 저장 상태와 동일
|
||||
- retry/regenerate/queue follow-up이 서로 다른 실행 경로로 분기되지 않음
|
||||
- permission popup, inline ask, plan approval이 transcript 기준으로 닫힘
|
||||
- `dotnet build` 경고 0 / 오류 0
|
||||
|
||||
## 7. 최근 메모
|
||||
- 2026-04-06 09:36 (KST): 상태 strip 표현과 permission/tool-result 설명 카탈로그를 분리
|
||||
- 2026-04-06 09:44 (KST): mixed inline interaction rendering을 presentation 파일로 분리
|
||||
- 2026-04-06 09:58 (KST): Git branch popup과 footer 보조 요약 helper를 분리
|
||||
- 2026-04-06 10:07 (KST): topic preset 렌더와 선택 흐름을 전용 presentation 파일로 이동
|
||||
- 2026-04-06 11:52 (KST): permission, tool-result, skill gallery 설명층을 고도화
|
||||
92
docs/AX_AGENT_EXECUTION_IMPROVEMENT_PLAN.md
Normal file
92
docs/AX_AGENT_EXECUTION_IMPROVEMENT_PLAN.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# AX Agent 실행 개선 계획
|
||||
|
||||
업데이트: 2026-04-15 18:20 (KST)
|
||||
|
||||
## 1. 목적
|
||||
- AX Agent의 실행 신뢰성, 권한 처리 일관성, 세션 복원 품질을 높입니다.
|
||||
- 외부 제품명 비교 대신 실제 참조 모듈 경로와 AX 적용 위치만 기준으로 관리합니다.
|
||||
- UI 보정만으로 가리는 수정은 지양하고 `상태 -> 실행 -> 렌더` 순서로 정리합니다.
|
||||
|
||||
## 2. 현재 판단
|
||||
- 실행 엔진과 루프 품질은 안정 구간에 들어왔지만, 장기 세션 복원과 이벤트 정규화는 계속 다듬을 여지가 있습니다.
|
||||
- 설정이 런타임 경로를 바꾸는 지점은 사용자 설정과 개발자용 실험 설정을 더 분리할 필요가 있습니다.
|
||||
- transcript, status line, queue 표시는 충분히 가벼워졌지만 상태 계산 소스는 더 단일화해야 합니다.
|
||||
|
||||
## 3. 참조 흐름
|
||||
|
||||
| 참조 모듈 | AX 적용 위치 | 완료 조건 | 품질 판정 기준 |
|
||||
|---|---|---|---|
|
||||
| `src/bootstrap/state.ts` | `src/AxCopilot/Views/ChatWindow.xaml.cs`, `src/AxCopilot/Services/Agent/AxAgentExecutionEngine.cs`, `src/AxCopilot/Services/ChatStorageService.cs` | 현재 턴, queue, retry, 실행 이벤트, 저장 스냅샷이 하나의 런타임 상태 모델로 정리 | reopen/retry/queue 후 중복 assistant 카드나 빈 카드가 생기지 않음 |
|
||||
| `src/bridge/initReplBridge.ts` | `src/AxCopilot/Services/Agent/AxAgentExecutionEngine.cs`, `src/AxCopilot/Services/LlmService.cs` | send/regenerate/retry/queued follow-up/slash가 하나의 실행 준비 경로를 통과 | 같은 입력과 설정에서 진입점이 달라도 실행 경로가 흔들리지 않음 |
|
||||
| `src/bridge/sessionRunner.ts` | `src/AxCopilot/Services/Agent/AgentLoopService.cs`, `src/AxCopilot/Services/Agent/AgentLoopTransitions.cs`, `src/AxCopilot/Services/Agent/AgentLoopTransitions.Execution.cs` | tool start/result/error/progress가 루프 계층에서 한 번만 정규화 | Cowork/Code 장기 실행 중 상태 문구가 과도하게 흔들리지 않음 |
|
||||
| `src/bridge/bridgeMessaging.ts` | `src/AxCopilot/Views/ChatWindow.xaml.cs`, `src/AxCopilot/Services/Agent/AgentLoopService.cs` | 실행 이벤트와 표시 전용 이벤트를 렌더 이전에 분리 | replay 후 visible banner 중복이 발생하지 않음 |
|
||||
| `src/screens/REPL.tsx`, `src/components/Messages.tsx`, `src/components/StatusLine.tsx` | `src/AxCopilot/Views/ChatWindow.xaml`, `src/AxCopilot/Views/ChatWindow.xaml.cs` | timeline, composer, status strip이 공통 런타임 상태를 사용 | 리사이즈, queue 연속 실행, retry 후에도 UI가 패치식으로 흔들리지 않음 |
|
||||
|
||||
## 4. 실행 단계
|
||||
|
||||
### A. 런타임 상태 단일화
|
||||
- 적용 위치: `ChatWindow.xaml.cs`, `AxAgentExecutionEngine.cs`, `ChatStorageService.cs`
|
||||
- 완료 조건:
|
||||
- `Chat`, `Cowork`, `Code`가 같은 런타임 상태 모델을 갱신
|
||||
- queue, retry, compact 이후 상태가 재오픈 후에도 동일하게 복원
|
||||
- 품질 기준:
|
||||
- 같은 대화를 다시 열었을 때 보이는 timeline과 저장 상태가 일치
|
||||
- queue badge와 최근 실행 이력이 어긋나지 않음
|
||||
|
||||
### B. 실행 준비 경로 일원화
|
||||
- 적용 위치: `AxAgentExecutionEngine.cs`, `LlmService.cs`
|
||||
- 완료 조건:
|
||||
- prompt stack assembly, execution mode choice, final commit이 엔진 기준으로 통합
|
||||
- send/regenerate/retry/slash가 동일 API를 사용
|
||||
- 품질 기준:
|
||||
- 같은 탭과 같은 설정에서 실행 경로가 예측 가능
|
||||
- UI에서 별도 prompt stack을 만들지 않음
|
||||
|
||||
### C. 루프 이벤트 정규화
|
||||
- 적용 위치: `AgentLoopService.cs`, `AgentLoopTransitions.cs`, `AgentLoopTransitions.Execution.cs`
|
||||
- 완료 조건:
|
||||
- 권한 요청, 실패, 재시도, 완료 이벤트가 안정적인 스키마를 사용
|
||||
- bounded activity/event record 기준이 문서화
|
||||
- 품질 기준:
|
||||
- 장기 도구 실행 중 상태 flash가 줄고 debug payload 노출이 최소화
|
||||
|
||||
### D. timeline 유도 모델 고정
|
||||
- 적용 위치: `ChatWindow.xaml`, `ChatWindow.xaml.cs`
|
||||
- 완료 조건:
|
||||
- assistant/user message, 실행 로그, compact boundary, queue summary가 하나의 derived timeline에서 생성
|
||||
- 직접 bubble injection 경로 제거
|
||||
- 품질 기준:
|
||||
- blank assistant card 0건
|
||||
- token-only completion 0건
|
||||
- re-render 뒤 duplicate banner 0건
|
||||
|
||||
### E. composer와 status strip 정리
|
||||
- 적용 위치: `ChatWindow.xaml`, `ChatWindow.xaml.cs`
|
||||
- 완료 조건:
|
||||
- composer height는 명시적 줄바꿈 중심으로만 증가
|
||||
- status strip, queue summary, runtime activity가 debounce된 업데이트를 사용
|
||||
- 품질 기준:
|
||||
- resize 이후 입력창이 과하게 커지지 않음
|
||||
- metadata가 메시지 본문보다 앞서 보이지 않음
|
||||
|
||||
### F. 복구/재개/검증 마감
|
||||
- 적용 위치: `ChatWindow.xaml.cs`, `AxAgentExecutionEngine.cs`, `ChatStorageService.cs`
|
||||
- 완료 조건:
|
||||
- reopen after interruption, retry-last, regenerate, manual compact, manual stop, manual resume 시나리오를 모두 통과
|
||||
- 최신 assistant state와 저장 conversation이 일치
|
||||
- 품질 기준:
|
||||
- 복원 후 마지막 상태가 실제 종료 시점과 같음
|
||||
- 세션 재개 후 추가 오류 전파가 없음
|
||||
|
||||
## 5. 검증 기준
|
||||
- `dotnet build` 경고 0 / 오류 0
|
||||
- 고위험 변경마다 최소 1개 이상 회귀 테스트 추가
|
||||
- `internal` / `external` 운영 모드 정책 위반 0건
|
||||
- reopen, retry, regenerate, queue follow-up, permission, compact 시나리오 수동 점검 유지
|
||||
|
||||
## 6. 최신 메모
|
||||
- 2026-04-05 15:34 (KST): 실행 개선 계획을 실제 참조 모듈 흐름 기준으로 재정리했습니다.
|
||||
- 2026-04-05 16:55 (KST): 엔진, 채팅 UI, 상태 UX, 설정 연동의 구조적 갭을 분리해 정리했습니다.
|
||||
- 2026-04-06 09:36 (KST): 상태 strip 표현을 전용 카탈로그로 분리하고 permission/tool-result 설명을 정형화했습니다.
|
||||
- 2026-04-06 10:07 (KST): topic preset과 사용자 상호작용 렌더 책임을 presentation 파일로 계속 분리했습니다.
|
||||
- 2026-04-06 11:52 (KST): permission, tool-result, skill gallery 설명층을 더 구체적인 운영 정보 중심으로 보강했습니다.
|
||||
78
docs/AX_AGENT_QUALITY_PLAN.md
Normal file
78
docs/AX_AGENT_QUALITY_PLAN.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# AX Agent 품질 계획
|
||||
|
||||
업데이트: 2026-04-15 18:20 (KST)
|
||||
|
||||
## 1. 범위
|
||||
- 명령 처리 흐름
|
||||
- 권한 / hook 계약
|
||||
- plan / run 내구성
|
||||
- 세션 / 로그 관리
|
||||
- 도구 / 스킬 운영 정합성
|
||||
|
||||
## 2. 현재 상태 요약
|
||||
- 루프 가드와 검증 게이트는 주요 경로에 반영됨
|
||||
- 병렬 도구 실행, Plan Mode, unknown-tool 복구는 기본 동작 확보
|
||||
- 세션 재개와 이벤트 replay는 수치 기반 관리 단계로 진입
|
||||
|
||||
## 3. 단계별 품질 게이트
|
||||
|
||||
### P1 Hook 계약 고도화
|
||||
- `updatedInput`, `updatedPermissions`, `additionalContext`를 AX 실행 루프에 반영
|
||||
- 설정 토글로 위험 기능 제어
|
||||
|
||||
### P2 세션 / 이벤트 내구성
|
||||
- run 상태 영속화와 resume 기준 고정
|
||||
- jsonl 이벤트 필드 표준화와 재생 가능성 확보
|
||||
|
||||
### P3 실패 복구 표준화
|
||||
- unknown-tool, 권한거부, 파라미터 오류를 유형화
|
||||
- 유형별 복구 프롬프트와 다음 액션 우선순위 고정
|
||||
|
||||
### P4 완료 품질 정렬
|
||||
- 코드/문서 작업별 완료 체크리스트 표준화
|
||||
- 증거 없는 완료 응답 방지
|
||||
|
||||
## 4. 운영 점검 스냅샷
|
||||
- 도구 레지스트리 등록 수: 65개
|
||||
- `IAgentTool` 구현 수: 65개
|
||||
- 내장 스킬 파일 수: 40개
|
||||
- `allowed-tools` 적용 스킬: 40/40
|
||||
- 레거시 도구명 `process_run`, `grep_tool` 참조: 0건
|
||||
- 내부 모드 차단 정책: `http_tool` 전면 차단, `open_external` 외부 URL 차단
|
||||
|
||||
## 5. 즉시 보완 항목
|
||||
1. 스킬 frontmatter 확장 유지: `when_to_use`, `argument-hint`, `model`, `disable-model-invocation`, `user-invocable`, `context`, `agent`, `effort`, `paths`, `shell`
|
||||
2. `paths` 기반 조건부 활성화 유지
|
||||
3. 도구 별칭 정규화와 runtime hook filter 적용 유지
|
||||
4. 위험 자동허용 가드(`process`, `spawn_agent`, `snippet_runner`) 강제 승인 정책 유지
|
||||
|
||||
## 6. 내부 벤치마크 기준
|
||||
|
||||
| 시나리오 | 기준 테스트 | 합격 기준 |
|
||||
|---|---|---|
|
||||
| 기본 Agentic loop | `AgentLoopE2ETests.RunAsync_ExecutesToolCall_AndCompletesWithFinalText` | ToolCall/ToolResult/Complete 이벤트 순서 유효, 최종 응답에 결과 포함 |
|
||||
| unknown-tool 복구 | `AgentLoopE2ETests.RunAsync_UnknownTool_RecoversAndCompletes` | 오류 후 완료까지 수렴, 반복 실패 루프 없음 |
|
||||
| Plan Mode 실행 연결 | `AgentLoopE2ETests.RunAsync_PlanModeAlways_EmitsPlanningThenExecutesTool` | 계획 응답 뒤 실제 도구 호출과 최종 결과 생성 |
|
||||
| 권한 Ask 거부 처리 | `AgentLoopE2ETests.RunAsync_AskPermissionDenied_EmitsPermissionEvents_AndCompletes` | PermissionRequest/PermissionDenied 이벤트 기록 후 안전 종료 |
|
||||
| Hook 입력 변형 | `AgentLoopE2ETests.RunAsync_PreHookInputMutation_ChangesToolArguments` | pre-hook `updatedInput`이 실제 도구 입력에 반영 |
|
||||
| Runtime 정책 강제 | `AgentLoopE2ETests.RunAsync_DisallowedTool_ByRuntimePolicy_EmitsPolicyRecoveryError` | 비허용 도구 차단과 정책 복구 경고 후 종료 |
|
||||
| Hook filter 정합성 | `AgentLoopE2ETests.RunAsync_HookFilters_ExecuteOnlyMatchingHookForToolAndTiming` | 지정 hook만 실행되고 비매칭 hook는 미실행 |
|
||||
| 별칭 정규화 | `AgentLoopE2ETests.RunAsync_EnterPlanModeAlias_ResolvesAndExecutes` | CamelCase 도구명이 내부 snake_case 도구로 매핑되어 실행 |
|
||||
| 혼합 복구 내구성 | `AgentLoopE2ETests.RunAsync_MixedRecovery_UnknownToolAndPermissionDenied_TerminatesSafely` | 반복 한도 안에서 안전 종료 |
|
||||
|
||||
## 7. replay 안정성 기준
|
||||
|
||||
| 시나리오 | 기준 테스트 | 합격 기준 |
|
||||
|---|---|---|
|
||||
| 실행 이벤트 정렬/압축 복원 | `ChatSessionStateServiceTests.LoadOrCreateConversation_NormalizesHistoryOrderAndCompactsSize` | ExecutionEvents 400개 상한과 시간순 정렬 유지 |
|
||||
| run 이력 중복 정규화 | `ChatSessionStateServiceTests.LoadOrCreateConversation_NormalizesAgentRunDuplicatesByRunId` | 동일 `RunId`는 최신 상태 1건으로 축약 |
|
||||
| terminal 우선 판정 | `TaskRunServiceTests.RestoreRecentFromExecutionEvents_PrefersTerminalEventsWhenTimestampsEqual` | 동시각 이벤트는 terminal 상태 기준으로 복원 |
|
||||
| active 복원 | `TaskRunServiceTests.RestoreRecentFromExecutionEvents_RebuildsActiveTasksFromNonTerminalEvents` | 중단 후 재개 시 active task 재구성 |
|
||||
| dangling 정리 | `TaskRunServiceTests.RestoreRecentFromExecutionEvents_CompleteClearsDanglingRunScopedActiveTasks` | Complete 뒤 run 스코프 dangling active task 0건 |
|
||||
|
||||
## 8. 배포 체크리스트
|
||||
1. `dotnet build` 경고 0 / 오류 0
|
||||
2. `dotnet test` 전체 통과
|
||||
3. 내부 벤치마크 시나리오 전건 통과
|
||||
4. `Suite=ReplayStability` 전건 통과
|
||||
5. `scripts/release-gate.ps1` 실행 결과 기록
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
업데이트: 2026-04-08 10:38 (KST)
|
||||
|
||||
`OpenCode`와 AX Agent를 같은 기준으로 비교하기 위한 공통 회귀 프롬프트 세트입니다.
|
||||
AX Agent 실행 흐름을 같은 기준으로 점검하기 위한 공통 회귀 프롬프트 세트입니다.
|
||||
|
||||
## 사용 규칙
|
||||
|
||||
- 루프 정책, transcript 렌더, 권한/계획/진행 UX, queue/compact/reopen 흐름에 영향을 주는 변경 뒤에는 이 문서를 기준으로 최소 1회 점검합니다.
|
||||
- 모든 항목을 매번 전부 돌릴 필요는 없지만, 바뀐 영역과 맞닿은 묶음은 반드시 확인합니다.
|
||||
- 결과는 “모양이 똑같은가”보다 “사용자 체감 흐름과 완료 품질이 같은가”를 기준으로 봅니다.
|
||||
- 결과는 “화면이 비슷한가”보다 “사용자 체감 흐름과 완료 품질이 안정적인가”를 기준으로 봅니다.
|
||||
|
||||
## 실패 분류
|
||||
|
||||
|
||||
50
docs/AX_AGENT_RUNTIME_QUALITY_PLAN.md
Normal file
50
docs/AX_AGENT_RUNTIME_QUALITY_PLAN.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# AX Agent 런타임 품질 계획
|
||||
|
||||
업데이트: 2026-04-15 18:20 (KST)
|
||||
|
||||
## 1. 기준
|
||||
- 대상 범위: 명령 처리, 권한/훅, plan/run 내구성, 세션/로그 관리
|
||||
- 문서 목적: AX Agent 런타임 경로의 품질 기준과 마감 조건을 명확히 고정
|
||||
|
||||
## 2. 주요 갭
|
||||
- Hook 출력의 구조화 계약 적용 범위가 일부 경로에 아직 제한적입니다.
|
||||
- 세션 재개와 이벤트 replay 품질은 시나리오별 편차가 남아 있습니다.
|
||||
- 도구 선택 실패 뒤 재시도 전략의 메시지와 다음 행동이 완전히 표준화되지는 않았습니다.
|
||||
|
||||
## 3. 실행 순서
|
||||
1. Hook 계약 고도화
|
||||
2. 세션/이벤트 내구성 정리
|
||||
3. 실패 복구 메시지 표준화
|
||||
4. 완료 품질 게이트 고정
|
||||
|
||||
## 4. 완료 판정
|
||||
- 내부 벤치마크 목표 성공률 충족
|
||||
- 세션 재개/이벤트 재생 오류 0건
|
||||
- 빌드 경고 0 / 오류 0 유지
|
||||
|
||||
## 5. 점검 스냅샷
|
||||
- 기준 시점: 2026-04-03
|
||||
- 계획 대비 현재 수준: 약 92~95%
|
||||
- 테스트 상태: `dotnet test` 374/374 통과
|
||||
- Hook 계약: 구현 완료 수준
|
||||
- 세션/이벤트 내구성: 복원/재생 경계 케이스 테스트 반영
|
||||
- 실패 복구 표준화: unknown-tool/권한/정체 경로 반영
|
||||
- 완료 품질 게이트: 문서화와 코드 반영 완료
|
||||
|
||||
## 6. 관리 대상
|
||||
1. 도구 계층: 목록, 별칭 정규화, unknown-tool 복구, 선택 정책
|
||||
2. 스킬 계층: 로더, frontmatter, 파일 기반 운영, 조건부 활성화
|
||||
3. 훅/권한: pre/post hook 계약, permission update 반영, ask/auto/deny 일관성
|
||||
4. 세션/상태: run 복원, 이벤트 replay, 중복 억제, resume 신뢰성
|
||||
5. 계획/실행: plan 승인/수정 이력, 실행 게이트, 조기 완료 방지
|
||||
6. MCP/외부도구: 연결, 리소스 조회, 실패 복구, internal 정책
|
||||
7. 설정/UI 연동: 설정값, 실행 코드, UI 반영 동기화
|
||||
|
||||
## 7. 다음 순서
|
||||
1. Agentic loop E2E 시나리오를 회귀 테스트로 계속 고정
|
||||
2. 벤치마크 합격 기준과 증적을 배포 체크리스트에 연결 유지
|
||||
3. 수치와 상태 문구를 `README.md`, `docs/DEVELOPMENT.md`, 로드맵 문서와 동기화
|
||||
|
||||
## 8. 운영 기준
|
||||
- 내부 벤치마크와 replay 안정성 테스트는 릴리즈 전 최소 조건으로 유지
|
||||
- 문서에는 비교·모사 표현보다 AX 기준 완료 조건과 검증 결과만 기록
|
||||
@@ -1,238 +0,0 @@
|
||||
# claude-code / AX Agent 구조 비교 문서
|
||||
|
||||
업데이트: 2026-04-09 10:20 (KST)
|
||||
|
||||
이 문서는 AX Agent를 `claude-code` 동등 품질 기준으로 유지·검증하기 위한 비교 기준 문서입니다.
|
||||
실제 비교 대상 저장 폴더명은 `claw-code`이지만, 문서 표기는 `claude-code`로 통일합니다.
|
||||
|
||||
## 1. claude-code 구조, 특징 기능, 에이전트 루프
|
||||
|
||||
### 1-1. 구조 핵심
|
||||
|
||||
`claude-code`는 크게 아래 축으로 나뉩니다.
|
||||
|
||||
1. 부트스트랩/세션 상태
|
||||
- `src/bootstrap/state.ts`
|
||||
- `src/bridge/initReplBridge.ts`
|
||||
- `src/bridge/sessionRunner.ts`
|
||||
2. 메인 REPL/대화 화면
|
||||
- `src/screens/REPL.tsx`
|
||||
- `src/components/Messages.tsx`
|
||||
- `src/components/VirtualMessageList.tsx`
|
||||
- `src/components/StatusLine.tsx`
|
||||
3. 도구 실행 계층
|
||||
- `src/services/tools/toolOrchestration.ts`
|
||||
- `src/services/tools/StreamingToolExecutor.ts`
|
||||
4. 메모리/컨텍스트/권한
|
||||
- `04_작동원리.md`
|
||||
- `05_메모리와컨텍스트.md`
|
||||
- `06_권한시스템.md`
|
||||
- `15_스킬.md`
|
||||
|
||||
### 1-2. 특징 기능
|
||||
|
||||
`claude-code`의 강점은 기능 개수보다 실행 품질에 있습니다.
|
||||
|
||||
- 대화, 도구 실행, 권한, 상태줄이 한 흐름으로 이어진다.
|
||||
- transcript가 단순 채팅 로그가 아니라 실행 관측 UI 역할을 한다.
|
||||
- 도구 호출이 응답 후처리가 아니라 루프 자체의 핵심 경로다.
|
||||
- read-only 도구는 병렬화하고, non-concurrent 도구는 직렬화해 체감 반응성을 높인다.
|
||||
- 메모리 구조가 `managed / user / project / local` 계층으로 명확하다.
|
||||
- `CLAUDE.md`, `.claude/rules/*.md`, `paths:` frontmatter, `@include` 같은 규칙 기반 메모리 주입이 강하다.
|
||||
- 권한 시스템이 `default / acceptEdits / plan / bypassPermissions`와 allow/deny rule로 분리되어 있다.
|
||||
- skill 시스템이 단순 프롬프트 스니펫이 아니라 재사용 가능한 워크플로우 레이어다.
|
||||
|
||||
### 1-3. 에이전트 루프 구조
|
||||
|
||||
`claude-code`의 기본 루프는 다음 순서에 가깝습니다.
|
||||
|
||||
1. 사용자 메시지 수신
|
||||
2. 시스템 컨텍스트 조립
|
||||
- Git 상태
|
||||
- 메모리 계층
|
||||
- 현재 날짜/환경
|
||||
- 사용 가능한 도구/권한 상태
|
||||
3. 모델 호출
|
||||
4. tool_use block 감지
|
||||
5. 권한 판단
|
||||
6. 도구 실행
|
||||
7. tool_result를 다시 모델에 투입
|
||||
8. 필요 시 추가 도구 호출
|
||||
9. 최종 텍스트 응답 커밋
|
||||
|
||||
중요한 점은, 이 루프가 단순히 "LLM 호출 후 도구 실행"이 아니라 `도구를 전제로 설계된 루프`라는 점입니다.
|
||||
|
||||
### 1-4. Cowork/Code에서 결과가 잘 나오는 이유
|
||||
|
||||
#### 1. 도구 우선 오케스트레이션
|
||||
|
||||
- `toolOrchestration.ts`가 tool call을 배치로 나누고
|
||||
- `StreamingToolExecutor.ts`가 스트리밍 도중에도 도구 실행 준비를 진행합니다.
|
||||
- read-only/concurrency-safe 도구는 병렬 실행해 첫 반응 시간을 줄입니다.
|
||||
|
||||
#### 2. 실행 중 관측성이 높음
|
||||
|
||||
- `Messages.tsx`
|
||||
- `VirtualMessageList.tsx`
|
||||
- `StatusLine.tsx`
|
||||
|
||||
이 구조 덕분에 사용자는 "지금 무엇을 읽고, 무엇을 실행하고, 어디서 멈췄는지"를 계속 볼 수 있습니다.
|
||||
긴 작업에서도 멈춘 것처럼 느껴지지 않는 이유가 여기 있습니다.
|
||||
|
||||
#### 3. 긴 세션을 버티는 transcript 구조
|
||||
|
||||
- transcript는 전체 렌더를 계속 다시 그리지 않습니다.
|
||||
- `VirtualMessageList.tsx` 기준으로 가시 영역 중심 렌더와 스크롤/탐색 보조 구조가 분리되어 있습니다.
|
||||
- 긴 세션, 많은 도구 호출, 많은 중간 상태에서도 UI 부하가 상대적으로 낮습니다.
|
||||
|
||||
#### 4. 메모리와 규칙 주입이 명시적
|
||||
|
||||
- `CLAUDE.md`
|
||||
- `.claude/rules/*.md`
|
||||
- `paths:`
|
||||
- `@include`
|
||||
|
||||
이 구조 때문에 프로젝트/경로/사용자/관리자 규칙이 프롬프트에 일관되게 들어갑니다.
|
||||
결과가 흔들릴 때도 "왜 그런 성향이 나왔는지" 추적이 쉽습니다.
|
||||
|
||||
### 1-5. 주요 성능과 품질에 영향을 주는 프롬프트 전략
|
||||
|
||||
1. 도구를 먼저 쓰게 만드는 직접적인 지시
|
||||
2. 컨텍스트를 계층화해서 넣음
|
||||
3. 권한과 도구 사용 범위를 명확히 분리
|
||||
4. 실행 중간 상태를 계속 보여줘 재시도/복구가 자연스러움
|
||||
5. read-only tool 병렬화로 초기 탐색 시간을 줄임
|
||||
6. transcript/상태줄이 실제 실행 관측 수단으로 동작
|
||||
|
||||
## 2. AX Agent 구조, 특징 기능, 에이전트 루프
|
||||
|
||||
### 2-1. 구조 핵심
|
||||
|
||||
현재 AX Agent는 다음 축으로 구성됩니다.
|
||||
|
||||
1. 에이전트 실행
|
||||
- `src/AxCopilot/Services/Agent/AxAgentExecutionEngine.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopService.cs`
|
||||
- `src/AxCopilot/Services/Agent/StreamingToolExecutionCoordinator.cs`
|
||||
2. 루프 정책 분리 계층
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopTransitions.Execution.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopTransitions.Verification.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopTransitions.Documents.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopCompactionPolicy.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopRuntimeThresholds.cs`
|
||||
3. 메모리 구조
|
||||
- `src/AxCopilot/Services/AgentMemoryService.cs`
|
||||
- `src/AxCopilot/Services/Agent/MemoryTool.cs`
|
||||
4. transcript/UI 구조
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptHost.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptRendering.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptRenderPlanner.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptRenderExecution.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptVirtualization.cs`
|
||||
5. 성능/검증 로그
|
||||
- `src/AxCopilot/Services/AgentPerformanceLogService.cs`
|
||||
|
||||
### 2-2. 특징 기능
|
||||
|
||||
- Chat / Cowork / Code를 한 창에서 운영
|
||||
- 등록 모델별 실행 프로파일 지원
|
||||
- Cowork/Code 전용 agent loop 사용
|
||||
- 문서 생성 계열 fallback 및 verification gate 지원
|
||||
- IBM/vLLM/OpenAI 호환 tool-use 경로 대응
|
||||
- 계층형 메모리 구조 지원
|
||||
- `/memory` 계열 도구와 설정 UI에서 메모리 관리 가능
|
||||
- transcript/진행 표시/UI 구조를 `claude-code` 기준으로 계속 분해해온 상태
|
||||
|
||||
### 2-3. 에이전트 루프 구조
|
||||
|
||||
현재 AX Agent의 루프는 대략 아래 순서입니다.
|
||||
|
||||
1. 실행 컨텍스트 구성
|
||||
2. 사용자 메시지와 시스템 지시 조립
|
||||
3. LLM 호출
|
||||
4. tool call 감지
|
||||
5. `StreamingToolExecutionCoordinator`를 통한 조기 도구 실행/prefetch
|
||||
6. 도구 결과 재투입
|
||||
7. verification/document fallback/compact 정책 수행
|
||||
8. 최종 결과 커밋
|
||||
9. transcript/status/perf 로그 반영
|
||||
|
||||
### 2-4. 현재 구조적 강점
|
||||
|
||||
1. 모델 프로파일 기반 제어
|
||||
2. 계층형 메모리 구조
|
||||
3. Cowork/Code용 별도 실행 정책
|
||||
4. 성능 계측 로그
|
||||
|
||||
### 2-5. 현재 구조적 약점
|
||||
|
||||
1. `ChatWindow.xaml.cs` 책임이 여전히 큼
|
||||
2. transcript가 아직 완전한 데이터 기반 가상화는 아님
|
||||
3. 루프 정책이 여전히 서비스 중심
|
||||
4. tool streaming executor가 독립 계층으로 강화되었지만 결합이 남음
|
||||
|
||||
## 3. claude-code와 AX Agent 비교
|
||||
|
||||
### 3-1. 전체 비교 요약
|
||||
|
||||
| 항목 | claude-code | AX Agent 현재 상태 |
|
||||
|------|-------------|-------------------|
|
||||
| 메모리 계층 | 매우 강함 | 많이 근접 |
|
||||
| tool orchestration | 매우 강함 | 많이 강화됨 |
|
||||
| transcript 가상화 | 강함 | 부분 근접 |
|
||||
| 진행 관측성 | 강함 | 많이 근접 |
|
||||
| 모델 프로파일성 | 단단함 | 프로파일 시스템 도입 완료 |
|
||||
| 문서 fallback | 비교적 단순/직접적 | 더 많은 정책 보유 |
|
||||
| 루프 응집도 | 모듈 분리 우수 | 개선 중, 많이 나아짐 |
|
||||
|
||||
### 3-2. AX Agent가 이미 따라잡은 부분
|
||||
|
||||
1. 메모리 계층 구조
|
||||
2. 진행 표시 UX
|
||||
3. 모델별 실행 성향 제어
|
||||
4. 도구 호출 강화
|
||||
|
||||
### 3-3. AX Agent가 아직 더 개선할 수 있는 부분
|
||||
|
||||
1. transcript의 진짜 가상화
|
||||
2. UI 렌더의 data-template화
|
||||
3. tool executor의 독립성
|
||||
4. Cowork/Code 실사용 로그 기반 검증 체계
|
||||
|
||||
### 3-4. 성능과 결과 품질에 직접 영향이 큰 구조 요소 비교
|
||||
|
||||
#### claude-code 쪽 핵심
|
||||
|
||||
- read-only tool 병렬화
|
||||
- streaming executor
|
||||
- transcript 가상화
|
||||
- 상태줄/메시지/도구 실행 분리
|
||||
- 명시적 메모리 계층
|
||||
- 권한 시스템과 루프의 강한 연결
|
||||
|
||||
#### AX Agent 쪽 핵심
|
||||
|
||||
- 모델 프로파일
|
||||
- document/verification/compact 정책 분리
|
||||
- IBM/vLLM 도구 호출 보강
|
||||
- transcript host/windowing/virtualization 보강
|
||||
- WPF 환경 특화 성능 대응
|
||||
|
||||
### 3-5. 현 시점 결론
|
||||
|
||||
현 시점 AX Agent는 `claude-code` 대비 다음 상태로 보는 것이 적절합니다.
|
||||
|
||||
- 구조적 방향성: 거의 동일한 방향
|
||||
- 메모리/도구/진행 표시: 상당 부분 근접
|
||||
- transcript/렌더 구조: 아직 한 단계 차이 존재
|
||||
- 장기 세션 성능: 실제 로그 기반 추가 검증 필요
|
||||
|
||||
즉 AX Agent는 더 이상 "기본 구조가 부족한 상태"는 아니고, 이제부터는 `실사용 검증 기반으로 남은 구조 차이를 줄이는 단계`입니다.
|
||||
|
||||
## 4. AX 개발 시 이 문서를 어떻게 쓸지
|
||||
|
||||
1. Cowork/Code 품질 이슈가 생기면 먼저 `claude-code` 기준 흐름과 비교
|
||||
2. 구조 리팩터링이 필요할 때 transcript / tool executor / loop policy / memory 중 어디를 건드리는지 먼저 분류
|
||||
3. 실사용 성능 검증 시 `%APPDATA%\\AxCopilot\\perf` 로그와 loop elapsed, transcript render elapsed, no-tool loop, verification/fallback/compact 비율을 함께 본다
|
||||
4. 계획 수립 시 항상 참조 파일, AX 적용 위치, 완료 조건, 품질 판정 기준을 같이 적는다
|
||||
@@ -1,153 +0,0 @@
|
||||
# CLAW-CODE 품질 동등화 계획 (전면 재작성)
|
||||
|
||||
## 1. 기준
|
||||
- 레퍼런스: `E:\AX Copilot - Codex\claw-code\claw-code-f5a40b86dede580f6543bf8926c9af017eea9409\src`
|
||||
- 동등화 범위: 명령 처리 흐름, 권한/훅 체계, plan/run 내구성, 세션/로그 관리.
|
||||
|
||||
## 2. 보존 이력 (요약만 유지)
|
||||
- 루프 가드(반복 실패/정체 감지)와 검증 게이트는 이미 AX에 부분 반영.
|
||||
- 병렬 도구 실행, Plan Mode, Unknown-tool 복구 로직은 반영 완료.
|
||||
- 세션/이력 안정화는 진행 중.
|
||||
|
||||
## 3. 현재 갭
|
||||
- Hook 출력의 구조화 계약 적용 범위가 제한적.
|
||||
- 세션 재개/이벤트 replay 품질이 시나리오별 편차 존재.
|
||||
- 도구 선택 실패 후 재시도 전략의 일관성 부족.
|
||||
|
||||
## 4. 단계별 실행
|
||||
|
||||
### P1 Hook 계약 고도화
|
||||
- `updatedInput`, `updatedPermissions`, `additionalContext`를 AX 실행 루프에 반영.
|
||||
- 설정 토글로 위험 기능 제어.
|
||||
|
||||
### P2 세션/이벤트 내구성
|
||||
- run 상태 영속화와 resume 기준 고정.
|
||||
- jsonl 이벤트 필드 표준화 및 재생 가능성 확보.
|
||||
|
||||
### P3 실패 복구 표준화
|
||||
- unknown-tool/권한거부/파라미터 오류를 유형화.
|
||||
- 유형별 복구 프롬프트와 다음 액션 우선순위 고정.
|
||||
|
||||
### P4 완료 품질 정렬
|
||||
- 코드/문서 작업별 완료 체크리스트 표준화.
|
||||
- 증거 없는 완료 응답 방지.
|
||||
|
||||
## 5. 완료 판정
|
||||
- 내부 벤치마크 시나리오에서 목표 성공률 충족.
|
||||
- 세션 재개/이벤트 재생 오류 0건.
|
||||
- 빌드 경고 0/오류 0 유지.
|
||||
|
||||
## 6. 2026-04-03 점검 스냅샷
|
||||
- 기준 시점: 2026-04-03.
|
||||
- 계획 대비 현재 수준: 약 92~95%.
|
||||
- 테스트 상태: `dotnet test` 374/374 통과.
|
||||
- P1 Hook 계약: 구현 완료 수준.
|
||||
- P2 세션/이벤트 내구성: 구현 완료 수준(복원/재생 경계 케이스 테스트 반영).
|
||||
- P3 실패 복구 표준화: 구현 완료 수준(unknown-tool/권한/정체/fork 강제 흐름 반영).
|
||||
- P4 완료 품질 정렬: 구현 완료 수준(게이트 로직 + 벤치마크 기준 문서화 완료).
|
||||
|
||||
## 7. 스킬/도구 운영 점검 (2026-04-03)
|
||||
- 도구 레지스트리 등록 수: 65개 (`ToolRegistry.CreateDefault()` 기준).
|
||||
- `IAgentTool` 구현 수: 65개. 동적 MCP 래퍼(`McpTool`)는 런타임 등록 구조로 정상.
|
||||
- 내장 스킬 파일 수: 40개 (`src/AxCopilot/skills/*.skill.md`).
|
||||
- `allowed-tools` 적용 스킬: 40/40.
|
||||
- `requires: python` 고정 의존 스킬: 0개(기존 10개에 Python 가능/불가 분기 fallback 경로 반영).
|
||||
- 레거시 도구명 `process_run` 참조: 0건 (`process`로 정규화).
|
||||
- 레거시 도구명 `grep_tool` 참조: 0건 (`grep`로 정규화).
|
||||
- 내부 모드 차단 정책: `http_tool` 전면 차단, `open_external`의 외부 URL 차단.
|
||||
- 테스트 상태: `dotnet test` 374/374 통과.
|
||||
|
||||
## 8. claw-code 소스 직접 비교 결과 (2026-04-03)
|
||||
- 비교 기준 소스: `claw-code/.../src/tools.ts`, `src/Tool.ts`, `src/skills/loadSkillsDir.ts`, `src/skills/bundled/*.ts`.
|
||||
- claw-code 도구 상수명: 41개 (`*_TOOL_NAME` 기준).
|
||||
- AX 도구명: 65개 (`IAgentTool.Name` 기준).
|
||||
- claw-code 도구명 중 AX alias로 직접 해석되는 항목: 8개 (`Bash/Read/Write/Edit/Glob/Grep/WebFetch/WebSearch`).
|
||||
- 미해석 항목(33개)은 대부분 제품 철학 차이 영역(예: `EnterPlanMode`, `ExitWorktree`, `TeamCreate`, `TodoWrite`, `ToolSearch`, `REPL`, `Cron*`).
|
||||
- claw-code 번들 스킬은 코드 등록형 14개(`registerBundledSkill`)이며, AX는 파일 기반 스킬 40개(`*.skill.md`) 중심 구성.
|
||||
- 번들 스킬 이름 교집합은 0개이며(의도된 차별화), 품질 기준은 "이름 일치"가 아니라 "동작 등가(계획/복구/검증/권한/세션 내구성)"로 판단해야 함.
|
||||
- claw-code 스킬 메타데이터는 `allowedTools`, `whenToUse`, `model`, `disableModelInvocation`, `userInvocable`, `hooks`, `context`, `agent`, `paths`, `effort`, `shell`까지 지원.
|
||||
- AX 스킬 메타데이터는 `allowed-tools`, `when_to_use`, `argument-hint`, `model`, `disable-model-invocation`, `user-invocable`, `context`, `agent`, `effort`, `paths`, `shell`, `hooks`, `hook_filters`까지 런타임 연계 확장 완료.
|
||||
|
||||
## 9. claw-code 비교 기반 즉시 보완 항목 (반영 상태)
|
||||
1. 스킬 frontmatter 확장: `when_to_use`, `argument-hint`, `model`, `disable-model-invocation`, `user-invocable`, `context`, `agent`, `effort`, `paths`, `shell` 반영 완료.
|
||||
2. 스킬 실행 범위 제어: `paths` 기반 조건부 활성화 반영 완료(첨부 파일 경로 매칭 시 동적 활성화).
|
||||
3. 도구 별칭 정규화: claw-code 기본 도구명군(`WebFetch`, `WebSearch`, `AskUserQuestion`, `LSP`, `ListMcpResourcesTool` 등) AX 내부 도구명으로 매핑 반영 완료.
|
||||
4. 반영 완료(2026-04-03): `hooks`/`hook_filters` 계약 확장 및 runtime hook 필터링(도구/타이밍 기준) 적용.
|
||||
5. 반영 완료(2026-04-03): 슬래시 스킬 실행 시 `context/agent/effort/model/disable-model-invocation/allowed-tools/hooks/hook_filters` 메타데이터를 런타임 정책 지시문으로 합성 적용.
|
||||
6. 반영 완료(2026-04-03): `permissionSetup` 비교 기반으로 위험 자동허용 가드 추가(`process`, `spawn_agent`, `snippet_runner`는 전역 `Auto`에서도 승인 단계 강제).
|
||||
|
||||
## 10. 전체 영역 동시 비교 기준 (누락 방지)
|
||||
1. 도구 계층: 도구 목록, 별칭 정규화, unknown-tool 복구, tool search/선택 정책.
|
||||
2. 스킬 계층: 로더, frontmatter, 번들/파일 기반 동시 운영, 조건부 활성화.
|
||||
3. 훅/권한: pre/post hook 계약, permission update 반영, ask/auto/deny 일관성.
|
||||
4. 세션/상태: run 복원, 이벤트 replay, 중복 이벤트 억제, resume 신뢰성.
|
||||
5. 계획/실행: plan 승인/수정 이력, 실행 게이트, 조기 완료 방지.
|
||||
6. MCP/외부도구: 연결/리소스 조회/읽기, 실패 복구, internal 모드 정책.
|
||||
7. 서브에이전트: spawn/wait 제약, read-only 모드, 결과 회수 구조.
|
||||
8. 운영/설정/UI 연동: 설정값-실행코드-UI 동기화, 탭별 분기(Cowork/Code) 일치.
|
||||
|
||||
## 11. 다음 적용 순서 (전체 영역 병렬 보정)
|
||||
1. 기본 Agentic loop E2E 시나리오(도구 실행/unknown-tool 복구)를 회귀 테스트로 고정.
|
||||
2. 벤치마크 합격 기준(시나리오/통과조건/증적)을 문서화하고 배포 체크리스트에 연결. (완료)
|
||||
3. 최종 마감 시 패리티 문서(수치/상태)와 로드맵 문서를 동기화. (진행 중)
|
||||
|
||||
## 12. 내부 벤치마크 기준 (고정)
|
||||
|
||||
| 시나리오 | 기준 테스트 | 합격 기준 |
|
||||
|---|---|---|
|
||||
| 기본 Agentic loop (도구 호출 → 완료) | `AgentLoopE2ETests.RunAsync_ExecutesToolCall_AndCompletesWithFinalText` | ToolCall/ToolResult/Complete 이벤트가 순서상 유효하고 최종 응답에 계산 결과 포함 |
|
||||
| unknown-tool 복구 | `AgentLoopE2ETests.RunAsync_UnknownTool_RecoversAndCompletes` | unknown 도구 오류 이벤트 후 완료까지 수렴, 반복 실패 루프 없음 |
|
||||
| Plan Mode 실행 연결 | `AgentLoopE2ETests.RunAsync_PlanModeAlways_EmitsPlanningThenExecutesTool` | 계획 응답 후 실제 도구 호출이 이어지고 최종 결과 생성 |
|
||||
| 권한 Ask 거부 처리 | `AgentLoopE2ETests.RunAsync_AskPermissionDenied_EmitsPermissionEvents_AndCompletes` | PermissionRequest/PermissionDenied 이벤트가 기록되고 안전 종료 |
|
||||
| Hook 입력 변형 반영 | `AgentLoopE2ETests.RunAsync_PreHookInputMutation_ChangesToolArguments` | pre-hook `updatedInput`이 실제 도구 입력에 적용됨 |
|
||||
| Runtime 정책(`allowed_tools`) 강제 | `AgentLoopE2ETests.RunAsync_DisallowedTool_ByRuntimePolicy_EmitsPolicyRecoveryError` | 비허용 도구 차단 + 정책 복구 경고 후 종료 |
|
||||
| Hook filter 정합성 | `AgentLoopE2ETests.RunAsync_HookFilters_ExecuteOnlyMatchingHookForToolAndTiming` | 지정된 hook만 실행되고 비매칭 hook는 미실행 |
|
||||
| claw-code alias(`EnterPlanMode`) 정규화 | `AgentLoopE2ETests.RunAsync_EnterPlanModeAlias_ResolvesAndExecutes` | CamelCase 도구명이 AX 내부 snake_case 도구로 매핑되어 정상 실행 |
|
||||
| 혼합 복구 내구성 (unknown + 권한 + 대체도구) | `AgentLoopE2ETests.RunAsync_MixedRecovery_UnknownToolAndPermissionDenied_TerminatesSafely` | unknown-tool 오류 후 file_write 경유, math_eval로 수렴하고 반복 한도 내 안전 종료 |
|
||||
|
||||
### 벤치마크 배포 체크리스트 연결
|
||||
1. `dotnet build` 경고 0/오류 0.
|
||||
2. `dotnet test` 전체 통과 (`374/374` 기준, 증가 시 최신 값으로 동기화).
|
||||
3. 위 9개 시나리오의 회귀 테스트가 모두 통과.
|
||||
4. 패리티 수치/상태를 `NEXT_ROADMAP.md`와 동일 문구로 동기화.
|
||||
5. 릴리즈 전 게이트 스크립트 실행: `powershell -ExecutionPolicy Bypass -File .\scripts\release-gate.ps1`
|
||||
|
||||
### 실행 증적 (2026-04-03)
|
||||
- `dotnet test --filter "Suite=ParityBenchmark"`: 12/12 통과.
|
||||
- `powershell -ExecutionPolicy Bypass -File .\scripts\release-gate.ps1`: build/replay/full gate 통과.
|
||||
|
||||
## 13. 세션 Replay 안정성 기준 (고정)
|
||||
|
||||
| 시나리오 | 기준 테스트 | 합격 기준 |
|
||||
|---|---|---|
|
||||
| 실행 이벤트 정렬/압축 복원 | `ChatSessionStateServiceTests.LoadOrCreateConversation_NormalizesHistoryOrderAndCompactsSize` | ExecutionEvents 400개 상한 유지 + 시간순 정렬 유지 |
|
||||
| run 이력 중복 정규화 | `ChatSessionStateServiceTests.LoadOrCreateConversation_NormalizesAgentRunDuplicatesByRunId` | 동일 `RunId` 중복이 최신 상태 1건으로 축약 |
|
||||
| 동시각 이벤트 종결 우선 판정 | `TaskRunServiceTests.RestoreRecentFromExecutionEvents_PrefersTerminalEventsWhenTimestampsEqual` | Tool/Permission 상태가 terminal 이벤트 기준으로 복원 |
|
||||
| 비종결 이벤트 active 복원 | `TaskRunServiceTests.RestoreRecentFromExecutionEvents_RebuildsActiveTasksFromNonTerminalEvents` | 중단 후 재개 시 active task 3종(agent/tool/permission) 재구성 |
|
||||
| run 종료 시 dangling 정리 | `TaskRunServiceTests.RestoreRecentFromExecutionEvents_CompleteClearsDanglingRunScopedActiveTasks` | Complete 이후 run 스코프 active task 잔존 0건 |
|
||||
| 현재 run 복원 우선순위 | `AppStateServiceTests.RestoreCurrentAgentRun_PrefersRunningExecutionEventOverHistory` | 실행 중 이벤트가 history보다 우선되어 현재 run 복원 |
|
||||
| recent timeline 재구성 | `AppStateServiceTests.RestoreRecentTasks_RebuildsRecentTaskTimelineFromExecutionEvents` | 도구/권한/에이전트 최근 이력 순서 복원 |
|
||||
| 권한 거부 후 active 권한 상태 정리 | `AppStateServiceTests.RestoreRecentTasks_PermissionDeniedLeavesNoActivePermissionAfterResume` | PermissionDenied 이후 run 재개 시 active permission 잔존 0건 |
|
||||
| Hook 타임라인 역순 병합 정합성 | `AppStateServiceTests.ApplyAgentEvent_ReplaysHookTimelineInReverseChronologicalOrder` | Hook 이벤트가 역순 타임라인에서도 시간/의미 순서 보존 |
|
||||
| 완료 이벤트 우선 정리(병렬 도구) | `TaskRunServiceTests.RestoreRecentFromExecutionEvents_CompleteClearsParallelToolCallsForSameRun` | Complete 도착 시 동일 run의 병렬 도구 active task 즉시 정리 |
|
||||
|
||||
### 운영 규칙
|
||||
1. 위 시나리오는 `Suite=ReplayStability` 테스트 태그로 관리.
|
||||
2. 릴리즈 전 `Suite=ReplayStability` 전건 통과를 replay 불일치 0건의 최소 조건으로 사용.
|
||||
|
||||
### 실행 증적 (2026-04-03)
|
||||
- `dotnet test --filter "Suite=ReplayStability"`: 12/12 통과.
|
||||
- `powershell -ExecutionPolicy Bypass -File .\scripts\release-gate.ps1`: `ReplayStability` 포함 게이트 통과.
|
||||
|
||||
## 14. 권한 Hook 계약 (P2 마감 기준)
|
||||
- lifecycle hook 키:
|
||||
- `__permission_request__` (pre)
|
||||
- `__permission_granted__` (post)
|
||||
- `__permission_denied__` (post)
|
||||
- payload 기준 필드: `runId`, `tool`, `target`, `permission`, `granted`, `reason`.
|
||||
- 우선순위:
|
||||
1. Hook `updatedPermissions`가 현재 run의 `AgentContext.ToolPermissions`를 즉시 갱신.
|
||||
2. 갱신 후 `context.CheckToolPermissionAsync()`로 최종 판정.
|
||||
3. hook 실패/예외는 non-blocking(권한 흐름 지속).
|
||||
4. `additionalContext`는 가능한 경로에서 메시지 컨텍스트로 반영.
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
업데이트: 2026-04-14 19:50 (KST)
|
||||
업데이트: 2026-04-14 19:50 (KST)
|
||||
업데이트: 2026-04-15 12:51 (KST)
|
||||
- 업데이트: 2026-04-15 18:20 (KST)
|
||||
- README, 로드맵, 실행 계획 문서에서 비교·모사 표현을 줄이고 AX 기준 개발 계획과 검증 기록 중심으로 문서명과 설명을 정리했습니다.
|
||||
- 업데이트: 2026-04-15 16:49 (KST)
|
||||
- 런처 `~` 워크스페이스 복원 경로를 재검토하고, 같은 `exe`의 첫 번째 창 하나를 모든 스냅샷에 재사용하던 복원 매칭 결함을 수정했습니다. 기존 `src/AxCopilot/Core/ContextManager.cs`는 각 스냅샷마다 `exe`만 비교해 HWND를 찾았기 때문에, Chrome/Edge처럼 여러 창이 떠 있을 때 한 창만 반복 이동되며 배치가 무너지기 쉬웠습니다.
|
||||
- `src/AxCopilot/Core/ContextManager.cs`는 열린 창 후보를 수집한 뒤 `exe + 제목 매칭 점수 + 이미 사용한 핸들 제외` 기준으로 창을 배정하도록 바꿨습니다. exact title을 최우선으로 두고, 브라우저 suffix 제거/토큰 비교를 통해 비슷한 제목도 보조적으로 매칭합니다. 이미 다른 스냅샷에 배정된 핸들은 다시 쓰지 않아 multi-window 복원 품질을 높였습니다.
|
||||
@@ -92,7 +94,7 @@
|
||||
## ?낅뜲?댄듃 濡쒓렇
|
||||
|
||||
- ?낅뜲?댄듃: 2026-04-14 19:13 (KST)
|
||||
- `claude-code` 湲곗? Phase 4瑜??댁뼱??諛섏쁺?덉뒿?덈떎. `src/AxCopilot/Services/Agent/McpSkillCatalog.cs`瑜?異붽???MCP ?쒕쾭 硫뷀??곗씠?곕? `mcp` source scope??synthetic skill濡?蹂?섑븯怨? `ToolRegistry.RegisterMcpToolsAsync()` ?댄썑 snapshot??媛깆떊?섎룄濡??곌껐?덉뒿?덈떎.
|
||||
- `기준 구조` 湲곗? Phase 4瑜??댁뼱??諛섏쁺?덉뒿?덈떎. `src/AxCopilot/Services/Agent/McpSkillCatalog.cs`瑜?異붽???MCP ?쒕쾭 硫뷀??곗씠?곕? `mcp` source scope??synthetic skill濡?蹂?섑븯怨? `ToolRegistry.RegisterMcpToolsAsync()` ?댄썑 snapshot??媛깆떊?섎룄濡??곌껐?덉뒿?덈떎.
|
||||
- `src/AxCopilot/Services/Agent/SkillService.cs`??source policy瑜?`managed/user/additional/project/plugin/mcp/legacy` ?⑥쐞濡??먮떒?섎룄濡??뺤옣?덇퀬, source ?곗꽑?쒖쐞 湲곕컲 dedupe? inline shell trust boundary瑜??④퍡 ?곸슜?⑸땲?? plugin-only mode媛 耳쒖졇 ?덉쑝硫?managed/plugin/bundled留??좎??섍퀬 ?섎㉧吏 source???④퉩?덈떎.
|
||||
- ?щ옒??紐낅졊 ?⑹꽦? `src/AxCopilot/Views/SlashCommandCatalog.cs`? `src/AxCopilot/Views/ChatWindow.xaml.cs`?먯꽌 ?ш뎄?깊뻽?듬땲?? builtin command? skill??怨듯넻 priority濡??⑹꽦??異⑸룎 ??????ぉ留??몄텧?섍퀬, builtin `/review` 媛숈? ?덉빟 紐낅졊??project skill蹂대떎 ?덉젙?곸쑝濡??곗꽑?⑸땲??
|
||||
- ?ㅼ젙/UI??`src/AxCopilot/Views/SettingsWindow.xaml`, `src/AxCopilot/Views/AgentSettingsWindow.xaml`, `src/AxCopilot/Views/AgentSettingsWindow.xaml.cs`, `src/AxCopilot/Views/SkillGalleryWindow.xaml.cs`???곌껐?덉뒿?덈떎. MCP ?ㅽ궗 source ?좉?, plugin-only mode, source蹂?inline shell ?덉슜 踰붿쐞, MCP 移댄뀒怨좊━/諛곗?, synthetic skill???뚯씪 ?≪뀡 李⑤떒???④퍡 諛섏쁺?덉뒿?덈떎.
|
||||
@@ -549,7 +551,7 @@ dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj
|
||||
| ?꾩씠肄??좊땲硫붿씠???ш? ?쒖뼱 | `LauncherWindow.xaml.cs` | `sb.Completed`?먯꽌 利됱떆 ?ш? ??`_iconAnimationDelayTimer` 8珥??쒕젅?? ?좊떦 鍮덈룄 75% 媛먯냼. ?대┃ ???쒕젅??痍⑥냼 ??利됱떆 ?꾪솚 |
|
||||
| JsonSerializerOptions 怨듭쑀 | `AgentLoopService.cs` | `s_jsonOpts` ?뺤쟻 ?꾨뱶 異붽?, 4媛?`JsonSerializer.Serialize` ?몄텧???곸슜. L4096 `System.Text.Json.` ?묐몢???뺢퇋??|
|
||||
|
||||
### Claude Desktop ?ㅽ???UI 媛쒖꽑 (2026-04-09)
|
||||
### 업무형 데스크톱 UI 개선 (2026-04-09)
|
||||
|
||||
| ??ぉ | ?뚯씪 | ?섏젙 ?댁슜 |
|
||||
|------|------|----------|
|
||||
@@ -616,7 +618,7 @@ dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj
|
||||
|
||||
### ?ㅽ듃由щ컢 以?UI 踰꾨쾮?????媛쒖꽑 (2026-04-09)
|
||||
|
||||
Claude Desktop(React)? ?꾧뎄 ?몄텧???섏떗 嫄댁씠?대룄 留ㅻ걚?ъ슫 諛섎㈃, WPF ?깆? ?ы븯寃?踰꾨쾮?대뒗 臾몄젣???먯씤 遺꾩꽍 諛??섏젙.
|
||||
업무형 데스크톱 UI와 비교했을 때 WPF transcript가 과하게 다시 그려지던 문제를 분석하고 수정했습니다.
|
||||
|
||||
**洹쇰낯 ?먯씤**: React virtual DOM? 蹂寃쎈맂 遺遺꾨쭔 diff/patch?섏?留? WPF??留??뚮뜑留덈떎 ?꾩껜 ?쒓컖???몃━瑜??뚭눼 ???ъ깮??
|
||||
|
||||
@@ -629,7 +631,7 @@ Claude Desktop(React)? ?꾧뎄 ?몄텧???섏떗 嫄댁씠?대룄 留ㅻ걚?ъ
|
||||
|
||||
**鍮꾧탳**:
|
||||
|
||||
| ??ぉ | ?섏젙 ??(WPF) | ?섏젙 ??| Claude Desktop (React) |
|
||||
| ??ぉ | ?섏젙 ??(WPF) | ?섏젙 ??| 업무형 데스크톱 UI (React) |
|
||||
|------|-------------|---------|----------------------|
|
||||
| ?낅뜲?댄듃 ?꾨왂 | ?꾩껜 ?몃━ ?뚭눼?믪옱?앹꽦 | 4?④퀎: StreamingAppend ??Incremental ??**DiffRender** ??FullRender | Virtual DOM diff |
|
||||
| ?뚮뜑 媛꾧꺽 | 1.5~2.2珥?| 3~4珥?| ~16ms (requestAnimationFrame) |
|
||||
@@ -856,8 +858,8 @@ UI ?붿옄???洹쒕え 由ы뙥?좊쭅 ???꾪뿕 ?묒뾽 ??湲곕줉???덉쟾
|
||||
|------|------|
|
||||
| `docs/AGENT_ROADMAP.md` | ?먯씠?꾪듃 湲곕뒫 濡쒕뱶留?(吏?ν삎 怨좊룄??P1~P7 ?곸꽭 ?ы븿) |
|
||||
| `docs/LAUNCHER_ROADMAP.md` | ?곗쿂 湲곕뒫 濡쒕뱶留?|
|
||||
| `docs/OPENCODE_PARITY_PLAN.md` | OpenCode 湲곕뒫 ???怨꾪쉷 |
|
||||
| `docs/TOOL_PARITY_REPORT.md` | ?꾧뎄 ?명솚??由ы룷??|
|
||||
| `docs/AX_AGENT_QUALITY_PLAN.md` | AX Agent 품질 게이트 계획 |
|
||||
| `docs/TOOL_COVERAGE_REPORT.md` | ?꾧뎄 ?명솚??由ы룷??|
|
||||
| `docs/AX_AGENT_UI_CHECKLIST.md` | ?먯씠?꾪듃 UI 泥댄겕由ъ뒪??|
|
||||
| `docs/UI_UX_CHECKLIST.md` | UI/UX 泥댄겕由ъ뒪??|
|
||||
> ?낅뜲?댄듃: 2026-04-14 18:08 (KST)
|
||||
@@ -887,7 +889,7 @@ UI ?붿옄???洹쒕え 由ы뙥?좊쭅 ???꾪뿕 ?묒뾽 ??湲곕줉???덉쟾
|
||||
> - 李멸퀬: ?뚯뒪???꾨줈?앺듃??湲곗〈 nullable 寃쎄퀬 `src/AxCopilot.Tests/Services/WorkspaceContextGeneratorTests.cs(76)` 1嫄댁? ?좎??⑸땲??
|
||||
|
||||
- ?낅뜲?댄듃: 2026-04-14 18:37 (KST)
|
||||
- claude-code 濡쒖뺄 ?ㅻ깄?룹쓣 ?ㅼ떆 ?뺤씤?덉?留? ?꾩옱 ?ㅻ깄?룹뿉??PPT/臾몄꽌 ?꾩슜 踰덈뱾 ?ㅽ궗???쒕졆?섏? ?딆븯?듬땲?? ???AX媛 湲곕낯 ?ы븿?섍퀬 ?덈뒗 臾몄꽌??managed skill ?명듃瑜?以묒떖?쇰줈 諛고룷 ?먯궛 ?덉쭏???ㅻ벉?덉뒿?덈떎.
|
||||
- 기준 구조 濡쒖뺄 ?ㅻ깄?룹쓣 ?ㅼ떆 ?뺤씤?덉?留? ?꾩옱 ?ㅻ깄?룹뿉??PPT/臾몄꽌 ?꾩슜 踰덈뱾 ?ㅽ궗???쒕졆?섏? ?딆븯?듬땲?? ???AX媛 湲곕낯 ?ы븿?섍퀬 ?덈뒗 臾몄꽌??managed skill ?명듃瑜?以묒떖?쇰줈 諛고룷 ?먯궛 ?덉쭏???ㅻ벉?덉뒿?덈떎.
|
||||
- pptx-creator, docx-creator, report-writer, prd-generator, meeting-minutes, weekly-report, markdown-to-doc??when_to_use? argument-hint 硫뷀?瑜?異붽???proactive skill ?좏깮怨??щ옒???몄텧 媛?대뱶瑜?蹂닿컯?덉뒿?덈떎.
|
||||
- ?쇰컲 ?ㅼ젙怨?AX Agent ?ㅼ젙???ㅽ궗 紐⑸줉? managed ?ㅼ퐫?꾨? 蹂꾨룄 湲곕낯 ?쒓났 ?ㅽ궗 洹몃9?쇰줈 遺꾨━?덇퀬, ?ㅽ궗 媛ㅻ윭由щ룄 湲곕낯 ?쒓났 / ?꾨줈?앺듃 / ?뚮윭洹몄씤 / ?ъ슜??/ 怨좉툒 ?꾪꽣? 諛곗?瑜??ъ슜?섎룄濡??뺣━?덉뒿?덈떎.
|
||||
- ??蹂寃쎌쑝濡?臾몄꽌쨌?꾨젅?좏뀒?댁뀡 ?ㅽ궗? 鍮뚮뱶 異쒕젰 skills ?대뜑瑜??듯빐 湲곕낯 諛고룷?섎㈃?쒕룄, UI?먯꽌 ?ъ슜???ㅽ궗怨?援щ텇???곹깭濡??뺤씤?????덉뒿?덈떎.
|
||||
@@ -1009,8 +1011,8 @@ UI ?붿옄???洹쒕え 由ы뙥?좊쭅 ???꾪뿕 ?묒뾽 ??湲곕줉???덉쟾
|
||||
- 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "AgentCommandQueueTests|CodeLanguageCatalogTests|WorkspaceContextGeneratorTests|PptxSkillConsultingDeckTests|DeckRepairGuideServiceTests" -p:OutputPath=bin\\verify_master_batch_tests\\ -p:IntermediateOutputPath=obj\\verify_master_batch_tests\\` 통과 35
|
||||
|
||||
업데이트: 2026-04-15 07:00 (KST)
|
||||
- `claw-code` 기준 남은 격차를 줄이기 위한 통합 고도화 계획을 확정했습니다. 남은 주요 축은 `에이전틱 루프/명령 큐`, `tool_result preview 안정화`, `명령/스킬 합성`, `문서 포맷 마감`, `개발언어 지원 정합화`, `회귀 테스트/릴리즈 게이트`입니다.
|
||||
- 첫 배치로 [AgentCommandQueue.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentCommandQueue.cs)를 우선순위 배치 소비가 가능한 구조로 재작성했습니다. `peek`, `dequeue`, `dequeueAllMatching`, `dequeuePriorityBatch`, `snapshot` API를 추가해 `claw-code`의 unified queue처럼 고우선 입력을 먼저 소비하고 lower-priority 항목을 뒤로 미루는 기반을 만들었습니다.
|
||||
- `기준 구조` 기준 남은 격차를 줄이기 위한 통합 고도화 계획을 확정했습니다. 남은 주요 축은 `에이전틱 루프/명령 큐`, `tool_result preview 안정화`, `명령/스킬 합성`, `문서 포맷 마감`, `개발언어 지원 정합화`, `회귀 테스트/릴리즈 게이트`입니다.
|
||||
- 첫 배치로 [AgentCommandQueue.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentCommandQueue.cs)를 우선순위 배치 소비가 가능한 구조로 재작성했습니다. `peek`, `dequeue`, `dequeueAllMatching`, `dequeuePriorityBatch`, `snapshot` API를 추가해 `기준 구조`의 unified queue처럼 고우선 입력을 먼저 소비하고 lower-priority 항목을 뒤로 미루는 기반을 만들었습니다.
|
||||
- [AgentLoopService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentLoopService.cs)의 큐 배수 로직도 함께 조정했습니다. 기존 `DrainAll()` 방식 대신 같은 우선순위 배치만 소비하고, 남은 큐 항목이 있으면 `Deferred ... lower-priority queued item(s)` thinking 이벤트를 남겨 다음 턴으로 넘깁니다.
|
||||
- [AgentToolResultBudget.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentToolResultBudget.cs)는 preview 재사용 범위를 넓혔습니다. 기존에는 동일 `MsgId`에서만 `QueryPreviewContent`를 재사용했지만, 이제 `tool_use_id` 기준 preview 인덱스를 만들어 재구성된 tool result 메시지에서도 안정적으로 같은 preview를 재사용합니다.
|
||||
- 테스트는 [AgentCommandQueueTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/AgentCommandQueueTests.cs)에 `priority batch dequeue`, `predicate matching` 시나리오를 추가했고, [AgentToolResultBudgetTests.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot.Tests/Services/AgentToolResultBudgetTests.cs)에는 `tool_use_id`가 같은 cloned tool result가 이전 preview를 재사용하는 회귀 케이스를 추가했습니다.
|
||||
@@ -1107,27 +1109,27 @@ UI ?붿옄???洹쒕え 由ы뙥?좊쭅 ???꾪뿕 ?묒뾽 ??湲곕줉???덉쟾
|
||||
업데이트: 2026-04-15 10:10 (KST)
|
||||
- 통합 마감 계획 확정:
|
||||
1. `문서 포맷 최종 마감`
|
||||
- 참조 대상: `claw-code/src/query.ts`, `claw-code/src/utils/toolResultStorage.ts`, `claw-code/src/commands/init-verifiers.ts`
|
||||
- 참조 대상: `기준 구조/src/query.ts`, `기준 구조/src/utils/toolResultStorage.ts`, `기준 구조/src/commands/init-verifiers.ts`
|
||||
- AX 적용 위치: `PptxSkill.cs`, `DeckPlanningService.cs`, `DeckQualityReviewService.cs`, `DocxSkill.cs`, `DocumentAssemblerTool.cs`, `ExcelSkill.cs`, `HtmlSkill.cs`, `ArtifactQualityReviewService.cs`, `ArtifactRepairGuideService.cs`
|
||||
- 완료 조건: PPTX/DOCX/XLSX/HTML 모두 `plan -> critic -> repair` 흐름과 golden fixture 확장 완료
|
||||
- 품질 판정 기준: strong fixture는 `Needs work: none`, weak fixture는 포맷별 적절한 repair guide를 반환
|
||||
2. `에이전틱 루프 iteration pipeline 분리`
|
||||
- 참조 대상: `claw-code/src/QueryEngine.ts`, `claw-code/src/query.ts`, `claw-code/src/utils/messageQueueManager.ts`
|
||||
- 참조 대상: `기준 구조/src/QueryEngine.ts`, `기준 구조/src/query.ts`, `기준 구조/src/utils/messageQueueManager.ts`
|
||||
- AX 적용 위치: `AgentLoopService.cs`, `AgentLoopRunLifecycle.cs`, `AgentQueuedCommandProjector.cs`, `AgentQueryContextBuilder.cs`
|
||||
- 완료 조건: `RunAsync`의 bootstrap, query-view 생성, LLM 호출, tool dispatch, finalize를 더 작은 helper/service로 분리
|
||||
- 품질 판정 기준: 중단/재개/권한 승인/분기/장기 세션 replay 테스트 통과
|
||||
3. `tool_result replacement state 장기 세션 고정`
|
||||
- 참조 대상: `claw-code/src/utils/toolResultStorage.ts`
|
||||
- 참조 대상: `기준 구조/src/utils/toolResultStorage.ts`
|
||||
- AX 적용 위치: `AgentMessageInvariantHelper.cs`, `AgentToolResultBudget.cs`, `ContextCondenser.cs`, `ChatStorageService.cs`
|
||||
- 완료 조건: `tool_use_id` 변경, compact 이후, branch/replay 상황에서도 preview와 replacement 정책이 안정 유지
|
||||
- 품질 판정 기준: replay/branch 저장본에서 preview 흔들림 0건
|
||||
4. `개발언어 no-LSP fallback 심화`
|
||||
- 참조 대상: `claw-code/src/query.ts`, `claw-code/src/context.ts`
|
||||
- 참조 대상: `기준 구조/src/query.ts`, `기준 구조/src/context.ts`
|
||||
- AX 적용 위치: `CodeLanguageCatalog.cs`, `LspTool.cs`, `WorkspaceContextGenerator.cs`, `ChatWindow.SystemPromptBuilder.cs`, `SettingsWindow.xaml`
|
||||
- 완료 조건: 언어별 `manifest/build/test/lint` 힌트가 실제 fallback 분석과 워크스페이스 컨텍스트에 더 깊게 연결
|
||||
- 품질 판정 기준: 로컬 LSP 없는 저장소에서도 Auto 모드가 기본 실행 흐름과 영향 범위를 안정적으로 안내
|
||||
5. `명령/스킬 합성 및 릴리즈 게이트`
|
||||
- 참조 대상: `claw-code/src/commands.ts`, `claw-code/src/skills/loadSkillsDir.ts`
|
||||
- 참조 대상: `기준 구조/src/commands.ts`, `기준 구조/src/skills/loadSkillsDir.ts`
|
||||
- AX 적용 위치: `SlashCommandCatalog.cs`, `SkillService.cs`, `README.md`, `docs/DEVELOPMENT.md`, `docs/NEXT_ROADMAP.md`
|
||||
- 완료 조건: builtin/skill/plugin/workflow 토큰 충돌의 노출/실행 우선순위 완전 일치, 릴리즈 체크리스트 최신화
|
||||
- 품질 판정 기준: 같은 토큰 충돌 시 팔레트 표시와 실제 실행이 완전 일치하고, 릴리즈 전 수동 확인 항목 최소화
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
- `skills/*.skill.md` 파일 수: 41
|
||||
- Slash 명령 매핑 엔트리 수: 85
|
||||
|
||||
## 4) OpenCode 비교 포인트 (실행 반영 기준)
|
||||
- OpenCode 문서 기준 핵심 slash: `/permissions`, `/mcp` 확인
|
||||
## 4) 핵심 명령 점검 포인트 (실행 반영 기준)
|
||||
- 공통 운영 명령 기준: `/permissions`, `/mcp` 확인
|
||||
- AX 현재 매핑에 `/permissions`, `/allowed-tools`, `/mcp`, `/chrome`, `/compact` 포함
|
||||
- 다음 보강 우선순위:
|
||||
1. 수동 시나리오 기반 MCP/Chrome 진단 품질 강화
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
## 2. 재작성 기준
|
||||
- 런처는 AX Agent 실행 품질을 끌어올리는 입력 허브로 재정의.
|
||||
- OpenCode의 명령 중심 워크플로우를 AX Commander UX에 맞게 흡수.
|
||||
- 명령 중심 워크플로우를 AX Commander UX에 맞게 재구성.
|
||||
|
||||
## 3. 2026 실행 계획 (v0.7.3 ~ v0.8.x)
|
||||
|
||||
|
||||
@@ -1,226 +1,80 @@
|
||||
# AX Copilot 통합 로드맵 (전면 재작성)
|
||||
# AX Copilot 통합 로드맵
|
||||
|
||||
## 1. 보존 이력 (요약만 유지)
|
||||
- v0.5.x: 에이전트/런처 핵심 기능 확장, MCP/스킬/검증 체계 도입.
|
||||
- v0.6.0: 문서 생성 및 업무 자동화 도구군 확장.
|
||||
- v0.7.0~v0.7.2: Plan Mode, 병렬 도구, 검증 게이트 및 안정화 강화.
|
||||
업데이트: 2026-04-15 18:20 (KST)
|
||||
|
||||
## 2. 재작성 목표
|
||||
- OpenCode 수준의 실행 신뢰성, 세션 내구성, 결과 품질 확보.
|
||||
- AX Copilot 고유 제약(사내 운영모드, WPF UX, 로컬 우선)을 유지한 동등 품질 구현.
|
||||
## 1. 방향
|
||||
- AX Copilot 전반의 실행 신뢰성, 세션 내구성, 결과 품질을 함께 끌어올립니다.
|
||||
- 개발 문서는 비교 보고서가 아니라 AX 기준 계획과 검증 기록으로 유지합니다.
|
||||
|
||||
## 3. 마일스톤
|
||||
## 2. 마일스톤
|
||||
|
||||
| 마일스톤 | 참조 대상 (`OpenCode`) | AX 적용 위치 | 완료 조건 | 품질 판정 시나리오 |
|
||||
| 마일스톤 | 참조 대상 | AX 적용 위치 | 완료 조건 | 품질 판정 시나리오 |
|
||||
|---|---|---|---|---|
|
||||
| M1 (v0.7.3) Hook 계약 정식화 | `src/utils/hooks.ts`, `src/utils/hooks/hookEvents.ts`, `src/utils/permissions/PermissionUpdate.ts` | `src/AxCopilot/Services/Agent/AgentHookRunner.cs`, `src/AxCopilot/Services/Agent/AgentLoopService.cs`, `src/AxCopilot/Models/AppSettings.cs`, `src/AxCopilot/ViewModels/SettingsViewModel.cs`, `src/AxCopilot/Views/SettingsWindow.xaml` | Hook 출력 계약(`updatedInput`, `updatedPermissions`, `additionalContext`) 반영. 설정값-실행코드-UI 동시 반영. | JSON 훅/텍스트 훅 혼합 환경에서 실행 품질과 하위호환 유지 확인. |
|
||||
| M2 (v0.7.4~v0.7.5) 세션/로그 내구성 | `src/utils/plans.ts`, `src/utils/sessionStorage.ts` | `src/AxCopilot/Services/ChatSessionStateService.cs`, `src/AxCopilot/Services/TaskRunService.cs`, `src/AxCopilot/Services/TaskRunStore.cs`, `src/AxCopilot/Views/ChatWindow.xaml.cs`, `src/AxCopilot/Models/ChatModels.cs` | Plan/Run 상태 영속화. 이벤트 로그 표준화 및 replay 안정성 확보. | 앱 재시작/강제종료 후 동일 세션 재개 시 상태/이력 불일치 0건. |
|
||||
| M3 (v0.7.6) 도구 선택/복구 안정화 | `src/commands.ts`, `src/Tool.ts`, `src/query.ts` | `src/AxCopilot/Services/Agent/AgentLoopService.cs`, `src/AxCopilot/Services/Agent/AgentLoopParallelExecution.cs`, `src/AxCopilot/Services/LlmService.ToolUse.cs` | 도구 선택 실패 루프 억제. 실패 유형별 복구 흐름 정형화. | 오타/비활성/별칭 도구 요청이 반복 실패 없이 정상 경로로 수렴하는지 확인. |
|
||||
| M4 (v0.8.0) 품질 게이트 최종 정렬 | `src/query.ts`, `src/QueryEngine.ts`, `src/utils/sessionStorage.ts` | `src/AxCopilot/Services/Agent/AgentLoopService.cs`, `src/AxCopilot/Services/Agent/AgentLoopTransitions.Execution.cs`, `src/AxCopilot/Services/Agent/AgentLoopTransitions.cs` | 증거 기반 완료 판정 고정. 내부 벤치마크에서 OpenCode 동급 품질 달성. | 코드수정/문서생성/권한거부/복구 혼합 시나리오에서 조기완료 없이 근거 기반 종료 확인. |
|
||||
| M1 (v0.7.3) Hook 계약 정식화 | `src/utils/hooks.ts`, `src/utils/hooks/hookEvents.ts`, `src/utils/permissions/PermissionUpdate.ts` | `AgentHookRunner.cs`, `AgentLoopService.cs`, `AppSettings.cs`, `SettingsViewModel.cs`, `SettingsWindow.xaml` | Hook 출력 계약(`updatedInput`, `updatedPermissions`, `additionalContext`) 반영, 설정값-실행코드-UI 동시 반영 | JSON 훅/텍스트 훅 혼합 환경에서도 실행 품질과 하위호환 유지 |
|
||||
| M2 (v0.7.4 ~ v0.7.5) 세션/로그 내구성 | `src/utils/plans.ts`, `src/utils/sessionStorage.ts` | `ChatSessionStateService.cs`, `TaskRunService.cs`, `TaskRunStore.cs`, `ChatWindow.xaml.cs`, `ChatModels.cs` | plan/run 상태 영속화, 이벤트 로그 표준화, replay 안정성 확보 | 앱 재시작/강제 종료 후 같은 세션 재개 시 상태 불일치 0건 |
|
||||
| M3 (v0.7.6) 도구 선택/복구 안정화 | `src/commands.ts`, `src/Tool.ts`, `src/query.ts` | `AgentLoopService.cs`, `AgentLoopParallelExecution.cs`, `LlmService.ToolUse.cs` | 도구 선택 실패 루프 억제, 실패 유형별 복구 흐름 정형화 | 오타/비활성/별칭 도구 요청이 반복 실패 없이 정상 경로로 수렴 |
|
||||
| M4 (v0.8.0) 품질 게이트 고정 | `src/query.ts`, `src/QueryEngine.ts`, `src/utils/sessionStorage.ts` | `AgentLoopService.cs`, `AgentLoopTransitions.Execution.cs`, `AgentLoopTransitions.cs` | 증거 기반 완료 판정 고정, 릴리즈 게이트 자동화 강화 | 코드수정/문서생성/권한거부/복구 혼합 시나리오에서 조기 완료 없이 종료 |
|
||||
|
||||
## 4. 측정 지표
|
||||
- 반복 실패 루프 발생률.
|
||||
- 세션 재개 성공률.
|
||||
- 완료 응답 근거 누락률.
|
||||
- 빌드/테스트 통과율.
|
||||
## 3. 측정 지표
|
||||
- 반복 실패 루프 발생률
|
||||
- 세션 재개 성공률
|
||||
- 완료 응답 근거 누락률
|
||||
- 빌드/테스트 통과율
|
||||
|
||||
## 5. 운영 원칙
|
||||
- `internal` 모드: 외부 유출 경로 차단 우선.
|
||||
- 신규 기능은 반드시 설정값 연결 + 실제 동작 반영.
|
||||
- 문서 마스터는 `.md`, HTML은 요청 시만 갱신.
|
||||
## 4. 운영 원칙
|
||||
- `internal` 모드에서는 외부 유출 경로 차단 우선
|
||||
- 신규 기능은 설정값 연결과 실제 동작 반영을 함께 완료
|
||||
- 문서 마스터는 `.md`, HTML은 요청 시만 갱신
|
||||
|
||||
## 6. 즉시 실행 백로그
|
||||
1. Hook 계약 확장 마무리 및 회귀 테스트.
|
||||
2. 세션 복원 경계조건 테스트 세트 추가.
|
||||
3. 이벤트 로그 스키마 고정 및 분석 리포트 템플릿 정리.
|
||||
## 5. 즉시 실행 백로그
|
||||
1. Hook 계약 확장 마무리 및 회귀 테스트
|
||||
2. 세션 복원 경계조건 테스트 세트 추가
|
||||
3. 이벤트 로그 스키마 고정 및 분석 리포트 템플릿 정리
|
||||
|
||||
## 7. 2026-04-03 실행 증적 동기화 (M4 포함)
|
||||
- 기준 시점: 2026-04-03.
|
||||
- 테스트: `dotnet test` 379/379 통과.
|
||||
- M1 증적: Hook 계약 필드(`updatedInput`, `updatedPermissions`, `additionalContext`) 반영 경로 구현 완료.
|
||||
- M2 증적: run 복원/이력 재구성(`RestoreRecentFromExecutionEvents`, `RestoreCurrentAgentRun`, plan 이력 조회) 구현 및 테스트 존재.
|
||||
- M3 증적: unknown-tool 복구 루프/결정 이벤트 처리 경로 구현 및 테스트 존재.
|
||||
- M4 증적: 실행 종료 품질 게이트(`CodeQualityGate`, `ExecutionSuccessGate`, `TerminalEvidenceGate`) 반영 및 관련 테스트 존재.
|
||||
- 스킬/도구 운영 정렬: 40개 스킬 모두 `allowed-tools` 명시 완료, Python 의존 10개는 fallback 분기 적용, 레거시 도구명(`process_run`, `grep_tool`) 참조 제거.
|
||||
## 6. 실행 증적 기준
|
||||
- 기준 시점: 2026-04-03
|
||||
- 전체 테스트: `379/379` 통과
|
||||
- Hook 계약 필드 반영 경로 구현 완료
|
||||
- run 복원/이력 재구성 경로 구현 및 테스트 존재
|
||||
- unknown-tool 복구 루프와 완료 게이트 경로 구현 및 테스트 존재
|
||||
- 스킬/도구 운영 정렬: `allowed-tools` 전건 명시, Python 의존 경로 fallback 반영, 레거시 도구명 참조 제거
|
||||
|
||||
## 8. 남은 마감 항목 (M4 종료 조건)
|
||||
1. 세션 replay 불일치 0건을 재현 시나리오별 수치로 기록.
|
||||
2. 위 결과를 배포 전 체크리스트로 고정하고 매 릴리즈마다 수치 동기화.
|
||||
## 7. 벤치마크 기준
|
||||
- 기준 문서: `docs/AX_AGENT_QUALITY_PLAN.md`
|
||||
- 고정 시나리오:
|
||||
- 기본 loop
|
||||
- unknown-tool 복구
|
||||
- plan 연결
|
||||
- 권한 거부
|
||||
- hook 입력 변형
|
||||
- allowed-tools 강제
|
||||
- hook filter
|
||||
- 합격 게이트:
|
||||
- 빌드 경고·오류 0
|
||||
- 전체 테스트 통과
|
||||
- 고정 시나리오 회귀 통과
|
||||
|
||||
## 9. 벤치마크 고정 기준 (CLAW 패리티 동기화)
|
||||
- 기준 문서: `docs/OPENCODE_PARITY_PLAN.md` 12절.
|
||||
- 고정 시나리오: 기본 loop / unknown-tool 복구 / plan 연결 / 권한 거부 / hook 입력 변형 / allowed-tools 강제 / hook filter.
|
||||
- 합격 게이트: 빌드 경고·오류 0 + 전체 테스트 통과 + 고정 시나리오 회귀 통과.
|
||||
## 8. 실행 프레임
|
||||
|
||||
## 10. Replay 안정성 검증 연동
|
||||
- 기준 문서: `docs/OPENCODE_PARITY_PLAN.md` 13절.
|
||||
- 테스트 태그: `Suite=ReplayStability`.
|
||||
- 운영 기준: 릴리즈 전 `ReplayStability` 시나리오 전건 통과 시 replay 불일치 0건으로 판정.
|
||||
- 최신 실행 증적(2026-04-03): `ParityBenchmark 13/13`, `ReplayStability 14/14`, 전체 `379/379`.
|
||||
- 실행 자동화: `scripts/release-gate.ps1`로 빌드/벤치마크/리플레이/전체 테스트를 일괄 점검.
|
||||
### 입력 계층
|
||||
- slash 명령 카탈로그와 매칭 상태를 별도 파일로 분리
|
||||
- 입력 파싱 변경은 회귀 테스트와 함께 반영
|
||||
|
||||
## 11. 권한 Hook 계약 고정 (M1 완료 기준)
|
||||
- lifecycle hook 키:
|
||||
- `__permission_request__` (pre)
|
||||
- `__permission_granted__` (post)
|
||||
- `__permission_denied__` (post)
|
||||
- payload 기준 필드: `runId`, `tool`, `target`, `permission`, `granted`, `reason`.
|
||||
- 실행 우선순위:
|
||||
1. Hook의 `updatedPermissions`를 현재 run 권한 컨텍스트에 즉시 반영.
|
||||
2. 반영 후 `CheckToolPermissionAsync()`로 최종 권한 판정 수행.
|
||||
3. hook 예외/실패는 non-blocking으로 처리하고 권한 흐름은 지속.
|
||||
4. `additionalContext`는 가능한 경로에서 실행 메시지 컨텍스트에 병합.
|
||||
### 권한 UX
|
||||
- 권한 모드 명칭, 설명, 색, 정렬 순서를 단일 소스에서 관리
|
||||
- 팝업, 상태 배너, 슬래시 출력이 같은 용어를 사용
|
||||
|
||||
### 설정 동기화
|
||||
- Cowork/Code 설정 분기를 실행 코드까지 일치
|
||||
- 설정 변경 즉시 반영 시나리오를 체크리스트화
|
||||
|
||||
### 통합 회귀
|
||||
- `internal/external`, permission deny/recover, mcp reconnect, compact 수동/자동 흐름을 함께 검증
|
||||
|
||||
### 업무형 UI 마감
|
||||
- 좌측 패널, 컴포저, 권한 팝업 밀도와 탐색 동작을 단순하고 일관된 패턴으로 정리
|
||||
|
||||
## 2026-04-04 추가 계획 (Codex/Claude 추격 로드맵 재정렬)
|
||||
|
||||
업데이트: 2026-04-04 13:24 (KST)
|
||||
|
||||
### 기준 소스
|
||||
- OpenCode/src/commands.ts
|
||||
- OpenCode/src/utils/permissions/PermissionMode.ts
|
||||
- OpenCode/src/components/PromptInput/PromptInput.tsx
|
||||
|
||||
### 현재 AX 격차 요약
|
||||
1. 입력/슬래시/권한 처리 로직이 ChatWindow 단일 파일에 상대적으로 집중되어 변경 파급도가 큼.
|
||||
2. 설정-런타임-UI 동기화는 기능은 많지만 구조적 분리가 부족해 회귀 리스크가 높음.
|
||||
3. Agent loop 품질 게이트는 확보됐으나, UI 상호작용 회귀 시나리오와 결합된 자동 검증이 더 필요함.
|
||||
|
||||
### 연속 실행 목표 (L1~L5)
|
||||
- **L1. 입력 계층 모듈화**
|
||||
- 목표: slash 명령 카탈로그/매칭/선택 상태를 분리해 ChatWindow 결합도 축소
|
||||
- 완료 기준: slash 관련 핵심 로직을 독립 파일로 분리하고 기존 slash 테스트 통과
|
||||
- **L2. 권한 UX/로직 단일 카탈로그화**
|
||||
- 목표: 권한 모드 명칭/설명/색/정렬 순서를 단일 소스에서 제공
|
||||
- 완료 기준: 팝업/상태 배너/슬래시 출력에서 동일 용어·동일 순서 유지
|
||||
- **L3. 설정 동기화 강화**
|
||||
- 목표: Cowork/Code 설정 분기를 실행 코드 경로까지 일치시켜 회귀 감소
|
||||
- 완료 기준: 설정 변경 즉시 반영 시나리오 체크리스트 전건 통과
|
||||
- **L4. Agentic loop + UI 결합 회귀 테스트 보강**
|
||||
- 목표: internal/external, permission deny/recover, mcp reconnect, compact 수동/자동 흐름을 통합 검증
|
||||
- 완료 기준: 릴리즈 게이트용 통합 테스트 세트 추가 및 통과
|
||||
- **L5. Codex/Claude형 UI 마감**
|
||||
- 목표: 좌측 패널/컴포저/권한 팝업 밀도와 탐색 동작을 단순·일관 패턴으로 정리
|
||||
- 완료 기준: UI 체크리스트 주요 항목 100% 충족 + 빌드 경고/오류 0
|
||||
|
||||
### 이번 턴 즉시 반영 (L1 시작)
|
||||
- ChatWindow의 대형 slash 명령 사전을 SlashCommandCatalog로 분리.
|
||||
- ChatWindow는 카탈로그 API(MatchBuiltinCommands, TryGetEntry)를 통해 조회하도록 전환.
|
||||
- 결과: 입력 계층 결합도 감소 + 향후 slash 확장/정리 시 변경 범위 축소.
|
||||
|
||||
## 2026-04-04 실행 프레임 고정 (중기 계획)
|
||||
|
||||
업데이트: 2026-04-04 14:47 (KST)
|
||||
|
||||
### 3축 고정 운영
|
||||
1. 로직 안정화: 권한/운영모드/compact/모델 연결 경로를 테스트 우선으로 보강.
|
||||
2. 기능 동등성: OpenCode 기준 주요 명령(/compact, /permissions, /mcp, /chrome)을 실행 시나리오로 검증.
|
||||
3. UX 정렬: 상단/컴포저/팝업 밀도는 로직 안정화 완료 범위 내에서만 단계 반영.
|
||||
|
||||
### 이번 사이클 기준 완료 조건
|
||||
- 빌드: `dotnet build` 경고 0 / 오류 0.
|
||||
- 핵심 회귀: 운영모드, 권한, slash, 모델연결, compact 관련 필터 테스트 통과.
|
||||
- 문서: `README.md`, `docs/DEVELOPMENT.md`에 시간 포함 이력 동기화 후 커밋/푸시.
|
||||
|
||||
### 이번 사이클 실제 보강 항목
|
||||
- `ContextCondenserTests` 추가:
|
||||
- proactive 비활성 시 무변경 확인
|
||||
- 대용량 tool_result 축약 동작 확인
|
||||
- `LlmRuntimeOverrideTests` 보강:
|
||||
- vLLM 암호화 API키 런타임 복호화 검증
|
||||
- 등록모델/전역 TLS 우회 플래그 합성 규칙 검증
|
||||
업데이트: 2026-04-15 08:32 (KST)
|
||||
|
||||
### 이번 배치 마감 상태
|
||||
- 에이전틱 루프는 우선순위 큐, tool_result preview 복원, 슬래시 합성 일원화까지 반영되어 `claw-code` 대비 남은 격차가 `루프 세분화/장기 상태 고정` 중심으로 축소됐습니다.
|
||||
- 문서 포맷은 PPTX/DOCX/XLSX/HTML 모두 실무형 상급 수준까지 올라왔고, 이후 남은 작업은 `slide/workbook/document-level critic`과 `golden regression` 확대 같은 마감 단계입니다.
|
||||
- 개발언어 지원은 `빠른 선택 + LSP 심화 지원 + 정적 fallback` 구조로 정리됐습니다. 다음 단계는 언어별 실행 힌트 활용 범위를 더 넓히고, no-LSP 환경에서도 분석 품질을 더 끌어올리는 것입니다.
|
||||
|
||||
### 다음 우선순위
|
||||
1. `AgentLoopService` 실행 상태 분해와 장기 세션 replacement state 고정
|
||||
2. PPTX/XLSX/DOCX/HTML critic/repair loop 최종 마감
|
||||
3. 언어별 build/test/lint 힌트의 실제 도구 활용 경로 확대
|
||||
4. 릴리즈 게이트와 로드맵 문서 최종 정합화
|
||||
|
||||
업데이트: 2026-04-15 09:49 (KST)
|
||||
|
||||
### 추가 진행 메모
|
||||
1. 개발언어 고도화는 `지원 언어 표시`를 넘어서 `Language Workflow`를 실제 컨텍스트에 주입하는 단계로 넘어갔습니다.
|
||||
2. 다음 구현 배치는 `AgentLoopService` 세분화, `tool_result replacement state` 장기 세션 고정, 문서 포맷 공통 quality formatter 확장 순으로 진행합니다.
|
||||
3. 문서 포맷은 PPTX가 가장 앞서 있고, DOCX/XLSX/HTML은 공통 critic/repair와 golden 회귀를 같은 수준으로 끌어올리는 마감 단계에 들어갑니다.
|
||||
|
||||
업데이트: 2026-04-15 10:05 (KST)
|
||||
|
||||
### 추가 진행 메모
|
||||
1. 에이전틱 루프는 이제 `queued command projector + run lifecycle helper` 구조까지 들어와 시작/종료 책임이 분리됐습니다. 다음 마감 단계는 `RunAsync` 본체의 iteration pipeline을 더 잘게 나누는 작업입니다.
|
||||
2. `tool_result replacement state`는 synthetic preview를 넘어 fingerprint 재바인딩까지 들어갔습니다. 남은 방향은 compact/branch 이후의 replacement policy를 세션 단위 상태로 더 오래 유지하는 것입니다.
|
||||
3. 문서 포맷은 `ArtifactQualityOutputFormatter`가 HTML/XLSX뿐 아니라 DOCX/PPTX까지 확장되었습니다. 다음 마감은 포맷별 critic/repair 자체를 더 깊게 하고, golden fixture 샘플을 확대하는 단계입니다.
|
||||
|
||||
업데이트: 2026-04-15 10:50 (KST)
|
||||
|
||||
### 추가 진행 메모
|
||||
1. 개발언어 fallback은 이제 `Language Workflow`를 `.ax-context.md`와 코드 시스템 프롬프트에 모두 주입하는 단계까지 올라왔습니다. 남은 마감은 no-LSP 환경에서 이 힌트를 실제 도구 사용/검증 흐름과 더 촘촘히 묶는 것입니다.
|
||||
2. 에이전틱 루프는 `run lifecycle`, `queued command projection`, `iteration preparation`, `LLM request preparation` helper까지 분리됐습니다. 다음 큰 축은 `RunAsync`의 tool dispatch/finalize 분리를 더 진행해 본체 책임을 더 줄이는 것입니다.
|
||||
3. 명령/스킬 합성은 우선순위 충돌 해소가 대부분 정리됐고, 이후 작업은 릴리즈 게이트와 체크리스트를 최종 상태에 맞춰 닫는 단계입니다.
|
||||
|
||||
업데이트: 2026-04-15 10:10 (KST)
|
||||
|
||||
### 통합 마감 계획
|
||||
1. 문서 포맷 최종 마감
|
||||
- 참조 대상: `claw-code/src/query.ts`, `claw-code/src/utils/toolResultStorage.ts`, `claw-code/src/commands/init-verifiers.ts`
|
||||
- AX 적용 위치: `PptxSkill`, `DeckPlanningService`, `DeckQualityReviewService`, `DocxSkill`, `DocumentAssemblerTool`, `ExcelSkill`, `HtmlSkill`, `ArtifactQualityReviewService`
|
||||
- 완료 조건: PPTX/DOCX/XLSX/HTML golden fixture 확대, critic/repair loop 최종 보강
|
||||
- 품질 판정 기준: strong fixture `Needs work: none`, weak fixture는 포맷별 정확한 repair guide 반환
|
||||
2. AgentLoop/Queue/Context 최종 분리
|
||||
- 참조 대상: `claw-code/src/QueryEngine.ts`, `claw-code/src/query.ts`, `claw-code/src/utils/messageQueueManager.ts`, `claw-code/src/utils/toolResultStorage.ts`
|
||||
- AX 적용 위치: `AgentLoopService`, `AgentLoopRunLifecycle`, `AgentQueuedCommandProjector`, `AgentMessageInvariantHelper`, `AgentToolResultBudget`, `AgentQueryContextBuilder`, `ContextCondenser`
|
||||
- 완료 조건: `RunAsync` iteration pipeline 분리, replacement state 장기 세션 고정
|
||||
- 품질 판정 기준: 중단/재개/권한/branch/replay 회귀 전건 통과
|
||||
3. 개발언어 fallback 심화
|
||||
- 참조 대상: `claw-code/src/query.ts`, `claw-code/src/context.ts`
|
||||
- AX 적용 위치: `CodeLanguageCatalog`, `LspTool`, `WorkspaceContextGenerator`, `SystemPromptBuilder`, 설정 도움말
|
||||
- 완료 조건: no-LSP 환경에서도 manifest/build/test/lint 힌트와 영향 범위 설명 강화
|
||||
- 품질 판정 기준: Auto 모드가 LSP 없는 주요 언어 저장소에서도 안정적으로 안내
|
||||
4. 명령/스킬 합성 및 릴리즈 게이트
|
||||
- 참조 대상: `claw-code/src/commands.ts`, `claw-code/src/skills/loadSkillsDir.ts`
|
||||
- AX 적용 위치: `SlashCommandCatalog`, `SkillService`, `README`, `DEVELOPMENT`, `NEXT_ROADMAP`
|
||||
- 완료 조건: builtin/skill/plugin/workflow 충돌 해소와 릴리즈 체크리스트 최신화
|
||||
- 품질 판정 기준: 토큰 충돌 시 팔레트와 실제 실행이 완전 일치
|
||||
|
||||
### 실행 순서
|
||||
1. 문서 포맷 마감
|
||||
2. 루프/큐/컨텍스트 분리
|
||||
3. 개발언어 fallback 심화
|
||||
4. 명령/스킬 합성 및 릴리즈 게이트
|
||||
업데이트: 2026-04-15 10:57 (KST)
|
||||
- Agent loop 마감 작업으로 `도구 미호출 복구` 규칙을 서비스화했습니다. 남은 우선순위는 `iteration/tool dispatch 추가 분리`, `장기 세션 replacement state 완전 고정`, `문서 golden fixture 확대`, `릴리즈 체크리스트 닫기` 정도의 마감 품질 중심입니다.
|
||||
|
||||
업데이트: 2026-04-15 11:17 (KST)
|
||||
|
||||
### 추가 진행 메모
|
||||
1. SQL은 별도 정적 분석 계층까지 올라왔습니다. 현재도 no-LSP 환경에서 `dialect/statement/risk/next checks`를 직접 설명할 수 있고, 다음 단계로 더 간다면 dialect별 migration lint나 schema dependency graph 정도가 후보입니다.
|
||||
2. PPT는 구조화된 슬라이드를 더 적극적으로 `comparison/roadmap/kpi_dashboard/chart`로 승격하고, KPI/evidence/verdict/owner 같은 컨설팅형 품질 기준을 slide critic에 반영했습니다. 큰 기능보다 golden fixture 확대 성격의 마감 작업이 남아 있습니다.
|
||||
3. HTML은 `kpi_panel`이 새 핵심 블록으로 들어오면서 board/strategy 문서의 decision/evidence/KPI 연결성이 더 중요해졌습니다. 이후 작업은 목적형 bundled skill 확장과 print/export polish 쪽이 중심입니다.
|
||||
|
||||
업데이트: 2026-04-15 11:36 (KST)
|
||||
|
||||
### 추가 진행 메모
|
||||
1. SQL fallback은 `dialect/statement/risk` 수준을 넘어 `script intent/dependency/review focus`까지 확장됐습니다. 다음 선택지는 dialect별 migration lint, schema dependency graph, rollback 시뮬레이션처럼 더 깊은 전용 리뷰 계층입니다.
|
||||
2. HTML 문서는 `decision_matrix`와 `metric_strip`이 들어오면서 board/strategy 보고서의 의사결정 구조를 더 직접적으로 표현할 수 있게 됐습니다. 남은 작업은 bundled skill을 목적형으로 더 쪼개고 print/export polish를 마감하는 수준입니다.
|
||||
3. PPT critic은 headline, trade-off, phase milestone, chart takeaway, KPI context를 세밀하게 보기 시작했습니다. 이후 남는 작업은 finance/sales/board fixture 확대와 slide-level auto-repair 정교화처럼 golden 마감 중심입니다.
|
||||
|
||||
업데이트: 2026-04-15 11:50 (KST)
|
||||
|
||||
### 추가 진행 메모
|
||||
1. SQL은 이제 fallback 요약에 별도 `review severity / findings / checklist`가 붙는 수준까지 올라왔습니다. 남은 고도화는 dialect별 migration lint, schema dependency graph, rollback simulation 같은 더 깊은 검증 계층입니다.
|
||||
2. Agent loop는 응답 분해 helper가 추가되어 `RunAsync` 본체가 한 단계 더 얇아졌습니다. 이후 분리 후보는 tool dispatch와 finalize 쪽이라, 구조적 마감은 거의 끝나가고 있습니다.
|
||||
3. 문서 쪽은 기능 확장보다 `golden fixture 확대`, `목적형 bundled skill`, `print/export polish`처럼 완성도 마감 항목이 중심으로 남았습니다.
|
||||
|
||||
업데이트: 2026-04-15 12:14 (KST)
|
||||
|
||||
### 추가 진행 메모
|
||||
1. Cowork/Code의 사용자 체감 진행 문구는 `AgentStatusNarrativeCatalog` 기준으로 정리됐습니다. 같은 agent event를 status bar, idle 힌트, readable process feed가 함께 재사용하게 되어 `작업 분석 -> 읽기 -> 수정 -> 검증 -> 정리` 흐름이 더 선명하게 드러납니다.
|
||||
2. 남은 AX Agent UX 마감 항목은 상태 문구 자체보다 `카드 밀도`, `표현 수준(풍부하게/적절하게/간단하게)`별 정보량 차등, 목적형 이벤트 배지 polish 쪽입니다.
|
||||
3. 구조적 우선순위는 여전히 `tool dispatch/finalize 추가 분리`, `장기 세션 replacement state 고정`, `PPT/HTML golden 확대`가 가장 높습니다.
|
||||
## 9. 최근 진행 메모
|
||||
- 2026-04-15 08:32 (KST): 루프 품질은 장기 상태 고정과 세분화 중심 과제로 축소
|
||||
- 2026-04-15 09:49 (KST): 언어별 workflow 주입과 문서 포맷 critic/repair 루프를 다음 우선순위로 정리
|
||||
- 2026-04-15 10:05 (KST): queued command projector, run lifecycle helper, quality formatter 확장을 다음 배치로 고정
|
||||
|
||||
@@ -1,153 +0,0 @@
|
||||
# OpenCode 품질 동등화 계획 (전면 재작성)
|
||||
|
||||
## 1. 기준
|
||||
- 레퍼런스: `E:\AX Copilot - Codex\OpenCode\OpenCode-f5a40b86dede580f6543bf8926c9af017eea9409\src`
|
||||
- 동등화 범위: 명령 처리 흐름, 권한/훅 체계, plan/run 내구성, 세션/로그 관리.
|
||||
|
||||
## 2. 보존 이력 (요약만 유지)
|
||||
- 루프 가드(반복 실패/정체 감지)와 검증 게이트는 이미 AX에 부분 반영.
|
||||
- 병렬 도구 실행, Plan Mode, Unknown-tool 복구 로직은 반영 완료.
|
||||
- 세션/이력 안정화는 진행 중.
|
||||
|
||||
## 3. 현재 갭
|
||||
- Hook 출력의 구조화 계약 적용 범위가 제한적.
|
||||
- 세션 재개/이벤트 replay 품질이 시나리오별 편차 존재.
|
||||
- 도구 선택 실패 후 재시도 전략의 일관성 부족.
|
||||
|
||||
## 4. 단계별 실행
|
||||
|
||||
### P1 Hook 계약 고도화
|
||||
- `updatedInput`, `updatedPermissions`, `additionalContext`를 AX 실행 루프에 반영.
|
||||
- 설정 토글로 위험 기능 제어.
|
||||
|
||||
### P2 세션/이벤트 내구성
|
||||
- run 상태 영속화와 resume 기준 고정.
|
||||
- jsonl 이벤트 필드 표준화 및 재생 가능성 확보.
|
||||
|
||||
### P3 실패 복구 표준화
|
||||
- unknown-tool/권한거부/파라미터 오류를 유형화.
|
||||
- 유형별 복구 프롬프트와 다음 액션 우선순위 고정.
|
||||
|
||||
### P4 완료 품질 정렬
|
||||
- 코드/문서 작업별 완료 체크리스트 표준화.
|
||||
- 증거 없는 완료 응답 방지.
|
||||
|
||||
## 5. 완료 판정
|
||||
- 내부 벤치마크 시나리오에서 목표 성공률 충족.
|
||||
- 세션 재개/이벤트 재생 오류 0건.
|
||||
- 빌드 경고 0/오류 0 유지.
|
||||
|
||||
## 6. 2026-04-03 점검 스냅샷
|
||||
- 기준 시점: 2026-04-03.
|
||||
- 계획 대비 현재 수준: 약 92~95%.
|
||||
- 테스트 상태: `dotnet test` 374/374 통과.
|
||||
- P1 Hook 계약: 구현 완료 수준.
|
||||
- P2 세션/이벤트 내구성: 구현 완료 수준(복원/재생 경계 케이스 테스트 반영).
|
||||
- P3 실패 복구 표준화: 구현 완료 수준(unknown-tool/권한/정체/fork 강제 흐름 반영).
|
||||
- P4 완료 품질 정렬: 구현 완료 수준(게이트 로직 + 벤치마크 기준 문서화 완료).
|
||||
|
||||
## 7. 스킬/도구 운영 점검 (2026-04-03)
|
||||
- 도구 레지스트리 등록 수: 65개 (`ToolRegistry.CreateDefault()` 기준).
|
||||
- `IAgentTool` 구현 수: 65개. 동적 MCP 래퍼(`McpTool`)는 런타임 등록 구조로 정상.
|
||||
- 내장 스킬 파일 수: 40개 (`src/AxCopilot/skills/*.skill.md`).
|
||||
- `allowed-tools` 적용 스킬: 40/40.
|
||||
- `requires: python` 고정 의존 스킬: 0개(기존 10개에 Python 가능/불가 분기 fallback 경로 반영).
|
||||
- 레거시 도구명 `process_run` 참조: 0건 (`process`로 정규화).
|
||||
- 레거시 도구명 `grep_tool` 참조: 0건 (`grep`로 정규화).
|
||||
- 내부 모드 차단 정책: `http_tool` 전면 차단, `open_external`의 외부 URL 차단.
|
||||
- 테스트 상태: `dotnet test` 374/374 통과.
|
||||
|
||||
## 8. OpenCode 소스 직접 비교 결과 (2026-04-03)
|
||||
- 비교 기준 소스: `OpenCode/.../src/tools.ts`, `src/Tool.ts`, `src/skills/loadSkillsDir.ts`, `src/skills/bundled/*.ts`.
|
||||
- OpenCode 도구 상수명: 41개 (`*_TOOL_NAME` 기준).
|
||||
- AX 도구명: 65개 (`IAgentTool.Name` 기준).
|
||||
- OpenCode 도구명 중 AX alias로 직접 해석되는 항목: 8개 (`Bash/Read/Write/Edit/Glob/Grep/WebFetch/WebSearch`).
|
||||
- 미해석 항목(33개)은 대부분 제품 철학 차이 영역(예: `EnterPlanMode`, `ExitWorktree`, `TeamCreate`, `TodoWrite`, `ToolSearch`, `REPL`, `Cron*`).
|
||||
- OpenCode 번들 스킬은 코드 등록형 14개(`registerBundledSkill`)이며, AX는 파일 기반 스킬 40개(`*.skill.md`) 중심 구성.
|
||||
- 번들 스킬 이름 교집합은 0개이며(의도된 차별화), 품질 기준은 "이름 일치"가 아니라 "동작 등가(계획/복구/검증/권한/세션 내구성)"로 판단해야 함.
|
||||
- OpenCode 스킬 메타데이터는 `allowedTools`, `whenToUse`, `model`, `disableModelInvocation`, `userInvocable`, `hooks`, `context`, `agent`, `paths`, `effort`, `shell`까지 지원.
|
||||
- AX 스킬 메타데이터는 `allowed-tools`, `when_to_use`, `argument-hint`, `model`, `disable-model-invocation`, `user-invocable`, `context`, `agent`, `effort`, `paths`, `shell`, `hooks`, `hook_filters`까지 런타임 연계 확장 완료.
|
||||
|
||||
## 9. OpenCode 비교 기반 즉시 보완 항목 (반영 상태)
|
||||
1. 스킬 frontmatter 확장: `when_to_use`, `argument-hint`, `model`, `disable-model-invocation`, `user-invocable`, `context`, `agent`, `effort`, `paths`, `shell` 반영 완료.
|
||||
2. 스킬 실행 범위 제어: `paths` 기반 조건부 활성화 반영 완료(첨부 파일 경로 매칭 시 동적 활성화).
|
||||
3. 도구 별칭 정규화: OpenCode 기본 도구명군(`WebFetch`, `WebSearch`, `AskUserQuestion`, `LSP`, `ListMcpResourcesTool` 등) AX 내부 도구명으로 매핑 반영 완료.
|
||||
4. 반영 완료(2026-04-03): `hooks`/`hook_filters` 계약 확장 및 runtime hook 필터링(도구/타이밍 기준) 적용.
|
||||
5. 반영 완료(2026-04-03): 슬래시 스킬 실행 시 `context/agent/effort/model/disable-model-invocation/allowed-tools/hooks/hook_filters` 메타데이터를 런타임 정책 지시문으로 합성 적용.
|
||||
6. 반영 완료(2026-04-03): `permissionSetup` 비교 기반으로 위험 자동허용 가드 추가(`process`, `spawn_agent`, `snippet_runner`는 전역 `Auto`에서도 승인 단계 강제).
|
||||
|
||||
## 10. 전체 영역 동시 비교 기준 (누락 방지)
|
||||
1. 도구 계층: 도구 목록, 별칭 정규화, unknown-tool 복구, tool search/선택 정책.
|
||||
2. 스킬 계층: 로더, frontmatter, 번들/파일 기반 동시 운영, 조건부 활성화.
|
||||
3. 훅/권한: pre/post hook 계약, permission update 반영, ask/auto/deny 일관성.
|
||||
4. 세션/상태: run 복원, 이벤트 replay, 중복 이벤트 억제, resume 신뢰성.
|
||||
5. 계획/실행: plan 승인/수정 이력, 실행 게이트, 조기 완료 방지.
|
||||
6. MCP/외부도구: 연결/리소스 조회/읽기, 실패 복구, internal 모드 정책.
|
||||
7. 서브에이전트: spawn/wait 제약, read-only 모드, 결과 회수 구조.
|
||||
8. 운영/설정/UI 연동: 설정값-실행코드-UI 동기화, 탭별 분기(Cowork/Code) 일치.
|
||||
|
||||
## 11. 다음 적용 순서 (전체 영역 병렬 보정)
|
||||
1. 기본 Agentic loop E2E 시나리오(도구 실행/unknown-tool 복구)를 회귀 테스트로 고정.
|
||||
2. 벤치마크 합격 기준(시나리오/통과조건/증적)을 문서화하고 배포 체크리스트에 연결. (완료)
|
||||
3. 최종 마감 시 패리티 문서(수치/상태)와 로드맵 문서를 동기화. (진행 중)
|
||||
|
||||
## 12. 내부 벤치마크 기준 (고정)
|
||||
|
||||
| 시나리오 | 기준 테스트 | 합격 기준 |
|
||||
|---|---|---|
|
||||
| 기본 Agentic loop (도구 호출 → 완료) | `AgentLoopE2ETests.RunAsync_ExecutesToolCall_AndCompletesWithFinalText` | ToolCall/ToolResult/Complete 이벤트가 순서상 유효하고 최종 응답에 계산 결과 포함 |
|
||||
| unknown-tool 복구 | `AgentLoopE2ETests.RunAsync_UnknownTool_RecoversAndCompletes` | unknown 도구 오류 이벤트 후 완료까지 수렴, 반복 실패 루프 없음 |
|
||||
| Plan Mode 실행 연결 | `AgentLoopE2ETests.RunAsync_PlanModeAlways_EmitsPlanningThenExecutesTool` | 계획 응답 후 실제 도구 호출이 이어지고 최종 결과 생성 |
|
||||
| 권한 Ask 거부 처리 | `AgentLoopE2ETests.RunAsync_AskPermissionDenied_EmitsPermissionEvents_AndCompletes` | PermissionRequest/PermissionDenied 이벤트가 기록되고 안전 종료 |
|
||||
| Hook 입력 변형 반영 | `AgentLoopE2ETests.RunAsync_PreHookInputMutation_ChangesToolArguments` | pre-hook `updatedInput`이 실제 도구 입력에 적용됨 |
|
||||
| Runtime 정책(`allowed_tools`) 강제 | `AgentLoopE2ETests.RunAsync_DisallowedTool_ByRuntimePolicy_EmitsPolicyRecoveryError` | 비허용 도구 차단 + 정책 복구 경고 후 종료 |
|
||||
| Hook filter 정합성 | `AgentLoopE2ETests.RunAsync_HookFilters_ExecuteOnlyMatchingHookForToolAndTiming` | 지정된 hook만 실행되고 비매칭 hook는 미실행 |
|
||||
| OpenCode alias(`EnterPlanMode`) 정규화 | `AgentLoopE2ETests.RunAsync_EnterPlanModeAlias_ResolvesAndExecutes` | CamelCase 도구명이 AX 내부 snake_case 도구로 매핑되어 정상 실행 |
|
||||
| 혼합 복구 내구성 (unknown + 권한 + 대체도구) | `AgentLoopE2ETests.RunAsync_MixedRecovery_UnknownToolAndPermissionDenied_TerminatesSafely` | unknown-tool 오류 후 file_write 경유, math_eval로 수렴하고 반복 한도 내 안전 종료 |
|
||||
|
||||
### 벤치마크 배포 체크리스트 연결
|
||||
1. `dotnet build` 경고 0/오류 0.
|
||||
2. `dotnet test` 전체 통과 (`374/374` 기준, 증가 시 최신 값으로 동기화).
|
||||
3. 위 9개 시나리오의 회귀 테스트가 모두 통과.
|
||||
4. 패리티 수치/상태를 `NEXT_ROADMAP.md`와 동일 문구로 동기화.
|
||||
5. 릴리즈 전 게이트 스크립트 실행: `powershell -ExecutionPolicy Bypass -File .\scripts\release-gate.ps1`
|
||||
|
||||
### 실행 증적 (2026-04-03)
|
||||
- `dotnet test --filter "Suite=ParityBenchmark"`: 12/12 통과.
|
||||
- `powershell -ExecutionPolicy Bypass -File .\scripts\release-gate.ps1`: build/replay/full gate 통과.
|
||||
|
||||
## 13. 세션 Replay 안정성 기준 (고정)
|
||||
|
||||
| 시나리오 | 기준 테스트 | 합격 기준 |
|
||||
|---|---|---|
|
||||
| 실행 이벤트 정렬/압축 복원 | `ChatSessionStateServiceTests.LoadOrCreateConversation_NormalizesHistoryOrderAndCompactsSize` | ExecutionEvents 400개 상한 유지 + 시간순 정렬 유지 |
|
||||
| run 이력 중복 정규화 | `ChatSessionStateServiceTests.LoadOrCreateConversation_NormalizesAgentRunDuplicatesByRunId` | 동일 `RunId` 중복이 최신 상태 1건으로 축약 |
|
||||
| 동시각 이벤트 종결 우선 판정 | `TaskRunServiceTests.RestoreRecentFromExecutionEvents_PrefersTerminalEventsWhenTimestampsEqual` | Tool/Permission 상태가 terminal 이벤트 기준으로 복원 |
|
||||
| 비종결 이벤트 active 복원 | `TaskRunServiceTests.RestoreRecentFromExecutionEvents_RebuildsActiveTasksFromNonTerminalEvents` | 중단 후 재개 시 active task 3종(agent/tool/permission) 재구성 |
|
||||
| run 종료 시 dangling 정리 | `TaskRunServiceTests.RestoreRecentFromExecutionEvents_CompleteClearsDanglingRunScopedActiveTasks` | Complete 이후 run 스코프 active task 잔존 0건 |
|
||||
| 현재 run 복원 우선순위 | `AppStateServiceTests.RestoreCurrentAgentRun_PrefersRunningExecutionEventOverHistory` | 실행 중 이벤트가 history보다 우선되어 현재 run 복원 |
|
||||
| recent timeline 재구성 | `AppStateServiceTests.RestoreRecentTasks_RebuildsRecentTaskTimelineFromExecutionEvents` | 도구/권한/에이전트 최근 이력 순서 복원 |
|
||||
| 권한 거부 후 active 권한 상태 정리 | `AppStateServiceTests.RestoreRecentTasks_PermissionDeniedLeavesNoActivePermissionAfterResume` | PermissionDenied 이후 run 재개 시 active permission 잔존 0건 |
|
||||
| Hook 타임라인 역순 병합 정합성 | `AppStateServiceTests.ApplyAgentEvent_ReplaysHookTimelineInReverseChronologicalOrder` | Hook 이벤트가 역순 타임라인에서도 시간/의미 순서 보존 |
|
||||
| 완료 이벤트 우선 정리(병렬 도구) | `TaskRunServiceTests.RestoreRecentFromExecutionEvents_CompleteClearsParallelToolCallsForSameRun` | Complete 도착 시 동일 run의 병렬 도구 active task 즉시 정리 |
|
||||
|
||||
### 운영 규칙
|
||||
1. 위 시나리오는 `Suite=ReplayStability` 테스트 태그로 관리.
|
||||
2. 릴리즈 전 `Suite=ReplayStability` 전건 통과를 replay 불일치 0건의 최소 조건으로 사용.
|
||||
|
||||
### 실행 증적 (2026-04-03)
|
||||
- `dotnet test --filter "Suite=ReplayStability"`: 12/12 통과.
|
||||
- `powershell -ExecutionPolicy Bypass -File .\scripts\release-gate.ps1`: `ReplayStability` 포함 게이트 통과.
|
||||
|
||||
## 14. 권한 Hook 계약 (P2 마감 기준)
|
||||
- lifecycle hook 키:
|
||||
- `__permission_request__` (pre)
|
||||
- `__permission_granted__` (post)
|
||||
- `__permission_denied__` (post)
|
||||
- payload 기준 필드: `runId`, `tool`, `target`, `permission`, `granted`, `reason`.
|
||||
- 우선순위:
|
||||
1. Hook `updatedPermissions`가 현재 run의 `AgentContext.ToolPermissions`를 즉시 갱신.
|
||||
2. 갱신 후 `context.CheckToolPermissionAsync()`로 최종 판정.
|
||||
3. hook 실패/예외는 non-blocking(권한 흐름 지속).
|
||||
4. `additionalContext`는 가능한 경로에서 메시지 컨텍스트로 반영.
|
||||
|
||||
101
docs/TOOL_COVERAGE_REPORT.md
Normal file
101
docs/TOOL_COVERAGE_REPORT.md
Normal file
@@ -0,0 +1,101 @@
|
||||
# 도구 / 슬래시 커버리지 현황
|
||||
|
||||
업데이트: 2026-04-15 18:20 (KST)
|
||||
|
||||
## 1. 요약
|
||||
- AX slash count: 85
|
||||
- 공통 핵심 명령 수: 7
|
||||
- AX 확장 명령 수: 78
|
||||
|
||||
## 2. 공통 핵심 명령
|
||||
- `/clear`
|
||||
- `/exit`
|
||||
- `/help`
|
||||
- `/init`
|
||||
- `/mcp`
|
||||
- `/memory`
|
||||
- `/permissions`
|
||||
|
||||
## 3. AX 확장 명령
|
||||
- `/add-dir`
|
||||
- `/advisor`
|
||||
- `/agents`
|
||||
- `/allowed-tools`
|
||||
- `/branch`
|
||||
- `/btw`
|
||||
- `/build`
|
||||
- `/chrome`
|
||||
- `/color`
|
||||
- `/commit`
|
||||
- `/compact`
|
||||
- `/config`
|
||||
- `/context`
|
||||
- `/copy`
|
||||
- `/cost`
|
||||
- `/desktop`
|
||||
- `/diff`
|
||||
- `/doctor`
|
||||
- `/effort`
|
||||
- `/explain`
|
||||
- `/export`
|
||||
- `/fast`
|
||||
- `/feedback`
|
||||
- `/files`
|
||||
- `/fix`
|
||||
- `/heapdump`
|
||||
- `/hooks`
|
||||
- `/ide`
|
||||
- `/init-verifiers`
|
||||
- `/install-github-app`
|
||||
- `/install-slack-app`
|
||||
- `/keybindings`
|
||||
- `/login`
|
||||
- `/logout`
|
||||
- `/mobile`
|
||||
- `/model`
|
||||
- `/new`
|
||||
- `/output-style`
|
||||
- `/passes`
|
||||
- `/plan`
|
||||
- `/plugin`
|
||||
- `/pr`
|
||||
- `/pr-comments`
|
||||
- `/privacy-settings`
|
||||
- `/rate-limit-options`
|
||||
- `/release-notes`
|
||||
- `/reload-plugins`
|
||||
- `/remote-env`
|
||||
- `/rename`
|
||||
- `/reset`
|
||||
- `/resume`
|
||||
- `/review`
|
||||
- `/rewind`
|
||||
- `/sandbox-toggle`
|
||||
- `/search`
|
||||
- `/security-review`
|
||||
- `/session`
|
||||
- `/settings`
|
||||
- `/skills`
|
||||
- `/stats`
|
||||
- `/status`
|
||||
- `/statusline`
|
||||
- `/stickers`
|
||||
- `/structure`
|
||||
- `/summary`
|
||||
- `/tag`
|
||||
- `/tasks`
|
||||
- `/terminal-setup`
|
||||
- `/test`
|
||||
- `/theme`
|
||||
- `/thinkback`
|
||||
- `/thinkback-play`
|
||||
- `/translate`
|
||||
- `/ultrareview`
|
||||
- `/upgrade`
|
||||
- `/usage`
|
||||
- `/verify`
|
||||
- `/vim`
|
||||
|
||||
## 4. 메모
|
||||
- AX source baseline: `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- 이 문서는 비교 보고서가 아니라 현재 AX가 제공하는 명령 범위와 공통 핵심 명령을 확인하기 위한 운영 문서입니다.
|
||||
@@ -1,105 +0,0 @@
|
||||
# Tool/Slash Parity Report
|
||||
|
||||
Generated: 2026-04-04 02:06:25
|
||||
|
||||
## Summary
|
||||
- AX slash count: 85
|
||||
- OpenCode slash count: 7
|
||||
- Common: 7
|
||||
- AX only: 78
|
||||
- OpenCode only: 0
|
||||
|
||||
## Common
|
||||
- /clear
|
||||
- /exit
|
||||
- /help
|
||||
- /init
|
||||
- /mcp
|
||||
- /memory
|
||||
- /permissions
|
||||
|
||||
## AX Only
|
||||
- /add-dir
|
||||
- /advisor
|
||||
- /agents
|
||||
- /allowed-tools
|
||||
- /branch
|
||||
- /btw
|
||||
- /build
|
||||
- /chrome
|
||||
- /color
|
||||
- /commit
|
||||
- /compact
|
||||
- /config
|
||||
- /context
|
||||
- /copy
|
||||
- /cost
|
||||
- /desktop
|
||||
- /diff
|
||||
- /doctor
|
||||
- /effort
|
||||
- /explain
|
||||
- /export
|
||||
- /fast
|
||||
- /feedback
|
||||
- /files
|
||||
- /fix
|
||||
- /heapdump
|
||||
- /hooks
|
||||
- /ide
|
||||
- /init-verifiers
|
||||
- /install-github-app
|
||||
- /install-slack-app
|
||||
- /keybindings
|
||||
- /login
|
||||
- /logout
|
||||
- /mobile
|
||||
- /model
|
||||
- /new
|
||||
- /output-style
|
||||
- /passes
|
||||
- /plan
|
||||
- /plugin
|
||||
- /pr
|
||||
- /pr-comments
|
||||
- /privacy-settings
|
||||
- /rate-limit-options
|
||||
- /release-notes
|
||||
- /reload-plugins
|
||||
- /remote-env
|
||||
- /rename
|
||||
- /reset
|
||||
- /resume
|
||||
- /review
|
||||
- /rewind
|
||||
- /sandbox-toggle
|
||||
- /search
|
||||
- /security-review
|
||||
- /session
|
||||
- /settings
|
||||
- /skills
|
||||
- /stats
|
||||
- /status
|
||||
- /statusline
|
||||
- /stickers
|
||||
- /structure
|
||||
- /summary
|
||||
- /tag
|
||||
- /tasks
|
||||
- /terminal-setup
|
||||
- /test
|
||||
- /theme
|
||||
- /thinkback
|
||||
- /thinkback-play
|
||||
- /translate
|
||||
- /ultrareview
|
||||
- /upgrade
|
||||
- /usage
|
||||
- /verify
|
||||
- /vim
|
||||
|
||||
## OpenCode Only
|
||||
|
||||
## Notes
|
||||
- OpenCode source baseline: OpenCode/en/quickstart.md
|
||||
- AX source baseline: src/AxCopilot/Views/ChatWindow.xaml.cs
|
||||
@@ -1,523 +0,0 @@
|
||||
# Claw Code Parity Plan (Rewritten)
|
||||
|
||||
## Scope
|
||||
- Align AX Copilot with claw-code quality for loop reliability, permission/hook behavior, and session durability.
|
||||
|
||||
## Update
|
||||
- Updated: 2026-04-05 15:34 (KST)
|
||||
- Rebased the AX Agent improvement plan on actual `claw-code` runtime files instead of earlier AX snapshots. The reference spine is now `src/bootstrap/state.ts -> src/bridge/initReplBridge.ts -> src/bridge/sessionRunner.ts -> src/screens/REPL.tsx -> src/components/Messages.tsx -> src/components/StatusLine.tsx`.
|
||||
- AX Agent work should follow that same quality order: state first, execution second, render last. UI-only fixes that bypass state/execution should be treated as temporary.
|
||||
- Updated: 2026-04-05 16:55 (KST)
|
||||
- Current estimated parity vs `claw-code`: core execution engine `82%`, main chat UI `68%`, Cowork/Code status UX `63%`, internal settings linkage `88%`, overall AX Agent `74%`.
|
||||
- Engine-affecting settings should be handled conservatively during parity work. If a setting changes the main execution route, approval flow, or recovery behavior without representing a stable real-world user choice, it should be moved to developer-only UI or removed from user-facing surfaces.
|
||||
- Updated: 2026-04-06 09:36 (KST)
|
||||
- Progressed the maintainability track by moving runtime strip styling into `OperationalStatusPresentationCatalog.cs`, expanding permission/tool-result transcript catalogs with typed descriptions, and removing the stale plan-mode presentation branch from permission UI surfaces. The next structural focus remains footer/status/composer presentation slimming and regression ritual enforcement.
|
||||
- Updated: 2026-04-06 09:44 (KST)
|
||||
- Continued the maintainability track by splitting mixed inline interaction rendering into `ChatWindow.UserAskPresentation.cs` and `ChatWindow.PlanApprovalPresentation.cs`. This reduces message-type coupling inside the main window and keeps the next focus on footer/composer presentation and regression-routine formalization.
|
||||
- Updated: 2026-04-06 09:58 (KST)
|
||||
- Continued the maintainability track by splitting Git branch popup and footer-adjacent summary helpers into `ChatWindow.GitBranchPresentation.cs`, leaving `ChatWindow.FooterPresentation.cs` focused on folder bar state and preset-guide sync only.
|
||||
- Formalized the regression ritual in `docs/AX_AGENT_REGRESSION_PROMPTS.md` by adding failure classes (`blank-reply`, `duplicate-banner`, `bad-approval-flow`, `queue-drift`, `restore-drift`, `status-noise`) and required prompt bundles per change area.
|
||||
- Updated: 2026-04-06 10:07 (KST)
|
||||
- Continued the maintainability track by moving topic preset rendering, custom preset context menus, and topic-selection application flow into `ChatWindow.TopicPresetPresentation.cs`. This reduces mixed preset UI logic inside `ChatWindow.xaml.cs` and keeps the main window closer to orchestration-only responsibility.
|
||||
- Updated: 2026-04-06 11:52 (KST)
|
||||
- Continued the tool/permission/skill sophistication track by expanding AX presentation catalogs toward `claw-code` specificity. `PermissionRequestPresentationCatalog.cs` now models action-level permission kinds plus severity/action hints, `ToolResultPresentationCatalog.cs` now models `approval_required`/`partial` result states plus follow-up guidance, and the AX skill gallery now exposes runtime-policy metadata that was previously hidden.
|
||||
|
||||
## Preserved History (Summary)
|
||||
- Core loop guards and post-tool verification gates are already partially implemented.
|
||||
- Plan Mode, parallel tool execution, and unknown-tool recovery are in place.
|
||||
- Session restore hardening is ongoing.
|
||||
|
||||
## Reference Map
|
||||
|
||||
| claw-code reference | AX apply target | completion criteria | quality criteria |
|
||||
|---|---|---|---|
|
||||
| `src/bootstrap/state.ts` | `src/AxCopilot/Views/ChatWindow.xaml.cs`, `src/AxCopilot/Services/Agent/AxAgentExecutionEngine.cs`, `src/AxCopilot/Services/ChatStorageService.cs` | one canonical runtime/session state for current turn, queue, retry, execution events, and persisted snapshot | reopen/retry/queue flows do not create duplicate or blank assistant messages |
|
||||
| `src/bridge/initReplBridge.ts` | `src/AxCopilot/Services/Agent/AxAgentExecutionEngine.cs`, `src/AxCopilot/Services/LlmService.cs` | send/regenerate/retry/queued follow-up/slash all enter through one prepared-execution path | same input under same settings takes same execution route regardless of entry point |
|
||||
| `src/bridge/sessionRunner.ts` | `src/AxCopilot/Services/Agent/AgentLoopService.cs`, `src/AxCopilot/Services/Agent/AgentLoopTransitions.cs`, `src/AxCopilot/Services/Agent/AgentLoopTransitions.Execution.cs` | tool start/result/error/progress normalized once inside loop layer | Cowork/Code no longer flash repeated status strings or overshare debug payloads |
|
||||
| `src/bridge/bridgeMessaging.ts` | `src/AxCopilot/Views/ChatWindow.xaml.cs`, `src/AxCopilot/Services/Agent/AgentLoopService.cs` | inbound execution events separated from display-only events before UI render | execution event replay does not duplicate visible timeline banners |
|
||||
| `src/screens/REPL.tsx` | `src/AxCopilot/Views/ChatWindow.xaml`, `src/AxCopilot/Views/ChatWindow.xaml.cs` | screen state transitions, queue flow, retry flow, and composer state use shared runtime helpers | window resize, queue chaining, and retry feel stable instead of UI-patched |
|
||||
| `src/components/Messages.tsx` | `src/AxCopilot/Views/ChatWindow.xaml.cs` | timeline derives from normalized conversation/session state only | no token-only completions, blank cards, or direct injected duplicates |
|
||||
| `src/components/StatusLine.tsx` | `src/AxCopilot/Views/ChatWindow.xaml`, `src/AxCopilot/Views/ChatWindow.xaml.cs` | status strip computed from debounced runtime state, not multiple imperative refresh calls | metadata stays lightweight and does not overpower message timeline |
|
||||
|
||||
## AX Agent Improvement Phases
|
||||
|
||||
### Phase A. Runtime State Canonicalization
|
||||
- Reference: `src/bootstrap/state.ts`
|
||||
- AX apply location: `src/AxCopilot/Views/ChatWindow.xaml.cs`, `src/AxCopilot/Services/Agent/AxAgentExecutionEngine.cs`, `src/AxCopilot/Services/ChatStorageService.cs`
|
||||
- Completion criteria:
|
||||
- `Chat`, `Cowork`, `Code` all update one shared runtime/session state model.
|
||||
- queue, retry, post-compaction, and execution-event state can be restored after reopen.
|
||||
- Quality criteria:
|
||||
- reopening a conversation reproduces the same visible timeline without extra assistant cards.
|
||||
- queue and execution badges remain in sync with the stored conversation.
|
||||
|
||||
### Phase B. Prepared Execution Unification
|
||||
- Reference: `src/bridge/initReplBridge.ts`
|
||||
- AX apply location: `src/AxCopilot/Services/Agent/AxAgentExecutionEngine.cs`, `src/AxCopilot/Services/LlmService.cs`
|
||||
- Completion criteria:
|
||||
- prompt stack assembly, execution mode choice, and final assistant commit are engine-owned.
|
||||
- send/regenerate/retry/queued follow-up/slash flows all call the same preparation API.
|
||||
- Quality criteria:
|
||||
- behavior is deterministic per tab/settings combination.
|
||||
- UI stops building different prompt stacks for the same conversation state.
|
||||
|
||||
### Phase C. AgentLoop Event Normalization
|
||||
- Reference: `src/bridge/sessionRunner.ts`, `src/bridge/bridgeMessaging.ts`
|
||||
- AX apply location: `src/AxCopilot/Services/Agent/AgentLoopService.cs`, `src/AxCopilot/Services/Agent/AgentLoopTransitions.cs`, `src/AxCopilot/Services/Agent/AgentLoopTransitions.Execution.cs`
|
||||
- Completion criteria:
|
||||
- loop events are normalized into bounded activity/event records before UI consumption.
|
||||
- permission requests, failure states, retries, and completion states use a stable event shape.
|
||||
- Quality criteria:
|
||||
- Cowork/Code no longer flash rapidly during long-running tool sequences.
|
||||
- file path/debug detail remains collapsed by default.
|
||||
|
||||
### Phase D. Timeline Render Parity
|
||||
- Reference: `src/screens/REPL.tsx`, `src/components/Messages.tsx`
|
||||
- AX apply location: `src/AxCopilot/Views/ChatWindow.xaml`, `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- Completion criteria:
|
||||
- assistant/user messages, execution logs, compact boundaries, and queue summaries are rendered from one derived timeline model.
|
||||
- direct imperative bubble injection is removed from normal send/regenerate/retry flows.
|
||||
- Quality criteria:
|
||||
- no blank assistant cards.
|
||||
- no token-only completion without visible content.
|
||||
- no duplicate event banners after re-render.
|
||||
|
||||
### Phase E. Composer and Status Strip Simplification
|
||||
- Reference: `src/screens/REPL.tsx`, `src/components/StatusLine.tsx`
|
||||
- AX apply location: `src/AxCopilot/Views/ChatWindow.xaml`, `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- Completion criteria:
|
||||
- composer height grows only on explicit line breaks.
|
||||
- status strip, queue summary, and runtime activity all use debounced runtime updates.
|
||||
- Chat/Cowork/Code share one responsive width calculation policy.
|
||||
- Quality criteria:
|
||||
- resizing feels natural.
|
||||
- composer does not keep growing after send.
|
||||
- metadata remains subordinate to the message timeline.
|
||||
|
||||
### Phase F. Recovery, Resume, and Verification
|
||||
- Reference: `src/bootstrap/state.ts`, `src/bridge/sessionRunner.ts`, `src/screens/REPL.tsx`
|
||||
- AX apply location: `src/AxCopilot/Views/ChatWindow.xaml.cs`, `src/AxCopilot/Services/Agent/AxAgentExecutionEngine.cs`, `src/AxCopilot/Services/ChatStorageService.cs`
|
||||
- Completion criteria:
|
||||
- reopen after interruption keeps queue, runtime summary, and latest visible assistant state consistent.
|
||||
- retry-last and regenerate do not depend on mutating `InputBox.Text`.
|
||||
- all three tabs pass reopen/retry/manual compact/manual stop/manual resume scenarios.
|
||||
- Quality criteria:
|
||||
- stored conversation and rendered conversation stay identical after restore.
|
||||
- final reopened state matches the last completed runtime state.
|
||||
|
||||
## Execution Tracks
|
||||
1. Hook contract parity
|
||||
- Structured hook output support (`updatedInput`, `updatedPermissions`, `additionalContext`).
|
||||
- Runtime gating through settings toggles.
|
||||
|
||||
2. Session/state parity
|
||||
- Deterministic run resume rules.
|
||||
- Stable jsonl event schema + replay compatibility.
|
||||
|
||||
3. Recovery parity
|
||||
- Failure-type classification and standardized retry guidance.
|
||||
- Reduced repeated wrong-tool loops.
|
||||
|
||||
4. Completion parity
|
||||
- Evidence-based finalization criteria for code/document tasks.
|
||||
|
||||
## Done Criteria
|
||||
- Internal parity scenarios pass target threshold.
|
||||
- Resume/replay failures: zero.
|
||||
- `dotnet build` warnings/errors: zero.
|
||||
|
||||
## Validation Matrix
|
||||
- Build: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\`
|
||||
- Manual scenario 1: Chat send -> answer visible -> retry -> regenerate -> reopen conversation
|
||||
- Manual scenario 2: Cowork tool run -> progress summary -> completion -> queue next request -> reopen
|
||||
- Manual scenario 3: Code task with execution log noise -> completion -> compact -> next turn -> reopen
|
||||
- Manual scenario 4: AX Agent internal settings change -> immediate runtime reflection without layout regression
|
||||
|
||||
## Canonical Prompt Set
|
||||
- Updated: 2026-04-05 22:04 (KST)
|
||||
- The following prompt set should be used for AX vs `claw-code` parity checks. The goal is not byte-identical output, but equivalent execution route, approval behavior, and artifact/result quality.
|
||||
- Operational checklist copy: `docs/AX_AGENT_REGRESSION_PROMPTS.md`
|
||||
|
||||
1. Chat basic answer
|
||||
- Prompt: `회의 일정 조정 메일을 정중한 한국어로 써줘`
|
||||
- Apply to: `Chat`
|
||||
- Verify: normal reply render, retry/regenerate stability, reopen durability
|
||||
|
||||
2. Chat long-form explanation
|
||||
- Prompt: `RAG와 fine-tuning 차이를 실무 관점으로 7가지로 설명해줘`
|
||||
- Apply to: `Chat`
|
||||
- Verify: long response rendering, compaction follow-up continuity
|
||||
|
||||
3. Cowork document task
|
||||
- Prompt: `신규 ERP 도입 제안서 초안을 작성해줘. 목적, 범위, 기대효과, 추진일정 포함`
|
||||
- Apply to: `Cowork`
|
||||
- Verify: topic/task preset routing, plan-first execution, actual document-oriented output path
|
||||
|
||||
4. Cowork data task
|
||||
- Prompt: `매출 CSV를 분석해서 월별 추세와 이상치를 요약해줘`
|
||||
- Apply to: `Cowork`
|
||||
- Verify: data-analysis tool choice, reduced runtime noise, final summary quality
|
||||
|
||||
5. Code bug-fix task
|
||||
- Prompt: `현재 프로젝트에서 설정 저장 버그 원인 찾고 수정해줘`
|
||||
- Apply to: `Code`
|
||||
- Verify: read/search/edit path, diff persistence, reopen consistency
|
||||
|
||||
6. Code build/test task
|
||||
- Prompt: `빌드 오류를 재현하고 수정한 뒤 다시 빌드해줘`
|
||||
- Apply to: `Code`
|
||||
- Verify: build/test loop, failure retry, final completion message
|
||||
|
||||
7. Queued follow-up
|
||||
- Prompt sequence:
|
||||
- `이 창 레이아웃 문제 원인 찾아줘`
|
||||
- `끝나면 README도 같이 갱신해줘`
|
||||
- Apply to: `Cowork`, `Code`
|
||||
- Verify: queue chaining, next-turn pickup without UI mutation
|
||||
|
||||
8. Post-compaction continuity
|
||||
- Prompt: `지금까지 논의한 내용을 5줄로 이어서 정리하고 다음 작업 제안해줘`
|
||||
- Apply to: `Chat`, `Cowork`, `Code`
|
||||
- Verify: compact-after-next-turn continuity, no token-only completion
|
||||
|
||||
9. Permission approval
|
||||
- Prompt: `이 파일을 수정해서 저장해줘`
|
||||
- Apply to: `Code`
|
||||
- Verify: permission request, approve/reject rendering, final transcript consistency
|
||||
|
||||
10. Slash / skill entry
|
||||
- Prompt: `/bug-hunt src 폴더 잠재 버그 찾아줘`
|
||||
- Apply to: `Code`
|
||||
- Verify: slash entry uses the same prepared-execution route as normal send
|
||||
|
||||
## Tool / Skill Delta Snapshot
|
||||
- Updated: 2026-04-05 22:04 (KST)
|
||||
- AX tool registry count is larger than `claw-code`, but the shape is different.
|
||||
- AX reference: `src/AxCopilot/Services/Agent/ToolRegistry.cs`
|
||||
- `claw-code` reference: `src/tools/*`, `src/skills/bundledSkills.ts`
|
||||
|
||||
### AX stronger areas
|
||||
- Document/office generation and conversion (`ExcelSkill`, `DocxSkill`, `PptxSkill`, `DocumentPlannerTool`, `DocumentAssemblerTool`)
|
||||
- Data/business utilities (`DataPivotTool`, `SqlTool`, `FormatConvertTool`, `TextSummarizeTool`)
|
||||
- WPF-integrated enterprise UX and Korean workflow presets
|
||||
|
||||
### claw-code stronger areas
|
||||
- Transcript-native tool use / rejection / approval message taxonomy
|
||||
- Plan approval request/response rendering in the message stream
|
||||
- Permission and tool-result message consistency
|
||||
- Bundled skill registry and skill message integration
|
||||
|
||||
### Remaining parity target
|
||||
- Keep AX's richer business/document tool set
|
||||
- Bring transcript rendering and approval/status UX closer to `claw-code`
|
||||
|
||||
## Transcript-First Approval / Ask UX
|
||||
- Updated: 2026-04-05 18:58 (KST)
|
||||
- `plan approval` and `user ask` should both resolve inside the transcript first.
|
||||
- Secondary windows are allowed only as detail surfaces, not as the primary decision flow.
|
||||
- AX implementation status:
|
||||
- `plan approval`: transcript-first, detail view via `PlanViewerWindow`
|
||||
- `user ask`: transcript-first inline question card with choices / direct input / submit
|
||||
|
||||
## Tool / Skill UX Parity Follow-up
|
||||
- Updated: 2026-04-05 19:04 (KST)
|
||||
- Default transcript should prefer role-oriented badges and readable labels over raw internal tool names.
|
||||
- AX implementation status:
|
||||
- tool event badges: simplified to role-first labels
|
||||
- item naming: normalized into readable Korean labels or `/skill-name` style
|
||||
- observability panels: permission/background diagnostics reduced outside debug mode
|
||||
- Remaining quality target:
|
||||
- move more tool-result and permission-result presentation into smaller message-type-specific helpers, closer to `claw-code` component separation
|
||||
|
||||
## Focused Quality Tracks
|
||||
- Updated: 2026-04-06 09:27 (KST)
|
||||
- The remaining improvement work should now be managed in three parallel tracks so UX polish, runtime quality, and maintainability do not get mixed together.
|
||||
|
||||
### Track 1. User-Facing UI/UX Quality
|
||||
- Reference:
|
||||
- `src/components/Messages.tsx`
|
||||
- `src/components/MessageRow.tsx`
|
||||
- `src/components/StatusLine.tsx`
|
||||
- `src/components/PromptInput/PromptInput.tsx`
|
||||
- `src/components/PromptInput/PromptInputFooter.tsx`
|
||||
- `src/components/SessionPreview.tsx`
|
||||
- AX apply target:
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml`
|
||||
- `src/AxCopilot/Views/ChatWindow.MessageInteractions.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.StatusPresentation.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.FooterPresentation.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.PreviewPresentation.cs`
|
||||
- Focus:
|
||||
- keep transcript text dominant and metadata secondary
|
||||
- make footer controls read as a task bar, not a settings strip
|
||||
- unify preview surfaces, chooser popups, and approval cards under one visual language
|
||||
- reduce visual noise from queue/status/diagnostic surfaces unless the state is actionable
|
||||
- Completion criteria:
|
||||
- message rows, footer, preview, and inline approval/question cards feel visually coherent
|
||||
- chooser popups share the same spacing, hover behavior, and summary-row structure
|
||||
- footer/status elements appear only when they convey useful state
|
||||
- Quality criteria:
|
||||
- a user can understand “what is happening now” from the transcript and footer without opening extra panels
|
||||
- the interface remains readable under narrow widths without text clipping or layout jitter
|
||||
|
||||
### Track 2. LLM / Task Handling Quality
|
||||
- Reference:
|
||||
- `src/bootstrap/state.ts`
|
||||
- `src/bridge/initReplBridge.ts`
|
||||
- `src/bridge/sessionRunner.ts`
|
||||
- `src/components/messages/AssistantToolUseMessage.tsx`
|
||||
- `src/components/messages/PlanApprovalMessage.tsx`
|
||||
- `src/components/permissions/*`
|
||||
- AX apply target:
|
||||
- `src/AxCopilot/Services/Agent/AxAgentExecutionEngine.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentLoopService.cs`
|
||||
- `src/AxCopilot/Services/Agent/AgentTranscriptDisplayCatalog.cs`
|
||||
- `src/AxCopilot/Services/Agent/PermissionRequestPresentationCatalog.cs`
|
||||
- `src/AxCopilot/Services/Agent/ToolResultPresentationCatalog.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.InlineInteractions.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptPolicy.cs`
|
||||
- Focus:
|
||||
- keep all entry routes (`send`, `retry`, `regenerate`, `queue`, `slash`) on the same prepared execution path
|
||||
- distinguish `success / error / reject / cancel / needs-approval` tool results more clearly
|
||||
- keep plan approval and user-question flows transcript-native by default
|
||||
- minimize mismatches between execution state and what the user sees in the timeline
|
||||
- Completion criteria:
|
||||
- plan/permission/tool-result/question events all have consistent transcript-native lifecycles
|
||||
- reopen/retry/queue/compact flows preserve the same visible runtime state
|
||||
- tool failures and permission rejections are clearly distinguishable in transcript rendering
|
||||
- Quality criteria:
|
||||
- the same prompt under the same tab/settings uses the same execution route
|
||||
- users can tell whether the agent succeeded, failed, was blocked, or is waiting for approval without reading raw diagnostics
|
||||
|
||||
### Track 3. Maintainability / Extensibility Structure
|
||||
- Reference:
|
||||
- `src/components/*` split by role in `claw-code`
|
||||
- `src/components/messages/*`
|
||||
- `src/components/permissions/*`
|
||||
- `src/components/PromptInput/*`
|
||||
- AX apply target:
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.*.cs`
|
||||
- `src/AxCopilot/Services/AppStateService.cs`
|
||||
- `src/AxCopilot/Services/Agent/*.cs`
|
||||
- Focus:
|
||||
- continue shrinking `ChatWindow.xaml.cs` toward orchestration-only responsibility
|
||||
- keep renderer, popup, footer, message-interaction, status, and preview logic in dedicated partials
|
||||
- centralize presentation rules in catalogs/models instead of scattered UI string/visibility branches
|
||||
- prepare the codebase for new permission types, new tool classes, and new transcript card types without re-bloating the main window file
|
||||
- Completion criteria:
|
||||
- `ChatWindow.xaml.cs` owns orchestration and runtime coordination more than direct UI element construction
|
||||
- new message/permission/tool card types can be added via presentation catalogs or dedicated partials
|
||||
- runtime summary and footer/status visibility derive from presentation models rather than ad-hoc branching
|
||||
- Quality criteria:
|
||||
- adding a new tool-result or approval type should mostly affect one catalog/renderer area
|
||||
- future UI polish work should land in dedicated presentation files rather than expanding the main window file again
|
||||
|
||||
## Recommended Execution Order
|
||||
- Updated: 2026-04-06 09:27 (KST)
|
||||
1. Finish Track 2 consistency first whenever a UX issue is caused by runtime truth mismatch.
|
||||
2. Apply Track 1 visual cleanup only after the state/message lifecycle is stable for that surface.
|
||||
3. Fold each stable surface into Track 3 structure immediately so later changes do not reintroduce `ChatWindow.xaml.cs` sprawl.
|
||||
4. Keep validating against `docs/AX_AGENT_REGRESSION_PROMPTS.md` after each change set, especially for `plan / permission / queue / compact / reopen`.
|
||||
|
||||
## Current Snapshot
|
||||
- Updated: 2026-04-05 19:42 (KST)
|
||||
- Estimated parity:
|
||||
- Core engine: `89%`
|
||||
- Main transcript UI: `96%`
|
||||
- Cowork/Code runtime UX: `92%`
|
||||
- Internal settings linkage: `88%`
|
||||
- Overall AX Agent parity: `93%`
|
||||
|
||||
## Remaining Gaps
|
||||
1. Prompt lifecycle parity
|
||||
- `claw-code` reference: `src/utils/handlePromptSubmit.ts`, `src/utils/processUserInput/processTextPrompt.ts`
|
||||
- AX gap:
|
||||
- `send / retry / regenerate` are mostly unified, but `slash / compact 후 다음 턴 / 일부 queue 후처리`는 아직 `ChatWindow.xaml.cs`에서 UI 상태를 먼저 만지는 구간이 남아 있습니다.
|
||||
- 목표는 모든 입력 진입점이 `AxAgentExecutionEngine`의 동일한 prepare/execute/finalize 축만 타게 만드는 것입니다.
|
||||
|
||||
2. Plan / approval rendering parity
|
||||
- `claw-code` reference: `src/components/messages/PlanApprovalMessage.tsx`
|
||||
- AX gap:
|
||||
- 기본 transcript에서는 compact pill 위주로 줄였지만, 승인/계획 결과 표현이 아직 `Popup/Window + WPF 카드`와 섞여 있습니다.
|
||||
|
||||
## Quality Uplift Plan
|
||||
- Updated: 2026-04-06 00:22 (KST)
|
||||
- Goal: move AX Agent from parity-oriented stability into `claw-code`-grade maintainability and transcript quality, without copying implementation expression.
|
||||
|
||||
### Track 1. Transcript Renderer Decomposition
|
||||
- `claw-code` references:
|
||||
- `src/components/Messages.tsx`
|
||||
- `src/components/MessageRow.tsx`
|
||||
- `src/components/messages/AssistantToolUseMessage.tsx`
|
||||
- `src/components/messages/PlanApprovalMessage.tsx`
|
||||
- AX apply targets:
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- new partial/helper files under `src/AxCopilot/Views/`
|
||||
- Completion criteria:
|
||||
- `plan / permission / ask / tool-result / task-summary` rendering no longer lives as one large block inside `ChatWindow.xaml.cs`
|
||||
- each transcript concern has a dedicated helper/partial/class boundary
|
||||
- Quality criteria:
|
||||
- render changes for one message type do not regress unrelated timeline behavior
|
||||
- transcript behavior remains stable after reopen / retry / regenerate
|
||||
|
||||
### Track 2. Permission Presentation Catalog
|
||||
- `claw-code` references:
|
||||
- `src/components/permissions/PermissionRequest.tsx`
|
||||
- `src/components/permissions/PermissionDialog.tsx`
|
||||
- tool-specific permission request components under `src/components/permissions/*`
|
||||
- AX apply targets:
|
||||
- `src/AxCopilot/Services/Agent/PermissionModeCatalog.cs`
|
||||
- new `src/AxCopilot/Services/Agent/PermissionRequestPresentationCatalog.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- Completion criteria:
|
||||
- permission request title, subtitle, icon, severity, and choice set are resolved by tool/request type
|
||||
- file edit / shell / skill / ask-user / web-like permission requests use distinct presentation metadata
|
||||
- Quality criteria:
|
||||
- permission prompts feel explicit and predictable
|
||||
- user can distinguish request type without reading raw tool names or payload
|
||||
|
||||
### Track 3. Tool Result Message Taxonomy
|
||||
- `claw-code` references:
|
||||
- `src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx`
|
||||
- `src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx`
|
||||
- `src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx`
|
||||
- `src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx`
|
||||
- AX apply targets:
|
||||
- new `src/AxCopilot/Services/Agent/ToolResultPresentationCatalog.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.TranscriptPolicy.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- Completion criteria:
|
||||
- transcript display rules differ for `success / error / reject / cancel`
|
||||
- tool-result badges and summaries are resolved from presentation metadata instead of inline ad-hoc branches
|
||||
- Quality criteria:
|
||||
- result cards read as stable UX language, not raw execution logs
|
||||
- failed and rejected tool runs are visually distinct without increasing noise
|
||||
|
||||
### Track 4. Plan Approval Transcript-Only Flow
|
||||
- `claw-code` references:
|
||||
- `src/components/messages/PlanApprovalMessage.tsx`
|
||||
- `src/components/messages/UserPlanMessage.tsx`
|
||||
- AX apply targets:
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- `src/AxCopilot/Views/PlanViewerWindow.cs`
|
||||
- Completion criteria:
|
||||
- default approval / reject / revise flow completes inline in transcript
|
||||
- `PlanViewerWindow` is detail-only and never required for primary approval flow
|
||||
- Quality criteria:
|
||||
- planning feels like part of the conversation, not a modal interruption
|
||||
- approval history is replayable from persisted conversation state
|
||||
|
||||
### Track 5. Runtime Summary Layer
|
||||
- `claw-code` references:
|
||||
- `src/components/StatusLine.tsx`
|
||||
- `src/components/PromptInput/PromptInputFooter.tsx`
|
||||
- `src/bootstrap/state.ts`
|
||||
- AX apply targets:
|
||||
- `src/AxCopilot/Services/AppStateService.cs`
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- Completion criteria:
|
||||
- one runtime/status summary model feeds the status line, queue summary, runtime badge, and completion hint
|
||||
- status rendering no longer depends on scattered imperative refresh branches
|
||||
- Quality criteria:
|
||||
- no contradictory or stale runtime badges
|
||||
- long-running Cowork/Code sessions stay visually calm
|
||||
|
||||
### Track 6. Regression Prompt Ritual
|
||||
- `claw-code` references:
|
||||
- runtime validation scenarios implied by `sessionRunner`, `Messages`, `StatusLine`, and permission components
|
||||
- AX apply targets:
|
||||
- `docs/AX_AGENT_REGRESSION_PROMPTS.md`
|
||||
- `docs/claw-code-parity-plan.md`
|
||||
- developer workflow / release checklist
|
||||
- Completion criteria:
|
||||
- Chat / Cowork / Code prompt set is treated as mandatory regression for runtime-affecting changes
|
||||
- each prompt is mapped to a failure class (`blank reply`, `duplicate banner`, `bad approval flow`, `queue drift`, `restore drift`)
|
||||
- Quality criteria:
|
||||
- parity claims are based on repeatable checks instead of visual spot-checks
|
||||
- regressions are easier to catch before release
|
||||
|
||||
## Recommended Execution Order
|
||||
1. Transcript renderer decomposition
|
||||
2. Permission presentation catalog
|
||||
3. Tool result taxonomy
|
||||
4. Plan approval transcript-only flow
|
||||
5. Runtime summary layer
|
||||
6. Regression prompt ritual hardening
|
||||
|
||||
## Settings and Logic Review
|
||||
- Updated: 2026-04-06 00:22 (KST)
|
||||
- Candidate to move to developer-only:
|
||||
- `FreeTierDelaySeconds`
|
||||
- `MaxAgentIterations`
|
||||
- `MaxRetryOnError`
|
||||
- Keep as runtime-critical user settings:
|
||||
- `OperationMode`
|
||||
- `MaxContextTokens`
|
||||
- `ContextCompactTriggerPercent`
|
||||
- `EnableProactiveContextCompact`
|
||||
- `EnableCoworkVerification`
|
||||
- `EnableCodeVerification`
|
||||
- code tool exposure toggles
|
||||
- Rule:
|
||||
- if a setting changes the main execution route or recovery semantics without representing a stable real-world user choice, move it out of default user-facing surfaces
|
||||
- 목표는 “본문 우선 + 필요 시 열기” 기준으로 더 단일한 timeline 언어로 수렴시키는 것입니다.
|
||||
|
||||
3. Status line / composer parity
|
||||
- `claw-code` reference: `src/components/StatusLine.tsx`, `src/components/PromptInput/PromptInput.tsx`
|
||||
- AX gap:
|
||||
- 하단 상태바와 composer 옵션은 많이 줄었지만, 상태 메타가 여전히 분산돼 있고 일부 토글/빠른 설정이 별도 행으로 남아 있습니다.
|
||||
- 목표는 transcript 하단의 작업 바 한 축으로 더 압축하는 것입니다.
|
||||
|
||||
4. Runtime event density parity
|
||||
- `claw-code` reference: `src/bridge/sessionRunner.ts`, `src/components/StatusNotices.tsx`
|
||||
- AX gap:
|
||||
- non-debug 기본 로그는 줄었지만, 일부 Cowork/Code 이벤트는 여전히 timeline을 자주 흔듭니다.
|
||||
- 목표는 `permission / tool / error / complete / paused / resumed`를 더 안정된 event shape로 정규화하는 것입니다.
|
||||
|
||||
## Settings Review
|
||||
- Remove candidate:
|
||||
- `PlanMode`
|
||||
- current state: 사용자 노출 UI와 저장 경로는 `off` 고정으로 정리됐지만 `AppSettings`, `SettingsViewModel`, `AppStateService` 타입 잔재가 남아 있음
|
||||
- rationale: 현재 정책이 `off` 고정이라 사용자 선택값이 엔진에 의미 있게 기여하지 않음
|
||||
- `Code.EnablePlanModeTools`
|
||||
- current state: UI/저장 경로와 기본값은 `false` 고정으로 정리됐지만 모델/설정 타입에 호환용 잔재가 남아 있음
|
||||
- rationale: 현재 엔진 정책에서 실제 실행 경로를 더 이상 바꾸지 않음
|
||||
- Move to developer-only candidate:
|
||||
- `FreeTierDelaySeconds`
|
||||
- rationale: 일반 사용자가 조정할 이유가 적고 엔진 지연 정책에 직접 영향
|
||||
- `MaxAgentIterations`
|
||||
- `MaxRetryOnError`
|
||||
- rationale: 핵심 실행 루프 품질에 직접 영향하는 런타임 튜닝값
|
||||
- Keep as runtime-critical:
|
||||
- `OperationMode`
|
||||
- `MaxContextTokens`
|
||||
- `ContextCompactTriggerPercent`
|
||||
- `EnableProactiveContextCompact`
|
||||
- `EnableCoworkVerification`
|
||||
- `EnableCodeVerification`
|
||||
- `Code.EnableWorktreeTools / EnableTeamTools / EnableCronTools`
|
||||
|
||||
## Known UX / Performance Risks
|
||||
- Topic preset hover flicker was caused by duplicate hover systems:
|
||||
- custom hover label
|
||||
- default WPF `ToolTip`
|
||||
- AX fix:
|
||||
- remove default `ToolTip` from topic cards and keep a single hover label path
|
||||
- Remaining runtime performance review targets:
|
||||
- `RefreshContextUsageVisual()` frequency
|
||||
- `BuildTopicButtons()` rebuild frequency
|
||||
- `OnAgentEvent` timeline churn during long Cowork/Code runs
|
||||
- compact queue summary still needs one more pass to fully match `claw-code` footer minimalism
|
||||
|
||||
## Progress Notes
|
||||
- 업데이트: 2026-04-06 00:58 (KST)
|
||||
- transcript renderer 분리 1차 완료
|
||||
- AX 적용: [ChatWindow.InlineInteractions.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.InlineInteractions.cs), [ChatWindow.TaskSummary.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.TaskSummary.cs)
|
||||
- 완료 조건: `plan / ask / task-summary` 렌더 helper가 메인 `ChatWindow.xaml.cs` 밖으로 이동
|
||||
- permission / tool-result presentation catalog 도입
|
||||
- AX 적용: [PermissionRequestPresentationCatalog.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/PermissionRequestPresentationCatalog.cs), [ToolResultPresentationCatalog.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/ToolResultPresentationCatalog.cs)
|
||||
- 완료 조건: `AddAgentEventBanner(...)`가 권한/도구 결과 badge 메타를 inline switch가 아니라 catalog에서 해석
|
||||
- runtime summary 전용 계층 1차 반영
|
||||
- AX 적용: [AppStateService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/AppStateService.cs)
|
||||
- 완료 조건: 상태선 UI가 `OperationalStatusPresentationState`를 소비해 strip/runtime badge visibility를 계산
|
||||
Reference in New Issue
Block a user