런처 Agent Compare 기능 1차 이식 및 현재 런처 구조 연결

- Agent Compare 기준으로 런처 빠른 실행 칩, 검색 히스토리 탐색, 선택 항목 미리보기 패널을 현재 런처에 이식
- 하단 위젯 바, QuickLook(F3), 화면 OCR(F4), 관련 서비스/partial 파일을 현재 LauncherWindow/LauncherViewModel 구조에 연결
- UsageRankingService 상위 항목 조회와 SearchHistoryService를 추가해 실행 상위 경로/검색 기록이 실제 런처 동작에 반영되도록 정리
- README.md, docs/DEVELOPMENT.md에 이식 범위와 검증 결과를 2026-04-05 11:58 (KST) 기준으로 기록

검증 결과
- dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ 경고 0 / 오류 0
This commit is contained in:
2026-04-05 11:51:43 +09:00
parent 0336904258
commit f7cafe0cfc
17 changed files with 2518 additions and 24 deletions

View File

@@ -1,5 +1,19 @@
# AX Copilot - 媛쒕컻 臾몄꽌
- Document update: 2026-04-05 07:11 (KST) - Simplified the AX Agent footer for Cowork/Code by removing the duplicated `MoodIconPanel` chip group from those tabs and leaving workspace context only in the main folder path row. Also removed the outline border from the data-usage button so the footer option strip reads flatter and less pill-heavy.
- Document update: 2026-04-05 07:08 (KST) - Improved AX Agent responsiveness in three hot paths: added an ordered meta cache in `ChatStorageService` so repeated conversation-list refreshes stop re-sorting the full meta set every time, short-circuited `SaveConversationSettings()` when permission/data-usage/mood/output-format values are unchanged, and debounced the sidebar conversation search refresh to avoid re-filtering on every keystroke.
- Document update: 2026-04-05 02:00 (KST) - Reworked the AX Agent in-chat gear overlay navigation itself to match the restored internal settings taxonomy: `basic / chat / cowork / code / dev / tools / skill-block`. The left nav labels now follow that scheme, and the overlay rows/toggles are regrouped per tab instead of the earlier `common / service / permission / advanced` split.
- Document update: 2026-04-05 01:46 (KST) - Corrected the AX Agent settings migration target after verifying that the in-chat gear icon opens `AgentSettingsOverlay` inside `ChatWindow`, not the standalone `AgentSettingsWindow`. Moved the missing advanced controls into the live overlay surface: project-rules toggle, agent-memory toggle, max agent iterations, and code tool toggles for plan/worktree/team/cron.
- Document update: 2026-04-05 01:40 (KST) - Extended the in-chat AX Agent settings window behind the internal gear icon so it now owns additional settings that previously remained in the main settings surface or quick overlay: default output format, default mood, project-rules toggle, agent-memory toggle, max agent iterations, and code tool toggles for plan/worktree/team/cron.
- Document update: 2026-04-05 01:40 (KST) - Reduced the bottom composer's capsule feel by tightening the corner radius on the footer option buttons, token usage card, glow border, and input container so the AX Agent footer reads as a denser rectangular control row.
- Document update: 2026-04-05 01:35 (KST) - Changed the AX Agent Cowork conversation filter from workspace/project grouping to task-type grouping so the sidebar dropdown, current label, and list filtering all follow the preset/category model used by Cowork topic cards.
- Document update: 2026-04-05 01:35 (KST) - Kept the Code tab on its prior workspace-based project filter to avoid collapsing code conversations into the Cowork task-type taxonomy.
- Document update: 2026-04-05 01:22 (KST) - Moved more of the hidden AX Agent settings surface into the in-chat internal settings window: tool exposure cards, hook management, skills folder path, slash popup size, drag-drop AI toggles, fallback model selection, and MCP server management are now available directly there.
- Document update: 2026-04-05 01:22 (KST) - Reduced the overly pill-shaped data-usage control in the chat bottom bar by switching its capsule border to a rounded rectangle, keeping the footer visuals closer to the rest of the AX Agent option row.
- Document update: 2026-04-05 01:15 (KST) - Audited the AX Agent internal settings save flow and removed direct mutation of the live settings object during pre-save tab interaction. Service/theme/display selections now stay local to the window until explicit save.
- Document update: 2026-04-05 01:15 (KST) - Restored persistence for the internal AX Agent window's missing save surfaces: `VllmAllowInsecureTls`, active-service model sync, and compatibility writes back to `Llm.Model` for the runtime resolver.
- Document update: 2026-04-05 01:12 (KST) - Restored the AX Agent in-chat settings classification toward the older hidden-tab layout. The internal settings window now follows the earlier `basic / chat / cowork / code / dev / tools / skill-block` navigation baseline instead of only the later flattened grouping.
- Document update: 2026-04-05 01:12 (KST) - Reconnected `AiEnabled` and `AgentUiExpressionLevel` persistence from the AX Agent internal settings window, and removed the normalization path that forcibly re-enabled AI after save so the restored toggle can persist again.
- Document update: 2026-04-05 00:58 (KST) - Compared the launcher implementation under `Agent Compare/AX Copilot` with the current AX Commander and imported the missing launcher handler set into the live app registration flow, excluding only the compare app's AI-coupled launcher handlers.
- Document update: 2026-04-05 00:58 (KST) - Added launcher-side support files for the imported feature set: quick-link/session/schedule/macro/SSH settings models, scheduler/tag/notification-history/icon-cache/url-template/pomodoro services, editor windows, launcher position persistence fields, and QR/OCR build dependencies.
- Document update: 2026-04-05 00:52 (KST) - Normalized the composer/footer wording so model, data-usage, permission, and Git branch surfaces read in the same status language instead of mixing short labels and raw values.
@@ -4112,3 +4126,349 @@ ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎.
- ?섎룞 `/compact`?€ ?꾩넚 ???먮룞 而⑦뀓?ㅽ듃 ?뺤텞??紐⑤몢 媛숈? `RecordCompactionStats(...)` 寃쎈줈瑜??ъ슜?섎룄濡?留욎떠, ?뺤텞 寃곌낵媛€ ?쇳쉶???곹깭 硫붿떆吏€?먮쭔 癒몃Ъ吏€ ?딄퀬 UI?먯꽌 ?ъ갭議?媛€?ν븯?꾨줉 ?뺣━?덈떎.
- ?대쾲 ?쇱슫?쒕???`claude-code`??compact ?뚯뒪瑜?湲곗??쇰줈 `session memory compaction ??microcompact ??context collapse/snip ??autocompact ??post-compaction 怨꾩륫` ?먮쫫??AX 湲곗?怨?鍮꾧탳 遺꾩꽍??以€鍮꾨? 吏꾪뻾?덈떎.
- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0)
### 2026-04-05 추가 진행 기록 (설정 메뉴 단순화)
- 업데이트: 2026-04-05 07:17 (KST)
- 별도 `AX Agent 설정` 창에서 `AX Agent 사용`, `표현 수준` 항목을 숨겨 기본 탭 상단에 불필요한 전역 토글과 표현 레벨 카드가 보이지 않도록 정리했습니다.
- AX Agent 내부 설정 오버레이에서도 `AX Agent 사용` 행을 숨겨, 톱니 설정 메뉴가 실제 작업 옵션 위주로 보이도록 맞췄습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (스킬 목록 복구)
- 업데이트: 2026-04-05 07:24 (KST)
- `Agent Compare` 기준으로 메인 `설정 > AX Agent`에만 남아 있던 스킬 목록 표시 흐름을 다시 확인하고, 별도 `AX Agent 설정` 창의 `스킬/차단` 탭에 로드된 스킬 카드 목록을 복구했습니다.
- 스킬 목록은 `SkillService`에서 읽은 현재 스킬을 내장/고급 그룹으로 나눠 보여주고, 저장 시 스킬 폴더 경로 기준으로 재로드해 즉시 반영되도록 맞췄습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (트레이 메뉴 오픈 지연 완화)
- 업데이트: 2026-04-05 07:39 (KST)
- `Agent Compare`의 트레이 메뉴 표시 경로와 현재 구현을 비교해, 현재판에서 메뉴를 띄울 때마다 `Show()``UpdateLayout()`로 실제 크기를 다시 확정하던 지점을 병목으로 확인했습니다.
- `TrayMenuWindow`는 메뉴 항목이 바뀔 때만 크기 캐시를 무효화하고, 우클릭 직전에는 보이기 전에 `Measure/Arrange`로 크기만 계산한 뒤 바로 위치를 잡아 표시하도록 변경했습니다.
- `App`에서는 트레이 메뉴 생성 직후 `ApplicationIdle` 우선순위로 `PrepareForDisplay()`를 호출해 첫 우클릭 이전에 레이아웃을 한 번 미리 준비하게 했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 설정 뒤로가기 위치 정리)
- 업데이트: 2026-04-05 07:45 (KST)
- AX Agent 내부 설정 오버레이의 `뒤로가기` 버튼이 오른쪽 본문 헤더에 따로 떠 있어 패널 접기/닫기 동작처럼 보이던 배치를 정리했습니다.
- 왼쪽 설정 네비 상단의 `설정 / AX Agent` 제목을 화살표가 붙은 하나의 뒤로가기 헤더 버튼으로 바꾸고, 기존 오른쪽 상단 버튼은 제거했습니다.
- 본문 `ScrollViewer`는 헤더 빈 줄 없이 바로 시작하도록 `Grid.RowSpan`과 패딩을 조정해 설정 진입 시 시선 흐름이 끊기지 않게 맞췄습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (사이드바 접기 버튼 Claude형 정리)
- 업데이트: 2026-04-05 07:49 (KST)
- AX Agent 상단 헤더 왼쪽의 사이드바 토글 버튼을 기존 큰 MDL2 아이콘 기반 고스트 버튼에서, 작은 라운드 사각 안에 3줄 메뉴가 들어간 Claude 계열 토글로 교체했습니다.
- 호버 시에는 외곽선과 선 색만 액센트로 바뀌도록 제한해 상단 바가 과하게 튀지 않게 했고, 버튼 크기도 30px 기준으로 맞춰 헤더 밀도를 정리했습니다.
- 코드비하인드에서 열림/닫힘마다 `ToggleSidebarIcon.Text`를 바꾸던 처리도 제거해, 새 버튼 구조와 상태 관리가 충돌하지 않도록 정리했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (Chat 상단 여백 및 압축 UI 분리)
- 업데이트: 2026-04-05 07:54 (KST)
- Chat 빈 상태 화면의 대표 아이콘이 상단 탭 메뉴와 너무 가까워 보이던 배치를 조정하기 위해, `EmptyState` 상단 스택의 마진을 늘려 시각 충돌을 줄였습니다.
- `RefreshContextUsageVisual()`에 탭 분기를 추가해 Chat에서는 `TokenUsageCard`를 바로 숨기고, Cowork/Code에서만 컨텍스트 사용량과 `압축` 버튼이 보이도록 정리했습니다.
- 이 변경으로 Chat 입력 하단은 더 단순해지고, 에이전트 작업 성격이 강한 Cowork/Code에서만 토큰 압축 UI가 유지됩니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (런처 하단 상태 문구 자동 숨김 보정)
- 업데이트: 2026-04-05 08:00 (KST)
- 런처 하단 `IndexStatusText`가 사라지지 않고 남는 사례를 추적한 결과, 인덱스 상태 표시와 토스트 오버레이가 같은 `_indexStatusTimer`를 공유해 서로의 자동 숨김 타이머를 덮어쓸 수 있는 구조를 확인했습니다.
- `LauncherWindow``_toastTimer`를 분리하고, 인덱스 재구축 시작/완료 문구는 `ShowIndexStatus(...)` 공통 경로로 묶어 상태 문구가 독립적으로 일정 시간 후 사라지도록 수정했습니다.
- 이 변경으로 캡처/복사/즐겨찾기 토스트가 뜨는 동안에도 하단 색인 상태 문구의 숨김 타이밍이 꼬이지 않습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (배포 스크립트 경로 정리 및 보호 상태 명시)
- 업데이트: 2026-04-05 08:14 (KST)
- 루트 [build.bat](/E:/AX%20Copilot%20-%20Codex/build.bat)을 전면 정리해, 현재 작업 디렉터리에 따라 상대 경로가 꼬이던 `dist`, `payload.zip`, 인스톨러 exe 복사 경로를 모두 `%~dp0` 기준 절대 경로로 고정했습니다.
- 배포 순서는 `AxCopilot publish -> 난독화 도구 확인 -> AxKeyEncryptor publish -> payload.zip 생성 -> AxCopilot.Installer build -> dist 메타데이터 정리`로 고정했고, 배치 파일은 `pause` 없이 자동 실행 환경에서도 종료되도록 수정했습니다.
- 보호 상태를 점검한 결과, 현재 레포에는 ConfuserEx / Dotfuscator / Babel / Eazfuscator / SmartAssembly 같은 외부 난독화 도구 연결이 없고, `Security/ObfuscationAttributes.cs`와 Release 메타데이터 제거 설정만 존재합니다.
- 따라서 현재 배포본은 `PDB/XML/debug metadata 제거` 수준의 보강만 적용되며, 진짜 디컴파일 방지는 아직 미구성 상태임을 스크립트 경고로 명확히 출력하게 했습니다.
- 검증: `cmd /c build.bat` 실행 기준 메인 앱 publish, `payload.zip` 생성, `AxCopilot.Installer` 빌드, `dist\AxCopilot_Setup.exe` 복사, dist 정리까지 정상 완료
### 2026-04-05 추가 진행 기록 (AX Agent 공통 항목 숨김 및 도움말 툴팁 복구)
- 업데이트: 2026-04-05 07:59 (KST)
- 메인 `설정 > AX Agent > 공통` 화면에서 사용자가 반복 요청한 `AX Agent 사용`, `표현 수준` 행이 실제로 남아 있던 경로를 다시 확인하고, 해당 `AgentSettingsRow` 두 줄을 `Visibility="Collapsed"`로 숨겼습니다.
- `SettingsWindow.xaml.cs``SettingsService.cs`에서는 `AgentUiExpressionLevel``rich`로 강제 정규화해, UI에서 표현 수준을 노출하지 않아도 내부 설명 밀도는 항상 `풍부하게` 기준으로 유지되도록 맞췄습니다.
- `SettingsWindow.xaml``HelpTooltipStyle`은 라이트 테마에서 흰 글자가 옅은 배경에 묻히던 문제를 피하도록 툴팁 배경을 진한 남색 계열로 고정하고, 전경색/텍스트 전경색을 흰색으로 통일했습니다.
- 이 변경으로 `응답 설정 > Temperature`, `PDF 내보내기 기본 경로`, `팁 알림 표시 시간`, 코드/도구/스킬 관련 `?` 도움말 라벨이 라이트/다크 테마 모두에서 같은 대비로 보입니다.
### 2026-04-05 추가 진행 기록 (런처 마지막 위치 기억 복구)
- 업데이트: 2026-04-05 07:59 (KST)
- `Agent Compare`와 현재판 설정/런처 코드를 대조해 빠져 있던 `Launcher.RememberPosition` 바인딩을 `SettingsViewModel``SettingsWindow`에 다시 연결했습니다.
- `LauncherWindow`는 표시 직전 저장된 좌표가 유효한 화면 범위 안에 있으면 그 위치를 복원하고, 창 이동 중에는 메모리 캐시만 갱신한 뒤 숨겨질 때 설정 파일에 마지막 좌표를 저장하도록 정리했습니다.
- 이 변경으로 `AX Commander`를 닫은 자리에서 다시 여는 비교본 동작이 현재판에서도 되살아났고, 드래그 중 매 프레임 저장하던 식의 불필요한 디스크 쓰기도 피했습니다.
### 2026-04-05 추가 진행 기록 (AX Agent 열기 실패 직접 원인 수정)
- 업데이트: 2026-04-05 08:02 (KST)
- 앱 로그(`%APPDATA%\AxCopilot\logs\app-2026-04-05.log`)를 확인한 결과, AX Agent 열기 실패의 직접 원인은 `ChatWindow` 초기화 시 `HelpTooltipStyle`을 찾지 못해 발생한 `XamlParseException`이었습니다.
- `ChatWindow.xaml`에는 `HelpTooltipStyle`을 참조하는 `?` 툴팁이 존재했지만, 해당 스타일은 메인 설정 창/별도 설정 창 내부에만 정의되어 있어 AX Agent 창 단독 생성 시 리소스 조회가 실패하고 있었습니다.
- [App.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/App.xaml)에 동일 스타일을 전역 리소스로 추가해, AX Agent/설정/오버레이가 공통으로 같은 툴팁 스타일을 찾도록 수정했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (도구/스킬 설명창을 AX Agent 내부 설정으로 복구)
- 업데이트: 2026-04-05 08:08 (KST)
- 메인 `설정 > AX Agent`에만 남아 있던 도구/스킬 설명 성격의 안내 블록이 AX Agent 내부 오버레이에는 비어 있던 상태를 확인하고, `ChatWindow` 내부 설정 오버레이에 설명 패널을 추가했습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml)의 `OverlayToolsInfoPanel`에는 훅 동작 흐름, 활용 예시, 안전 설계를 요약한 설명을 넣었고, `OverlayEtcInfoPanel`에는 스킬 파일 형식, 기본 폴더 경로, MCP/폴백 모델/드래그 드롭 관리 범위를 안내하는 설명을 복구했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `SetOverlaySection()`에서는 `도구` 탭일 때 도구 설명창만, `스킬/차단` 탭일 때 스킬 설명창만 보이도록 분기해 기존 탭 흐름을 유지했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 내부 설정 순환 버튼을 커스텀 콤보박스로 전환)
- 업데이트: 2026-04-05 08:15 (KST)
- AX Agent 내부 설정 오버레이에서 `Fast`, `의사결정 수준`, `실행 전 계획`, `권한 모드`, `기본 출력 형식`, `테마 스타일`, `운영 모드`, `폴더 데이터 활용`처럼 텍스트가 순환하던 버튼형 입력을 커스텀 콤보박스 기반으로 바꿨습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml)에 오버레이 전용 `OverlayComboBox` 스타일과 각 선택 항목용 `ComboBox`를 배치해, AX Agent 내부 설정이 claw-code식 순환 버튼보다 바로 값을 고르기 쉬운 구조가 되도록 정리했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서는 선택값 동기화 헬퍼(`SelectComboTag`, `PopulateOverlayMoodCombo`)와 오버레이 전용 `SelectionChanged` 핸들러를 추가해 기존 저장 경로를 그대로 재사용하도록 연결했습니다.
- `운영 모드`는 외부 모드로 바꿀 때 기존과 동일하게 비밀번호 확인을 유지하고, `권한 모드`는 글로벌 권한과 기본 에이전트 권한을 함께 맞추도록 저장 경로를 통일했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (코워크 좌측 필터 라벨 정리)
- 업데이트: 2026-04-05 08:18 (KST)
- 코워크 탭 좌측 패널의 상단 필터는 이미 작업 유형 기준으로 동작하고 있었지만, `SidebarCoworkMenu` 라벨만 예전 `워크스페이스` 문구가 남아 있어 의미가 어긋나 있었습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 코워크 메뉴 라벨을 `작업 유형`으로 바꿔, 실제 필터 동작과 표기 문구가 일치하도록 정리했습니다.
- Code 탭은 계속 워크스페이스 기준 필터를 사용하므로 기존 `워크스페이스` 표기를 유지했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (입력창 비대화 및 입력 중 깜빡임 완화)
- 업데이트: 2026-04-05 08:24 (KST)
- Code/Cowork 채팅 입력창에서 텍스트 입력 시 입력 영역이 비정상적으로 세로로 길어지고, 매 타이핑마다 컨텍스트/대기열 UI가 즉시 다시 그려지면서 화면이 번쩍이는 현상을 정리했습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 입력 영역 `Grid.RowDefinition` 마지막 행을 `*`에서 `Auto`로 바꾸고 `InputBox``VerticalAlignment="Top"`으로 고정해, 입력 행이 남는 세로 공간을 끌어먹지 않도록 수정했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에 `_inputUiRefreshTimer`를 추가하고 `InputBox_TextChanged()`에서는 무거운 `RefreshContextUsageVisual()` / `RefreshDraftQueueUi()`를 즉시 실행하지 않고 90ms 디바운스 후 반영하도록 변경했습니다.
- 이 변경으로 입력 즉시성은 유지하면서도, 토큰 사용량 카드와 대기열 카드의 재구성 빈도를 낮춰 입력 중 깜빡임과 렌더 흔들림을 줄였습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (모델 선택 팝업 중복 제어 제거)
- 업데이트: 2026-04-05 08:28 (KST)
- 모델/추론 빠른 설정 팝업 하단에 모델 리스트 아래 한 번 더 반복되던 모델 칩과, 다른 위치에서 이미 조정 가능한 `계획`, `권한` 빠른 버튼이 중복으로 노출되고 있었습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 `InlineModelChipPanel`을 숨기고 `BtnInlinePlanMode`, `BtnInlinePermission``Collapsed` 처리해, 팝업이 서비스/모델/추론 중심으로 더 단순하게 보이도록 정리했습니다.
- 팝업 상단 힌트 문구도 실제로 남아 있는 기능 기준에 맞춰 `서비스, 모델, 추론을 여기서 바로 바꿉니다`로 수정했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (프리셋 영역 스크롤바 자동 표시화)
- 업데이트: 2026-04-05 08:31 (KST)
- AX Agent 채팅 빈 상태 화면의 프리셋 카드 영역은 내용이 충분히 적어도 세로 스크롤바 자리와 여백이 고정처럼 보이는 상태였습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 프리셋 영역 `ScrollViewer``TopicPresetScrollViewer` 이름을 부여하고 기본 `VerticalScrollBarVisibility``Disabled`로 조정했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에 `UpdateTopicPresetScrollMode()`를 추가해, 프리셋 버튼 재구성 후와 창 크기 변경 시 `ExtentHeight``ViewportHeight`를 비교하고 실제로 넘칠 때만 세로 스크롤과 우측 패딩을 활성화하도록 만들었습니다.
- 이 변경으로 프리셋 카드가 정상 높이 안에 들어올 때는 스크롤바가 보이지 않고, 작은 창이나 프리셋이 많아지는 경우에만 자동으로 나타납니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (후속 요청 입력 미리보기 제거)
- 업데이트: 2026-04-05 08:34 (KST)
- AX Agent 입력창 위 `후속 요청` 카드는 사용자가 타이핑 중인 현재 입력을 실시간으로 그대로 미리 보여주고 있었는데, 실제 큐 적재 전에는 불필요한 중간 표시가 되는 상태였습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `RefreshDraftQueueUi()`에서 `DraftPreviewCard`를 상시 숨기고, 후속 요청은 엔터 입력 후 `QueueComposerDraft(...)`로 실제 큐에 적재된 다음 아래 대기열 목록에만 반영되도록 정리했습니다.
- 이 변경으로 타이핑 중 현재 입력이 상단 카드에 중복 표시되지 않고, 후속 요청은 실제로 쌓였을 때만 큐 UI에서 확인할 수 있습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (프리셋 카드 글자 잘림 보정 및 Code 탭 프리셋 숨김)
- 업데이트: 2026-04-05 08:37 (KST)
- AX Agent 빈 상태 프리셋 카드의 설명 텍스트가 카드 하단에서 잘리고 있었고, Code 탭에서도 프리셋 카드 영역이 그대로 보여 빈 상태 의미가 어색했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `BuildTopicButtons()`에서 프리셋 카드, `기타` 카드, `프리셋 추가` 카드 높이를 `108`에서 `116`으로 늘리고 설명 `TextBlock.MaxHeight``32`로 올려 글자 하단이 잘리지 않도록 보정했습니다.
- 같은 메서드에서 `_activeTab == "Code"`이면 `TopicButtonPanel``TopicPresetScrollViewer``Collapsed` 처리하고, 빈 상태 제목을 `코드 작업을 입력하세요`로 바꿔 Code 탭에서는 프리셋 기능이 보이지 않도록 정리했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 내부 설정 콤보를 메인 설정 스타일로 통일)
- 업데이트: 2026-04-05 08:40 (KST)
- AX Agent 내부 설정 오버레이의 콤보박스는 이전까지 기본 WPF 드롭다운에 가까운 모양이라, 메인 설정창의 커스텀 콤보와 시각 언어가 달랐습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에 `OverlayComboBoxToggle`, `OverlayComboBox`, `OverlayComboBoxItem` 템플릿/스타일을 추가해, 메인 [SettingsWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml) 의 `ModernComboBox` 패턴과 유사한 토글 버튼형 헤더, 슬라이드 드롭다운, 항목 호버/선택 스타일을 적용했습니다.
- 오버레이의 `서비스`, `모델`, `Fast`, `의사결정 수준`, `실행 전 계획`, `권한 모드`, `기본 출력 형식`, `테마 스타일`, `운영 모드`, `폴더 데이터 활용` 콤보가 모두 같은 커스텀 스타일로 표시되도록 정리했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 내부 설정 도움말 툴팁 복구)
- 업데이트: 2026-04-05 08:43 (KST)
- AX Agent 내부 설정 오버레이는 메인 설정창과 달리 `?` 도움말 배지가 대부분 빠져 있어, 항목 이름만 보고 동작 의미를 추측해야 하는 상태였습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에 `OverlayHelpBadge` 스타일을 추가하고, `HelpTooltipStyle`을 재사용해 AX Agent 오버레이 항목 옆에 동일한 시각 언어의 `?` 배지를 붙일 수 있도록 정리했습니다.
- 기본/공통 영역의 `서비스`, `모델`, `기본 서버 주소`, `API 키`, `테마 스타일`, `테마 모드`, `문서 형태`, `디자인 스타일`, `운영 모드`, `폴더 데이터 활용`, `압축 시작 한도(%)`, `최대 컨텍스트 토큰`, `오류 재시도 횟수`, `최대 Agent Pass`에 각각 툴팁 설명을 추가했습니다.
- 고급/개발자 영역의 `자동 대화 압축`, `확장 스킬 사용`, `실행 전후 자동 확장`, `입력 보정 반영`, `권한 변경 반영`, `Cowork 결과 검토`, `Code 결과 검토`, `도구 병렬 실행`, `프로젝트 규칙 자동 반영`, `에이전트 메모리 사용`, `Plan Mode 도구`, `Worktree 도구`, `Team 도구`, `Cron 도구`에도 상세 설명 툴팁을 연결했습니다.
- 이 변경으로 AX Agent 내부 설정에서 각 항목의 역할과 사용 시점을 메인 설정창처럼 마우스 오버만으로 바로 확인할 수 있습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 내부 설정 탭 구조 및 스킬/차단 패널 복구)
- 업데이트: 2026-04-05 08:51 (KST)
- AX Agent 내부 설정 오버레이는 중간 정리 과정에서 탭이 `공통/채팅/코워크/코드/개발자/도구/스킬/차단` 단순 구조로 축소됐고, 예전 버전에 있던 `코워크/코드` 공통 탭과 `스킬/차단` 실내용 패널이 빠진 상태였습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 좌측 네비를 `공통 / 채팅 / 코워크/코드 / 코워크 / 코드 / 개발자 / 도구 / 스킬/차단` 구조로 다시 확장하고, `스킬/차단` 탭 하단에 `차단 경로 패턴`, `차단 확장자`, `스킬 설정`, `로드된 스킬`, `폴백 모델`, `MCP 서버`, `등록된 도구/커넥터` 패널을 추가했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에 `RefreshOverlayEtcPanels()`, `BuildOverlayBlockedItems()`, `BuildOverlaySkillListPanel()`, `BuildOverlayFallbackModelsPanel()`, `BuildOverlayMcpServerCards()`, `BuildOverlayToolRegistryPanel()` 를 추가해, 오버레이 안에서 설정값과 런타임 상태가 바로 보이도록 복구했습니다.
- 같은 코드에서 `shared` 섹션 분기를 추가해 `코워크/코드` 공통 탭이 `Fast`, `의사결정 수준`, `실행 전 계획`, `권한 모드`, `폴더 데이터 활용`, `최대 Agent Pass` 같은 공통 항목을 함께 보여주도록 조정했습니다.
- `스킬/차단` 탭의 `슬래시 팝업 표시 개수`, `드래그 앤 드롭 AI 액션`, `드래그 앤 드롭 즉시 전송`도 오버레이 전용 컨트롤로 다시 노출하고 기존 설정 저장 경로와 연결했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 창 상단 최소화/최대화/닫기 버튼 시인성 개선)
- 업데이트: 2026-04-05 08:54 (KST)
- AX Agent [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 상단 우측 창 버튼은 일반 `GhostBtn`을 그대로 사용하고 있어, 사용자 가이드 창보다 버튼 간격이 좁고 아이콘이 작으며 호버 피드백이 약했습니다.
- 같은 파일에 `TitleBarActionButton`, `TitleBarCloseButton` 스타일을 추가해 버튼 크기를 `40x40`으로 확장하고, 버튼 사이 여백을 늘리고, 마우스 오버 시 살짝 확대되는 스케일 애니메이션과 호버 배경이 보이도록 템플릿을 분리했습니다.
- 닫기 버튼은 별도 `TitleBarCloseButton` 스타일을 적용해 호버 시 붉은 배경이 들어오도록 했고, 최소화/최대화 버튼도 아이콘 크기를 키워 창 제어 버튼이 더 명확하게 보이도록 맞췄습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 세 탭 채팅 폭 공통화)
- 업데이트: 2026-04-05 09:02 (KST)
- AX Agent의 `Chat / Cowork / Code` 탭은 하단 입력 바 래퍼가 `Center` 정렬과 내용 기반 측정에 묶여 있어, 탭마다 본문 폭과 composer 폭이 다르게 보이고 전체 채팅창이 작게 느껴지는 문제가 있었습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 빈 상태 영역과 하단 입력 바 래퍼에 공통 `Stretch + MaxWidth 1280` 기준을 적용하고, 컴포저 래퍼에 `ComposerShell` 이름을 부여해 세 탭이 같은 가로 폭 축을 사용하도록 조정했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `GetMessageMaxWidth()``MessageScroll.ActualWidth` 단독 비율 계산 대신 `ComposerShell.ActualWidth`를 우선 기준으로 사용하도록 바꿔, 사용자/어시스턴트 버블과 스트리밍 컨테이너가 탭과 빈 상태 여부에 상관없이 동일한 본문 폭 안에서 렌더되게 했습니다.
- 이 변경으로 Chat/Cowork/Code 전환 시 입력창과 메시지 본문이 같은 폭으로 보이고, 기존보다 더 넓은 레이아웃으로 유지됩니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 시작 직후 Style 예외 수정)
- 업데이트: 2026-04-05 09:06 (KST)
- AX Agent 창은 시작 직후 `System.Windows.FrameworkElement.Style` 설정 단계에서 `MS.Internal.NamedObject``Style`로 캐스팅하지 못하는 `XamlParseException`으로 바로 종료되고 있었습니다.
- 원인은 [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 `OverlayComboBox` 스타일 내부에서 `ItemContainerStyle`이 뒤에서 선언되는 `OverlayComboBoxItem``StaticResource`로 먼저 참조하던 forward reference였습니다.
- `ItemContainerStyle` 참조를 `DynamicResource OverlayComboBoxItem`으로 바꿔 런타임 리소스 해석 시점에 올바른 스타일이 연결되도록 수정했고, 같은 유형의 선참조 패턴이 더 없는 것도 추가로 확인했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (build.bat 실행 중 AX Copilot 프로세스 종료 확인 강화)
- 업데이트: 2026-04-05 09:13 (KST)
- 기존 [build.bat](/E:/AX%20Copilot%20-%20Codex/build.bat) 은 실행 중인 `AxCopilot.exe``taskkill /IM ... /F` 한 번만 호출하고 2초 뒤 바로 publish 단계로 넘어가고 있어, 프로세스가 완전히 내려가지 않았는데도 빌드가 이어지거나, 권한 문제로 종료 실패한 상태가 모호하게 보이는 문제가 있었습니다.
- 프로세스 정리 루틴을 `:stop_process`로 교체하고, `CloseMainWindow()` 정상 종료 시도 후 `taskkill /IM <name>.exe /T /F` 로 자식 프로세스까지 종료한 다음 `Get-Process`로 실제 종료 여부를 다시 확인하도록 변경했습니다.
- 프로세스가 여전히 살아 있으면 빌드를 즉시 중단하고 `Access may be denied or the app may be running with higher privileges.` 메시지를 출력하도록 해, AX Copilot이 관리자 권한 등 더 높은 권한으로 실행 중일 때 원인을 바로 알 수 있게 했습니다.
- 이 수정으로 build 배치는 실행 중 앱을 못 내렸을 때 어설프게 계속 진행하지 않고, 명확한 실패 상태로 멈춥니다.
- 검증: `cmd /c build.bat` 실행 시, 권한 문제로 살아 있는 `AxCopilot.exe`를 감지하고 즉시 실패 처리하는 동작 확인
### 2026-04-05 추가 진행 기록 (AX Agent 내부 설정의 도구/스킬 탭 확장 및 접기 구조 적용)
- 업데이트: 2026-04-05 09:27 (KST)
- AX Agent 내부 설정의 `도구`, `스킬/차단` 탭은 목록이 길게 늘어져 한 번에 보기 어렵고, 메인 설정에만 남아 있던 훅/슬래시 세부값이 따로 분리되어 있었습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에 `도구` 탭용 `TxtOverlayToolHookTimeoutMs`, `OverlayHookListPanel`, `훅 추가` 버튼과 `스킬/차단` 탭용 스킬 폴더 선택/열기 버튼, `TxtOverlayMaxFavoriteSlashCommands`, `TxtOverlayMaxRecentSlashCommands`를 추가해 AX Agent 내부 설정만으로 주요 확장값을 관리할 수 있게 했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서는 `BuildOverlayHookCards()`, `ShowOverlayHookEditDialog(...)`, `CreateOverlayCollapsibleSection(...)` 를 추가하고, 훅 편집/추가/삭제/활성 토글, 스킬 폴더 선택, 슬래시 핀/최근 개수 저장, 훅 타임아웃 저장을 모두 AX Agent 오버레이 저장 흐름에 연결했습니다.
- 스킬 목록은 `/스킬명` 표기로 바꾸고, 한국어 설명은 그대로 유지한 채 `직접 호출 스킬 / 자동·조건부 스킬 / 현재 사용 불가` 섹션으로 접기/펼치기 렌더링하도록 재구성했습니다.
- 도구 목록도 기존 단순 나열 대신 `파일/검색`, `코드 분석`, `문서 생성`, `에이전트` 같은 카테고리별 접기/펼치기 카드로 바꿔 긴 목록을 더 짧게 탐색할 수 있게 했습니다.
- 같은 작업에서 메인 설정 AX Agent 영역에 남아 있던 `PDF 내보내기 기본 경로`, `이미지 입력 활성화`, `코드 리뷰 도구 활성화`도 AX Agent 내부 설정의 `채팅`/`코드` 탭으로 옮겨 내부 설정 집중도를 높였습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 내부 설정 개발자 탭 잔여 항목 이식)
- 업데이트: 2026-04-05 09:38 (KST)
- 메인 설정의 AX Agent 영역에는 아직 `호출 간 딜레이`, `실행 이력 상세도`, `계획 diff 심각도`, `워크플로우 시각화`, `감사 로그`, `서브에이전트 최대 수`처럼 내부 AX Agent 오버레이에 없는 개발자/운영 항목이 남아 있었습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에 `OverlayDeveloperRuntimePanel`, `OverlayDeveloperExtraPanel` 을 추가하고, `호출 간 딜레이(초)`, `서브에이전트 최대 수`, `실행 이력 상세도`, `계획 diff 심각도(개수/비율)`, `워크플로우 시각화`, `전체 호출·토큰 합계 표시`, `감사 로그`, `감사 로그 폴더 열기` 행을 AX Agent 내부 설정의 `개발자` 탭 안으로 재배치했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서는 위 컨트롤들의 로드/저장 동기화, 숫자 입력 범위 검증, `실행 이력 상세도` 콤보 저장, `감사 로그 폴더 열기` 핸들러를 추가하고 `SetOverlaySection("dev")` 분기에서 해당 패널이 `개발자` 탭에서만 보이도록 연결했습니다.
- 이 변경으로 AX Agent 내부 설정은 기존 `공통 / 채팅 / 코워크/코드 / 코워크 / 코드 / 개발자 / 도구 / 스킬/차단` 탭 구조를 유지한 채, 메인 설정에 남아 있던 AX Agent 전용 세부값 대부분을 각 기능 탭에 더 가깝게 재배치한 상태가 됐습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 메인 설정 잔존 제거 및 내부 설정 재배치)
- 업데이트: 2026-04-05 09:54 (KST)
- 일반 설정창에서 `AX Agent` 탭이 계속 보이던 이유는 [SettingsWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml.cs) 의 `ApplyAiEnabledState()``AiEnabled=true` 상태일 때 `AgentTabItem.Visibility`를 다시 `Visible`로 되돌리고 있었기 때문이었습니다.
- 같은 메서드에서 `AgentTabItem.Visibility`를 항상 `Collapsed`로 유지하도록 바꿔, 내부 설정으로 이관 중인 AX Agent 전용 설정이 메인 설정에 다시 나타나지 않게 정리했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서는 `ApplyOverlaySettingsChanges()``ChkOverlayAiEnabled_Changed()` 경로에서 `AiEnabled`를 더 이상 토글하지 않고 항상 `true`로 유지하도록 바꿨고, `OverlayAiEnabledRow`도 내부 설정에서 숨겨 AX Agent 사용 토글을 제거했습니다.
- 내부 AX Agent 설정 탭 배치도 다시 조정해 `서비스/모델``운영 모드``공통` 탭으로 옮기고, `문서 형태``디자인 스타일`은 채팅 탭이 아니라 `코워크` 탭에만 보이도록 정리했습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 `압축 시작 한도(%)`, `최대 컨텍스트 토큰` 행은 숫자 입력 칸 대신 `60/70/80/90%`, `4K/16K/64K/256K/1M` 프리셋 카드로 바꾸고, [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에 선택 반영/하이라이트 동기화 로직(`OverlayCompactPresetCard_MouseLeftButtonUp`, `OverlayContextPresetCard_MouseLeftButtonUp`, `RefreshOverlayTokenPresetCards`)을 추가해 내부 설정 저장과 즉시 반영을 통합했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (메인 설정 AX Agent의 표현 수준 행 숨김)
- 업데이트: 2026-04-05 09:56 (KST)
- 일반 설정의 AX Agent 탭 화면에는 `표현 수준` 행이 여전히 남아 있어, 내부 고정 정책과 달리 사용자가 선택 가능한 옵션처럼 보이는 상태였습니다.
- [SettingsWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml) 의 `표현 수준` row `Border``Visibility="Collapsed"`를 적용해, 메인 설정 화면에서는 해당 항목이 더 이상 보이지 않게 정리했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 컴포저 과확장 레이아웃 보정)
- 업데이트: 2026-04-05 09:58 (KST)
- AX Agent 채팅 화면의 입력 컴포저는 [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 `HorizontalAlignment="Stretch"`와 넓은 최대폭을 사용하고 있었고, [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `ApplyExpressionLevelUi()``rich` 모드에서 `InputBox.MaxHeight = 220`까지 다시 늘려 입력창이 과하게 커지는 문제가 있었습니다.
- `ComposerShell``Center + Width/MaxWidth 640`으로 바꿔 채팅창이 전체 가로폭을 계속 채우지 않도록 했고, 입력창 최대 높이도 `rich 120 / balanced 108 / simple 96`으로 낮춰 여러 줄 입력 시에도 적정 높이 범위 안에서만 늘어나도록 조정했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (Gemini Chat 빈 응답/멈춤 우회)
- 업데이트: 2026-04-05 10:02 (KST)
- AX Agent Chat 탭에서 Gemini를 선택했을 때, API 키를 넣은 뒤에도 임시 스트리밍 컨테이너만 뜨고 응답이 비거나 진행 상태가 오래 남는 문제가 있었습니다. 현재 구현상 원인은 [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 일반 Chat 스트리밍 경로가 Gemini SSE 응답과 맞물릴 때 완료 신호를 안정적으로 처리하지 못하던 쪽에 가까웠습니다.
- 일반 전송 흐름과 `다시 생성` 흐름 둘 다에서 현재 서비스가 `gemini`일 경우 `_llm.StreamAsync(...)` 대신 `_llm.SendAsync(...)` 비스트리밍 경로를 사용하도록 변경해, Chat 탭에서는 Gemini 응답을 한 번에 받아 안정적으로 렌더하도록 우회했습니다.
- 같은 파일의 `GetMessageMaxWidth()``320~720` 범위로 재조정해 메시지 폭이 컴포저보다 더 커지지 않게 했고, `FinalizeStreamingContainer(...)`에서는 응답 내용이 비어 있을 경우 `(빈 응답)`으로 치환해 완전히 빈 말풍선이 남지 않게 정리했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 채팅 컴포저 높이 재고정 및 빈 assistant 말풍선 제거)
- 업데이트: 2026-04-05 10:10 (KST)
- AX Agent Chat 탭에서 입력창 텍스트가 거의 없는데도 컴포저 높이가 계속 커지고, 응답이 비정상 종료된 뒤 내용 없는 assistant 카드가 다시 렌더되는 문제가 있었습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에 `UpdateInputBoxHeight()`를 추가해 입력창 높이를 실제 줄 수 기준으로 직접 계산하고 `MinHeight~MaxHeight` 범위 안에서만 유지하도록 변경했습니다. 이때 최대 높이를 넘길 경우에만 내부 세로 스크롤을 표시하도록 바꿔, 내용이 없는데도 큰 빈 입력 영역이 남지 않게 했습니다.
- 같은 파일의 `RenderMessages()`는 비어 있는 assistant 메시지를 렌더 대상에서 제외하도록 필터를 추가했고, 일반 전송/재생성 흐름에서도 완료 직전 `assistantMsg.Content`가 비어 있으면 `(빈 응답)`으로 확정 저장하도록 정리해 재오픈 시에도 빈 말풍선이 다시 나타나지 않게 보정했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 채팅 탭의 중복 테마 설정 제거)
- 업데이트: 2026-04-05 10:12 (KST)
- AX Agent 내부 설정의 `채팅` 탭에는 채팅과 직접 관련 없는 `테마 스타일`, `테마 모드` 블록이 남아 있어, 기능 분류 기준과 맞지 않는 상태였습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에서 해당 두 블록을 삭제해 채팅 탭에는 `PDF 내보내기 기본 경로`, `이미지 입력 활성화` 같은 실제 채팅 관련 설정만 남도록 정리했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 내부 설정에 등록 모델 관리 이식)
- 업데이트: 2026-04-05 10:16 (KST)
- AX Agent 내부 설정의 `공통` 탭에는 서비스/모델 선택만 있고, 메인 설정에 있던 `등록 모델 추가/편집/삭제` 기능이 빠져 있어 사내 모델 관리가 반쪽 상태였습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 의 `OverlayModelEditorPanel` 아래에 `등록 모델 관리` 헤더, `모델 추가` 버튼, `OverlayRegisteredModelsPanel`을 추가해 내부 설정 안에서도 사내 모델 관리 UI가 보이도록 확장했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서는 `BuildOverlayRegisteredModelsPanel()`을 추가하고, 메인 설정에서 쓰던 [ModelRegistrationDialog.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ModelRegistrationDialog.cs) 를 그대로 호출해 `Ollama/vLLM` 등록 모델의 `추가/편집/삭제/선택`을 내부 설정에서 직접 수행하도록 연결했습니다.
- 저장 경로는 기존 `Llm.RegisteredModels`를 그대로 사용해, 메인 설정과 내부 설정이 같은 모델 목록을 보도록 맞췄고, `PersistOverlaySettingsState()` 시점에 동일하게 저장/갱신되도록 정리했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 내부 설정의 압축 시작 한도 분류 보정)
- 업데이트: 2026-04-05 10:19 (KST)
- `압축 시작 한도(%)` 행은 성격상 `코워크/코드 공통` 설정인데, 기존 `SetOverlaySection()` 분기에서는 여러 탭에서 함께 열리도록 되어 있어 분류가 어색했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `OverlayAnchorAdvanced.Visibility` 조건을 `showShared` 전용으로 좁혀, 해당 항목이 `코워크/코드 공통` 탭에서만 보이도록 보정했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 내부 설정 탭 헤더를 본문 최상단으로 정리)
- 업데이트: 2026-04-05 10:27 (KST)
- AX Agent 내부 설정 화면은 탭별 제목/설명이 `서비스와 모델` 블록 아래쪽에 위치해 있어, 사용자가 현재 탭의 범위를 바로 파악하기 어려운 상태였습니다.
- [ChatWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml) 에 상단 전용 헤더(`OverlaySectionHeading`, `OverlayTopHeadingTitle`, `OverlayTopHeadingDescription`)를 추가하고, `OverlaySectionDetail` 안의 중복 헤더는 숨겨 탭 제목과 설명이 본문 맨 위에 먼저 보이도록 재배치했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `SetOverlaySection()`도 새 상단 헤더에 맞춰 각 탭별 제목/설명을 채우도록 조정했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (Chat 탭 입력창 누적 확장 및 assistant 메시지 미표시 보정)
- 업데이트: 2026-04-05 10:23 (KST)
- Chat 탭에서는 엔터를 칠 때마다 컴포저 높이가 누적 확장되고, 하단 토큰은 증가하지만 assistant 메시지가 화면에 남지 않는 문제가 있었습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `UpdateInputBoxHeight()`를 재조정해 Chat 탭은 항상 고정 높이 입력창을 사용하고, Cowork/Code 탭만 명시적 줄 수 기준으로 멀티라인 높이 계산을 하도록 분리했습니다.
- 같은 파일에 `SyncLatestAssistantMessage(ChatConversation conv, string content)`를 추가해 응답 완료 시 최신 assistant 메시지 내용을 대화 객체에 확정 반영하고, 이후 `RenderMessages(preserveViewport: true)`를 한 번 더 호출해 스트리밍/비스트리밍 완료 뒤에도 실제 저장 대화 기준으로 메시지가 다시 보이도록 맞췄습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (메인 설정의 AX Agent 진입을 내부 설정 바로가기 중심으로 정리)
- 업데이트: 2026-04-05 10:35 (KST)
- 사용자 요청 기준으로 AX Agent 관련 설정은 메인 설정 탭에서 직접 다루지 않고, AX Agent 내부 설정으로 모으는 방향으로 다시 정리했습니다.
- [SettingsWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml) 의 `일반` 탭 하단에 `AX Agent 설정 바로가기` 카드를 추가해, 일반 설정 화면에서도 AX Agent 채팅창을 열고 내부 설정 오버레이를 곧바로 표시할 수 있도록 했습니다.
- [SettingsWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml.cs) 의 `ApplyMainTabVisibility()`에서는 메인 설정의 표시 대상에서 `AX Agent`를 완전히 제외했고, `SelectAgentSettingsTab()``BtnAgentShortcut_Click()`은 더 이상 숨겨진 AX Agent 탭으로 이동하지 않고 [App.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/App.xaml.cs) 의 `OpenAgentSettingsInChat()`을 호출하도록 전환했습니다.
- 이 변경으로 메인 설정에 남아 있던 AX Agent 진입 버튼도 모두 같은 내부 설정 경로를 사용하게 되어, 설정 위치가 둘로 나뉘어 보이던 흐름을 줄였습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (Chat 탭도 줄바꿈 기준으로 입력창 높이 확장)
- 업데이트: 2026-04-05 10:41 (KST)
- 직전 보정에서 Chat 탭 입력창을 고정 높이로 묶었는데, 사용자 기준으로는 Chat도 `Shift+Enter` 줄바꿈이 있을 때는 자연스럽게 높이가 늘어나야 했고, 고정 분기 때문에 의도와 다른 동작이 되고 있었습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `UpdateInputBoxHeight()`에서 `Chat` 탭 예외 분기를 제거해, 이제 세 탭 모두 실제 개행 문자 수를 기준으로 높이를 계산합니다.
- 결과적으로 `Enter` 전송만으로는 높이가 늘지 않고, `Shift+Enter`로 줄이 추가된 경우에만 높이가 증가하며, 최대 높이를 넘길 때만 내부 스크롤이 나타나도록 다시 정리했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (메인 설정의 숨김 AX Agent 옛 UI 잔재 1차 제거)
- 업데이트: 2026-04-05 10:48 (KST)
- 메인 설정 XAML에는 더 이상 사용자에게 보이지 않는데도 남아 있던 AX Agent 관련 숨김 블록과 중복 진입 버튼이 있어, 내부 설정 기준으로 통합된 현재 UX와 맞지 않는 상태였습니다.
- [SettingsWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml) 에서 `일반` 탭의 숨김 `AI 기능`/`운영 모드` 행을 제거했고, 하단 전역 버튼 바에 있던 중복 `AX Agent 설정` 버튼도 삭제했습니다. 이제 메인 설정에서 AX Agent로 들어가는 진입은 일반 탭 본문의 전용 바로가기 카드로만 남습니다.
- [SettingsWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/SettingsWindow.xaml.cs) 의 `ApplyAiEnabledState()``ApplyOperationModeState()`도 숨김 일반 탭 컨트롤을 더 이상 참조하지 않도록 정리해, 보이지 않는 UI를 전제로 둔 동기화 코드가 돌지 않게 했습니다.
- 이번 단계는 1차 정리이며, 아직 XAML 하단에 남아 있는 구형 `AgentTabItem` 본문 전체 제거는 내부 참조가 많아 다음 단계에서 분리 정리할 예정입니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 채팅/코워크/코드 응답 표시 안정화)
- 업데이트: 2026-04-05 11:02 (KST)
- 사용자 보고 기준으로 AX Agent는 전송할 때마다 입력창 높이가 비정상적으로 남고, Chat 탭은 토큰만 올라가는데 응답 본문이 안 보이며, Cowork/Code는 실행 로그 문구 잔상만 남는 상태였습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 에서 `QueueComposerDraft()`, `BtnDraftClear_Click()`, `StartNextQueuedDraftIfAny()`, `SendMessageAsync()`에서 입력 텍스트를 비우거나 다시 채운 직후 `UpdateInputBoxHeight()`를 명시적으로 호출하도록 바꿔, 입력창 높이가 이전 값으로 남는 현상을 줄였습니다.
- `SendMessageAsync()`의 일반 Chat 흐름은 스트리밍 대신 비스트리밍 응답을 우선 사용하게 조정해, Chat 탭에서 토큰 사용량은 집계되는데 assistant 메시지가 비거나 늦게 반영되던 경로를 안정화했습니다.
- 같은 메서드에 `BuildAssistantFallbackContent()`를 추가해 Cowork/Code에서 최종 assistant 텍스트가 비어 있으면 최근 실행 이벤트 요약을 fallback 응답으로 남기게 했고, 응답 완료 후 `conv.ShowExecutionHistory = false`를 적용해 실행 로그 카드 잔상이 기본 화면을 덮지 않도록 정리했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
### 2026-04-05 추가 진행 기록 (AX Agent 내부 설정 도구/스킬 섹션 기본 접힘 처리)
- 업데이트: 2026-04-05 11:08 (KST)
- 사용자 요청 기준으로 AX Agent 내부 설정의 `도구`, `스킬/차단` 탭은 긴 목록이 처음부터 모두 펼쳐져 있기보다, 필요할 때만 열어보는 구조가 더 적합했습니다.
- [ChatWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/ChatWindow.xaml.cs) 의 `AddOverlaySkillSection()`, `BuildOverlayToolRegistryPanel()`, `BuildOverlayHookCards()`에서 `CreateOverlayCollapsibleSection(...)` 기본 확장값을 모두 `false`로 바꿔, 스킬 목록/도구 카테고리/훅 목록이 기본적으로 닫힌 상태로 열리게 했습니다.
- 이 변경으로 AX Agent 내부 설정 진입 시 `스킬/차단`, `도구` 탭이 더 압축된 상태로 보이고, 필요한 항목만 선택적으로 펼쳐 확인할 수 있습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0
- Document update: 2026-04-05 11:22 (KST) - Started stabilizing AX Agent chat around a more `claw-code`-like single-source render path. The composer shell is now bottom-aligned instead of stretching vertically, direct user-bubble injection during send was removed in favor of model-backed `RenderMessages()` refresh, and live execution banners now inject into the visible chat only when execution-history display is explicitly enabled.
- Document update: 2026-04-05 11:22 (KST) - For Cowork/Code runs, `ShowExecutionHistory` is now forced off at run start so intermediate rerenders no longer rehydrate transient execution banners into the conversation body.
- Document update: 2026-04-05 11:22 (KST) - Chat tab now skips creation of the temporary streaming container altogether. Since Chat already routes through non-streaming `SendAsync()`, the final assistant text is now committed directly to the conversation model and rendered from there instead of relying on a transient placeholder card.
- Document update: 2026-04-05 11:22 (KST) - Cowork/Code now also skip the temporary streaming container path. Those tabs receive final agent-loop results rather than incremental chunks, so the UI now avoids showing a transient empty assistant card before the final rerender.
- Document update: 2026-04-05 11:22 (KST) - Main settings tab visibility now permanently hides the legacy `AX Agent` tab regardless of AI enablement, so the remaining supported entry point is the AX Agent in-chat internal settings overlay plus the general-settings shortcut.
- Document update: 2026-04-05 11:29 (KST) - Removed the early assistant-placeholder insertion from `SendMessageAsync()`. Assistant messages are now appended only after the final response text is known, reducing the empty-bubble / token-only failure mode in AX Agent chat.
- Document update: 2026-04-05 11:29 (KST) - Added a `MainSettingsTab` selection redirect so any attempt to land on the legacy hidden AX Agent tab immediately routes to the AX Agent in-chat settings shortcut instead.
- Document update: 2026-04-05 11:34 (KST) - Added `Temperature` to the AX Agent in-chat settings overlay and wired it into the same deferred-save path used by the other numeric overlay settings. The value is normalized to the 0.02.0 range and persisted from the overlay itself.
- Document update: 2026-04-05 11:42 (KST) - Added `Services/Agent/AxAgentExecutionEngine.cs` as an AX-side execution-prep engine modeled after the `claw-code` split between input processing and session execution. `ChatWindow` now routes outbound message preparation and final assistant-message commit through that engine instead of assembling and appending everything inline.
- Document update: 2026-04-05 11:11 (KST) - Collapsed the duplicated Cowork/Code agent-loop branches inside `ChatWindow.SendMessageAsync()` into `RunAgentLoopAsync(...)`. Both tabs now share the same execution wrapper for workflow-analyzer open, cumulative-token reset, event hookup, completion notification, and cleanup, which moves AX Agent closer to a single execution path modeled after the `claw-code` engine split.
- Document update: 2026-04-05 11:11 (KST) - Reworked AX Agent composer resizing to use `TextBox.MinLines/MaxLines` instead of manually pinning `Height`, so the composer grows only with actual line breaks and is less likely to remain oversized after send.
- Document update: 2026-04-05 11:11 (KST) - Replaced the in-overlay text-entry controls for `Temperature`, `MaxRetryOnError`, `MaxAgentIterations`, `FreeTierDelaySeconds`, and `MaxSubAgents` with slider-based controls plus current-value badges, following the older settings-window interaction pattern and reducing mis-entry risk.
- Document update: 2026-04-05 11:11 (KST) - Moved `Temperature` and `MaxAgentIterations` visibility to the developer tab only inside the AX Agent overlay, tightening the common tabs around user-facing settings and pushing expert/debug knobs toward the developer section.
- Document update: 2026-04-05 11:11 (KST) - Removed the general-tab bottom shortcut card for AX Agent settings and added a dedicated `AX Agent` entry to the left settings navigation. Selecting that nav entry now routes straight into the AX Agent in-chat internal settings overlay, while the legacy hidden `AgentTabItem` remains suppressed.
- Document update: 2026-04-05 11:22 (KST) - Continued migrating the remaining AX Agent in-chat numeric controls away from freeform text entry. `ToolHookTimeoutMs`, `SlashPopupPageSize`, `MaxFavoriteSlashCommands`, and `MaxRecentSlashCommands` now use slider-based controls with live value badges in the internal overlay, matching the safer interaction style from the old settings window.
- Document update: 2026-04-05 11:22 (KST) - Synced the new slider-backed skill/tool values through both `RefreshOverlayVisualState(...)` and `RefreshOverlayEtcPanels(...)`, so section changes and overlay reopen now restore the same values across the hidden compatibility textboxes, sliders, and badges.
- Document update: 2026-04-05 11:24 (KST) - Removed the legacy hidden `AgentTabItem` from `MainSettingsTab.Items` at settings-window construction time, so the old AX Agent settings body can no longer be selected through tab restoration or visibility changes. The left navigation `AX Agent` shortcut remains the only supported entry and now routes directly into the in-chat AX Agent settings overlay.
- Document update: 2026-04-05 11:25 (KST) - Added a `HasLegacyAgentTab()` guard around the remaining legacy AX Agent initialization path in `SettingsWindow`. Once the old tab is removed from `MainSettingsTab.Items`, calls such as `MoveBlockSectionToEtc()`, `BuildServiceModelPanels()`, `BuildToolRegistryPanel()`, `LoadAdvancedSettings()`, `SyncAgentSelectionCards()`, and `ApplyAgentSubTabVisibility()` now stop running, which reduces hidden coupling to the retired settings body while the XAML cleanup continues.
- Document update: 2026-04-05 11:27 (KST) - Restored per-tool enable/disable control inside the AX Agent in-chat `도구` tab. `BuildOverlayToolRegistryPanel()` now renders each tool row with a `ToggleSwitch`, persists changes through `Llm.DisabledTools`, and refreshes the overlay immediately so the tool availability state is managed from the AX Agent internal settings instead of only the legacy settings window.
- Document update: 2026-04-05 11:28 (KST) - Updated [AGENTS.md](/E:/AX%20Copilot%20-%20Codex/AGENTS.md) to explicitly require unified control patterns for settings input: all on/off fields must use `ToggleSwitch`, numeric fields should default to the established slider + value-badge pattern, and equivalent settings in main settings vs. AX Agent internal settings should not diverge in input style.
- Document update: 2026-04-05 11:31 (KST) - Fixed the startup-time `NullReferenceException` that appeared during AX Agent prewarm. `ChatWindow` now resolves overlay LLM settings through `TryGetOverlayLlmSettings()` and all overlay slider `ValueChanged` handlers short-circuit when the settings graph is not ready yet, preventing premature writes during XAML initialization.
### 2026-04-05 추가 진행 기록 (Agent Compare 기준 런처 기능 이식 1차)
- 업데이트: 2026-04-05 11:58 (KST)
- 사용자 요청 기준을 `claw-code`가 아니라 우선 `Agent Compare`의 런처 기능 이식으로 다시 고정하고, 현재 런처와 비교해 실제로 빠져 있던 하단 위젯 바 외 기능을 점검했습니다.
- [LauncherViewModel.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/ViewModels/LauncherViewModel.cs)에 검색 히스토리 탐색 상태(`_isHistoryNavigation`, `_historyIndex`)를 복구하고, `SelectedItem` 변경 시 선택 항목 미리보기 업데이트가 바로 돌도록 다시 연결했습니다. `OnShown()`은 빠른 실행 칩을 로드하고, 실행 시점에는 검색어를 [SearchHistoryService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/SearchHistoryService.cs)에 저장하도록 정리했습니다.
- 새로 추가한 [LauncherViewModel.LauncherExtras.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/ViewModels/LauncherViewModel.LauncherExtras.cs)는 `Agent Compare`에 있던 `빠른 실행 칩`, `검색 히스토리 이동`, `선택 항목 미리보기 패널` 보조 로직을 현재 런처 구조에 맞게 분리한 partial입니다. 텍스트/이미지/PDF/미디어 파일에 대한 간단한 메타 미리보기를 제공하고, 실행 상위 경로를 칩으로 다시 띄웁니다.
- [LauncherWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/LauncherWindow.xaml)에는 입력창 아래 빠른 실행 칩 영역과 결과 리스트 아래 미리보기 패널을 추가했고, 기존에 먼저 이식한 위젯 바와 겹치지 않도록 행 구조를 `8개 Row` 기준으로 재배치했습니다. 토스트 오버레이의 `Grid.RowSpan`도 새 레이아웃에 맞춰 `4`로 확장했습니다.
- [LauncherWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/LauncherWindow.xaml.cs)에는 `F3` 빠른 미리보기, `F4` 화면 OCR 단축키를 다시 연결했고, 창이 숨겨질 때 QuickLook 창도 같이 닫히도록 정리했습니다.
- [LauncherWindow.Shell.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/LauncherWindow.Shell.cs), [QuickLookWindow.xaml](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/QuickLookWindow.xaml), [QuickLookWindow.xaml.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Views/QuickLookWindow.xaml.cs), [QuickActionChip.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Models/QuickActionChip.cs), [SearchHistoryService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/SearchHistoryService.cs)을 추가해 `Agent Compare` 쪽 런처 보조 기능이 현재 코드베이스에서 독립적으로 유지되도록 분리했습니다.
- [UsageRankingService.cs](/E:/AX%20Copilot%20-%20Codex/src/AxCopilot/Services/UsageRankingService.cs)에는 `GetTopItems(int)`를 추가해, 빠른 실행 칩이 최근 실행 상위 경로를 직접 읽을 수 있도록 했습니다.
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\`` 경고 0 / 오류 0