From a315f587bf9ed52e1204a1f228d315b1c1326109 Mon Sep 17 00:00:00 2001 From: lacvet Date: Sun, 5 Apr 2026 16:44:35 +0900 Subject: [PATCH] =?UTF-8?q?AX=20Agent=20=EB=82=A8=EC=9D=80=20parity=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=EA=B3=BC=20=EC=84=A4=EC=A0=95=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC=20=EA=B8=B0=EC=A4=80=EC=9D=84=20=EB=AC=B8=EC=84=9C?= =?UTF-8?q?=ED=99=94=ED=95=98=EA=B3=A0=20=EC=B9=B4=EB=93=9C=20hover=20?= =?UTF-8?q?=EA=B9=9C=EB=B0=95=EC=9E=84=20=EC=88=98=EC=A0=95\n\n-=20claw-co?= =?UTF-8?q?de=20=EB=8C=80=EB=B9=84=20AX=20Agent=20=ED=95=B5=EC=8B=AC=20?= =?UTF-8?q?=EC=97=94=EC=A7=84/UI=20=EB=82=A8=EC=9D=80=20=EC=B0=A8=EC=9D=B4?= =?UTF-8?q?=EC=99=80=20=ED=98=84=EC=9E=AC=20=EC=B6=94=EC=A0=95=20=EC=A7=84?= =?UTF-8?q?=EC=B2=99=EC=9C=A8=EC=9D=84=20parity=20=EA=B3=84=ED=9A=8D=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=EC=97=90=20=EA=B8=B0=EB=A1=9D\n-=20PlanMode,?= =?UTF-8?q?=20FreeTierDelaySeconds,=20MaxAgentIterations,=20MaxRetryOnErro?= =?UTF-8?q?r=20=EB=93=B1=20=EB=9F=B0=ED=83=80=EC=9E=84=20=EC=98=81?= =?UTF-8?q?=ED=96=A5=20=EC=84=A4=EC=A0=95=EC=9D=98=20=EC=A0=9C=EA=B1=B0/?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C=EC=9E=90=20=EC=A0=84=EC=9A=A9=20=ED=9B=84?= =?UTF-8?q?=EB=B3=B4=EB=A5=BC=20=EC=A0=95=EB=A6=AC\n-=20=EC=9E=91=EC=97=85?= =?UTF-8?q?=EC=9C=A0=ED=98=95=20=EC=B9=B4=EB=93=9C=EC=97=90=EC=84=9C=20cus?= =?UTF-8?q?tom=20hover=20=EB=9D=BC=EB=B2=A8=EA=B3=BC=20=EA=B8=B0=EB=B3=B8?= =?UTF-8?q?=20ToolTip=EC=9D=B4=20=EC=B6=A9=EB=8F=8C=ED=95=B4=20=EB=B0=9C?= =?UTF-8?q?=EC=83=9D=ED=95=98=EB=8D=98=20=EA=B9=9C=EB=B0=95=EC=9E=84?= =?UTF-8?q?=EC=9D=84=20=EC=A0=9C=EA=B1=B0\n-=20README=EC=99=80=20DEVELOPME?= =?UTF-8?q?NT=20=EB=AC=B8=EC=84=9C=EC=97=90=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EC=9D=B4=EC=9C=A0=EC=99=80=20=EA=B2=80=EC=A6=9D=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=EB=A5=BC=20=EC=A6=89=EC=8B=9C=20=EB=B0=98=EC=98=81\n\?= =?UTF-8?q?n=EA=B2=80=EC=A6=9D=20=EA=B2=B0=EA=B3=BC\n-=20dotnet=20build=20?= =?UTF-8?q?src/AxCopilot/AxCopilot.csproj=20-c=20Release=20-v=20minimal=20?= =?UTF-8?q?-p:OutputPath=3Dbin\\verify\\=20-p:IntermediateOutputPath=3Dobj?= =?UTF-8?q?\\verify\\\n-=20=EA=B2=BD=EA=B3=A0=200=20/=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++ docs/DEVELOPMENT.md | 5 ++ docs/claw-code-parity-plan.md | 65 ++++++++++++++++++++++++++ src/AxCopilot/Views/ChatWindow.xaml.cs | 3 -- 4 files changed, 74 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 15699b2..4be9cad 100644 --- a/README.md +++ b/README.md @@ -907,6 +907,10 @@ ow + toggle 시각 언어로 통일했습니다. - 하단 컨텍스트 사용량 UI도 카드형에서 심볼형으로 바꿨습니다. [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 `TokenUsageCard` 는 작은 원형 심볼만 남기고, 상세 정보는 `TokenUsagePopup` 커스텀 팝업으로 분리했습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서는 hover 진입/이탈 시 팝업을 제어하고, `RefreshContextUsageVisual()` 이 심볼 상태와 팝업 텍스트를 함께 갱신하도록 연결했습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0 - 업데이트: 2026-04-05 19:38 (KST) +- `claw-code` 대비 AX Agent 남은 차이와 제거 후보 설정도 다시 정리했습니다. [docs/claw-code-parity-plan.md](/E:/AX%20Copilot%20-%20Codex/docs/claw-code-parity-plan.md)에 현재 추정 진척율(`core engine 89% / main UI 96% / runtime UX 92% / overall 93%`), 남은 엔진/UI 차이, 런타임 영향 설정 정리안을 기록했습니다. +- 같은 점검에서 작업유형 카드 hover 깜박임 원인은 `hover 라벨`과 기본 WPF `ToolTip`이 동시에 켜져 마우스가 카드 경계와 툴팁 사이를 오가며 상태가 흔들리는 구조로 확인됐습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서 프리셋/기타/프리셋 추가 카드의 기본 `ToolTip` 을 제거하고 hover 라벨만 남겨 깜박임을 줄였습니다. +- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0 +- 업데이트: 2026-04-05 19:42 (KST) --- diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 32d9a63..fa22667 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -4668,3 +4668,8 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎. - 같은 파일에 `_tokenUsagePopupCloseTimer`, `TokenUsageCard_MouseEnter/Leave`, `TokenUsagePopup_MouseEnter/Leave` 를 추가했고, `RefreshContextUsageVisual()` 은 이제 카드 텍스트 대신 popup 전용 타이틀/요약/압축 안내 텍스트를 갱신합니다. 기본 WPF 툴팁 문자열은 제거해 `Codex` 쪽의 아이콘 + hover 상세 구조에 더 가깝게 맞췄습니다. - 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0 - 업데이트: 2026-04-05 19:38 (KST) +- `claw-code` 대비 남은 차이와 설정 제거 후보를 다시 문서화했습니다. [docs/claw-code-parity-plan.md](/E:/AX%20Copilot%20-%20Codex/docs/claw-code-parity-plan.md)에 현재 추정 진척율을 `core engine 89% / main transcript UI 96% / Cowork·Code runtime UX 92% / overall 93%`로 기록하고, 남은 차이를 `prompt lifecycle`, `plan/approval render`, `status line/composer`, `runtime event density` 네 축으로 정리했습니다. +- 설정 검토 결과도 같은 문서에 남겼습니다. `PlanMode` 는 현재 `off` 고정 정책이라 `AppSettings`, `SettingsViewModel`, `AppStateService`, `AgentLoopService` 잔재를 제거 대상으로 분류했고, `FreeTierDelaySeconds`, `MaxAgentIterations`, `MaxRetryOnError` 는 일반 사용자 노출보다 개발자 전용으로 내리는 후보로 정리했습니다. +- 작업유형 카드 hover 깜박임도 원인을 확인해 즉시 보정했습니다. [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 `BuildTopicButtons()` 에서 프리셋/기타/프리셋 추가 카드의 기본 WPF `ToolTip` 할당을 제거해, custom hover 라벨과 기본 툴팁이 동시에 켜지며 깜박이던 구조를 정리했습니다. +- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0 +- 업데이트: 2026-04-05 19:42 (KST) diff --git a/docs/claw-code-parity-plan.md b/docs/claw-code-parity-plan.md index aa248a8..bd4d0da 100644 --- a/docs/claw-code-parity-plan.md +++ b/docs/claw-code-parity-plan.md @@ -121,3 +121,68 @@ - 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 + +## 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 카드`와 섞여 있습니다. + - 목표는 “본문 우선 + 필요 시 열기” 기준으로 더 단일한 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에서는 사실상 제거됐지만 `AppSettings`, `SettingsViewModel`, `AppStateService`, `AgentLoopService` 잔재가 남아 있음 + - rationale: 현재 정책이 `off` 고정이라 사용자 선택값이 엔진에 의미 있게 기여하지 않음 +- Move to developer-only candidate: + - `FreeTierDelaySeconds` + - rationale: 일반 사용자가 조정할 이유가 적고 엔진 지연 정책에 직접 영향 + - `MaxAgentIterations` + - `MaxRetryOnError` + - rationale: 핵심 실행 루프 품질에 직접 영향하는 런타임 튜닝값 +- Keep as runtime-critical: + - `OperationMode` + - `MaxContextTokens` + - `ContextCompactTriggerPercent` + - `EnableProactiveContextCompact` + - `EnableCoworkVerification` + - `EnableCodeVerification` + - `Code.EnablePlanModeTools / 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 diff --git a/src/AxCopilot/Views/ChatWindow.xaml.cs b/src/AxCopilot/Views/ChatWindow.xaml.cs index 4388b29..de29ac8 100644 --- a/src/AxCopilot/Views/ChatWindow.xaml.cs +++ b/src/AxCopilot/Views/ChatWindow.xaml.cs @@ -12221,7 +12221,6 @@ public partial class ChatWindow : Window contentGrid.Children.Add(hoverLabel); border.Child = contentGrid; - border.ToolTip = preset.Description; AttachTopicCardHover(border, hoverLabel, cardBackground, cardHoverBackground); // 클릭 → 해당 주제로 새 대화 시작 @@ -12319,7 +12318,6 @@ public partial class ChatWindow : Window etcGrid.Children.Add(etcStack); etcGrid.Children.Add(etcHoverLabel); etcBorder.Child = etcGrid; - etcBorder.ToolTip = "프리셋 없이 자유롭게 대화합니다"; AttachTopicCardHover(etcBorder, etcHoverLabel, cardBackground, cardHoverBackground); etcBorder.MouseLeftButtonDown += (_, _) => @@ -12398,7 +12396,6 @@ public partial class ChatWindow : Window addGrid.Children.Add(addStack); addGrid.Children.Add(addHoverLabel); addBorder.Child = addGrid; - addBorder.ToolTip = "새 작업 유형 카드를 직접 추가합니다"; AttachTopicCardHover(addBorder, addHoverLabel, Brushes.Transparent, cardHoverBackground); addBorder.MouseLeftButtonDown += (_, _) => ShowCustomPresetDialog(); TopicButtonPanel.Children.Add(addBorder);