라이브 진행 카드 자동 복구 로직 추가

메인 루프2 이후 Cowork/Code 실행 중 채팅창 상단 라이브 진행 카드가 transcript 재렌더링이나 이벤트 타이밍에 따라 사라지던 회귀를 수정했다.

- ChatWindow.LiveProgressPresentation에 EnsureAgentLiveCardVisible를 추가해 라이브 카드 컨테이너가 없거나 transcript에서 떨어졌을 때 즉시 재생성 및 재부착되도록 보강
- ChatWindow.xaml.cs에서 agent event 수신과 live hint 시작 시 eligible 탭이면 항상 라이브 카드 복구를 먼저 수행한 뒤 상태를 갱신하도록 정리
- ChatWindow.V2Rendering에서 부분/전체 렌더 재구성 후 _isStreaming 상태면 라이브 카드를 자동 복원하도록 변경
- README와 docs/DEVELOPMENT.md에 수정 배경, 적용 파일, 검증 결과를 2026-04-15 15:56 (KST) 기준으로 반영

검증:
- dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_live_card_guard\\ -p:IntermediateOutputPath=obj\\verify_live_card_guard\\ (경고 0 / 오류 0)
- dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ChatWindowSlashPolicyTests" -p:OutputPath=bin\\verify_live_card_guard_tests\\ -p:IntermediateOutputPath=obj\\verify_live_card_guard_tests\\ (통과 49)
This commit is contained in:
2026-04-15 15:58:40 +09:00
parent b055138b4a
commit 90f92ccee5
5 changed files with 41 additions and 8 deletions

View File

@@ -7,6 +7,13 @@ Windows 전용 시맨틱 런처 & 워크스페이스 매니저
개발 참고: Claw Code 동등성 작업 추적 문서
`docs/claw-code-parity-plan.md`
- 업데이트: 2026-04-15 15:56 (KST)
- 메인 루프2 이후 채팅창 바로 위 라이브 진행 카드가 다시 사라질 수 있던 경로를 보강했습니다. [ChatWindow.LiveProgressPresentation.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.LiveProgressPresentation.cs)에 `EnsureAgentLiveCardVisible(...)`를 추가해, Cowork/Code 실행 중 라이브 카드 컨테이너가 아직 없거나 transcript 재구성으로 빠졌을 때 즉시 재생성/재부착되도록 했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)는 agent event 수신과 live hint 시작 시 eligible 탭이면 위 helper를 먼저 호출한 뒤 상태를 갱신하도록 정리했습니다. 이로써 이벤트는 오는데 채팅창 바로 위 라이브 카드만 사라진 채 남는 회귀를 막습니다.
- [ChatWindow.V2Rendering.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.V2Rendering.cs)는 부분/전체 transcript 재렌더링 때 `_v2LiveContainer` 존재 여부에 의존하지 않고 `_isStreaming` 상태면 동일 helper를 호출해 라이브 카드를 자동 복원합니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_live_card_guard\\ -p:IntermediateOutputPath=obj\\verify_live_card_guard\\` 경고 0 / 오류 0
- 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "ChatWindowSlashPolicyTests" -p:OutputPath=bin\\verify_live_card_guard_tests\\ -p:IntermediateOutputPath=obj\\verify_live_card_guard_tests\\` 통과 49
- 업데이트: 2026-04-15 15:40 (KST)
- Code 탭의 실제 도구 실행 워크스페이스가 설정값의 `CodeWorkFolder`/`WorkFolder`로 고정되고, 현재 대화가 가진 `WorkFolder`와 어긋날 수 있던 문제를 수정했습니다. [AgentLoopService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/Agent/AgentLoopService.cs)는 새 `RuntimeWorkFolderOverride`를 통해 실행 턴마다 대화 기준 워크스페이스를 우선 사용하고, [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)는 `RunAgentLoopAsync(...)`에서 현재 conversation의 `WorkFolder`를 루프에 직접 주입합니다.
- 같은 기준을 권한 팝업에도 적용했습니다. 사내 모드에서 [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs)의 권한 안내 문구는 이제 `_currentConversation`의 우연한 상태가 아니라, 실제 실행 중인 탭 루프가 들고 있는 워크스페이스 override를 우선 기준으로 삼습니다. 그 결과 `지정한 워크스페이스 하위 경로는 무승인`, `그 외 경로만 승인` 규칙이 Code 탭에서도 Cowork와 같은 기준으로 맞춰집니다.