diff --git a/README.md b/README.md index 4702f6f..5cc682a 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,11 @@ Windows 전용 시맨틱 런처 & 워크스페이스 매니저 `docs/claw-code-parity-plan.md` +- 업데이트: 2026-04-05 00:17 (KST) +- AX Agent 루프도 `claw-code`의 post-autocompact turn tracking 흐름을 참고해 compact 직후 턴을 별도 상태로 추적하도록 보강했습니다. 이제 compact 직후 첫 턴은 저노이즈 compact pill 중심으로 보이고, 불필요한 `LLM 요청 중`류 Thinking 로그는 자동으로 줄입니다. +- 개발자용 전체 통계에는 compact 직후 자동 축약된 Thinking 로그 건수도 함께 표시해, compact 이후 루프가 실제로 얼마나 조용해졌는지 바로 확인할 수 있게 했습니다. +- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` 경고 0 / 오류 0 + - 업데이트: 2026-04-04 23:47 (KST) - AX Agent 컨텍스트 압축 경로에 `session memory compact`, `microcompact`, `collapse/snip` 단계를 추가해 오래된 요약·실행 로그·도구 결과를 LLM 요약 전에 더 세밀하게 줄이도록 보강했습니다. - 현재 대화 기준 compact 누적 회수, 자동/수동 비중, 절감 토큰, session memory 적용 횟수, microcompact/snipped 메시지 수를 하단 컨텍스트 카드 hover에서 함께 확인할 수 있게 했습니다. diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 7a23912..ac43d4d 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -1,4 +1,8 @@ -# AX Copilot - 개발 문서 +# AX Copilot - 媛쒕컻 臾몄꽌 + +- Document update: 2026-04-05 00:17 (KST) - Upgraded the AX Agent loop to track the first post-compaction turn explicitly, mirroring claw-code's post-autocompact turn handling so compact-follow-up state now survives into the next loop turn instead of ending at the condenser call. +- Document update: 2026-04-05 00:17 (KST) - Added post-compaction thinking suppression for boilerplate loop events (`LLM request`, prompt submit, free-tier wait) during the first compact-follow-up turn, while still surfacing a compact-specific lightweight pill and compact-noise counts in total stats. + - Document update: 2026-04-04 23:47 (KST) - Added AX-side session-memory compaction, collapse/snip trimming, and per-conversation compaction usage tracking so compact now records staged reductions instead of only the last before/after snapshot. - Document update: 2026-04-04 23:47 (KST) - The AX Agent context tooltip now shows session totals for compaction count, saved tokens, session-memory passes, microcompact boundaries, and snipped messages for the current conversation. @@ -21,481 +25,481 @@ --- -## 📑 목차 +## ?뱫 紐⑹감 -1. [관련 문서](#관련-문서) -2. [사내 전용 프로그램 개발 원칙](#사내-전용-프로그램-개발-원칙) -3. [프로젝트 구조](#프로젝트-구조) -4. [아키텍처 개요](#아키텍처-개요) -5. [핵심 데이터 흐름](#핵심-데이터-흐름) -6. [각 핸들러 상세](#각-핸들러-상세) -7. [설정 UI (SettingsWindow)](#설정-ui-settingswindow) -8. [설정 스키마 (`settings.json`)](#설정-스키마-settingsjson) -9. [주요 기능 상세](#주요-기능-상세) -10. [데이터 저장 경로](#데이터-저장-경로) -11. [보안 고려사항](#보안-고려사항) -12. [테마 커스터마이징](#테마-커스터마이징) -13. [단위 테스트](#단위-테스트) -14. [코드 검토 이력](#코드-검토-이력) -15. [버그 수정 이력](#버그-수정-이력) -16. [알려진 제한사항 및 향후 개선](#알려진-제한사항-및-향후-개선) -17. [개발 환경](#개발-환경) -18. [경쟁 제품 기능 비교](#경쟁-제품-기능-비교) -19. [새로운 핸들러/키워드 추가 방법](#새로운-핸들러키워드-추가-방법-개발자-가이드) -20. [사내 LLM / AI Agent 연동 가이드](#사내-llm--ai-agent-연동-가이드-향후-확장) -21. [버전 이력](#버전-이력) -22. [개발 검토 — 워크플로우 병목 분석 그래프](#개발-검토--워크플로우-병목-분석-그래프) -23. [양식 기반 문서 생성 (Template Mode)](#양식-기반-문서-생성-template-mode) +1. [愿€??臾몄꽌](#愿€??臾몄꽌) +2. [?щ궡 ?꾩슜 ?꾨줈洹몃옩 媛쒕컻 ?먯튃](#?щ궡-?꾩슜-?꾨줈洹몃옩-媛쒕컻-?먯튃) +3. [?꾨줈?앺듃 援ъ“](#?꾨줈?앺듃-援ъ“) +4. [?꾪궎?띿쿂 媛쒖슂](#?꾪궎?띿쿂-媛쒖슂) +5. [?듭떖 ?곗씠???먮쫫](#?듭떖-?곗씠???먮쫫) +6. [媛??몃뱾???곸꽭](#媛??몃뱾???곸꽭) +7. [?ㅼ젙 UI (SettingsWindow)](#?ㅼ젙-ui-settingswindow) +8. [?ㅼ젙 ?ㅽ궎留?(`settings.json`)](#?ㅼ젙-?ㅽ궎留?settingsjson) +9. [二쇱슂 湲곕뒫 ?곸꽭](#二쇱슂-湲곕뒫-?곸꽭) +10. [?곗씠???€??寃쎈줈](#?곗씠???€??寃쎈줈) +11. [蹂댁븞 怨좊젮?ы빆](#蹂댁븞-怨좊젮?ы빆) +12. [?뚮쭏 而ㅼ뒪?곕쭏?댁쭠](#?뚮쭏-而ㅼ뒪?곕쭏?댁쭠) +13. [?⑥쐞 ?뚯뒪??(#?⑥쐞-?뚯뒪?? +14. [肄붾뱶 寃€???대젰](#肄붾뱶-寃€???대젰) +15. [踰꾧렇 ?섏젙 ?대젰](#踰꾧렇-?섏젙-?대젰) +16. [?뚮젮吏??쒗븳?ы빆 諛??ν썑 媛쒖꽑](#?뚮젮吏??쒗븳?ы빆-諛??ν썑-媛쒖꽑) +17. [媛쒕컻 ?섍꼍](#媛쒕컻-?섍꼍) +18. [寃쎌웳 ?쒗뭹 湲곕뒫 鍮꾧탳](#寃쎌웳-?쒗뭹-湲곕뒫-鍮꾧탳) +19. [?덈줈???몃뱾???ㅼ썙??異붽? 諛⑸쾿](#?덈줈???몃뱾?ы궎?뚮뱶-異붽?-諛⑸쾿-媛쒕컻??媛€?대뱶) +20. [?щ궡 LLM / AI Agent ?곕룞 媛€?대뱶](#?щ궡-llm--ai-agent-?곕룞-媛€?대뱶-?ν썑-?뺤옣) +21. [踰꾩쟾 ?대젰](#踰꾩쟾-?대젰) +22. [媛쒕컻 寃€?????뚰겕?뚮줈??蹂묐ぉ 遺꾩꽍 洹몃옒??(#媛쒕컻-寃€??-?뚰겕?뚮줈??蹂묐ぉ-遺꾩꽍-洹몃옒?? +23. [?묒떇 湲곕컲 臾몄꽌 ?앹꽦 (Template Mode)](#?묒떇-湲곕컲-臾몄꽌-?앹꽦-template-mode) --- -## 관련 문서 +## 愿€??臾몄꽌 -| 문서 | 설명 | +| 臾몄꽌 | ?ㅻ챸 | |------|------| -| [AX Agent 로드맵](AGENT_ROADMAP.html) | AX Agent 대화 서비스 고도화 종합 계획 (Phase 2.5~11) | -| [AX Commander 로드맵](LAUNCHER_ROADMAP.html) | AX Commander 런처 고도화 계획 | -| [사용 가이드](../src/AxCopilot/Assets/AX%20Copilot%20사용가이드.htm) | 사용자용 단축키 & 예약어 가이드 | +| [AX Agent 濡쒕뱶留?(AGENT_ROADMAP.html) | AX Agent ?€???쒕퉬??怨좊룄??醫낇빀 怨꾪쉷 (Phase 2.5~11) | +| [AX Commander 濡쒕뱶留?(LAUNCHER_ROADMAP.html) | AX Commander ?곗쿂 怨좊룄??怨꾪쉷 | +| [?ъ슜 媛€?대뱶](../src/AxCopilot/Assets/AX%20Copilot%20?ъ슜媛€?대뱶.htm) | ?ъ슜?먯슜 ?⑥텞??& ?덉빟??媛€?대뱶 | --- -## 사내 전용 프로그램 개발 원칙 +## ?щ궡 ?꾩슜 ?꾨줈洹몃옩 媛쒕컻 ?먯튃 -> **현재 기준 제품명은 AX Copilot이며, 런처는 AX Commander, AI 대화 서비스는 AX Agent입니다.** -> 이 문서는 과거 개발 이력을 포함하므로 일부 구간에 예전 명칭이 남아 있을 수 있으나, 해석 기준은 항상 현재 명칭 체계를 따릅니다. +> **?꾩옱 湲곗? ?쒗뭹紐낆? AX Copilot?대ʼn, ?곗쿂??AX Commander, AI ?€???쒕퉬?ㅻ뒗 AX Agent?낅땲??** +> ??臾몄꽌??怨쇨굅 媛쒕컻 ?대젰???ы븿?섎?濡??쇰? 援ш컙???덉쟾 紐낆묶???⑥븘 ?덉쓣 ???덉쑝?? ?댁꽍 湲곗??€ ??긽 ?꾩옱 紐낆묶 泥닿퀎瑜??곕쫭?덈떎. -### 외부 연결 금지 +### ?몃? ?곌껐 湲덉? -| 금지 항목 | 설명 | +| 湲덉? ??ぉ | ?ㅻ챸 | |-----------|------| -| 외부 HTTP/HTTPS 호출 | `HttpClient`, `WebClient`, `HttpWebRequest` 등으로 외부 서버에 요청 금지 | -| 외부 SDK 연동 | 서드파티 클라우드 SDK, AI API, SaaS 라이브러리 사용 금지 | -| 원격 플러그인 다운로드 | 런타임에 외부에서 DLL/코드 다운로드 금지 | -| 텔레메트리 / 오류 수집 | 사용 데이터를 외부 서버로 전송하는 일체의 코드 금지 | -| NuGet 패키지 | 외부 네트워크 통신이 내장된 패키지 신규 도입 금지 | +| ?몃? HTTP/HTTPS ?몄텧 | `HttpClient`, `WebClient`, `HttpWebRequest` ?깆쑝濡??몃? ?쒕쾭???붿껌 湲덉? | +| ?몃? SDK ?곕룞 | ?쒕뱶?뚰떚 ?대씪?곕뱶 SDK, AI API, SaaS ?쇱씠釉뚮윭由??ъ슜 湲덉? | +| ?먭꺽 ?뚮윭洹몄씤 ?ㅼ슫濡쒕뱶 | ?고??꾩뿉 ?몃??먯꽌 DLL/肄붾뱶 ?ㅼ슫濡쒕뱶 湲덉? | +| ?붾젅硫뷀듃由?/ ?ㅻ쪟 ?섏쭛 | ?ъ슜 ?곗씠?곕? ?몃? ?쒕쾭濡??꾩넚?섎뒗 ?쇱껜??肄붾뱶 湲덉? | +| NuGet ?⑦궎吏€ | ?몃? ?ㅽ듃?뚰겕 ?듭떊???댁옣???⑦궎吏€ ?좉퇋 ?꾩엯 湲덉? | -**허용**: 로컬 파일 시스템 접근, Windows API (P/Invoke), 사내 인트라넷 URL (명시적으로 허가된 경우만), 로컬 프로세스 실행. +**?덉슜**: 濡쒖뺄 ?뚯씪 ?쒖뒪???묎렐, Windows API (P/Invoke), ?щ궡 ?명듃?쇰꽬 URL (紐낆떆?곸쑝濡??덇???寃쎌슦留?, 濡쒖뺄 ?꾨줈?몄뒪 ?ㅽ뻾. -### 외부 SDK 금지 +### ?몃? SDK 湲덉? -기존에 등록된 `JsonSkillLoader`의 HTTP 스킬 기능(`type: "http"`)은 **사내 인트라넷 엔드포인트 전용**으로만 사용해야 합니다. 인터넷 접근이 필요한 기능은 구현하지 않습니다. +湲곗〈???깅줉??`JsonSkillLoader`??HTTP ?ㅽ궗 湲곕뒫(`type: "http"`)?€ **?щ궡 ?명듃?쇰꽬 ?붾뱶?ъ씤???꾩슜**?쇰줈留??ъ슜?댁빞 ?⑸땲?? ?명꽣???묎렐???꾩슂??湲곕뒫?€ 援ы쁽?섏? ?딆뒿?덈떎. -### 의존성 관리 +### ?섏〈??愿€由? -신규 NuGet 패키지를 추가하기 전에 다음을 확인하세요: -1. 패키지가 외부 서버와 통신하는지 검토 -2. 동일한 기능을 BCL(Base Class Library)이나 Windows API로 구현 가능한지 먼저 검토 -3. 추가 시 `DEVELOPMENT.md`에 이유를 기록 +?좉퇋 NuGet ?⑦궎吏€瑜?異붽??섍린 ?꾩뿉 ?ㅼ쓬???뺤씤?섏꽭?? +1. ?⑦궎吏€媛€ ?몃? ?쒕쾭?€ ?듭떊?섎뒗吏€ 寃€?? +2. ?숈씪??湲곕뒫??BCL(Base Class Library)?대굹 Windows API濡?援ы쁽 媛€?ν븳吏€ 癒쇱? 寃€?? +3. 異붽? ??`DEVELOPMENT.md`???댁쑀瑜?湲곕줉 -### UI 색상·레이아웃 규칙 +### UI ?됱긽쨌?덉씠?꾩썐 洹쒖튃 -> **모든 UI 개발 시 아래 규칙을 반드시 준수하세요.** (상세: `docs/AI_Service_Review.html` §12.8) +> **紐⑤뱺 UI 媛쒕컻 ???꾨옒 洹쒖튃??諛섎뱶??以€?섑븯?몄슂.** (?곸꽭: `docs/AI_Service_Review.html` 짠12.8) -1. **시스템 기본 컨트롤 사용 금지** — `ContextMenu`, `MessageBox`, `ComboBox` 드롭다운을 채팅 창에 사용하지 않음. 반드시 커스텀 `Popup` 기반으로 구현 -2. **색상 하드코딩 금지** — `Brushes.White`, `#A0A4BE` 등 하드코딩하면 라이트/다크 테마 전환 시 대비가 깨짐 - - XAML: `{DynamicResource PrimaryText}`, `{DynamicResource SecondaryText}` 등 리소스 키 사용 - - 코드비하인드: `TryFindResource("PrimaryText") as Brush ?? Brushes.White` 패턴 사용 -3. **수평 스크롤바 금지** — 아이콘/칩 목록은 `ScrollViewer` 가로 스크롤 대신 `WrapPanel`로 창 폭에 맞게 자동 줄바꿈 -4. **Popup 내부에 `Button` 사용 금지** — 포커스 캡처로 팝업이 즉시 닫힘. `Border` + `MouseLeftButtonUp` 패턴 사용 -5. **폰트 크기** — 메뉴 항목 13px 이상, 설명 텍스트 12px 이상 (가독성 확보) -6. **호버/클릭 효과 필수** — `#18FFFFFF` 반투명 배경 + 핸드 커서, 팝업 `PopupAnimation="Fade"` 기본 적용 -7. **사용자 의사결정 UI = 하단 드롭다운 메뉴 패턴** — AI가 사용자에게 선택을 요청할 때(포맷, 디자인, 권한 등) 아이콘을 주욱 나열하지 않고 **컴팩트 드롭다운 버튼** `[라벨: 현재값 ▾]` → 클릭 시 `Popup` 메뉴 표시. 마지막 항목에 텍스트 입력 옵션 포함 가능. - - 설정(Settings)에서 해당 값의 기본값을 선택할 수 있어야 함 - - 같은 패턴을 모든 탭(Chat, Cowork, Code)에 일관 적용 -8. **프리뷰 패널 = 탭 기반** — 다중 파일 프리뷰를 탭으로 관리, 파일명 표시, 탭 축소, 외부 프로그램 실행 아이콘 포함 -9. **켜기/끄기 UI = ToggleSwitch 스타일 사용** — 설정 창 등 모든 on/off 옵션에는 기본 `CheckBox`가 아닌 `Style="{StaticResource ToggleSwitch}"` 좌우 슬라이드 토글을 사용. 카테고리 선택 목록도 동일하게 적용 (Grid 좌: 라벨, 우: 토글) -10. **ContextMenu 사용 금지 → 커스텀 Popup 메뉴** — WPF 기본 `ContextMenu`/`MenuItem` 사용 금지. 모든 우클릭 메뉴·드롭다운을 커스텀 `Popup` (Border + MouseLeftButtonUp 패턴, 12px 라운드, 호버, 드롭섀도)으로 구현 -9. **폴더 데이터 활용 시 관련성 검증 필수** — 적극 활용 모드에서도 대화 주제와 무관한 파일은 읽지 않음. 계획 단계에서 읽을 파일 목록과 이유를 먼저 제시 -10. **인터랙티브 영역 최소 크기 36px** — 버튼·아이콘·메뉴 등 클릭 가능한 요소는 보내기 버튼(36×36)과 동일한 터치 크기 확보. FontSize 최소 12px, Padding 최소 6px. 폴더바·모델 선택 등 텍스트 영역도 MinHeight=34 이상 +1. **?쒖뒪??湲곕낯 而⑦듃濡??ъ슜 湲덉?** ??`ContextMenu`, `MessageBox`, `ComboBox` ?쒕∼?ㅼ슫??梨꾪똿 李쎌뿉 ?ъ슜?섏? ?딆쓬. 諛섎뱶??而ㅼ뒪?€ `Popup` 湲곕컲?쇰줈 援ы쁽 +2. **?됱긽 ?섎뱶肄붾뵫 湲덉?** ??`Brushes.White`, `#A0A4BE` ???섎뱶肄붾뵫?섎㈃ ?쇱씠???ㅽ겕 ?뚮쭏 ?꾪솚 ???€鍮꾧? 源⑥쭚 + - XAML: `{DynamicResource PrimaryText}`, `{DynamicResource SecondaryText}` ??由ъ냼?????ъ슜 + - 肄붾뱶鍮꾪븯?몃뱶: `TryFindResource("PrimaryText") as Brush ?? Brushes.White` ?⑦꽩 ?ъ슜 +3. **?섑룊 ?ㅽ겕濡ㅻ컮 湲덉?** ???꾩씠肄?移?紐⑸줉?€ `ScrollViewer` 媛€濡??ㅽ겕濡??€??`WrapPanel`濡?李???뿉 留욊쾶 ?먮룞 以꾨컮轅? +4. **Popup ?대???`Button` ?ъ슜 湲덉?** ???ъ빱??罹≪쿂濡??앹뾽??利됱떆 ?ロ옒. `Border` + `MouseLeftButtonUp` ?⑦꽩 ?ъ슜 +5. **?고듃 ?ш린** ??硫붾돱 ??ぉ 13px ?댁긽, ?ㅻ챸 ?띿뒪??12px ?댁긽 (媛€?낆꽦 ?뺣낫) +6. **?몃쾭/?대┃ ?④낵 ?꾩닔** ??`#18FFFFFF` 諛섑닾紐?諛곌꼍 + ?몃뱶 而ㅼ꽌, ?앹뾽 `PopupAnimation="Fade"` 湲곕낯 ?곸슜 +7. **?ъ슜???섏궗寃곗젙 UI = ?섎떒 ?쒕∼?ㅼ슫 硫붾돱 ?⑦꽩** ??AI媛€ ?ъ슜?먯뿉寃??좏깮???붿껌?????щ㎎, ?붿옄?? 沅뚰븳 ?? ?꾩씠肄섏쓣 二쇱슧 ?섏뿴?섏? ?딄퀬 **而댄뙥???쒕∼?ㅼ슫 踰꾪듉** `[?쇰꺼: ?꾩옱媛???` ???대┃ ??`Popup` 硫붾돱 ?쒖떆. 留덉?留???ぉ???띿뒪???낅젰 ?듭뀡 ?ы븿 媛€?? + - ?ㅼ젙(Settings)?먯꽌 ?대떦 媛믪쓽 湲곕낯媛믪쓣 ?좏깮?????덉뼱???? + - 媛숈? ?⑦꽩??紐⑤뱺 ??Chat, Cowork, Code)???쇨? ?곸슜 +8. **?꾨━酉??⑤꼸 = ??湲곕컲** ???ㅼ쨷 ?뚯씪 ?꾨━酉곕? ??쑝濡?愿€由? ?뚯씪紐??쒖떆, ??異뺤냼, ?몃? ?꾨줈洹몃옩 ?ㅽ뻾 ?꾩씠肄??ы븿 +9. **耳쒓린/?꾧린 UI = ToggleSwitch ?ㅽ????ъ슜** ???ㅼ젙 李???紐⑤뱺 on/off ?듭뀡?먮뒗 湲곕낯 `CheckBox`媛€ ?꾨땶 `Style="{StaticResource ToggleSwitch}"` 醫뚯슦 ?щ씪?대뱶 ?좉????ъ슜. 移댄뀒怨좊━ ?좏깮 紐⑸줉???숈씪?섍쾶 ?곸슜 (Grid 醫? ?쇰꺼, ?? ?좉?) +10. **ContextMenu ?ъ슜 湲덉? ??而ㅼ뒪?€ Popup 硫붾돱** ??WPF 湲곕낯 `ContextMenu`/`MenuItem` ?ъ슜 湲덉?. 紐⑤뱺 ?고겢由?硫붾돱쨌?쒕∼?ㅼ슫??而ㅼ뒪?€ `Popup` (Border + MouseLeftButtonUp ?⑦꽩, 12px ?쇱슫?? ?몃쾭, ?쒕∼?€???쇰줈 援ы쁽 +9. **?대뜑 ?곗씠???쒖슜 ??愿€?⑥꽦 寃€利??꾩닔** ???곴레 ?쒖슜 紐⑤뱶?먯꽌???€??二쇱젣?€ 臾닿????뚯씪?€ ?쎌? ?딆쓬. 怨꾪쉷 ?④퀎?먯꽌 ?쎌쓣 ?뚯씪 紐⑸줉怨??댁쑀瑜?癒쇱? ?쒖떆 +10. **?명꽣?숉떚釉??곸뿭 理쒖냼 ?ш린 36px** ??踰꾪듉쨌?꾩씠肄샕룸찓?????대┃ 媛€?ν븳 ?붿냼??蹂대궡湲?踰꾪듉(36횞36)怨??숈씪???곗튂 ?ш린 ?뺣낫. FontSize 理쒖냼 12px, Padding 理쒖냼 6px. ?대뜑諛붋룸え???좏깮 ???띿뒪???곸뿭??MinHeight=34 ?댁긽 --- -## 프로젝트 구조 +## ?꾨줈?앺듃 援ъ“ -> 아래 구조도에는 초기 프로젝트 명칭(AxCommander)이 이력 보존 목적으로 남아 있습니다. -> 현재 제품 기준 경로는 src/AxCopilot/이며, 런처 서브영역이 AX Commander, 대화 서브영역이 AX Agent입니다. +> ?꾨옒 援ъ“?꾩뿉??珥덇린 ?꾨줈?앺듃 紐낆묶(AxCommander)???대젰 蹂댁〈 紐⑹쟻?쇰줈 ?⑥븘 ?덉뒿?덈떎. +> ?꾩옱 ?쒗뭹 湲곗? 寃쎈줈??src/AxCopilot/?대ʼn, ?곗쿂 ?쒕툕?곸뿭??AX Commander, ?€???쒕툕?곸뿭??AX Agent?낅땲?? ``` AX Commander/ -├── src/ -│ ├── AxCommander/ # 메인 WPF 애플리케이션 -│ │ ├── App.xaml / App.xaml.cs # 앱 진입점, 서비스 초기화, 트레이 아이콘 -│ │ ├── Assets/ -│ │ │ ├── icon.ico # 다이아몬드 픽셀 보석 아이콘 (7크기: 16~256px) -│ │ │ ├── diamond_pixel.svg # 아이콘 SVG 원본 (참고용) -│ │ │ ├── mascot.png # About 창 마스코트 이미지 (선택) -│ │ │ └── Quotes/ -│ │ │ └── famous.json # 내장 명언 500개 (EmbeddedResource) -│ │ ├── Core/ -│ │ │ ├── CommandResolver.cs # 프리픽스 기반 라우팅 테이블 -│ │ │ ├── ContextManager.cs # 윈도우 스냅샷 & 복원 (워크스페이스) -│ │ │ ├── FuzzyEngine.cs # 퍼지 검색 + 한국어 초성 지원 -│ │ │ ├── InputListener.cs # 전역 키보드 훅 (WH_KEYBOARD_LL) -│ │ │ └── PluginHost.cs # DLL/JSON 플러그인 로더 -│ │ ├── Handlers/ -│ │ │ ├── AliasHandler.cs # @(URL) ~(폴더) >(배치) 핸들러 -│ │ │ ├── CalculatorHandler.cs # = 계산기 + 단위변환 + 통화변환 -│ │ │ ├── ClipboardHandler.cs # $ 클립보드 변환 (12종 내장) -│ │ │ ├── ClipboardHistoryHandler.cs # # 클립보드 히스토리 -│ │ │ ├── ColorHandler.cs # color HEX/RGB/HSL/HSV 변환기 -│ │ │ ├── ColorPickHandler.cs # pick 스포이드 색상 추출 -│ │ │ ├── DateCalcHandler.cs # date 날짜 계산/D-day/타임스탬프 -│ │ │ ├── EncodeHandler.cs # encode base64/url/hex/md5/sha256 -│ │ │ ├── EnvHandler.cs # env 환경변수 조회 -│ │ │ ├── EmojiHandler.cs # emoji 이모지 피커 (300+ 이모지) -│ │ │ ├── JsonHandler.cs # json JSON 검증/포맷/미니파이 -│ │ │ ├── JsonSkillLoader.cs # .skill.json HTTP API 연동 -│ │ │ ├── NoteHandler.cs # note 빠른 메모 저장/조회 -│ │ │ ├── PortHandler.cs # port 포트/프로세스 점검 -│ │ │ ├── RecentFilesHandler.cs # recent Windows 최근 파일 -│ │ │ ├── RenameHandler.cs # rename 파일 일괄 이름변경 -│ │ │ ├── ScreenCaptureHandler.cs # cap 화면/창/스크롤 캡처 -│ │ │ ├── ScaffoldHandler.cs # scaffold 프로젝트 스캐폴딩 -│ │ │ ├── ServiceHandler.cs # svc Windows 서비스 관리 -│ │ │ ├── SnapHandler.cs # snap 창 배치 레이아웃 -│ │ │ ├── SnippetHandler.cs # ; 텍스트 스니펫 -│ │ │ ├── SystemCommandHandler.cs # / 시스템 명령 + 타이머/알람 -│ │ │ ├── TextStatsHandler.cs # stats 텍스트 통계 분석 -│ │ │ ├── UninstallHandler.cs # uninstall 앱 제거 (레지스트리) -│ │ │ ├── FavoriteHandler.cs # fav 즐겨찾기 (파일·폴더) -│ │ │ ├── MonitorHandler.cs # monitor 시스템 리소스 모니터 -│ │ │ └── WorkspaceHandler.cs # ! 워크스페이스 관리 -│ │ ├── Models/ -│ │ │ ├── AppSettings.cs # 설정 POCO (JSON 직렬화) -│ │ │ └── DailyUsageStats.cs # 일별 사용 통계 데이터 모델 -│ │ ├── Services/ -│ │ │ ├── ClipboardHistoryService.cs # WM_CLIPBOARDUPDATE 훅 -│ │ │ ├── IndexService.cs # 파일 시스템 인덱서 -│ │ │ ├── LogService.cs # 파일 로거 -│ │ │ ├── NotificationService.cs # 트레이 풍선 알림 (타이머/알람) -│ │ │ ├── QuoteService.cs # 명언 JSON 로더 (famous.json 내장 리소스) -│ │ │ ├── SessionTrackingService.cs # PC 잠금/해제 시간 추적 -│ │ │ ├── L10n.cs # 정적 다국어 서비스 (ko/en/ja/zh/vi) -│ │ │ ├── SettingsService.cs # settings.json 로드/저장 -│ │ │ ├── UsageRankingService.cs # 실행 빈도 추적 & 퍼지 결과 정렬 -│ │ │ ├── UsageStatisticsService.cs # 일별 통계 집계 (런처 호출/명령/활성시간) -│ │ │ ├── WindowTracker.cs # 이전 활성 창 핸들 보존 (snap/cap용) -│ │ │ └── WorktimeReminderService.cs # 잠금 해제 시 사용시간 알림 팝업 서비스 -│ │ ├── Themes/ -│ │ │ ├── Converters.cs # WPF 값 변환기 -│ │ │ ├── Symbols.cs # Segoe MDL2 Assets 상수 -│ │ │ ├── Dark.xaml / Light.xaml / OLED.xaml -│ │ │ ├── Nord.xaml / Monokai.xaml / Catppuccin.xaml / Sepia.xaml -│ │ │ ├── Alfred.xaml / AlfredLight.xaml -│ │ ├── ViewModels/ -│ │ │ ├── LauncherViewModel.cs # 런처 MVVM ViewModel -│ │ │ ├── SettingsViewModel.cs # 설정 창 ViewModel + 보조 모델 -│ │ │ │ # (ThemeCardModel, ColorRowModel, -│ │ │ │ # AppShortcutModel, SnippetRowModel) -│ │ │ └── StatisticsViewModel.cs # 사용 통계 창 ViewModel (DayBarItem, CommandStatItem) -│ │ └── Views/ -│ │ ├── LauncherWindow.xaml/.cs # 메인 런처 UI -│ │ ├── LargeTypeWindow.xaml/.cs # Large Type 전체 화면 오버레이 -│ │ ├── SettingsWindow.xaml/.cs # 설정 창 UI (좌측 사이드바 10탭) -│ │ ├── AboutWindow.xaml/.cs # 개발자 정보 창 -│ │ ├── HelpDetailWindow.xaml/.cs # 도움말 전체 목록 카드 창 -│ │ ├── EyeDropperWindow.xaml/.cs # 전체 화면 스포이드 오버레이 -│ │ ├── ColorPickResultWindow.xaml/.cs # 색상 추출 결과 반투명 팝업 -│ │ ├── ReminderPopupWindow.xaml/.cs # 잠금 해제 사용시간 알림 팝업 -│ │ ├── StatisticsWindow.xaml/.cs # 사용 통계 차트 창 -│ │ └── TrayContextMenu.cs # 트레이 컨텍스트 메뉴 팩토리 (모던 테마 인식) -│ ├── AxCommander.SDK/ -│ │ └── IActionHandler.cs # 플러그인 계약 (LauncherItem, PluginMetadata) -│ ├── AxCommander.Tests/ -│ │ ├── Core/FuzzyEngineTests.cs # 퍼지 엔진 단위 테스트 (19개) -│ │ ├── Handlers/ClipboardTransformTests.cs # 클립보드 변환 테스트 (21개) -│ │ └── Services/SettingsServiceTests.cs # 설정 서비스 테스트 (17개) -│ ├── AxCommander.Installer.Offline/ # 오프라인 인스톨러 (.NET 8, self-contained ZIP 내장) -│ │ ├── SetupForm.cs # 모던 WinForms UI (그라데이션 헤더, 설치/업그레이드/제거) -│ │ └── Program.cs -│ └── AxCommander.Installer.Online/ # 온라인 인스톨러 (.NET Framework 4.8, ~1MB) -│ ├── OnlineSetupForm.cs # .NET 4.8 WinForms UI + .NET 8 런타임 자동 다운로드 -│ └── Program.cs -├── tools/ -│ └── IconGenerator/ # 다이아몬드 픽셀 아이콘 생성 도구 (.NET 8 콘솔) -│ └── Program.cs # 보석 다이아몬드 컷 + RGBG 4색 → ICO 생성 -├── docs/ -│ └── DEVELOPMENT.md # 이 파일 -├── build.bat # 3종 빌드 스크립트 (본체 + 오프라인 + 온라인) -└── README.md +?쒋??€ src/ +?? ?쒋??€ AxCommander/ # 硫붿씤 WPF ?좏뵆由ъ??댁뀡 +?? ?? ?쒋??€ App.xaml / App.xaml.cs # ??吏꾩엯?? ?쒕퉬??珥덇린?? ?몃젅???꾩씠肄? +?? ?? ?쒋??€ Assets/ +?? ?? ?? ?쒋??€ icon.ico # ?ㅼ씠?꾨が???쎌? 蹂댁꽍 ?꾩씠肄?(7?ш린: 16~256px) +?? ?? ?? ?쒋??€ diamond_pixel.svg # ?꾩씠肄?SVG ?먮낯 (李멸퀬?? +?? ?? ?? ?쒋??€ mascot.png # About 李?留덉뒪肄뷀듃 ?대?吏€ (?좏깮) +?? ?? ?? ?붴??€ Quotes/ +?? ?? ?? ?붴??€ famous.json # ?댁옣 紐낆뼵 500媛?(EmbeddedResource) +?? ?? ?쒋??€ Core/ +?? ?? ?? ?쒋??€ CommandResolver.cs # ?꾨━?쎌뒪 湲곕컲 ?쇱슦???뚯씠釉? +?? ?? ?? ?쒋??€ ContextManager.cs # ?덈룄???ㅻ깄??& 蹂듭썝 (?뚰겕?ㅽ럹?댁뒪) +?? ?? ?? ?쒋??€ FuzzyEngine.cs # ?쇱? 寃€??+ ?쒓뎅??珥덉꽦 吏€?? +?? ?? ?? ?쒋??€ InputListener.cs # ?꾩뿭 ?ㅻ낫????(WH_KEYBOARD_LL) +?? ?? ?? ?붴??€ PluginHost.cs # DLL/JSON ?뚮윭洹몄씤 濡쒕뜑 +?? ?? ?쒋??€ Handlers/ +?? ?? ?? ?쒋??€ AliasHandler.cs # @(URL) ~(?대뜑) >(諛곗튂) ?몃뱾?? +?? ?? ?? ?쒋??€ CalculatorHandler.cs # = 怨꾩궛湲?+ ?⑥쐞蹂€??+ ?듯솕蹂€?? +?? ?? ?? ?쒋??€ ClipboardHandler.cs # $ ?대┰蹂대뱶 蹂€??(12醫??댁옣) +?? ?? ?? ?쒋??€ ClipboardHistoryHandler.cs # # ?대┰蹂대뱶 ?덉뒪?좊━ +?? ?? ?? ?쒋??€ ColorHandler.cs # color HEX/RGB/HSL/HSV 蹂€?섍린 +?? ?? ?? ?쒋??€ ColorPickHandler.cs # pick ?ㅽ룷?대뱶 ?됱긽 異붿텧 +?? ?? ?? ?쒋??€ DateCalcHandler.cs # date ?좎쭨 怨꾩궛/D-day/?€?꾩뒪?ы봽 +?? ?? ?? ?쒋??€ EncodeHandler.cs # encode base64/url/hex/md5/sha256 +?? ?? ?? ?쒋??€ EnvHandler.cs # env ?섍꼍蹂€??議고쉶 +?? ?? ?? ?쒋??€ EmojiHandler.cs # emoji ?대え吏€ ?쇱빱 (300+ ?대え吏€) +?? ?? ?? ?쒋??€ JsonHandler.cs # json JSON 寃€利??щ㎎/誘몃땲?뚯씠 +?? ?? ?? ?쒋??€ JsonSkillLoader.cs # .skill.json HTTP API ?곕룞 +?? ?? ?? ?쒋??€ NoteHandler.cs # note 鍮좊Ⅸ 硫붾え ?€??議고쉶 +?? ?? ?? ?쒋??€ PortHandler.cs # port ?ы듃/?꾨줈?몄뒪 ?먭? +?? ?? ?? ?쒋??€ RecentFilesHandler.cs # recent Windows 理쒓렐 ?뚯씪 +?? ?? ?? ?쒋??€ RenameHandler.cs # rename ?뚯씪 ?쇨큵 ?대쫫蹂€寃? +?? ?? ?? ?쒋??€ ScreenCaptureHandler.cs # cap ?붾㈃/李??ㅽ겕濡?罹≪쿂 +?? ?? ?? ?쒋??€ ScaffoldHandler.cs # scaffold ?꾨줈?앺듃 ?ㅼ틦?대뵫 +?? ?? ?? ?쒋??€ ServiceHandler.cs # svc Windows ?쒕퉬??愿€由? +?? ?? ?? ?쒋??€ SnapHandler.cs # snap 李?諛곗튂 ?덉씠?꾩썐 +?? ?? ?? ?쒋??€ SnippetHandler.cs # ; ?띿뒪???ㅻ땲?? +?? ?? ?? ?쒋??€ SystemCommandHandler.cs # / ?쒖뒪??紐낅졊 + ?€?대㉧/?뚮엺 +?? ?? ?? ?쒋??€ TextStatsHandler.cs # stats ?띿뒪???듦퀎 遺꾩꽍 +?? ?? ?? ?쒋??€ UninstallHandler.cs # uninstall ???쒓굅 (?덉??ㅽ듃由? +?? ?? ?? ?쒋??€ FavoriteHandler.cs # fav 利먭꺼李얘린 (?뚯씪쨌?대뜑) +?? ?? ?? ?쒋??€ MonitorHandler.cs # monitor ?쒖뒪??由ъ냼??紐⑤땲?? +?? ?? ?? ?붴??€ WorkspaceHandler.cs # ! ?뚰겕?ㅽ럹?댁뒪 愿€由? +?? ?? ?쒋??€ Models/ +?? ?? ?? ?쒋??€ AppSettings.cs # ?ㅼ젙 POCO (JSON 吏곷젹?? +?? ?? ?? ?붴??€ DailyUsageStats.cs # ?쇰퀎 ?ъ슜 ?듦퀎 ?곗씠??紐⑤뜽 +?? ?? ?쒋??€ Services/ +?? ?? ?? ?쒋??€ ClipboardHistoryService.cs # WM_CLIPBOARDUPDATE ?? +?? ?? ?? ?쒋??€ IndexService.cs # ?뚯씪 ?쒖뒪???몃뜳?? +?? ?? ?? ?쒋??€ LogService.cs # ?뚯씪 濡쒓굅 +?? ?? ?? ?쒋??€ NotificationService.cs # ?몃젅???띿꽑 ?뚮┝ (?€?대㉧/?뚮엺) +?? ?? ?? ?쒋??€ QuoteService.cs # 紐낆뼵 JSON 濡쒕뜑 (famous.json ?댁옣 由ъ냼?? +?? ?? ?? ?쒋??€ SessionTrackingService.cs # PC ?좉툑/?댁젣 ?쒓컙 異붿쟻 +?? ?? ?? ?쒋??€ L10n.cs # ?뺤쟻 ?ㅺ뎅???쒕퉬??(ko/en/ja/zh/vi) +?? ?? ?? ?쒋??€ SettingsService.cs # settings.json 濡쒕뱶/?€?? +?? ?? ?? ?쒋??€ UsageRankingService.cs # ?ㅽ뻾 鍮덈룄 異붿쟻 & ?쇱? 寃곌낵 ?뺣젹 +?? ?? ?? ?쒋??€ UsageStatisticsService.cs # ?쇰퀎 ?듦퀎 吏묎퀎 (?곗쿂 ?몄텧/紐낅졊/?쒖꽦?쒓컙) +?? ?? ?? ?쒋??€ WindowTracker.cs # ?댁쟾 ?쒖꽦 李??몃뱾 蹂댁〈 (snap/cap?? +?? ?? ?? ?붴??€ WorktimeReminderService.cs # ?좉툑 ?댁젣 ???ъ슜?쒓컙 ?뚮┝ ?앹뾽 ?쒕퉬?? +?? ?? ?쒋??€ Themes/ +?? ?? ?? ?쒋??€ Converters.cs # WPF 媛?蹂€?섍린 +?? ?? ?? ?쒋??€ Symbols.cs # Segoe MDL2 Assets ?곸닔 +?? ?? ?? ?쒋??€ Dark.xaml / Light.xaml / OLED.xaml +?? ?? ?? ?쒋??€ Nord.xaml / Monokai.xaml / Catppuccin.xaml / Sepia.xaml +?? ?? ?? ?쒋??€ Alfred.xaml / AlfredLight.xaml +?? ?? ?쒋??€ ViewModels/ +?? ?? ?? ?쒋??€ LauncherViewModel.cs # ?곗쿂 MVVM ViewModel +?? ?? ?? ?쒋??€ SettingsViewModel.cs # ?ㅼ젙 李?ViewModel + 蹂댁“ 紐⑤뜽 +?? ?? ?? ?? # (ThemeCardModel, ColorRowModel, +?? ?? ?? ?? # AppShortcutModel, SnippetRowModel) +?? ?? ?? ?붴??€ StatisticsViewModel.cs # ?ъ슜 ?듦퀎 李?ViewModel (DayBarItem, CommandStatItem) +?? ?? ?붴??€ Views/ +?? ?? ?쒋??€ LauncherWindow.xaml/.cs # 硫붿씤 ?곗쿂 UI +?? ?? ?쒋??€ LargeTypeWindow.xaml/.cs # Large Type ?꾩껜 ?붾㈃ ?ㅻ쾭?덉씠 +?? ?? ?쒋??€ SettingsWindow.xaml/.cs # ?ㅼ젙 李?UI (醫뚯륫 ?ъ씠?쒕컮 10?? +?? ?? ?쒋??€ AboutWindow.xaml/.cs # 媛쒕컻???뺣낫 李? +?? ?? ?쒋??€ HelpDetailWindow.xaml/.cs # ?꾩?留??꾩껜 紐⑸줉 移대뱶 李? +?? ?? ?쒋??€ EyeDropperWindow.xaml/.cs # ?꾩껜 ?붾㈃ ?ㅽ룷?대뱶 ?ㅻ쾭?덉씠 +?? ?? ?쒋??€ ColorPickResultWindow.xaml/.cs # ?됱긽 異붿텧 寃곌낵 諛섑닾紐??앹뾽 +?? ?? ?쒋??€ ReminderPopupWindow.xaml/.cs # ?좉툑 ?댁젣 ?ъ슜?쒓컙 ?뚮┝ ?앹뾽 +?? ?? ?쒋??€ StatisticsWindow.xaml/.cs # ?ъ슜 ?듦퀎 李⑦듃 李? +?? ?? ?붴??€ TrayContextMenu.cs # ?몃젅??而⑦뀓?ㅽ듃 硫붾돱 ?⑺넗由?(紐⑤뜕 ?뚮쭏 ?몄떇) +?? ?쒋??€ AxCommander.SDK/ +?? ?? ?붴??€ IActionHandler.cs # ?뚮윭洹몄씤 怨꾩빟 (LauncherItem, PluginMetadata) +?? ?쒋??€ AxCommander.Tests/ +?? ?? ?쒋??€ Core/FuzzyEngineTests.cs # ?쇱? ?붿쭊 ?⑥쐞 ?뚯뒪??(19媛? +?? ?? ?쒋??€ Handlers/ClipboardTransformTests.cs # ?대┰蹂대뱶 蹂€???뚯뒪??(21媛? +?? ?? ?붴??€ Services/SettingsServiceTests.cs # ?ㅼ젙 ?쒕퉬???뚯뒪??(17媛? +?? ?쒋??€ AxCommander.Installer.Offline/ # ?ㅽ봽?쇱씤 ?몄뒪?⑤윭 (.NET 8, self-contained ZIP ?댁옣) +?? ?? ?쒋??€ SetupForm.cs # 紐⑤뜕 WinForms UI (洹몃씪?곗씠???ㅻ뜑, ?ㅼ튂/?낃렇?덉씠???쒓굅) +?? ?? ?붴??€ Program.cs +?? ?붴??€ AxCommander.Installer.Online/ # ?⑤씪???몄뒪?⑤윭 (.NET Framework 4.8, ~1MB) +?? ?쒋??€ OnlineSetupForm.cs # .NET 4.8 WinForms UI + .NET 8 ?고????먮룞 ?ㅼ슫濡쒕뱶 +?? ?붴??€ Program.cs +?쒋??€ tools/ +?? ?붴??€ IconGenerator/ # ?ㅼ씠?꾨が???쎌? ?꾩씠肄??앹꽦 ?꾧뎄 (.NET 8 肄섏넄) +?? ?붴??€ Program.cs # 蹂댁꽍 ?ㅼ씠?꾨が??而?+ RGBG 4????ICO ?앹꽦 +?쒋??€ docs/ +?? ?붴??€ DEVELOPMENT.md # ???뚯씪 +?쒋??€ build.bat # 3醫?鍮뚮뱶 ?ㅽ겕由쏀듃 (蹂몄껜 + ?ㅽ봽?쇱씤 + ?⑤씪?? +?붴??€ README.md ``` --- -## 아키텍처 개요 +## ?꾪궎?띿쿂 媛쒖슂 ``` -┌─────────────────────────────────────────────────────────┐ -│ App.xaml.cs │ -│ (서비스 초기화 · 핸들러 등록 · 트레이 아이콘 관리) │ -└────────┬───────────────────────────────────────────┬────┘ - │ │ -┌────────▼────────┐ ┌──────────▼───────┐ -│ LauncherWindow │ ◄─── MVVM ─────────► │ SettingsWindow │ -│ (WPF, OLED 스타일)│ │ (좌측 사이드바) │ -└────────┬────────┘ └──────────────────┘ - │ 입력 -┌────────▼────────┐ -│ CommandResolver │ ← 프리픽스 라우터 -└────────┬────────┘ - │ 프리픽스 분기 - ┌────────┴────────────────────────────────────────────────┐ - │ = Calculator/Currency /System+Timer ; Snippet │ - │ # History @ UrlAlias ~ Folder > Batch $ Clip │ - │ ! Workspace ? WebSearch emoji color recent │ - │ note uninstall kill media info [plugin/skill] │ - └────────────────────────────────────────────────────────┘ - │ 프리픽스 없음 -┌────────▼────────┐ -│ FuzzyEngine │ ← 한국어 초성 + 퍼지 매칭 -└─────────────────┘ +?뚢??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? +?? App.xaml.cs ?? +?? (?쒕퉬??珥덇린??쨌 ?몃뱾???깅줉 쨌 ?몃젅???꾩씠肄?愿€由? ?? +?붴??€?€?€?€?€?€?€?р??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?р??€?€?€?? + ?? ?? +?뚢??€?€?€?€?€?€?€?쇄??€?€?€?€?€?€?€?? ?뚢??€?€?€?€?€?€?€?€?€?쇄??€?€?€?€?€?€?? +??LauncherWindow ?? ?꾟??€?€ MVVM ?€?€?€?€?€?€?€?€?€????SettingsWindow ?? +??(WPF, OLED ?ㅽ????? ??(醫뚯륫 ?ъ씠?쒕컮) ?? +?붴??€?€?€?€?€?€?€?р??€?€?€?€?€?€?€?? ?붴??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? + ???낅젰 +?뚢??€?€?€?€?€?€?€?쇄??€?€?€?€?€?€?€?? +??CommandResolver ?? ???꾨━?쎌뒪 ?쇱슦?? +?붴??€?€?€?€?€?€?€?р??€?€?€?€?€?€?€?? + ???꾨━?쎌뒪 遺꾧린 + ?뚢??€?€?€?€?€?€?€?닳??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? + ?? = Calculator/Currency /System+Timer ; Snippet ?? + ?? # History @ UrlAlias ~ Folder > Batch $ Clip ?? + ?? ! Workspace ? WebSearch emoji color recent ?? + ?? note uninstall kill media info [plugin/skill] ?? + ?붴??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? + ???꾨━?쎌뒪 ?놁쓬 +?뚢??€?€?€?€?€?€?€?쇄??€?€?€?€?€?€?€?? +?? FuzzyEngine ?? ???쒓뎅??珥덉꽦 + ?쇱? 留ㅼ묶 +?붴??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? ``` --- -## 핵심 데이터 흐름 +## ?듭떖 ?곗씠???먮쫫 -### 검색 흐름 +### 寃€???먮쫫 -1. 사용자가 런처에 텍스트 입력 -2. `LauncherViewModel.InputText` setter 트리거 -3. `CommandResolver.ResolveAsync(input)` 호출 -4. 프리픽스 일치 → 해당 `IActionHandler.GetItemsAsync()` 호출 -5. 프리픽스 없음 → `FuzzyEngine.Search()` 호출 -6. 결과를 `ObservableCollection`에 바인딩 -7. `LauncherWindow` ListView 자동 갱신 +1. ?ъ슜?먭? ?곗쿂???띿뒪???낅젰 +2. `LauncherViewModel.InputText` setter ?몃━嫄? +3. `CommandResolver.ResolveAsync(input)` ?몄텧 +4. ?꾨━?쎌뒪 ?쇱튂 ???대떦 `IActionHandler.GetItemsAsync()` ?몄텧 +5. ?꾨━?쎌뒪 ?놁쓬 ??`FuzzyEngine.Search()` ?몄텧 +6. 寃곌낵瑜?`ObservableCollection`??諛붿씤?? +7. `LauncherWindow` ListView ?먮룞 媛깆떊 -### 실행 흐름 +### ?ㅽ뻾 ?먮쫫 -1. 사용자가 `Enter` 키 입력 -2. `LauncherViewModel.ExecuteSelectedAsync()` 호출 -3. `CommandResolver.ExecuteAsync(item, lastInput)` 호출 -4. 프리픽스 있음 → `handler.ExecuteAsync(item)` 위임 -5. 프리픽스 없음 → `IndexEntry.Path`를 `Process.Start`로 실행 -6. 런처 창 자동 숨김 +1. ?ъ슜?먭? `Enter` ???낅젰 +2. `LauncherViewModel.ExecuteSelectedAsync()` ?몄텧 +3. `CommandResolver.ExecuteAsync(item, lastInput)` ?몄텧 +4. ?꾨━?쎌뒪 ?덉쓬 ??`handler.ExecuteAsync(item)` ?꾩엫 +5. ?꾨━?쎌뒪 ?놁쓬 ??`IndexEntry.Path`瑜?`Process.Start`濡??ㅽ뻾 +6. ?곗쿂 李??먮룞 ?④? -### 테마 전환 흐름 +### ?뚮쭏 ?꾪솚 ?먮쫫 -1. 설정 창 테마 탭에서 카드 클릭 -2. `SettingsViewModel.SelectTheme(key)` 호출 -3. `ThemePreviewRequested` 이벤트 발생 -4. `App.PreviewCallback` → `LauncherWindow.ApplyTheme(key)` 호출 -5. `Application.Current.Resources.MergedDictionaries` 교체 (런타임 핫스왑) -6. 설정 저장 없이 닫으면 `RevertCallback`으로 원복 +1. ?ㅼ젙 李??뚮쭏 ??뿉??移대뱶 ?대┃ +2. `SettingsViewModel.SelectTheme(key)` ?몄텧 +3. `ThemePreviewRequested` ?대깽??諛쒖깮 +4. `App.PreviewCallback` ??`LauncherWindow.ApplyTheme(key)` ?몄텧 +5. `Application.Current.Resources.MergedDictionaries` 援먯껜 (?고????レ뒪?? +6. ?ㅼ젙 ?€???놁씠 ?レ쑝硫?`RevertCallback`?쇰줈 ?먮났 --- -## 각 핸들러 상세 +## 媛??몃뱾???곸꽭 ### CalculatorHandler (`=`) -- **엔진**: `MathEvaluator` 재귀 하강 파서 (외부 의존성 없음) -- **연산자**: `+`, `-`, `*`, `/`, `%`, `^` (거듭제곱) -- **함수**: `sqrt`, `abs`, `ceil`, `floor`, `round`, `sin`, `cos`, `tan`, `asin`, `acos`, `atan`, `log`, `log2`, `ln`, `exp`, `pow`, `min`, `max` -- **상수**: `pi`, `e`, `inf` -- **리터럴**: 일반 정수/소수, 16진수(`0xFF`), 과학적 표기(`1.5e3`) -- **단위 변환**: `100km in miles`, `32f in c`, `5lb to kg` 등 (길이/온도/무게/속도/데이터/넓이) -- **통화 변환**: `100 USD to KRW`, `50 EUR in JPY` — `open.er-api.com` 무료 API, 1시간 캐시 -- **실행**: 결과를 클립보드에 복사 +- **?붿쭊**: `MathEvaluator` ?ш? ?섍컯 ?뚯꽌 (?몃? ?섏〈???놁쓬) +- **?곗궛??*: `+`, `-`, `*`, `/`, `%`, `^` (嫄곕벊?쒓낢) +- **?⑥닔**: `sqrt`, `abs`, `ceil`, `floor`, `round`, `sin`, `cos`, `tan`, `asin`, `acos`, `atan`, `log`, `log2`, `ln`, `exp`, `pow`, `min`, `max` +- **?곸닔**: `pi`, `e`, `inf` +- **由ы꽣??*: ?쇰컲 ?뺤닔/?뚯닔, 16吏꾩닔(`0xFF`), 怨쇳븰???쒓린(`1.5e3`) +- **?⑥쐞 蹂€??*: `100km in miles`, `32f in c`, `5lb to kg` ??(湲몄씠/?⑤룄/臾닿쾶/?띾룄/?곗씠???볦씠) +- **?듯솕 蹂€??*: `100 USD to KRW`, `50 EUR in JPY` ??`open.er-api.com` 臾대즺 API, 1?쒓컙 罹먯떆 +- **?ㅽ뻾**: 寃곌낵瑜??대┰蹂대뱶??蹂듭궗 ### SystemCommandHandler (`/`) -| 명령 | 기능 | P/Invoke | +| 紐낅졊 | 湲곕뒫 | P/Invoke | |------|------|----------| -| `/lock` | 화면 잠금 | `user32.LockWorkStation` | -| `/sleep` | 절전 | `WinForms.SetSuspendState(Suspend)` | -| `/hibernate` | 최대 절전 | `WinForms.SetSuspendState(Hibernate)` | -| `/restart` | 재시작 | `shutdown /r /t 5` | -| `/shutdown` | 종료 | `shutdown /s /t 5` | -| `/logout` | 로그아웃 | `user32.ExitWindowsEx(EWX_LOGOFF)` | -| `/recycle` | 휴지통 비우기 | `shell32.SHEmptyRecycleBin` | -| `/timer 5m` | 타이머 | `Task.Delay` + `NotificationService.Notify` | -| `/timer 1h30m 회의` | 라벨 포함 타이머 | 위와 동일 | -| `/alarm 14:30` | 지정 시각 알람 | 목표 시각 미래 계산 + `Task.Delay` | +| `/lock` | ?붾㈃ ?좉툑 | `user32.LockWorkStation` | +| `/sleep` | ?덉쟾 | `WinForms.SetSuspendState(Suspend)` | +| `/hibernate` | 理쒕? ?덉쟾 | `WinForms.SetSuspendState(Hibernate)` | +| `/restart` | ?ъ떆??| `shutdown /r /t 5` | +| `/shutdown` | 醫낅즺 | `shutdown /s /t 5` | +| `/logout` | 濡쒓렇?꾩썐 | `user32.ExitWindowsEx(EWX_LOGOFF)` | +| `/recycle` | ?댁???鍮꾩슦湲?| `shell32.SHEmptyRecycleBin` | +| `/timer 5m` | ?€?대㉧ | `Task.Delay` + `NotificationService.Notify` | +| `/timer 1h30m ?뚯쓽` | ?쇰꺼 ?ы븿 ?€?대㉧ | ?꾩? ?숈씪 | +| `/alarm 14:30` | 吏€???쒓컖 ?뚮엺 | 紐⑺몴 ?쒓컖 誘몃옒 怨꾩궛 + `Task.Delay` | -각 명령은 `SystemCommandSettings`에서 개별 활성화/비활성화 가능. -위험한 명령(재시작, 종료 등)은 실행 전 커스텀 확인 다이얼로그를 표시합니다. -타이머/알람 완료 시 트레이 풍선 알림(`NotificationService.Notify`). +媛?紐낅졊?€ `SystemCommandSettings`?먯꽌 媛쒕퀎 ?쒖꽦??鍮꾪솢?깊솕 媛€?? +?꾪뿕??紐낅졊(?ъ떆?? 醫낅즺 ???€ ?ㅽ뻾 ??而ㅼ뒪?€ ?뺤씤 ?ㅼ씠?쇰줈洹몃? ?쒖떆?⑸땲?? +?€?대㉧/?뚮엺 ?꾨즺 ???몃젅???띿꽑 ?뚮┝(`NotificationService.Notify`). -**명령 별칭** (v0.8 추가): `CommandAliases` 딕셔너리로 명령키별 별칭 목록 설정 가능. +**紐낅졊 蹂꾩묶** (v0.8 異붽?): `CommandAliases` ?뺤뀛?덈━濡?紐낅졊?ㅻ퀎 蹂꾩묶 紐⑸줉 ?ㅼ젙 媛€?? ```json "commandAliases": { - "lock": ["잠금", "l"], - "sleep": ["절전", "s"], - "restart": ["재시작", "r"], - "shutdown": ["종료"], - "logout": ["로그아웃"] + "lock": ["?좉툑", "l"], + "sleep": ["?덉쟾", "s"], + "restart": ["?ъ떆??, "r"], + "shutdown": ["醫낅즺"], + "logout": ["濡쒓렇?꾩썐"] } ``` -예) `/잠금` 또는 `/l` 입력 시 화면 잠금 실행. 설정 UI의 시스템 탭에서 쉼표 구분으로 편집 가능. +?? `/?좉툑` ?먮뒗 `/l` ?낅젰 ???붾㈃ ?좉툑 ?ㅽ뻾. ?ㅼ젙 UI???쒖뒪????뿉???쇳몴 援щ텇?쇰줈 ?몄쭛 媛€?? ### EmojiHandler (`emoji`) -- 300+ 이모지 내장 (한국어+영어 키워드 태그) -- **사용**: `emoji 하트`, `emoji wave`, `emoji` (기본 30개) -- **실행**: 이모지 문자를 클립보드에 복사 -- **카테고리**: 표정/감정, 손/몸, 하트/기호, 음식, 동물, 물건/도구, 이동수단, 장소, 기호 +- 300+ ?대え吏€ ?댁옣 (?쒓뎅???곸뼱 ?ㅼ썙???쒓렇) +- **?ъ슜**: `emoji ?섑듃`, `emoji wave`, `emoji` (湲곕낯 30媛? +- **?ㅽ뻾**: ?대え吏€ 臾몄옄瑜??대┰蹂대뱶??蹂듭궗 +- **移댄뀒怨좊━**: ?쒖젙/媛먯젙, ??紐? ?섑듃/湲고샇, ?뚯떇, ?숇Ъ, 臾쇨굔/?꾧뎄, ?대룞?섎떒, ?μ냼, 湲고샇 ### ColorHandler (`color`) -- **입력 형식**: HEX(`#FF5500`), RGB(`255,85,0` / `rgb(255,85,0)`), RGBA, HSL(`hsl(24,100%,50%)`), 색상 이름(`red`, `빨강`) -- **출력**: HEX / RGB / HSL / HSV 4가지 형식 동시 표시 -- **색상 이름**: 30+ 한/영 색상 이름 지원 (red, 빨강, skyblue, 하늘색 등) -- **실행**: 선택한 형식을 클립보드에 복사 +- **?낅젰 ?뺤떇**: HEX(`#FF5500`), RGB(`255,85,0` / `rgb(255,85,0)`), RGBA, HSL(`hsl(24,100%,50%)`), ?됱긽 ?대쫫(`red`, `鍮④컯`) +- **異쒕젰**: HEX / RGB / HSL / HSV 4媛€吏€ ?뺤떇 ?숈떆 ?쒖떆 +- **?됱긽 ?대쫫**: 30+ ?????됱긽 ?대쫫 吏€??(red, 鍮④컯, skyblue, ?섎뒛???? +- **?ㅽ뻾**: ?좏깮???뺤떇???대┰蹂대뱶??蹂듭궗 ### RecentFilesHandler (`recent`) -- `%APPDATA%\Microsoft\Windows\Recent` 폴더의 `.lnk` 파일 읽기 -- 최근 수정 순 정렬, 최대 100개 스캔 → 20개 표시 -- 10초 캐시 -- **실행**: Windows 셸이 `.lnk` 링크를 따라 원본 파일 실행 +- `%APPDATA%\Microsoft\Windows\Recent` ?대뜑??`.lnk` ?뚯씪 ?쎄린 +- 理쒓렐 ?섏젙 ???뺣젹, 理쒕? 100媛??ㅼ틪 ??20媛??쒖떆 +- 10珥?罹먯떆 +- **?ㅽ뻾**: Windows ?몄씠 `.lnk` 留곹겕瑜??곕씪 ?먮낯 ?뚯씪 ?ㅽ뻾 ### NoteHandler (`note`) -- **저장**: `note 내일 회의 9시` → `%APPDATA%\AxCommander\notes.txt` 에 타임스탬프와 함께 append -- **조회**: `note` → 최근 10개 역순 표시 (Enter로 클립보드 복사) -- **전체 삭제**: `note clear` 또는 목록 맨 아래 항목 선택 -- **알림**: 저장 시 트레이 풍선 알림 표시 +- **?€??*: `note ?댁씪 ?뚯쓽 9?? ??`%APPDATA%\AxCommander\notes.txt` ???€?꾩뒪?ы봽?€ ?④퍡 append +- **議고쉶**: `note` ??理쒓렐 10媛???닚 ?쒖떆 (Enter濡??대┰蹂대뱶 蹂듭궗) +- **?꾩껜 ??젣**: `note clear` ?먮뒗 紐⑸줉 留??꾨옒 ??ぉ ?좏깮 +- **?뚮┝**: ?€?????몃젅???띿꽑 ?뚮┝ ?쒖떆 ### UninstallHandler (`uninstall`) -- `HKLM\SOFTWARE\...\Uninstall` + `HKCU\SOFTWARE\...\Uninstall` 레지스트리 스캔 -- `WOW6432Node` 경로도 포함 (32비트 앱) -- 이름 / 게시자로 검색, 30초 캐시 -- **실행**: `UninstallString` 파싱 후 `Process.Start` — `msiexec` 자동 처리 -- 시스템 구성 요소(`SystemComponent=1`) 및 KB 패치 자동 필터링 +- `HKLM\SOFTWARE\...\Uninstall` + `HKCU\SOFTWARE\...\Uninstall` ?덉??ㅽ듃由??ㅼ틪 +- `WOW6432Node` 寃쎈줈???ы븿 (32鍮꾪듃 ?? +- ?대쫫 / 寃뚯떆?먮줈 寃€?? 30珥?罹먯떆 +- **?ㅽ뻾**: `UninstallString` ?뚯떛 ??`Process.Start` ??`msiexec` ?먮룞 泥섎━ +- ?쒖뒪??援ъ꽦 ?붿냼(`SystemComponent=1`) 諛?KB ?⑥튂 ?먮룞 ?꾪꽣留? ### SnippetHandler (`;`) -- 설정 `snippets[]` 배열에서 키워드를 퍼지 검색 -- **변수 치환**: `{date}`, `{time}`, `{datetime}`, `{year}`, `{month}`, `{day}` -- **붙여넣기**: `Clipboard.SetText` 후 `SendInput(Ctrl+V)` 시뮬레이션 (100ms 지연) +- ?ㅼ젙 `snippets[]` 諛곗뿴?먯꽌 ?ㅼ썙?쒕? ?쇱? 寃€?? +- **蹂€??移섑솚**: `{date}`, `{time}`, `{datetime}`, `{year}`, `{month}`, `{day}` +- **遺숈뿬?j린**: `Clipboard.SetText` ??`SendInput(Ctrl+V)` ?쒕??덉씠??(100ms 吏€?? ### ClipboardHistoryService + ClipboardHistoryHandler (`#`) -- `HwndSource(HWND_MESSAGE)` 기반 숨겨진 메시지 창 생성 -- `AddClipboardFormatListener` + `WM_CLIPBOARDUPDATE` 훅 -- 최대 `maxItems`개 저장 (기본 50), FIFO 방식 -- **보안 제외 패턴**: `ExcludePatterns` Regex 목록으로 민감 데이터 자동 제외 -- `SuppressNextCapture()`: 자체 붙여넣기 시 중복 기록 방지 +- `HwndSource(HWND_MESSAGE)` 湲곕컲 ?④꺼吏?硫붿떆吏€ 李??앹꽦 +- `AddClipboardFormatListener` + `WM_CLIPBOARDUPDATE` ?? +- 理쒕? `maxItems`媛??€??(湲곕낯 50), FIFO 諛⑹떇 +- **蹂댁븞 ?쒖쇅 ?⑦꽩**: `ExcludePatterns` Regex 紐⑸줉?쇰줈 誘쇨컧 ?곗씠???먮룞 ?쒖쇅 +- `SuppressNextCapture()`: ?먯껜 遺숈뿬?j린 ??以묐났 湲곕줉 諛⑹? ### ClipboardHandler (`$`) -12가지 내장 변환기: +12媛€吏€ ?댁옣 蹂€?섍린: -| 키 | 변환 | +| ??| 蹂€??| |----|------| -| `$json` | JSON 포맷팅 | -| `$upper` / `$lower` | 대/소문자 변환 | -| `$ts` | Unix 타임스탬프 → 날짜 | -| `$epoch` | 날짜 → Unix 타임스탬프 | -| `$urle` / `$urld` | URL 인코딩/디코딩 | -| `$b64e` / `$b64d` | Base64 인코딩/디코딩 | -| `$md` | Markdown 제거 | -| `$trim` | 공백 정리 | -| `$lines` | 빈 줄 제거 | +| `$json` | JSON ?щ㎎??| +| `$upper` / `$lower` | ?€/?뚮Ц??蹂€??| +| `$ts` | Unix ?€?꾩뒪?ы봽 ???좎쭨 | +| `$epoch` | ?좎쭨 ??Unix ?€?꾩뒪?ы봽 | +| `$urle` / `$urld` | URL ?몄퐫???붿퐫??| +| `$b64e` / `$b64d` | Base64 ?몄퐫???붿퐫??| +| `$md` | Markdown ?쒓굅 | +| `$trim` | 怨듬갚 ?뺣━ | +| `$lines` | 鍮?以??쒓굅 | --- -## 설정 UI (SettingsWindow) +## ?ㅼ젙 UI (SettingsWindow) -### 레이아웃 구조 +### ?덉씠?꾩썐 援ъ“ -설정 창(`SettingsWindow.xaml`)은 **좌측 사이드바 + 우측 컨텐츠** 방식으로 구성됩니다. -WPF `TabControl`의 커스텀 `ControlTemplate`으로 구현되며, `TabStripPlacement="Left"`를 사용합니다. +?ㅼ젙 李?`SettingsWindow.xaml`)?€ **醫뚯륫 ?ъ씠?쒕컮 + ?곗륫 而⑦뀗痢?* 諛⑹떇?쇰줈 援ъ꽦?⑸땲?? +WPF `TabControl`??而ㅼ뒪?€ `ControlTemplate`?쇰줈 援ы쁽?섎ʼn, `TabStripPlacement="Left"`瑜??ъ슜?⑸땲?? ``` -┌──────────────────────────────────────────────────────────┐ -│ 820 × 610 │ -│ ┌────────────┐ ┌────────────────────────────────────┐ │ -│ │ AX │ │ │ │ -│ │ Commander │ │ 선택된 탭의 컨텐츠 │ │ -│ │────────────│ │ (ScrollViewer + StackPanel) │ │ -│ │ ● 일반 │ │ │ │ -│ │ 테마 │ │ │ │ -│ │ 색상 편집 │ │ │ │ -│ │ 스니펫 │ │ │ │ -│ │ 클립보드 │ │ │ │ -│ │ 시스템 │ │ │ │ -│ │ 빠른 실행 │ │ │ │ -│ │ 배치 명령 │ │ │ │ -│ │ 캡처 │ │ │ │ -│ │ 알림 │ │ │ │ -│ └────────────┘ └────────────────────────────────────┘ │ -│ ─────────────────────────────────────────────────────── │ -│ AX Commander · v0.0 [취소] [💾 저장] │ -└──────────────────────────────────────────────────────────┘ +?뚢??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? +??820 횞 610 ?? +???뚢??€?€?€?€?€?€?€?€?€?€?€???뚢??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? ?? +????AX ???? ?? ?? +????Commander ???? ?좏깮????쓽 而⑦뀗痢? ?? ?? +???귘??€?€?€?€?€?€?€?€?€?€?€???? (ScrollViewer + StackPanel) ?? ?? +???????쇰컲 ???? ?? ?? +???? ?뚮쭏 ???? ?? ?? +???? ?됱긽 ?몄쭛 ???? ?? ?? +???? ?ㅻ땲?? ???? ?? ?? +???? ?대┰蹂대뱶 ???? ?? ?? +???? ?쒖뒪?? ???? ?? ?? +???? 鍮좊Ⅸ ?ㅽ뻾 ???? ?? ?? +???? 諛곗튂 紐낅졊 ???? ?? ?? +???? 罹≪쿂 ???? ?? ?? +???? ?뚮┝ ???? ?? ?? +???붴??€?€?€?€?€?€?€?€?€?€?€???붴??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? ?? +???€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€ ?? +?? AX Commander 쨌 v0.0 [痍⑥냼] [?뮶 ?€?? ?? +?붴??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? ``` -### 탭 구성 +### ??援ъ꽦 -| 탭 | MDL2 아이콘 | 주요 설정 항목 | +| ??| MDL2 ?꾩씠肄?| 二쇱슂 ?ㅼ젙 ??ぉ | |----|------------|--------------| -| 일반 | E713 | 글로벌 단축키, 최대 결과 수, **기본 검색 엔진**, 투명도, **런처 위치**, 인덱스 경로, **검색 확장자** (태그형 UI, 추가/삭제 가능) | -| 테마 | E790 | 11개 테마 카드 (클릭 → 즉시 미리보기): Dark/Light/OLED/Nord/Monokai/Catppuccin/Sepia/Alfred/Alfred Light/System/Custom | -| 색상 편집 | E771 | 커스텀 테마 14개 색상 (커스텀 선택 시만 활성) | -| 스니펫 | E70B | **자동 확장 토글**, 스니펫 추가/삭제, 변수 치환 안내 | -| 클립보드 | E77F | 활성화 토글, 최대 보관 개수, 보안 패턴 표시 | -| 시스템 | E7E8 | 7개 시스템 명령 개별 활성화/비활성화, **명령별 별칭 편집**, **별칭 기본값 초기화** | -| 빠른 실행 | E7C3 | 키워드→앱/URL/폴더 단축키 추가/삭제 | -| 배치 명령 | E756 | **`>` 프리픽스 배치 명령 추가/삭제, ShowWindow 옵션** | -| 캡처 | E722 | `cap` 프리픽스 문자열 변경, 파일 자동 저장 토글·저장 경로 설정 | -| 알림 | EA8F | 잠금 해제 알림 활성화 토글, 표시 위치(4방향), 표시 간격, 자동 닫힘 시간 | +| ?쇰컲 | E713 | 湲€濡쒕쾶 ?⑥텞?? 理쒕? 寃곌낵 ?? **湲곕낯 寃€???붿쭊**, ?щ챸?? **?곗쿂 ?꾩튂**, ?몃뜳??寃쎈줈, **寃€???뺤옣??* (?쒓렇??UI, 異붽?/??젣 媛€?? | +| ?뚮쭏 | E790 | 11媛??뚮쭏 移대뱶 (?대┃ ??利됱떆 誘몃━蹂닿린): Dark/Light/OLED/Nord/Monokai/Catppuccin/Sepia/Alfred/Alfred Light/System/Custom | +| ?됱긽 ?몄쭛 | E771 | 而ㅼ뒪?€ ?뚮쭏 14媛??됱긽 (而ㅼ뒪?€ ?좏깮 ?쒕쭔 ?쒖꽦) | +| ?ㅻ땲??| E70B | **?먮룞 ?뺤옣 ?좉?**, ?ㅻ땲??異붽?/??젣, 蹂€??移섑솚 ?덈궡 | +| ?대┰蹂대뱶 | E77F | ?쒖꽦???좉?, 理쒕? 蹂닿? 媛쒖닔, 蹂댁븞 ?⑦꽩 ?쒖떆 | +| ?쒖뒪??| E7E8 | 7媛??쒖뒪??紐낅졊 媛쒕퀎 ?쒖꽦??鍮꾪솢?깊솕, **紐낅졊蹂?蹂꾩묶 ?몄쭛**, **蹂꾩묶 湲곕낯媛?珥덇린??* | +| 鍮좊Ⅸ ?ㅽ뻾 | E7C3 | ?ㅼ썙?쒋넂??URL/?대뜑 ?⑥텞??異붽?/??젣 | +| 諛곗튂 紐낅졊 | E756 | **`>` ?꾨━?쎌뒪 諛곗튂 紐낅졊 異붽?/??젣, ShowWindow ?듭뀡** | +| 罹≪쿂 | E722 | `cap` ?꾨━?쎌뒪 臾몄옄??蹂€寃? ?뚯씪 ?먮룞 ?€???좉?쨌?€??寃쎈줈 ?ㅼ젙 | +| ?뚮┝ | EA8F | ?좉툑 ?댁젣 ?뚮┝ ?쒖꽦???좉?, ?쒖떆 ?꾩튂(4諛⑺뼢), ?쒖떆 媛꾧꺽, ?먮룞 ?ロ옒 ?쒓컙 | -### 디자인 시스템 +### ?붿옄???쒖뒪?? -**컬러 아이콘 박스** — 각 설정 행 좌측에 `36×36 CornerRadius="9"` 박스로 기능을 시각적으로 구분합니다. +**而щ윭 ?꾩씠肄?諛뺤뒪** ??媛??ㅼ젙 ??醫뚯륫??`36횞36 CornerRadius="9"` 諛뺤뒪濡?湲곕뒫???쒓컖?곸쑝濡?援щ텇?⑸땲?? -| 기능 영역 | 배경색 | +| 湲곕뒫 ?곸뿭 | 諛곌꼍??| |----------|--------| -| 단축키 / 빠른 실행 | `#4B5EFC` | -| 검색 | `#00A8CC` | -| 투명도 / 절전 | `#7B2FBE` | -| 스니펫 | `#FF6B35` | -| 클립보드 활성화 | `#20B2AA` | -| 보관 개수 | `#FF8C42` | -| 보안 / 화면 잠금 | `#C50F1F` | -| 재시작 | `#107C10` | -| 시스템 종료 | `#C50F1F` | -| 로그아웃 | `#CA5010` | +| ?⑥텞??/ 鍮좊Ⅸ ?ㅽ뻾 | `#4B5EFC` | +| 寃€??| `#00A8CC` | +| ?щ챸??/ ?덉쟾 | `#7B2FBE` | +| ?ㅻ땲??| `#FF6B35` | +| ?대┰蹂대뱶 ?쒖꽦??| `#20B2AA` | +| 蹂닿? 媛쒖닔 | `#FF8C42` | +| 蹂댁븞 / ?붾㈃ ?좉툑 | `#C50F1F` | +| ?ъ떆??| `#107C10` | +| ?쒖뒪??醫낅즺 | `#C50F1F` | +| 濡쒓렇?꾩썐 | `#CA5010` | -**토글 스위치** (`ToggleSwitch` 스타일) — iOS 스타일의 커스텀 `CheckBox` 스타일. 클립보드 활성화와 시스템 명령 7개에 적용. +**?좉? ?ㅼ쐞移?* (`ToggleSwitch` ?ㅽ??? ??iOS ?ㅽ??쇱쓽 而ㅼ뒪?€ `CheckBox` ?ㅽ??? ?대┰蹂대뱶 ?쒖꽦?붿? ?쒖뒪??紐낅졊 7媛쒖뿉 ?곸슜. ``` -OFF: [○──────] 배경: #D0D0E0 -ON: [──────●] 배경: #4B5EFC +OFF: [?뗢??€?€?€?€?€] 諛곌꼍: #D0D0E0 +ON: [?€?€?€?€?€?€?? 諛곌꼍: #4B5EFC ``` -**SideNavItem 스타일** — 탭 선택 상태: -- 선택됨: 좌측 3px `#4B5EFC` accent bar + `#EEF0FF` 배경 + SemiBold 텍스트 -- 호버: `#F4F4FF` 배경 -- 비선택: 투명 배경 +**SideNavItem ?ㅽ???* ?????좏깮 ?곹깭: +- ?좏깮?? 醫뚯륫 3px `#4B5EFC` accent bar + `#EEF0FF` 諛곌꼍 + SemiBold ?띿뒪?? +- ?몃쾭: `#F4F4FF` 諛곌꼍 +- 鍮꾩꽑?? ?щ챸 諛곌꼍 -### SettingsViewModel 보조 모델 +### SettingsViewModel 蹂댁“ 紐⑤뜽 ```csharp -// 테마 카드 (테마 탭) +// ?뚮쭏 移대뱶 (?뚮쭏 ?? class ThemeCardModel { Key, Name, PreviewBackground/Text/Accent/..., IsSelected } -// 커스텀 색상 행 (색상 편집 탭) +// 而ㅼ뒪?€ ?됱긽 ??(?됱긽 ?몄쭛 ?? class ColorRowModel { Label, Property, Hex, Preview(SolidColorBrush) } -// 빠른 실행 단축키 (빠른 실행 탭) +// 鍮좊Ⅸ ?ㅽ뻾 ?⑥텞??(鍮좊Ⅸ ?ㅽ뻾 ?? class AppShortcutModel { Key, Description, Target, Type, TypeSymbol, TypeLabel } -// 스니펫 행 (스니펫 탭) +// ?ㅻ땲????(?ㅻ땲???? class SnippetRowModel { Key, Name, Content, Preview } -// 배치 명령 행 (배치 명령 탭) +// 諛곗튂 紐낅졊 ??(諛곗튂 紐낅졊 ?? class BatchCommandModel { Key, Command, ShowWindow } ``` --- -## 설정 스키마 (`settings.json`) +## ?ㅼ젙 ?ㅽ궎留?(`settings.json`) ```jsonc { @@ -508,8 +512,8 @@ class BatchCommandModel { Key, Command, ShowWindow } "width": 680, "position": "center-top", // center-top|center|bottom "webSearchEngine": "g", // g|n|d|y|w (Google|Naver|DuckDuckGo|YouTube|Wikipedia) - "snippetAutoExpand": true, // 글로벌 스니펫 자동 확장 활성화 - "customTheme": { /* 14개 색상 키 */ } + "snippetAutoExpand": true, // 湲€濡쒕쾶 ?ㅻ땲???먮룞 ?뺤옣 ?쒖꽦?? + "customTheme": { /* 14媛??됱긽 ??*/ } }, "indexPaths": [ "%USERPROFILE%\\Desktop", @@ -526,11 +530,11 @@ class BatchCommandModel { Key, Command, ShowWindow } { "key": "vscode", "type": "app", "target": "C:\\...\\Code.exe", "description": "VS Code" }, { "key": "gh", "type": "url", "target": "https://github.com" }, { "key": "dl", "type": "folder", "target": "%USERPROFILE%\\Downloads" }, - { "key": "build", "type": "batch", "target": "dotnet build", "description": "빌드", "showWindow": true }, - { "key": "test", "type": "batch", "target": "dotnet test", "description": "테스트", "showWindow": false } + { "key": "build", "type": "batch", "target": "dotnet build", "description": "鍮뚮뱶", "showWindow": true }, + { "key": "test", "type": "batch", "target": "dotnet test", "description": "?뚯뒪??, "showWindow": false } ], "snippets": [ - { "key": "addr", "name": "회사 주소", "content": "서울시 강남구 ..." } + { "key": "addr", "name": "?뚯궗 二쇱냼", "content": "?쒖슱??媛뺣궓援?..." } ], "clipboardHistory": { "enabled": true, @@ -542,12 +546,12 @@ class BatchCommandModel { Key, Command, ShowWindow } "showShutdown": true, "showHibernate": false, "showLogout": true, "showRecycleBin": true, "commandAliases": { - "lock": ["잠금", "l"], - "sleep": ["절전", "s"], - "restart": ["재시작"], - "shutdown": ["종료"], + "lock": ["?좉툑", "l"], + "sleep": ["?덉쟾", "s"], + "restart": ["?ъ떆??], + "shutdown": ["醫낅즺"], "hibernate": [], - "logout": ["로그아웃"], + "logout": ["濡쒓렇?꾩썐"], "recycle": [] } }, @@ -555,18 +559,18 @@ class BatchCommandModel { Key, Command, ShowWindow } { "key": "$mine", "type": "regex", "pattern": "foo", "replace": "bar", "timeout": 2000 } ], "screenCapture": { - "prefix": "cap", // cap 프리픽스 문자열 (변경 가능) - "saveToFile": false, // true면 캡처 결과를 파일로도 저장 - "savePath": "" // 빈 문자열이면 %USERPROFILE%\Pictures\Screenshots\ + "prefix": "cap", // cap ?꾨━?쎌뒪 臾몄옄??(蹂€寃?媛€?? + "saveToFile": false, // true硫?罹≪쿂 寃곌낵瑜??뚯씪濡쒕룄 ?€?? + "savePath": "" // 鍮?臾몄옄?댁씠硫?%USERPROFILE%\Pictures\Screenshots\ }, "reminder": { - "enabled": false, // 잠금 해제 사용시간 알림 활성화 + "enabled": false, // ?좉툑 ?댁젣 ?ъ슜?쒓컙 ?뚮┝ ?쒖꽦?? "position": "BottomRight", // TopLeft|TopRight|BottomLeft|BottomRight - "intervalMinutes": 60, // 알림 최소 간격 (분): 30|60|120|240 - "autoDismissSeconds": 10 // 자동 닫힘 초: 5|10|15|20|30 + "intervalMinutes": 60, // ?뚮┝ 理쒖냼 媛꾧꺽 (遺?: 30|60|120|240 + "autoDismissSeconds": 10 // ?먮룞 ?ロ옒 珥? 5|10|15|20|30 }, "monitorMismatch": "warn", // fit|skip|warn - "profiles": [], // !save로 자동 관리 + "profiles": [], // !save濡??먮룞 愿€由? "plugins": [ { "path": "C:\\Plugins\\MyPlugin.dll", "enabled": true } ] @@ -575,469 +579,469 @@ class BatchCommandModel { Key, Command, ShowWindow } --- -## 주요 기능 상세 +## 二쇱슂 湲곕뒫 ?곸꽭 -### 파일 액션 서브메뉴 (`→` 키) +### ?뚯씪 ?≪뀡 ?쒕툕硫붾돱 (`?? ?? -검색 결과에서 파일이나 앱(IndexEntry)이 선택된 상태에서 `→` 키(커서가 입력 끝에 있을 때)를 누르면 파일 액션 서브메뉴로 진입합니다. +寃€??寃곌낵?먯꽌 ?뚯씪?대굹 ??IndexEntry)???좏깮???곹깭?먯꽌 `?? ??而ㅼ꽌媛€ ?낅젰 ?앹뿉 ?덉쓣 ??瑜??꾨Ⅴ硫??뚯씪 ?≪뀡 ?쒕툕硫붾돱濡?吏꾩엯?⑸땲?? -**진입 조건**: `InputBox.CaretIndex == Text.Length && Text.Length > 0 && SelectedItem.Data is IndexEntry` +**吏꾩엯 議곌굔**: `InputBox.CaretIndex == Text.Length && Text.Length > 0 && SelectedItem.Data is IndexEntry` -**제공 액션**: +**?쒓났 ?≪뀡**: -| 액션 | 설명 | 구현 | +| ?≪뀡 | ?ㅻ챸 | 援ы쁽 | |------|------|------| -| 경로 복사 | 파일 전체 경로를 클립보드에 복사 | `Clipboard.SetText(path)` | -| 파일 탐색기에서 열기 | 탐색기에서 해당 파일을 선택 상태로 표시 | `explorer.exe /select,"path"` | -| 관리자 권한으로 실행 | UAC 권한 상승 후 실행 (파일만, 폴더 제외) | `ProcessStartInfo { Verb = "runas" }` | -| 터미널에서 열기 | Windows Terminal 또는 cmd.exe로 해당 경로 열기 | `wt.exe -d "dir"` → 실패 시 `cmd.exe /k cd /d "dir"` | +| 寃쎈줈 蹂듭궗 | ?뚯씪 ?꾩껜 寃쎈줈瑜??대┰蹂대뱶??蹂듭궗 | `Clipboard.SetText(path)` | +| ?뚯씪 ?먯깋湲곗뿉???닿린 | ?먯깋湲곗뿉???대떦 ?뚯씪???좏깮 ?곹깭濡??쒖떆 | `explorer.exe /select,"path"` | +| 愿€由ъ옄 沅뚰븳?쇰줈 ?ㅽ뻾 | UAC 沅뚰븳 ?곸듅 ???ㅽ뻾 (?뚯씪留? ?대뜑 ?쒖쇅) | `ProcessStartInfo { Verb = "runas" }` | +| ?곕??먯뿉???닿린 | Windows Terminal ?먮뒗 cmd.exe濡??대떦 寃쎈줈 ?닿린 | `wt.exe -d "dir"` ???ㅽ뙣 ??`cmd.exe /k cd /d "dir"` | -**상태 흐름**: +**?곹깭 ?먮쫫**: ``` -일반 모드 → [→ 키] → 액션 모드 (breadcrumb 바 표시) → [Enter] → 액션 실행 + 닫기 - → [Esc] → 일반 모드 복귀 (이전 쿼리 복원) +?쇰컲 紐⑤뱶 ??[???? ???≪뀡 紐⑤뱶 (breadcrumb 諛??쒖떆) ??[Enter] ???≪뀡 ?ㅽ뻾 + ?リ린 + ??[Esc] ???쇰컲 紐⑤뱶 蹂듦? (?댁쟾 荑쇰━ 蹂듭썝) ``` -**관련 코드**: -- `LauncherViewModel.EnterActionMode()` — 액션 항목 빌드 및 `_savedQuery` 저장 -- `LauncherViewModel.ExitActionMode()` — 이전 쿼리 복원 및 재검색 -- `LauncherViewModel.ExecuteFileAction()` — 정적 메서드로 액션 실행 -- `LauncherWindow.xaml` — `Grid.Row="1"` breadcrumb 바 (ShowActionModeBar 바인딩) +**愿€??肄붾뱶**: +- `LauncherViewModel.EnterActionMode()` ???≪뀡 ??ぉ 鍮뚮뱶 諛?`_savedQuery` ?€?? +- `LauncherViewModel.ExitActionMode()` ???댁쟾 荑쇰━ 蹂듭썝 諛??ш??? +- `LauncherViewModel.ExecuteFileAction()` ???뺤쟻 硫붿꽌?쒕줈 ?≪뀡 ?ㅽ뻾 +- `LauncherWindow.xaml` ??`Grid.Row="1"` breadcrumb 諛?(ShowActionModeBar 諛붿씤?? --- ### Large Type (`Shift+Enter`) -선택된 항목의 텍스트를 전체 화면 오버레이로 크게 표시합니다. +?좏깮????ぉ???띿뒪?몃? ?꾩껜 ?붾㈃ ?ㅻ쾭?덉씠濡??ш쾶 ?쒖떆?⑸땲?? -**표시 텍스트 우선순위**: -1. 계산기 결과 (`SelectedItem.Data is string`) → 계산 결과값 -2. 클립보드 히스토리 텍스트 (`ClipboardEntry.IsText`) → 전체 텍스트 -3. 기본 → `SelectedItem.Title` +**?쒖떆 ?띿뒪???곗꽑?쒖쐞**: +1. 怨꾩궛湲?寃곌낵 (`SelectedItem.Data is string`) ??怨꾩궛 寃곌낵媛? +2. ?대┰蹂대뱶 ?덉뒪?좊━ ?띿뒪??(`ClipboardEntry.IsText`) ???꾩껜 ?띿뒪?? +3. 湲곕낯 ??`SelectedItem.Title` -**글꼴 크기 자동 결정** (`LargeTypeWindow`): +**湲€瑗??ш린 ?먮룞 寃곗젙** (`LargeTypeWindow`): -| 텍스트 길이 | FontSize | +| ?띿뒪??湲몄씠 | FontSize | |------------|---------| -| ≤ 10자 | 120 | -| ≤ 30자 | 96 | -| ≤ 60자 | 72 | -| ≤ 120자 | 52 | -| 그 외 | 38 | +| ??10??| 120 | +| ??30??| 96 | +| ??60??| 72 | +| ??120??| 52 | +| 洹???| 38 | -`Viewbox Stretch=Uniform`으로 최종 크기를 화면에 맞게 스케일링합니다. +`Viewbox Stretch=Uniform`?쇰줈 理쒖쥌 ?ш린瑜??붾㈃??留욊쾶 ?ㅼ??쇰쭅?⑸땲?? -**닫기**: `Esc` 키 / 화면 클릭 / 우상단 버튼 +**?リ린**: `Esc` ??/ ?붾㈃ ?대┃ / ?곗긽??踰꾪듉 -**관련 코드**: -- `Views/LargeTypeWindow.xaml/.cs` — 전체 화면 오버레이 창 -- `LauncherViewModel.GetLargeTypeText()` — 텍스트 추출 로직 -- `LauncherWindow.xaml.cs` → `ShowLargeType()` → `new LargeTypeWindow(text).Show()` +**愿€??肄붾뱶**: +- `Views/LargeTypeWindow.xaml/.cs` ???꾩껜 ?붾㈃ ?ㅻ쾭?덉씠 李? +- `LauncherViewModel.GetLargeTypeText()` ???띿뒪??異붿텧 濡쒖쭅 +- `LauncherWindow.xaml.cs` ??`ShowLargeType()` ??`new LargeTypeWindow(text).Show()` -> **주의**: 클립보드 병합 대기 항목이 있는 상태에서 `Shift+Enter`를 누르면 Large Type 대신 **클립보드 병합**이 실행됩니다. +> **二쇱쓽**: ?대┰蹂대뱶 蹂묓빀 ?€湲???ぉ???덈뒗 ?곹깭?먯꽌 `Shift+Enter`瑜??꾨Ⅴ硫?Large Type ?€??**?대┰蹂대뱶 蹂묓빀**???ㅽ뻾?⑸땲?? --- -### 클립보드 병합 (`Shift+↑↓`, `Shift+Enter`) +### ?대┰蹂대뱶 蹂묓빀 (`Shift+?묅넃`, `Shift+Enter`) -`#` 프리픽스(클립보드 히스토리) 모드에서 여러 항목을 선택하여 하나로 합쳐 클립보드에 복사합니다. +`#` ?꾨━?쎌뒪(?대┰蹂대뱶 ?덉뒪?좊━) 紐⑤뱶?먯꽌 ?щ윭 ??ぉ???좏깮?섏뿬 ?섎굹濡??⑹퀜 ?대┰蹂대뱶??蹂듭궗?⑸땲?? -**조작법**: +**議곗옉踰?*: -| 키 | 동작 | +| ??| ?숈옉 | |----|------| -| `Shift+↓` | 현재 항목 선택/해제 후 다음 항목으로 이동 | -| `Shift+↑` | 현재 항목 선택/해제 후 이전 항목으로 이동 | -| `Shift+Enter` | 선택된 항목들을 `\n`으로 합쳐 클립보드에 복사 | -| `Esc` | 선택 취소 및 모드 종료 | +| `Shift+?? | ?꾩옱 ??ぉ ?좏깮/?댁젣 ???ㅼ쓬 ??ぉ?쇰줈 ?대룞 | +| `Shift+?? | ?꾩옱 ??ぉ ?좏깮/?댁젣 ???댁쟾 ??ぉ?쇰줈 ?대룞 | +| `Shift+Enter` | ?좏깮????ぉ?ㅼ쓣 `\n`?쇰줈 ?⑹퀜 ?대┰蹂대뱶??蹂듭궗 | +| `Esc` | ?좏깮 痍⑥냼 諛?紐⑤뱶 醫낅즺 | -**힌트 바**: 선택 항목이 있으면 `Grid.Row="3"` 힌트 바 표시 +**?뚰듃 諛?*: ?좏깮 ??ぉ???덉쑝硫?`Grid.Row="3"` ?뚰듃 諛??쒖떆 ``` -✓ 2개 선택됨 · Shift+Enter로 합치기 · Esc로 취소 +??2媛??좏깮?? 쨌 Shift+Enter濡??⑹튂湲? 쨌 Esc濡?痍⑥냼 ``` -**병합 순서**: `Results` 컬렉션의 표시 순서 기준 (HashSet 순서 아님) +**蹂묓빀 ?쒖꽌**: `Results` 而щ젆?섏쓽 ?쒖떆 ?쒖꽌 湲곗? (HashSet ?쒖꽌 ?꾨떂) -**관련 코드**: -- `LauncherViewModel._mergeQueue` — `HashSet` 병합 대기 큐 -- `LauncherViewModel.ToggleMergeItem()` — 항목 추가/제거 토글 -- `LauncherViewModel.ExecuteMerge()` — Results 순서 기준으로 `\n` 결합 후 클립보드 복사 -- `LauncherViewModel.ClearMerge()` — 큐 초기화 +**愿€??肄붾뱶**: +- `LauncherViewModel._mergeQueue` ??`HashSet` 蹂묓빀 ?€湲??? +- `LauncherViewModel.ToggleMergeItem()` ????ぉ 異붽?/?쒓굅 ?좉? +- `LauncherViewModel.ExecuteMerge()` ??Results ?쒖꽌 湲곗??쇰줈 `\n` 寃고빀 ???대┰蹂대뱶 蹂듭궗 +- `LauncherViewModel.ClearMerge()` ????珥덇린?? --- -### 런처 키 바인딩 전체 표 +### ?곗쿂 ??諛붿씤???꾩껜 ?? -| 키 | 동작 | +| ??| ?숈옉 | |----|------| -| `↑` / `↓` | 결과 목록 탐색 | -| `Enter` | 선택 항목 실행 | -| `Shift+Enter` | Large Type 표시 (병합 항목 있으면 클립보드 병합) | -| `→` (커서 끝) | 파일 액션 서브메뉴 진입 | -| `Shift+↓` | 현재 항목 병합 선택 + 다음으로 이동 | -| `Shift+↑` | 현재 항목 병합 선택 + 이전으로 이동 | -| `Tab` | 선택 항목 제목을 입력창에 자동완성 | -| `Esc` | 액션 모드면 이전 화면 복귀 / 아니면 런처 닫기 | -| `Ctrl+,` | 설정 창 열기 | +| `?? / `?? | 寃곌낵 紐⑸줉 ?먯깋 | +| `Enter` | ?좏깮 ??ぉ ?ㅽ뻾 | +| `Shift+Enter` | Large Type ?쒖떆 (蹂묓빀 ??ぉ ?덉쑝硫??대┰蹂대뱶 蹂묓빀) | +| `?? (而ㅼ꽌 ?? | ?뚯씪 ?≪뀡 ?쒕툕硫붾돱 吏꾩엯 | +| `Shift+?? | ?꾩옱 ??ぉ 蹂묓빀 ?좏깮 + ?ㅼ쓬?쇰줈 ?대룞 | +| `Shift+?? | ?꾩옱 ??ぉ 蹂묓빀 ?좏깮 + ?댁쟾?쇰줈 ?대룞 | +| `Tab` | ?좏깮 ??ぉ ?쒕ぉ???낅젰李쎌뿉 ?먮룞?꾩꽦 | +| `Esc` | ?≪뀡 紐⑤뱶硫??댁쟾 ?붾㈃ 蹂듦? / ?꾨땲硫??곗쿂 ?リ린 | +| `Ctrl+,` | ?ㅼ젙 李??닿린 | --- -## 데이터 저장 경로 +## ?곗씠???€??寃쎈줈 -모든 사용자 데이터는 `%APPDATA%\AxCommander\`에 저장됩니다. EXE 실행 파일 옆에는 어떤 파일도 생성하지 않으므로, 어느 경로에서 실행해도 실행 파일 폴더는 깨끗하게 유지됩니다. +紐⑤뱺 ?ъ슜???곗씠?곕뒗 `%APPDATA%\AxCommander\`???€?λ맗?덈떎. EXE ?ㅽ뻾 ?뚯씪 ?놁뿉???대뼡 ?뚯씪???앹꽦?섏? ?딆쑝誘€濡? ?대뒓 寃쎈줈?먯꽌 ?ㅽ뻾?대룄 ?ㅽ뻾 ?뚯씪 ?대뜑??源⑤걮?섍쾶 ?좎??⑸땲?? ``` %APPDATA%\AxCommander\ -├── settings.json # 전체 설정 (JSON 평문) -├── clipboard_history.dat # 클립보드 히스토리 (DPAPI 암호화 바이너리) -├── usage.json # 실행 빈도 랭킹 데이터 -├── notes.txt # 빠른 메모 저장 -├── favorites.json # 즐겨찾기 목록 -├── routines.json # 루틴 자동화 정의 (사용자 편집 가능) -├── logs/ -│ └── app-YYYY-MM-DD.log # 일별 로그 (14일 자동 삭제) -├── stats/ -│ └── YYYY-MM-DD.json # 일별 사용 통계 (30일 자동 삭제) -├── templates/ -│ └── *.json # 프로젝트 스캐폴딩 사용자 템플릿 -└── plugins/ - └── *.dll # 외부 플러그인 (선택) +?쒋??€ settings.json # ?꾩껜 ?ㅼ젙 (JSON ?됰Ц) +?쒋??€ clipboard_history.dat # ?대┰蹂대뱶 ?덉뒪?좊━ (DPAPI ?뷀샇??諛붿씠?덈━) +?쒋??€ usage.json # ?ㅽ뻾 鍮덈룄 ??궧 ?곗씠?? +?쒋??€ notes.txt # 鍮좊Ⅸ 硫붾え ?€?? +?쒋??€ favorites.json # 利먭꺼李얘린 紐⑸줉 +?쒋??€ routines.json # 猷⑦떞 ?먮룞???뺤쓽 (?ъ슜???몄쭛 媛€?? +?쒋??€ logs/ +?? ?붴??€ app-YYYY-MM-DD.log # ?쇰퀎 濡쒓렇 (14???먮룞 ??젣) +?쒋??€ stats/ +?? ?붴??€ YYYY-MM-DD.json # ?쇰퀎 ?ъ슜 ?듦퀎 (30???먮룞 ??젣) +?쒋??€ templates/ +?? ?붴??€ *.json # ?꾨줈?앺듃 ?ㅼ틦?대뵫 ?ъ슜???쒗뵆由? +?붴??€ plugins/ + ?붴??€ *.dll # ?몃? ?뚮윭洹몄씤 (?좏깮) ``` -**자동 삭제 정책**: +**?먮룞 ??젣 ?뺤콉**: -| 파일 | 보존 기간 | 방식 | +| ?뚯씪 | 蹂댁〈 湲곌컙 | 諛⑹떇 | |------|----------|------| -| 로그 (`logs/app-*.log`) | 14일 | 앱 시작 시 1회 `PurgeOldLogs()` | -| 통계 (`stats/*.json`) | 30일 | 통계 기록 시 `PurgeOldFiles()` | -| 클립보드 히스토리 | 무기한 (최대 항목 수 제한) | `maxItems` 설정값 기준 FIFO | -| 기타 (settings, notes 등) | 무기한 | 수동 관리 | +| 濡쒓렇 (`logs/app-*.log`) | 14??| ???쒖옉 ??1??`PurgeOldLogs()` | +| ?듦퀎 (`stats/*.json`) | 30??| ?듦퀎 湲곕줉 ??`PurgeOldFiles()` | +| ?대┰蹂대뱶 ?덉뒪?좊━ | 臾닿린??(理쒕? ??ぉ ???쒗븳) | `maxItems` ?ㅼ젙媛?湲곗? FIFO | +| 湲고? (settings, notes ?? | 臾닿린??| ?섎룞 愿€由?| --- -## 보안 고려사항 +## 蹂댁븞 怨좊젮?ы빆 -| 항목 | 구현 | +| ??ぉ | 援ы쁽 | |------|------| -| URL 스킴 검증 | `http`, `https`, `ftp`, `ftps`, `ms-settings`, `mailto`, `file` 허용. `javascript:` 등 차단 | -| PowerShell 인젝션 방지 | `>` 명령어 입력의 `"` 이스케이프 처리 | -| ReDoS 방지 | 사용자 정의 Regex에 `TimeSpan` 타임아웃 적용 | -| 자격증명 저장 | Windows Credential Manager (`advapi32.dll`, DPAPI 암호화) | -| 클립보드 민감 데이터 | Regex 기반 제외 패턴 (`excludePatterns`) — 신용카드·IP 등 기본 차단 | -| API 타임아웃 | JSON 스킬 HTTP 요청 3초 제한 | -| 시스템 명령 확인 | 재시작·종료·로그아웃 실행 전 커스텀 확인 다이얼로그 2단계 적용 | -| **디컴파일 방지** | `Security/AntiTamper.cs` — 디버거 감지 (관리형+네이티브+원격), 디컴파일러 프로세스 감지 (dnSpy, ILSpy, dotPeek, x64dbg 등 15종), Release 빌드만 활성 | -| **PDB 제거** | Release 빌드 시 `DebugType=none`, `DebugSymbols=false`. build.bat에서 `.pdb`/`.xml` 전수 삭제 | -| **소스 링크 비활성** | `EnableSourceLink=false`, `EmbedAllSources=false` — 소스 코드 경로 노출 차단 | -| **난독화 호환** | `[assembly: Obfuscation]` 속성 적용. Obfuscar/ConfuserEx/Dotfuscator 연동 시 자동 난독화 | +| URL ?ㅽ궡 寃€利?| `http`, `https`, `ftp`, `ftps`, `ms-settings`, `mailto`, `file` ?덉슜. `javascript:` ??李⑤떒 | +| PowerShell ?몄젥??諛⑹? | `>` 紐낅졊???낅젰??`"` ?댁뒪耳€?댄봽 泥섎━ | +| ReDoS 諛⑹? | ?ъ슜???뺤쓽 Regex??`TimeSpan` ?€?꾩븘???곸슜 | +| ?먭꺽利앸챸 ?€??| Windows Credential Manager (`advapi32.dll`, DPAPI ?뷀샇?? | +| ?대┰蹂대뱶 誘쇨컧 ?곗씠??| Regex 湲곕컲 ?쒖쇅 ?⑦꽩 (`excludePatterns`) ???좎슜移대뱶쨌IP ??湲곕낯 李⑤떒 | +| API ?€?꾩븘??| JSON ?ㅽ궗 HTTP ?붿껌 3珥??쒗븳 | +| ?쒖뒪??紐낅졊 ?뺤씤 | ?ъ떆?뫢룹쥌猷뙿룸줈洹몄븘???ㅽ뻾 ??而ㅼ뒪?€ ?뺤씤 ?ㅼ씠?쇰줈洹?2?④퀎 ?곸슜 | +| **?붿뺨?뚯씪 諛⑹?** | `Security/AntiTamper.cs` ???붾쾭嫄?媛먯? (愿€由ы삎+?ㅼ씠?곕툕+?먭꺽), ?붿뺨?뚯씪???꾨줈?몄뒪 媛먯? (dnSpy, ILSpy, dotPeek, x64dbg ??15醫?, Release 鍮뚮뱶留??쒖꽦 | +| **PDB ?쒓굅** | Release 鍮뚮뱶 ??`DebugType=none`, `DebugSymbols=false`. build.bat?먯꽌 `.pdb`/`.xml` ?꾩닔 ??젣 | +| **?뚯뒪 留곹겕 鍮꾪솢??* | `EnableSourceLink=false`, `EmbedAllSources=false` ???뚯뒪 肄붾뱶 寃쎈줈 ?몄텧 李⑤떒 | +| **?쒕룆???명솚** | `[assembly: Obfuscation]` ?띿꽦 ?곸슜. Obfuscar/ConfuserEx/Dotfuscator ?곕룞 ???먮룞 ?쒕룆??| --- -## 테마 커스터마이징 +## ?뚮쭏 而ㅼ뒪?곕쭏?댁쭠 -테마 XAML 파일(`Themes/*.xaml`)은 색상 14개 + 모양 2개 = **총 16개 ResourceKey**를 정의합니다: +?뚮쭏 XAML ?뚯씪(`Themes/*.xaml`)?€ ?됱긽 14媛?+ 紐⑥뼇 2媛?= **珥?16媛?ResourceKey**瑜??뺤쓽?⑸땲?? -| 키 | 타입 | 용도 | +| ??| ?€??| ?⑸룄 | |----|------|------| -| `LauncherBackground` | SolidColorBrush | 전체 배경 | -| `ItemBackground` | SolidColorBrush | 항목 기본 배경 | -| `ItemSelectedBackground` | SolidColorBrush | 선택된 항목 배경 | -| `ItemHoverBackground` | SolidColorBrush | 호버 배경 | -| `PrimaryText` | SolidColorBrush | 주 텍스트 색상 | -| `SecondaryText` | SolidColorBrush | 보조 텍스트 색상 | -| `PlaceholderText` | SolidColorBrush | 플레이스홀더 텍스트 | -| `AccentColor` | SolidColorBrush | 강조색 (선택 바, 배지 등) | -| `SeparatorColor` | SolidColorBrush | 구분선 색상 | -| `HintBackground` | SolidColorBrush | 힌트 배경 | -| `HintText` | SolidColorBrush | 힌트 텍스트 | -| `BorderColor` | SolidColorBrush | 창 테두리 | -| `ScrollbarThumb` | SolidColorBrush | 스크롤바 색상 | -| `ShadowColor` | Color | 드롭 섀도우 색상 | -| `WindowCornerRadius` | CornerRadius | 창 전체 모서리 라운딩 | -| `ItemCornerRadius` | CornerRadius | 결과 항목 모서리 라운딩 | +| `LauncherBackground` | SolidColorBrush | ?꾩껜 諛곌꼍 | +| `ItemBackground` | SolidColorBrush | ??ぉ 湲곕낯 諛곌꼍 | +| `ItemSelectedBackground` | SolidColorBrush | ?좏깮????ぉ 諛곌꼍 | +| `ItemHoverBackground` | SolidColorBrush | ?몃쾭 諛곌꼍 | +| `PrimaryText` | SolidColorBrush | 二??띿뒪???됱긽 | +| `SecondaryText` | SolidColorBrush | 蹂댁“ ?띿뒪???됱긽 | +| `PlaceholderText` | SolidColorBrush | ?뚮젅?댁뒪?€???띿뒪??| +| `AccentColor` | SolidColorBrush | 媛뺤“??(?좏깮 諛? 諛곗? ?? | +| `SeparatorColor` | SolidColorBrush | 援щ텇???됱긽 | +| `HintBackground` | SolidColorBrush | ?뚰듃 諛곌꼍 | +| `HintText` | SolidColorBrush | ?뚰듃 ?띿뒪??| +| `BorderColor` | SolidColorBrush | 李??뚮몢由?| +| `ScrollbarThumb` | SolidColorBrush | ?ㅽ겕濡ㅻ컮 ?됱긽 | +| `ShadowColor` | Color | ?쒕∼ ?€?꾩슦 ?됱긽 | +| `WindowCornerRadius` | CornerRadius | 李??꾩껜 紐⑥꽌由??쇱슫??| +| `ItemCornerRadius` | CornerRadius | 寃곌낵 ??ぉ 紐⑥꽌由??쇱슫??| -**테마별 모서리 라운딩 값**: +**?뚮쭏蹂?紐⑥꽌由??쇱슫??媛?*: -| 테마 | WindowCornerRadius | ItemCornerRadius | 특징 | +| ?뚮쭏 | WindowCornerRadius | ItemCornerRadius | ?뱀쭠 | |------|-------------------|-----------------|------| -| Dark / Light | 20 | 10 | 기본 부드러운 라운딩 | -| OLED | 26 | 13 | 가장 둥근 형태 | -| Catppuccin | 22 | 12 | 약간 더 둥근 파스텔 느낌 | -| Nord | 16 | 8 | 약간 각진 북유럽 스타일 | -| Monokai | 14 | 6 | 에디터 스타일 — 적당히 각진 | -| Sepia | 12 | 6 | 클래식하고 차분한 느낌 | -| Alfred / AlfredLight | 14 | 6 | Alfred 앱과 유사한 비율 | +| Dark / Light | 20 | 10 | 湲곕낯 遺€?쒕윭???쇱슫??| +| OLED | 26 | 13 | 媛€???κ렐 ?뺥깭 | +| Catppuccin | 22 | 12 | ?쎄컙 ???κ렐 ?뚯뒪???먮굦 | +| Nord | 16 | 8 | ?쎄컙 媛곸쭊 遺곸쑀???ㅽ???| +| Monokai | 14 | 6 | ?먮뵒???ㅽ??????곷떦??媛곸쭊 | +| Sepia | 12 | 6 | ?대옒?앺븯怨?李⑤텇???먮굦 | +| Alfred / AlfredLight | 14 | 6 | Alfred ?깃낵 ?좎궗??鍮꾩쑉 | -**트레이 컨텍스트 메뉴**: `TrayContextMenu.cs`의 `ModernTrayRenderer`는 런타임에 `Application.Current.Resources`에서 WPF 테마 색상(`LauncherBackground`, `AccentColor` 등)을 읽어 트레이 메뉴 배경·텍스트·호버 색상에 그대로 적용합니다. 테마를 전환하면 다음 메뉴 오픈 시 새 테마가 반영됩니다. +**?몃젅??而⑦뀓?ㅽ듃 硫붾돱**: `TrayContextMenu.cs`??`ModernTrayRenderer`???고??꾩뿉 `Application.Current.Resources`?먯꽌 WPF ?뚮쭏 ?됱긽(`LauncherBackground`, `AccentColor` ?????쎌뼱 ?몃젅??硫붾돱 諛곌꼍쨌?띿뒪?맞룻샇踰??됱긽??洹몃?濡??곸슜?⑸땲?? ?뚮쭏瑜??꾪솚?섎㈃ ?ㅼ쓬 硫붾돱 ?ㅽ뵂 ?????뚮쭏媛€ 諛섏쁺?⑸땲?? -**새 테마 추가 순서**: -1. `Themes/MyTheme.xaml` 작성 (위 16개 키 모두 정의, `WindowCornerRadius`·`ItemCornerRadius` 포함) -2. `.csproj`에 `` 추가 -3. `LauncherWindow.xaml.cs`의 `GetEffectiveThemeName()` switch에 케이스 추가 -4. `SettingsViewModel.ThemeCards` 목록에 `ThemeCardModel` 항목 추가 +**???뚮쭏 異붽? ?쒖꽌**: +1. `Themes/MyTheme.xaml` ?묒꽦 (??16媛???紐⑤몢 ?뺤쓽, `WindowCornerRadius`쨌`ItemCornerRadius` ?ы븿) +2. `.csproj`??`` 異붽? +3. `LauncherWindow.xaml.cs`??`GetEffectiveThemeName()` switch??耳€?댁뒪 異붽? +4. `SettingsViewModel.ThemeCards` 紐⑸줉??`ThemeCardModel` ??ぉ 異붽? --- -## 단위 테스트 +## ?⑥쐞 ?뚯뒪?? ```bash dotnet test src/AxCommander.Tests ``` -| 파일 | 테스트 수 | 대상 | +| ?뚯씪 | ?뚯뒪????| ?€??| |------|----------|------| -| `FuzzyEngineTests.cs` | 19 | CalculateScore, FuzzyMatch, 초성 검색 | -| `ClipboardTransformTests.cs` | 21 | 12개 내장 변환기 | -| `SettingsServiceTests.cs` | 17 | 기본값, JSON 직렬화 라운드트립 | +| `FuzzyEngineTests.cs` | 19 | CalculateScore, FuzzyMatch, 珥덉꽦 寃€??| +| `ClipboardTransformTests.cs` | 21 | 12媛??댁옣 蹂€?섍린 | +| `SettingsServiceTests.cs` | 17 | 湲곕낯媛? JSON 吏곷젹???쇱슫?쒗듃由?| -테스트 프로젝트는 `InternalsVisibleTo`로 `internal` 메서드에 접근합니다. +?뚯뒪???꾨줈?앺듃??`InternalsVisibleTo`濡?`internal` 硫붿꽌?쒖뿉 ?묎렐?⑸땲?? --- -## 코드 검토 이력 +## 肄붾뱶 寃€???대젰 -### v0.3 최종 검토 결과 (2026-03-24) +### v0.3 理쒖쥌 寃€??寃곌낵 (2026-03-24) -전체 소스 코드 정적 분석 결과 **컴파일 오류 없음** 확인. v0.3 신규 코드 포함. +?꾩껜 ?뚯뒪 肄붾뱶 ?뺤쟻 遺꾩꽍 寃곌낵 **而댄뙆???ㅻ쪟 ?놁쓬** ?뺤씤. v0.3 ?좉퇋 肄붾뱶 ?ы븿. -| 검토 항목 | 결과 | +| 寃€????ぉ | 寃곌낵 | |----------|------| -| 타입 참조 (`Symbols.Lock`, `Symbols.MediaPlay`, `Symbols.Computer`) | ✅ 모두 `Themes/Symbols.cs`에 정의됨 | -| XAML 컨버터 (`BoolToVisibility`, `CountToVisibility`, `SymbolToBackground` 등) | ✅ `App.xaml`에 모두 등록됨 | -| ViewModel 바인딩 (`ShowActionModeBar`, `ActionModeBreadcrumb`, `ShowMergeHint`, `MergeHintText`) | ✅ `LauncherViewModel`에 모두 정의됨 | -| `LauncherItem` 생성자 호출부 (`Symbol:` named parameter) | ✅ SDK 레코드 시그니처 일치 | -| `ClipboardEntry` `IsText` / `Text` 프로퍼티 | ✅ `ClipboardHistoryService.cs`에 정의됨 | -| `HashSet` 동등성 | ✅ record 구조적 동등성 + 동일 객체 참조로 정상 작동 | -| `IndexEntry.Path` 프로퍼티 | ✅ `IndexService.cs`에 정의됨 | -| `FileAction` enum / `FileActionData` record 접근성 | ✅ 동일 파일(ViewModels) 내 정의, 접근 가능 | -| `LargeTypeWindow` 네임스페이스 | ✅ `AxCommander.Views` — LauncherWindow와 동일 네임스페이스, import 불필요 | -| `LauncherWindow.xaml` Grid.Row 번호 | ✅ Row 0~4 순서 정확 (0:입력, 1:액션바, 2:구분선, 3:병합힌트, 4:리스트) | +| ?€??李몄“ (`Symbols.Lock`, `Symbols.MediaPlay`, `Symbols.Computer`) | ??紐⑤몢 `Themes/Symbols.cs`???뺤쓽??| +| XAML 而⑤쾭??(`BoolToVisibility`, `CountToVisibility`, `SymbolToBackground` ?? | ??`App.xaml`??紐⑤몢 ?깅줉??| +| ViewModel 諛붿씤??(`ShowActionModeBar`, `ActionModeBreadcrumb`, `ShowMergeHint`, `MergeHintText`) | ??`LauncherViewModel`??紐⑤몢 ?뺤쓽??| +| `LauncherItem` ?앹꽦???몄텧遺€ (`Symbol:` named parameter) | ??SDK ?덉퐫???쒓렇?덉쿂 ?쇱튂 | +| `ClipboardEntry` `IsText` / `Text` ?꾨줈?쇳떚 | ??`ClipboardHistoryService.cs`???뺤쓽??| +| `HashSet` ?숇벑??| ??record 援ъ“???숇벑??+ ?숈씪 媛앹껜 李몄“濡??뺤긽 ?묐룞 | +| `IndexEntry.Path` ?꾨줈?쇳떚 | ??`IndexService.cs`???뺤쓽??| +| `FileAction` enum / `FileActionData` record ?묎렐??| ???숈씪 ?뚯씪(ViewModels) ???뺤쓽, ?묎렐 媛€??| +| `LargeTypeWindow` ?ㅼ엫?ㅽ럹?댁뒪 | ??`AxCommander.Views` ??LauncherWindow?€ ?숈씪 ?ㅼ엫?ㅽ럹?댁뒪, import 遺덊븘??| +| `LauncherWindow.xaml` Grid.Row 踰덊샇 | ??Row 0~4 ?쒖꽌 ?뺥솗 (0:?낅젰, 1:?≪뀡諛? 2:援щ텇?? 3:蹂묓빀?뚰듃, 4:由ъ뒪?? | --- -## 버그 수정 이력 +## 踰꾧렇 ?섏젙 ?대젰 -### v0.1 → v0.2 +### v0.1 ??v0.2 -| 파일 | 문제 | 수정 내용 | +| ?뚯씪 | 臾몄젣 | ?섏젙 ?댁슜 | |------|------|----------| -| `InputListener.cs` | `LogService.Services.LogService.XXX()` — 존재하지 않는 네임스페이스 경로로 컴파일 오류 발생 | `using AxCommander.Services;` 추가 후 `LogService.XXX()` 직접 호출로 수정. 파일 하단의 빈 `namespace LogService { }` 선언 제거 | +| `InputListener.cs` | `LogService.Services.LogService.XXX()` ??議댁옱?섏? ?딅뒗 ?ㅼ엫?ㅽ럹?댁뒪 寃쎈줈濡?而댄뙆???ㅻ쪟 諛쒖깮 | `using AxCommander.Services;` 異붽? ??`LogService.XXX()` 吏곸젒 ?몄텧濡??섏젙. ?뚯씪 ?섎떒??鍮?`namespace LogService { }` ?좎뼵 ?쒓굅 | -### v0.2 → v0.3 +### v0.2 ??v0.3 -| 파일 | 변경 내용 | +| ?뚯씪 | 蹂€寃??댁슜 | |------|----------| -| `Core/HotkeyParser.cs` (신규) | 핫키 문자열 파싱/포맷 — `"Alt+Space"` ↔ `HotkeyDefinition` 변환 | -| `Core/InputListener.cs` | 하드코딩 Alt+Space 제거 → `HotkeyDefinition` 기반 동적 핫키 + `SuspendHotkey` 지원 | -| `Views/SettingsWindow.xaml/.cs` | Alfred 스타일 핫키 레코더 UI (클릭 → 배지 표시 → 키 입력 캡처) | -| `Views/LargeTypeWindow.xaml/.cs` (신규) | 전체 화면 Large Type 오버레이 | -| `ViewModels/LauncherViewModel.cs` | 파일 액션 모드 + 클립보드 병합 + Large Type 텍스트 추출 추가 | -| `Views/LauncherWindow.xaml` | 액션 모드 breadcrumb 바 (Row 1) + 병합 힌트 바 (Row 3) 추가 | -| `Views/LauncherWindow.xaml.cs` | `→`, `Shift+Enter`, `Shift+↑↓` 키 핸들러 추가 / Esc 액션모드 분기 | -| `App.xaml.cs` | 설정 저장 후 핫키 갱신 + SuspendHotkey 콜백 주입 | +| `Core/HotkeyParser.cs` (?좉퇋) | ?ロ궎 臾몄옄???뚯떛/?щ㎎ ??`"Alt+Space"` ??`HotkeyDefinition` 蹂€??| +| `Core/InputListener.cs` | ?섎뱶肄붾뵫 Alt+Space ?쒓굅 ??`HotkeyDefinition` 湲곕컲 ?숈쟻 ?ロ궎 + `SuspendHotkey` 吏€??| +| `Views/SettingsWindow.xaml/.cs` | Alfred ?ㅽ????ロ궎 ?덉퐫??UI (?대┃ ??諛곗? ?쒖떆 ?????낅젰 罹≪쿂) | +| `Views/LargeTypeWindow.xaml/.cs` (?좉퇋) | ?꾩껜 ?붾㈃ Large Type ?ㅻ쾭?덉씠 | +| `ViewModels/LauncherViewModel.cs` | ?뚯씪 ?≪뀡 紐⑤뱶 + ?대┰蹂대뱶 蹂묓빀 + Large Type ?띿뒪??異붿텧 異붽? | +| `Views/LauncherWindow.xaml` | ?≪뀡 紐⑤뱶 breadcrumb 諛?(Row 1) + 蹂묓빀 ?뚰듃 諛?(Row 3) 異붽? | +| `Views/LauncherWindow.xaml.cs` | `??, `Shift+Enter`, `Shift+?묅넃` ???몃뱾??異붽? / Esc ?≪뀡紐⑤뱶 遺꾧린 | +| `App.xaml.cs` | ?ㅼ젙 ?€?????ロ궎 媛깆떊 + SuspendHotkey 肄쒕갚 二쇱엯 | -### v0.3 → v0.4 (Alfred 비교 기반 설정 UI 개선) +### v0.3 ??v0.4 (Alfred 鍮꾧탳 湲곕컲 ?ㅼ젙 UI 媛쒖꽑) -| 파일 | 변경 내용 | +| ?뚯씪 | 蹂€寃??댁슜 | |------|----------| -| `Models/AppSettings.cs` | `LauncherSettings`에 `WebSearchEngine`, `SnippetAutoExpand`, `Position` 필드 추가 | -| `Handlers/WebSearchHandler.cs` | 기본 검색 엔진을 하드코딩에서 `settings.Launcher.WebSearchEngine` 런타임 읽기로 전환 / 불필요한 `using AxCommander.Models` 제거 | -| `App.xaml.cs` | `WebSearchHandler` 생성자에 `settings` 주입 | -| `Core/SnippetExpander.cs` | `HandleKey()` 진입부에 `SnippetAutoExpand` 비활성화 시 즉시 반환 추가 | -| `ViewModels/LauncherViewModel.cs` | `WindowPosition` 프로퍼티 추가 (설정 연동) | -| `Views/LauncherWindow.xaml.cs` | `CenterOnScreen()` — `position` 설정 연동 + `ActualHeight/Width = 0` 방어 처리 | -| `ViewModels/SettingsViewModel.cs` | `LauncherPosition`, `WebSearchEngine`, `SnippetAutoExpand` 바인딩 프로퍼티 추가 / `BatchCommandModel` 및 배치 명령 CRUD 추가 | -| `Views/SettingsWindow.xaml` | 일반 탭: 기본 검색 엔진·런처 위치 ComboBox 추가 / 스니펫 탭: 자동 확장 토글 추가 / 8번째 탭 배치 명령 탭 추가 | -| `Views/SettingsWindow.xaml.cs` | `AddBatchCommand_Click`, `DeleteBatchCommand_Click` 핸들러 추가 | +| `Models/AppSettings.cs` | `LauncherSettings`??`WebSearchEngine`, `SnippetAutoExpand`, `Position` ?꾨뱶 異붽? | +| `Handlers/WebSearchHandler.cs` | 湲곕낯 寃€???붿쭊???섎뱶肄붾뵫?먯꽌 `settings.Launcher.WebSearchEngine` ?고????쎄린濡??꾪솚 / 遺덊븘?뷀븳 `using AxCommander.Models` ?쒓굅 | +| `App.xaml.cs` | `WebSearchHandler` ?앹꽦?먯뿉 `settings` 二쇱엯 | +| `Core/SnippetExpander.cs` | `HandleKey()` 吏꾩엯遺€??`SnippetAutoExpand` 鍮꾪솢?깊솕 ??利됱떆 諛섑솚 異붽? | +| `ViewModels/LauncherViewModel.cs` | `WindowPosition` ?꾨줈?쇳떚 異붽? (?ㅼ젙 ?곕룞) | +| `Views/LauncherWindow.xaml.cs` | `CenterOnScreen()` ??`position` ?ㅼ젙 ?곕룞 + `ActualHeight/Width = 0` 諛⑹뼱 泥섎━ | +| `ViewModels/SettingsViewModel.cs` | `LauncherPosition`, `WebSearchEngine`, `SnippetAutoExpand` 諛붿씤???꾨줈?쇳떚 異붽? / `BatchCommandModel` 諛?諛곗튂 紐낅졊 CRUD 異붽? | +| `Views/SettingsWindow.xaml` | ?쇰컲 ?? 湲곕낯 寃€???붿쭊쨌?곗쿂 ?꾩튂 ComboBox 異붽? / ?ㅻ땲???? ?먮룞 ?뺤옣 ?좉? 異붽? / 8踰덉㎏ ??諛곗튂 紐낅졊 ??異붽? | +| `Views/SettingsWindow.xaml.cs` | `AddBatchCommand_Click`, `DeleteBatchCommand_Click` ?몃뱾??異붽? | -**버그 수정**: +**踰꾧렇 ?섏젙**: -| 파일 | 버그 | 수정 | +| ?뚯씪 | 踰꾧렇 | ?섏젙 | |------|------|------| -| `Views/LauncherWindow.xaml.cs` | `CenterOnScreen()` — 첫 `Show()` 호출 시 레이아웃 패스 이전 `ActualHeight`가 0이 되는 타이밍 이슈 | `var h = ActualHeight > 0 ? ActualHeight : 80` 방어 처리 추가 | -| `Handlers/WebSearchHandler.cs` | `using AxCommander.Models` — 파일 내 Models 타입 미사용 불필요한 임포트 | 해당 `using` 제거 | +| `Views/LauncherWindow.xaml.cs` | `CenterOnScreen()` ??泥?`Show()` ?몄텧 ???덉씠?꾩썐 ?⑥뒪 ?댁쟾 `ActualHeight`媛€ 0???섎뒗 ?€?대컢 ?댁뒋 | `var h = ActualHeight > 0 ? ActualHeight : 80` 諛⑹뼱 泥섎━ 異붽? | +| `Handlers/WebSearchHandler.cs` | `using AxCommander.Models` ???뚯씪 ??Models ?€??誘몄궗??遺덊븘?뷀븳 ?꾪룷??| ?대떦 `using` ?쒓굅 | -### v0.4 → v0.5 (배포 준비 + About 창 + 트레이 기능 강화) +### v0.4 ??v0.5 (諛고룷 以€鍮?+ About 李?+ ?몃젅??湲곕뒫 媛뺥솕) -| 파일 | 변경 내용 | +| ?뚯씪 | 蹂€寃??댁슜 | |------|----------| -| `App.xaml.cs` | 자동 시작 토글 — `HKCU\...\Run` 레지스트리 읽기/쓰기, 트레이 메뉴 체크박스 항목 추가 | -| `App.xaml.cs` | "정보" 트레이 메뉴 항목 추가 → `AboutWindow` 오픈 | -| `Views/AboutWindow.xaml/.cs` (신규) | 개발자 정보 창 — 그라데이션 헤더, 마스코트 이미지, 개발 목적, 블로그 링크, 버전 정보 | -| `AxCommander.csproj` | `Assets/mascot.png/.jpg/.webp` 조건부 CopyToOutputDirectory 추가 | -| `Views/SettingsWindow.xaml` | 단축키 아이콘 E704(InkingTool) → E765(Keyboard) 수정 | -| `Views/LargeTypeWindow.xaml` | `LineHeight="1.2"` 제거 — WPF LineHeight는 픽셀 단위, 1.2px는 런타임 오류 유발 | -| `AxCommander.csproj` | `` 추가 — WPF+WinForms 동시 사용 시 `KeyEventArgs` 모호성 해소 | +| `App.xaml.cs` | ?먮룞 ?쒖옉 ?좉? ??`HKCU\...\Run` ?덉??ㅽ듃由??쎄린/?곌린, ?몃젅??硫붾돱 泥댄겕諛뺤뒪 ??ぉ 異붽? | +| `App.xaml.cs` | "?뺣낫" ?몃젅??硫붾돱 ??ぉ 異붽? ??`AboutWindow` ?ㅽ뵂 | +| `Views/AboutWindow.xaml/.cs` (?좉퇋) | 媛쒕컻???뺣낫 李???洹몃씪?곗씠???ㅻ뜑, 留덉뒪肄뷀듃 ?대?吏€, 媛쒕컻 紐⑹쟻, 釉붾줈洹?留곹겕, 踰꾩쟾 ?뺣낫 | +| `AxCommander.csproj` | `Assets/mascot.png/.jpg/.webp` 議곌굔遺€ CopyToOutputDirectory 異붽? | +| `Views/SettingsWindow.xaml` | ?⑥텞???꾩씠肄?E704(InkingTool) ??E765(Keyboard) ?섏젙 | +| `Views/LargeTypeWindow.xaml` | `LineHeight="1.2"` ?쒓굅 ??WPF LineHeight???쎌? ?⑥쐞, 1.2px???고????ㅻ쪟 ?좊컻 | +| `AxCommander.csproj` | `` 異붽? ??WPF+WinForms ?숈떆 ?ъ슜 ??`KeyEventArgs` 紐⑦샇???댁냼 | -**설정 파일 경로 확인**: `%APPDATA%\AxCommander\settings.json` — 이미 올바른 경로 사용 중, 별도 변경 없음. +**?ㅼ젙 ?뚯씪 寃쎈줈 ?뺤씤**: `%APPDATA%\AxCommander\settings.json` ???대? ?щ컮瑜?寃쎈줈 ?ъ슜 以? 蹂꾨룄 蹂€寃??놁쓬. -**배포 방식**: `dotnet publish` → 단일 `.exe` 파일 (SelfContained, PublishSingleFile). 인스톨러 없이 EXE 복사 후 즉시 실행 가능. +**諛고룷 諛⑹떇**: `dotnet publish` ???⑥씪 `.exe` ?뚯씪 (SelfContained, PublishSingleFile). ?몄뒪?⑤윭 ?놁씠 EXE 蹂듭궗 ??利됱떆 ?ㅽ뻾 媛€?? -### v0.5 → v0.6 (Alfred 비교 기반 7개 기능 추가) +### v0.5 ??v0.6 (Alfred 鍮꾧탳 湲곕컲 7媛?湲곕뒫 異붽?) -| 파일 | 변경 내용 | +| ?뚯씪 | 蹂€寃??댁슜 | |------|----------| -| `Handlers/EmojiHandler.cs` (신규) | `emoji` 프리픽스, 300+ 이모지 내장 데이터베이스, 한/영 태그 검색, 클립보드 복사 | -| `Handlers/ColorHandler.cs` (신규) | `color` 프리픽스, HEX/RGB/RGBA/HSL/색상이름 → HEX+RGB+HSL+HSV 4종 변환 | -| `Handlers/SystemCommandHandler.cs` | `/timer`, `/alarm` 추가 — 시간 문자열 파싱(5m/1h30m/30s), Task.Delay 기반 백그라운드 타이머 | -| `Handlers/RecentFilesHandler.cs` (신규) | `recent` 프리픽스, Windows Recent .lnk 파싱, 최근순 정렬, 10초 캐시 | -| `Handlers/CalculatorHandler.cs` | `= 100 USD to KRW` 통화 변환 추가 — `CurrencyConverter` 내부 클래스, `open.er-api.com` 무료 API, 1시간 캐시, `async` 전환 | -| `Handlers/UninstallHandler.cs` (신규) | `uninstall` 프리픽스, 레지스트리 HKLM/HKCU/WOW6432Node 스캔, msiexec/exe 제거 실행 | -| `Handlers/NoteHandler.cs` (신규) | `note` 프리픽스, notes.txt append 저장, 역순 조회, clear 명령, ValueTuple 명시적 패턴 매칭 | -| `Services/NotificationService.cs` (신규) | static delegate 패턴 — App.xaml.cs에서 트레이 아이콘과 연결, 타이머/알람 알림에 사용 | -| `Themes/Symbols.cs` | Emoji/ColorPicker/Timer/RecentFiles/Currency/Uninstall/Note 심볼 추가 | -| `App.xaml.cs` | 5개 핸들러 등록 (Emoji/Color/Recent/Note/Uninstall) + `NotificationService.Initialize()` 연결 | +| `Handlers/EmojiHandler.cs` (?좉퇋) | `emoji` ?꾨━?쎌뒪, 300+ ?대え吏€ ?댁옣 ?곗씠?곕쿋?댁뒪, ?????쒓렇 寃€?? ?대┰蹂대뱶 蹂듭궗 | +| `Handlers/ColorHandler.cs` (?좉퇋) | `color` ?꾨━?쎌뒪, HEX/RGB/RGBA/HSL/?됱긽?대쫫 ??HEX+RGB+HSL+HSV 4醫?蹂€??| +| `Handlers/SystemCommandHandler.cs` | `/timer`, `/alarm` 異붽? ???쒓컙 臾몄옄???뚯떛(5m/1h30m/30s), Task.Delay 湲곕컲 諛깃렇?쇱슫???€?대㉧ | +| `Handlers/RecentFilesHandler.cs` (?좉퇋) | `recent` ?꾨━?쎌뒪, Windows Recent .lnk ?뚯떛, 理쒓렐???뺣젹, 10珥?罹먯떆 | +| `Handlers/CalculatorHandler.cs` | `= 100 USD to KRW` ?듯솕 蹂€??異붽? ??`CurrencyConverter` ?대? ?대옒?? `open.er-api.com` 臾대즺 API, 1?쒓컙 罹먯떆, `async` ?꾪솚 | +| `Handlers/UninstallHandler.cs` (?좉퇋) | `uninstall` ?꾨━?쎌뒪, ?덉??ㅽ듃由?HKLM/HKCU/WOW6432Node ?ㅼ틪, msiexec/exe ?쒓굅 ?ㅽ뻾 | +| `Handlers/NoteHandler.cs` (?좉퇋) | `note` ?꾨━?쎌뒪, notes.txt append ?€?? ??닚 議고쉶, clear 紐낅졊, ValueTuple 紐낆떆???⑦꽩 留ㅼ묶 | +| `Services/NotificationService.cs` (?좉퇋) | static delegate ?⑦꽩 ??App.xaml.cs?먯꽌 ?몃젅???꾩씠肄섍낵 ?곌껐, ?€?대㉧/?뚮엺 ?뚮┝???ъ슜 | +| `Themes/Symbols.cs` | Emoji/ColorPicker/Timer/RecentFiles/Currency/Uninstall/Note ?щ낵 異붽? | +| `App.xaml.cs` | 5媛??몃뱾???깅줉 (Emoji/Color/Recent/Note/Uninstall) + `NotificationService.Initialize()` ?곌껐 | -**버그 수정**: +**踰꾧렇 ?섏젙**: -| 파일 | 버그 | 수정 | +| ?뚯씪 | 踰꾧렇 | ?섏젙 | |------|------|------| -| `Handlers/NoteHandler.cs` | `case ("__SAVE__", string content):` — `object?` 타입에 대한 positional 패턴 컴파일 불안정 | `case ValueTuple t when t.Item1 == "__SAVE__":` 명시적 타입 패턴으로 변경 | -| `Themes/Symbols.cs` | `Warning` 상수 중복 정의 (신규 추가 시 실수) | 하단 중복 제거 | +| `Handlers/NoteHandler.cs` | `case ("__SAVE__", string content):` ??`object?` ?€?낆뿉 ?€??positional ?⑦꽩 而댄뙆??遺덉븞??| `case ValueTuple t when t.Item1 == "__SAVE__":` 紐낆떆???€???⑦꽩?쇰줈 蹂€寃?| +| `Themes/Symbols.cs` | `Warning` ?곸닔 以묐났 ?뺤쓽 (?좉퇋 異붽? ???ㅼ닔) | ?섎떒 以묐났 ?쒓굅 | -### v0.6 → v0.7 (개발자 도구 + 화면 캡처 + 랭킹 시스템) +### v0.6 ??v0.7 (媛쒕컻???꾧뎄 + ?붾㈃ 罹≪쿂 + ??궧 ?쒖뒪?? -| 파일 | 변경 내용 | +| ?뚯씪 | 蹂€寃??댁슜 | |------|----------| -| `Handlers/PortHandler.cs` (신규) | `port` 프리픽스, TCP 활성 연결 조회, 포트번호/프로세스명 검색, netstat -ano PID 매핑 | -| `Services/UsageRankingService.cs` (신규) | 실행 빈도 JSON 저장(`usage.json`), `SortByUsage()` 제공 | -| `Core/CommandResolver.cs` | 퍼지 검색 결과를 `UsageRankingService.SortByUsage()`로 재정렬, IndexEntry 실행 시 `RecordExecution()` 호출 | -| `Handlers/EnvHandler.cs` (신규) | `env` 프리픽스, 우선순위 환경변수 20개 표시, 키/값 모두 검색, Enter로 복사 | -| `Handlers/JsonHandler.cs` (신규) | `json` 프리픽스, 클립보드 또는 인라인 JSON 파싱, `format`/`minify` 서브커맨드, `System.Text.Json` 내장 | -| `Handlers/EncodeHandler.cs` (신규) | `encode ` 프리픽스(뒤 공백), base64/url/hex/md5/sha1/sha256/sha512/html 인코딩 + decode 접두사로 역변환 | -| `Services/WindowTracker.cs` (신규) | `GetForegroundWindow()` P/Invoke, `Capture()` 호출 시 PreviousWindow 저장 | -| `Handlers/SnapHandler.cs` (신규) | `snap` 프리픽스, left/right/top/bottom/full/tl/tr/bl/br/center/restore, `SetWindowPos` + `GetMonitorInfo` | -| `Handlers/ScreenCaptureHandler.cs` (신규) | `cap` 프리픽스, screen(전체)/window(창)/scroll(스크롤 캡처), `PrintWindow`+`BitBlt`, 오버랩 검출 스티칭, `%USERPROFILE%\Pictures\Screenshots\` 저장 | -| `Themes/Symbols.cs` | PortIcon/EnvVar/JsonValid/JsonFormat/JsonMinify/EncodeIcon/SnapLayout/CaptureIcon/ScrollCapture 심볼 추가 | -| `App.xaml.cs` | 6개 핸들러 등록 (Port/Env/Json/Encode/Snap/ScreenCapture) + `OnHotkeyTriggered()`에 `WindowTracker.Capture()` 추가 | +| `Handlers/PortHandler.cs` (?좉퇋) | `port` ?꾨━?쎌뒪, TCP ?쒖꽦 ?곌껐 議고쉶, ?ы듃踰덊샇/?꾨줈?몄뒪紐?寃€?? netstat -ano PID 留ㅽ븨 | +| `Services/UsageRankingService.cs` (?좉퇋) | ?ㅽ뻾 鍮덈룄 JSON ?€??`usage.json`), `SortByUsage()` ?쒓났 | +| `Core/CommandResolver.cs` | ?쇱? 寃€??寃곌낵瑜?`UsageRankingService.SortByUsage()`濡??ъ젙?? IndexEntry ?ㅽ뻾 ??`RecordExecution()` ?몄텧 | +| `Handlers/EnvHandler.cs` (?좉퇋) | `env` ?꾨━?쎌뒪, ?곗꽑?쒖쐞 ?섍꼍蹂€??20媛??쒖떆, ??媛?紐⑤몢 寃€?? Enter濡?蹂듭궗 | +| `Handlers/JsonHandler.cs` (?좉퇋) | `json` ?꾨━?쎌뒪, ?대┰蹂대뱶 ?먮뒗 ?몃씪??JSON ?뚯떛, `format`/`minify` ?쒕툕而ㅻ㎤?? `System.Text.Json` ?댁옣 | +| `Handlers/EncodeHandler.cs` (?좉퇋) | `encode ` ?꾨━?쎌뒪(??怨듬갚), base64/url/hex/md5/sha1/sha256/sha512/html ?몄퐫??+ decode ?묐몢?щ줈 ?????| +| `Services/WindowTracker.cs` (?좉퇋) | `GetForegroundWindow()` P/Invoke, `Capture()` ?몄텧 ??PreviousWindow ?€??| +| `Handlers/SnapHandler.cs` (?좉퇋) | `snap` ?꾨━?쎌뒪, left/right/top/bottom/full/tl/tr/bl/br/center/restore, `SetWindowPos` + `GetMonitorInfo` | +| `Handlers/ScreenCaptureHandler.cs` (?좉퇋) | `cap` ?꾨━?쎌뒪, screen(?꾩껜)/window(李?/scroll(?ㅽ겕濡?罹≪쿂), `PrintWindow`+`BitBlt`, ?ㅻ쾭??寃€異??ㅽ떚移? `%USERPROFILE%\Pictures\Screenshots\` ?€??| +| `Themes/Symbols.cs` | PortIcon/EnvVar/JsonValid/JsonFormat/JsonMinify/EncodeIcon/SnapLayout/CaptureIcon/ScrollCapture ?щ낵 異붽? | +| `App.xaml.cs` | 6媛??몃뱾???깅줉 (Port/Env/Json/Encode/Snap/ScreenCapture) + `OnHotkeyTriggered()`??`WindowTracker.Capture()` 異붽? | -**v0.7 코드 검토 후 즉시 수정 (버그 픽스):** +**v0.7 肄붾뱶 寃€????利됱떆 ?섏젙 (踰꾧렇 ?쎌뒪):** -| 파일 | 수정 내용 | +| ?뚯씪 | ?섏젙 ?댁슜 | |------|----------| -| `Handlers/PortHandler.cs` | `GetPidForPort()`가 루프마다 `netstat -ano` 실행하던 N+1 문제 → `RefreshProcessCache()` 내부에서 netstat 1회 실행 후 `_pidMap(포트→PID)` 캐시 구축. `GetPidForPort()`는 캐시 조회만 수행 | -| `Handlers/ScreenCaptureHandler.cs` | `AreSimilar()`/`FindOverlap()`의 `GetPixel()` 픽셀 비교 → `LockBits + unsafe 포인터` 연산으로 교체 (~50× 속도 향상) | -| `ViewModels/LauncherViewModel.cs` | `PrefixMap`에 v0.6 핸들러(emoji/color/recent/note/uninstall) + v0.7 핸들러(port/env/json/encode/snap/cap) + `/`(SystemCommand) 누락 항목 일괄 추가. `kill`/`media`/`info` 키를 공백 포함 버전으로 수정 | -| `AxCommander.csproj` | `true` 추가 | +| `Handlers/PortHandler.cs` | `GetPidForPort()`媛€ 猷⑦봽留덈떎 `netstat -ano` ?ㅽ뻾?섎뜕 N+1 臾몄젣 ??`RefreshProcessCache()` ?대??먯꽌 netstat 1???ㅽ뻾 ??`_pidMap(?ы듃?뭁ID)` 罹먯떆 援ъ텞. `GetPidForPort()`??罹먯떆 議고쉶留??섑뻾 | +| `Handlers/ScreenCaptureHandler.cs` | `AreSimilar()`/`FindOverlap()`??`GetPixel()` ?쎌? 鍮꾧탳 ??`LockBits + unsafe ?ъ씤?? ?곗궛?쇰줈 援먯껜 (~50횞 ?띾룄 ?μ긽) | +| `ViewModels/LauncherViewModel.cs` | `PrefixMap`??v0.6 ?몃뱾??emoji/color/recent/note/uninstall) + v0.7 ?몃뱾??port/env/json/encode/snap/cap) + `/`(SystemCommand) ?꾨씫 ??ぉ ?쇨큵 異붽?. `kill`/`media`/`info` ?ㅻ? 怨듬갚 ?ы븿 踰꾩쟾?쇰줈 ?섏젙 | +| `AxCommander.csproj` | `true` 異붽? | -**스크롤 캡처 동작 방식**: -1. `WindowTracker.PreviousWindow`에 저장된 이전 활성 창을 포그라운드로 활성화 -2. `PrintWindow(PW_RENDERFULLCONTENT=2)` 또는 `CopyFromScreen` 폴백으로 첫 프레임 캡처 -3. `WM_VSCROLL SB_PAGEDOWN` (스크롤 가능 자식 창이 있는 경우) 또는 `WM_KEYDOWN VK_NEXT` 전송 -4. 120ms 대기 후 재캡처, 이전 프레임 하단 20%와 비교하여 97% 이상 유사하면 스크롤 종료 감지 → 중단 -5. 각 프레임 사이 오버랩 픽셀 수를 픽셀 샘플링으로 계산하여 비겹치는 부분만 수직 스티칭 -6. 결과를 `%USERPROFILE%\Pictures\Screenshots\scroll_yyyyMMdd_HHmmss.png`로 저장 + 클립보드 복사 +**?ㅽ겕濡?罹≪쿂 ?숈옉 諛⑹떇**: +1. `WindowTracker.PreviousWindow`???€?λ맂 ?댁쟾 ?쒖꽦 李쎌쓣 ?ш렇?쇱슫?쒕줈 ?쒖꽦?? +2. `PrintWindow(PW_RENDERFULLCONTENT=2)` ?먮뒗 `CopyFromScreen` ?대갚?쇰줈 泥??꾨젅??罹≪쿂 +3. `WM_VSCROLL SB_PAGEDOWN` (?ㅽ겕濡?媛€???먯떇 李쎌씠 ?덈뒗 寃쎌슦) ?먮뒗 `WM_KEYDOWN VK_NEXT` ?꾩넚 +4. 120ms ?€湲????ъ벙泥? ?댁쟾 ?꾨젅???섎떒 20%?€ 鍮꾧탳?섏뿬 97% ?댁긽 ?좎궗?섎㈃ ?ㅽ겕濡?醫낅즺 媛먯? ??以묐떒 +5. 媛??꾨젅???ъ씠 ?ㅻ쾭???쎌? ?섎? ?쎌? ?섑뵆留곸쑝濡?怨꾩궛?섏뿬 鍮꾧껸移섎뒗 遺€遺꾨쭔 ?섏쭅 ?ㅽ떚移? +6. 寃곌낵瑜?`%USERPROFILE%\Pictures\Screenshots\scroll_yyyyMMdd_HHmmss.png`濡??€??+ ?대┰蹂대뱶 蹂듭궗 -**실행 빈도 랭킹 동작 방식**: -- 퍼지 검색(파일/앱/폴더) 실행 시 `IndexEntry.Path`를 키로 카운트 증가 -- `usage.json`에 비동기 저장 (앱 종료 시에도 누적됨) -- 다음 검색부터 `SortByUsage`로 상위 항목이 결과 목록 최상단에 표시 +**?ㅽ뻾 鍮덈룄 ??궧 ?숈옉 諛⑹떇**: +- ?쇱? 寃€???뚯씪/???대뜑) ?ㅽ뻾 ??`IndexEntry.Path`瑜??ㅻ줈 移댁슫??利앷? +- `usage.json`??鍮꾨룞湲??€??(??醫낅즺 ?쒖뿉???꾩쟻?? +- ?ㅼ쓬 寃€?됰???`SortByUsage`濡??곸쐞 ??ぉ??寃곌낵 紐⑸줉 理쒖긽?⑥뿉 ?쒖떆 -### About 창 (`AboutWindow`) +### About 李?(`AboutWindow`) ``` -┌─────────────────────────────┐ -│ [블루-퍼플 그라데이션 헤더] │ -│ (마스코트 이미지 원형) │ -│ AX Commander │ -│ v0.0 │ -├─────────────────────────────┤ -│ ┌─── 개발 목적 배너 ─────────┐ │ -│ │ 업무 편의성 증가 및 LLM ... │ │ -│ └─────────────────────────┘ │ -│ │ -│ 🏢 AX연구소 AI팀 │ -│ 백승재 · SW Architect │ -│ 🔗 www.swarchitect.net │ -│ │ -│ AX Commander · .NET 8 │ -└─────────────────────────────┘ +?뚢??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? +?? [釉붾(-?쇳뵆 洹몃씪?곗씠???ㅻ뜑] ?? +?? (留덉뒪肄뷀듃 ?대?吏€ ?먰삎) ?? +?? AX Commander ?? +?? v0.0 ?? +?쒋??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? +???뚢??€?€ 媛쒕컻 紐⑹쟻 諛곕꼫 ?€?€?€?€?€?€?€?€?€???? +?????낅Т ?몄쓽??利앷? 諛?LLM ... ???? +???붴??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€???? +?? ?? +?? ?룫 AX?곌뎄??AI?€ ?? +?? 諛깆듅??쨌 SW Architect ?? +?? ?뵕 www.swarchitect.net ?? +?? ?? +?? AX Commander 쨌 .NET 8 ?? +?붴??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? ``` -- 앱 아이콘: `Assets/icon.ico` — 다이아몬드 픽셀 보석 컷 디자인 (Blue/Green/Red/Green 4색, 흰색 facet 선) - - 7개 크기 (16, 24, 32, 48, 64, 128, 256px) 포함 - - `tools/IconGenerator/` 콘솔 앱으로 재생성 가능: `dotnet run -- <출력경로>` - - SVG 원본: `Assets/diamond_pixel.svg` -- 마스코트 이미지: `Assets/mascot.png` (또는 .jpg/.webp) 존재 시 자동 로드, 없으면 앱 아이콘 표시 -- 정보 창: 초기 표시 시 앱 아이콘, 개발자 이름 클릭 시 마스코트 오버레이 -- 창 드래그 이동 가능 (`MouseDown` → `DragMove`) -- 블로그 링크 클릭 시 기본 브라우저로 열기 +- ???꾩씠肄? `Assets/icon.ico` ???ㅼ씠?꾨が???쎌? 蹂댁꽍 而??붿옄??(Blue/Green/Red/Green 4?? ?곗깋 facet ?? + - 7媛??ш린 (16, 24, 32, 48, 64, 128, 256px) ?ы븿 + - `tools/IconGenerator/` 肄섏넄 ?깆쑝濡??ъ깮??媛€?? `dotnet run -- <異쒕젰寃쎈줈>` + - SVG ?먮낯: `Assets/diamond_pixel.svg` +- 留덉뒪肄뷀듃 ?대?吏€: `Assets/mascot.png` (?먮뒗 .jpg/.webp) 議댁옱 ???먮룞 濡쒕뱶, ?놁쑝硫????꾩씠肄??쒖떆 +- ?뺣낫 李? 珥덇린 ?쒖떆 ?????꾩씠肄? 媛쒕컻???대쫫 ?대┃ ??留덉뒪肄뷀듃 ?ㅻ쾭?덉씠 +- 李??쒕옒洹??대룞 媛€??(`MouseDown` ??`DragMove`) +- 釉붾줈洹?留곹겕 ?대┃ ??湲곕낯 釉뚮씪?곗?濡??닿린 --- -## v0.7 3차 전체 점검 수정 (버그·보안·스레딩) +## v0.7 3李??꾩껜 ?먭? ?섏젙 (踰꾧렇쨌蹂댁븞쨌?ㅻ젅?? -> 빌드 오류 3건, 컴파일 경고 1건, 런타임 버그 6건, 보안 이슈 2건을 수정하였습니다. +> 鍮뚮뱶 ?ㅻ쪟 3嫄? 而댄뙆??寃쎄퀬 1嫄? ?고???踰꾧렇 6嫄? 蹂댁븞 ?댁뒋 2嫄댁쓣 ?섏젙?섏??듬땲?? -### 컴파일 오류 수정 +### 而댄뙆???ㅻ쪟 ?섏젙 -| 파일 | 수정 내용 | 오류 코드 | +| ?뚯씪 | ?섏젙 ?댁슜 | ?ㅻ쪟 肄붾뱶 | |------|----------|----------| -| `Services/UsageRankingService.cs` | `using System.IO;` 누락 추가 (`Path`, `File`, `Directory` 인식 불가) | CS0103 | -| `Views/SettingsWindow.xaml.cs` | `Key.Enter`와 `Key.Return` 중복 switch 케이스 → `Key.Enter or Key.Return` 단일 arm으로 통합 | CS8510 | -| `Core/ContextManager.cs` | `EnumDisplayMonitors` 콜백 람다 파라미터 혼합 타입 (`ref RECT` + 암시적 `_`) → 전체 명시적 타입으로 수정 (×2) | CS0748 | -| `Assets/icon.ico` | 아이콘 파일 누락 → 다이아몬드 픽셀 보석 아이콘으로 교체 (`tools/IconGenerator`로 생성, 7크기 ICO) | CS7064 | -| `Views/SettingsWindow.xaml.cs` | `NewIndexPathBox` nullable 역참조 → null 조건 추가 | CS8602 | +| `Services/UsageRankingService.cs` | `using System.IO;` ?꾨씫 異붽? (`Path`, `File`, `Directory` ?몄떇 遺덇?) | CS0103 | +| `Views/SettingsWindow.xaml.cs` | `Key.Enter`?€ `Key.Return` 以묐났 switch 耳€?댁뒪 ??`Key.Enter or Key.Return` ?⑥씪 arm?쇰줈 ?듯빀 | CS8510 | +| `Core/ContextManager.cs` | `EnumDisplayMonitors` 肄쒕갚 ?뚮떎 ?뚮씪誘명꽣 ?쇳빀 ?€??(`ref RECT` + ?붿떆??`_`) ???꾩껜 紐낆떆???€?낆쑝濡??섏젙 (횞2) | CS0748 | +| `Assets/icon.ico` | ?꾩씠肄??뚯씪 ?꾨씫 ???ㅼ씠?꾨が???쎌? 蹂댁꽍 ?꾩씠肄섏쑝濡?援먯껜 (`tools/IconGenerator`濡??앹꽦, 7?ш린 ICO) | CS7064 | +| `Views/SettingsWindow.xaml.cs` | `NewIndexPathBox` nullable ??갭議???null 議곌굔 異붽? | CS8602 | -### 런타임 버그 수정 +### ?고???踰꾧렇 ?섏젙 -| 파일 | 수정 내용 | 심각도 | +| ?뚯씪 | ?섏젙 ?댁슜 | ?ш컖??| |------|----------|-------| -| `Handlers/JsonSkillLoader.cs` | `NavigatePath`: `field[0` 같이 `]` 없는 경로 파싱 시 `IndexOf` 반환 −1로 인한 예외 → `closingIdx < 0` 조기 반환 추가 | HIGH | -| `Services/ClipboardHistoryService.cs` | `_ignoreNext` 플래그를 `volatile bool`로 선언하여 스레드 간 가시성 보장 | MEDIUM | -| `Services/ClipboardHistoryService.cs` | `Initialize()` 호출 시 이미 초기화된 경우(`_msgSource != null`) 또는 `Dispose()` 후 재호출 방지 가드 추가 | MEDIUM | -| `Services/ClipboardHistoryService.cs` | `Dispose()` 중복 호출 방지를 위한 `_disposed` 플래그 추가 | MEDIUM | -| `Services/IndexService.cs` | `ScheduleRebuild`: `_debounceTimer` 교체 시 비원자적 Dispose + 재할당을 `_timerLock` 으로 보호 | MEDIUM | -| `Services/SettingsService.cs` | settings.json 백업 실패 시 빈 `catch {}` → `LogService.Warn`으로 원인 기록 | MEDIUM | +| `Handlers/JsonSkillLoader.cs` | `NavigatePath`: `field[0` 媛숈씠 `]` ?녿뒗 寃쎈줈 ?뚯떛 ??`IndexOf` 諛섑솚 ??濡??명븳 ?덉쇅 ??`closingIdx < 0` 議곌린 諛섑솚 異붽? | HIGH | +| `Services/ClipboardHistoryService.cs` | `_ignoreNext` ?뚮옒洹몃? `volatile bool`濡??좎뼵?섏뿬 ?ㅻ젅??媛?媛€?쒖꽦 蹂댁옣 | MEDIUM | +| `Services/ClipboardHistoryService.cs` | `Initialize()` ?몄텧 ???대? 珥덇린?붾맂 寃쎌슦(`_msgSource != null`) ?먮뒗 `Dispose()` ???ы샇異?諛⑹? 媛€??異붽? | MEDIUM | +| `Services/ClipboardHistoryService.cs` | `Dispose()` 以묐났 ?몄텧 諛⑹?瑜??꾪븳 `_disposed` ?뚮옒洹?異붽? | MEDIUM | +| `Services/IndexService.cs` | `ScheduleRebuild`: `_debounceTimer` 援먯껜 ??鍮꾩썝?먯쟻 Dispose + ?ы븷?뱀쓣 `_timerLock` ?쇰줈 蹂댄샇 | MEDIUM | +| `Services/SettingsService.cs` | settings.json 諛깆뾽 ?ㅽ뙣 ??鍮?`catch {}` ??`LogService.Warn`?쇰줈 ?먯씤 湲곕줉 | MEDIUM | -### 보안 수정 +### 蹂댁븞 ?섏젙 -| 파일 | 수정 내용 | 심각도 | +| ?뚯씪 | ?섏젙 ?댁슜 | ?ш컖??| |------|----------|-------| -| `Handlers/JsonSkillLoader.cs` | `ExecuteAsync`: `item.ActionUrl` 실행 전 `http`/`https` 스킴 검증 추가 — API 응답이 조작된 `file://` 등 비표준 URL 실행 방지 | MEDIUM | +| `Handlers/JsonSkillLoader.cs` | `ExecuteAsync`: `item.ActionUrl` ?ㅽ뻾 ??`http`/`https` ?ㅽ궡 寃€利?異붽? ??API ?묐떟??議곗옉??`file://` ??鍮꾪몴以€ URL ?ㅽ뻾 諛⑹? | MEDIUM | -### 데드 코드 제거 +### ?곕뱶 肄붾뱶 ?쒓굅 -| 파일 | 수정 내용 | +| ?뚯씪 | ?섏젙 ?댁슜 | |------|----------| -| `Handlers/SystemCommandHandler.cs` | `allCommands` 목록에서 `timer`·`alarm` no-op 항목 제거 — 두 명령은 `q.StartsWith` early-return으로 완전히 처리되며, `Action = () => Task.CompletedTask` 항목은 클릭 시 아무것도 하지 않아 사용자 혼란 유발 | +| `Handlers/SystemCommandHandler.cs` | `allCommands` 紐⑸줉?먯꽌 `timer`쨌`alarm` no-op ??ぉ ?쒓굅 ????紐낅졊?€ `q.StartsWith` early-return?쇰줈 ?꾩쟾??泥섎━?섎ʼn, `Action = () => Task.CompletedTask` ??ぉ?€ ?대┃ ???꾨Т寃껊룄 ?섏? ?딆븘 ?ъ슜???쇰? ?좊컻 | --- -## v0.7 2차 코드 검토 수정 (컴파일러 경고 제거) +## v0.7 2李?肄붾뱶 寃€???섏젙 (而댄뙆?쇰윭 寃쎄퀬 ?쒓굅) -| 파일 | 수정 내용 | 경고 코드 | +| ?뚯씪 | ?섏젙 ?댁슜 | 寃쎄퀬 肄붾뱶 | |------|----------|----------| -| `Services/UsageRankingService.cs` | `using AxCommander.Services;` 자기 자신 namespace import 제거 | CS0105 | -| `Handlers/PortHandler.cs` | `UdpStatistics? udpStats = null;` 미사용 변수 제거 | CS0219 | -| `Handlers/PortHandler.cs` | `using System.Net;` 미사용 using 제거 (모든 네트워크 타입은 `System.Net.NetworkInformation`에서 확보) | IDE0005 | -| `Handlers/ScreenCaptureHandler.cs` | 미사용 P/Invoke `keybd_event` 선언 제거 (실제 키 전송은 `SendMessage`로 구현) | CS0649 | -| `Handlers/ScreenCaptureHandler.cs` | 미사용 상수 `KEYEVENTF_KEYUP`, `SB_BOTTOM` 제거 | CS0219 | -| `Handlers/SnapHandler.cs` | 주석 `"snap " 프리픽스` → `"snap" 프리픽스` (실제 Prefix 필드와 일치) | 문서 오류 | +| `Services/UsageRankingService.cs` | `using AxCommander.Services;` ?먭린 ?먯떊 namespace import ?쒓굅 | CS0105 | +| `Handlers/PortHandler.cs` | `UdpStatistics? udpStats = null;` 誘몄궗??蹂€???쒓굅 | CS0219 | +| `Handlers/PortHandler.cs` | `using System.Net;` 誘몄궗??using ?쒓굅 (紐⑤뱺 ?ㅽ듃?뚰겕 ?€?낆? `System.Net.NetworkInformation`?먯꽌 ?뺣낫) | IDE0005 | +| `Handlers/ScreenCaptureHandler.cs` | 誘몄궗??P/Invoke `keybd_event` ?좎뼵 ?쒓굅 (?ㅼ젣 ???꾩넚?€ `SendMessage`濡?援ы쁽) | CS0649 | +| `Handlers/ScreenCaptureHandler.cs` | 誘몄궗???곸닔 `KEYEVENTF_KEYUP`, `SB_BOTTOM` ?쒓굅 | CS0219 | +| `Handlers/SnapHandler.cs` | 二쇱꽍 `"snap " ?꾨━?쎌뒪` ??`"snap" ?꾨━?쎌뒪` (?ㅼ젣 Prefix ?꾨뱶?€ ?쇱튂) | 臾몄꽌 ?ㅻ쪟 | -### v0.7 → v0.8 (UI 개선 + 명령 별칭 + 사용 통계) +### v0.7 ??v0.8 (UI 媛쒖꽑 + 紐낅졊 蹂꾩묶 + ?ъ슜 ?듦퀎) -| 파일 | 변경 내용 | +| ?뚯씪 | 蹂€寃??댁슜 | |------|----------| -| `Views/SettingsWindow.xaml` | 스니펫 탭 "추가" 버튼 `Width="60"` → `MinWidth="72"` (텍스트 잘림 수정) | -| `Models/AppSettings.cs` | `SystemCommandSettings`에 `CommandAliases` 딕셔너리 추가 | -| `Handlers/SystemCommandHandler.cs` | `GetItemsAsync` 필터링에 별칭 매칭 추가 — `/잠금`, `/l` 등 사용자 정의 별칭으로도 명령 접근 가능 | -| `ViewModels/SettingsViewModel.cs` | `AliasLock`·`AliasSleep`·`AliasRestart`·`AliasShutdown`·`AliasHibernate`·`AliasLogout`·`AliasRecycle` 7개 별칭 프로퍼티 추가 / `ResetSystemCommandAliases()` 추가 | -| `Views/SettingsWindow.xaml` | 시스템 탭 행을 4열 레이아웃으로 재설계 — [아이콘][이름/프리픽스][별칭 TextBox][토글], "별칭 기본값 초기화" 버튼 추가 | -| `Views/SettingsWindow.xaml.cs` | `ResetCommandAliases_Click` 핸들러 추가 | -| `Models/DailyUsageStats.cs` (신규) | 일별 사용 통계 데이터 모델 — `LauncherOpens`, `CommandUsage`, `ActiveSeconds` | -| `Services/UsageStatisticsService.cs` (신규) | static 통계 서비스 — `%APPDATA%\AxCommander\stats\YYYY-MM-DD.json` 저장, 30일 롤링 삭제, `RecordLauncherOpen()` / `RecordCommandUsage()` / `AddActiveSeconds()` / `GetStats()` | -| `Services/SessionTrackingService.cs` (신규) | `SystemEvents.SessionSwitch` 기반 PC 활성 시간 추적 — 잠금 시 누적 초 기록, 해제 시 타이머 재개, `Dispose()` 시 플러시 | -| `ViewModels/StatisticsViewModel.cs` (신규) | `DayBarItem` / `CommandStatItem` 레코드, `LauncherOpenBars` / `ActiveTimeBars` / `TopCommands` 컬렉션, 요약 카드 문자열 | -| `Views/StatisticsWindow.xaml` (신규) | 다크 그라데이션 헤더, 4개 요약 카드, 런처 호출 막대 차트 (최근 14일), PC 활성 시간 막대 차트 (최근 14일), 상위 명령 순위 목록 | -| `Views/StatisticsWindow.xaml.cs` (신규) | 드래그 이동, 새로고침/닫기 버튼 핸들러 | -| `Views/TrayContextMenu.cs` | `GlyphStats = "\uE9D9"` (Chart) 상수 추가 | -| `App.xaml.cs` | `_sessionTracking` 필드 추가, `OnHotkeyTriggered()`에 `UsageStatisticsService.RecordLauncherOpen()` 추가, 트레이 메뉴 "사용 통계" 항목 추가, `OnExit()`에 `_sessionTracking?.Dispose()` 추가 | -| `Core/CommandResolver.cs` | `ExecuteAsync()`에 명령 사용 통계 기록 추가 — 프리픽스 + 첫 단어를 키로 `UsageStatisticsService.RecordCommandUsage()` 호출 | +| `Views/SettingsWindow.xaml` | ?ㅻ땲????"異붽?" 踰꾪듉 `Width="60"` ??`MinWidth="72"` (?띿뒪???섎┝ ?섏젙) | +| `Models/AppSettings.cs` | `SystemCommandSettings`??`CommandAliases` ?뺤뀛?덈━ 異붽? | +| `Handlers/SystemCommandHandler.cs` | `GetItemsAsync` ?꾪꽣留곸뿉 蹂꾩묶 留ㅼ묶 異붽? ??`/?좉툑`, `/l` ???ъ슜???뺤쓽 蹂꾩묶?쇰줈??紐낅졊 ?묎렐 媛€??| +| `ViewModels/SettingsViewModel.cs` | `AliasLock`쨌`AliasSleep`쨌`AliasRestart`쨌`AliasShutdown`쨌`AliasHibernate`쨌`AliasLogout`쨌`AliasRecycle` 7媛?蹂꾩묶 ?꾨줈?쇳떚 異붽? / `ResetSystemCommandAliases()` 異붽? | +| `Views/SettingsWindow.xaml` | ?쒖뒪?????됱쓣 4???덉씠?꾩썐?쇰줈 ?ъ꽕怨???[?꾩씠肄?[?대쫫/?꾨━?쎌뒪][蹂꾩묶 TextBox][?좉?], "蹂꾩묶 湲곕낯媛?珥덇린?? 踰꾪듉 異붽? | +| `Views/SettingsWindow.xaml.cs` | `ResetCommandAliases_Click` ?몃뱾??異붽? | +| `Models/DailyUsageStats.cs` (?좉퇋) | ?쇰퀎 ?ъ슜 ?듦퀎 ?곗씠??紐⑤뜽 ??`LauncherOpens`, `CommandUsage`, `ActiveSeconds` | +| `Services/UsageStatisticsService.cs` (?좉퇋) | static ?듦퀎 ?쒕퉬????`%APPDATA%\AxCommander\stats\YYYY-MM-DD.json` ?€?? 30??濡ㅻ쭅 ??젣, `RecordLauncherOpen()` / `RecordCommandUsage()` / `AddActiveSeconds()` / `GetStats()` | +| `Services/SessionTrackingService.cs` (?좉퇋) | `SystemEvents.SessionSwitch` 湲곕컲 PC ?쒖꽦 ?쒓컙 異붿쟻 ???좉툑 ???꾩쟻 珥?湲곕줉, ?댁젣 ???€?대㉧ ?ш컻, `Dispose()` ???뚮윭??| +| `ViewModels/StatisticsViewModel.cs` (?좉퇋) | `DayBarItem` / `CommandStatItem` ?덉퐫?? `LauncherOpenBars` / `ActiveTimeBars` / `TopCommands` 而щ젆?? ?붿빟 移대뱶 臾몄옄??| +| `Views/StatisticsWindow.xaml` (?좉퇋) | ?ㅽ겕 洹몃씪?곗씠???ㅻ뜑, 4媛??붿빟 移대뱶, ?곗쿂 ?몄텧 留됰? 李⑦듃 (理쒓렐 14??, PC ?쒖꽦 ?쒓컙 留됰? 李⑦듃 (理쒓렐 14??, ?곸쐞 紐낅졊 ?쒖쐞 紐⑸줉 | +| `Views/StatisticsWindow.xaml.cs` (?좉퇋) | ?쒕옒洹??대룞, ?덈줈怨좎묠/?リ린 踰꾪듉 ?몃뱾??| +| `Views/TrayContextMenu.cs` | `GlyphStats = "\uE9D9"` (Chart) ?곸닔 異붽? | +| `App.xaml.cs` | `_sessionTracking` ?꾨뱶 異붽?, `OnHotkeyTriggered()`??`UsageStatisticsService.RecordLauncherOpen()` 異붽?, ?몃젅??硫붾돱 "?ъ슜 ?듦퀎" ??ぉ 異붽?, `OnExit()`??`_sessionTracking?.Dispose()` 異붽? | +| `Core/CommandResolver.cs` | `ExecuteAsync()`??紐낅졊 ?ъ슜 ?듦퀎 湲곕줉 異붽? ???꾨━?쎌뒪 + 泥??⑥뼱瑜??ㅻ줈 `UsageStatisticsService.RecordCommandUsage()` ?몄텧 | -**사용 통계 데이터 저장 경로**: `%APPDATA%\AxCommander\stats\` +**?ъ슜 ?듦퀎 ?곗씠???€??寃쎈줈**: `%APPDATA%\AxCommander\stats\` -**일별 JSON 형식**: +**?쇰퀎 JSON ?뺤떇**: ```json { "date": "2026-03-26", @@ -1047,83 +1051,83 @@ dotnet test src/AxCommander.Tests } ``` -**차트 구성**: -- 런처 호출 횟수: 최근 14일 막대 차트 (오늘 강조) -- PC 활성 시간: 최근 14일 막대 차트 (초 → 시간 환산) -- 상위 명령: 30일 합산 Top 10, 순위 + 명령키 + 사용횟수 + 비율 바 +**李⑦듃 援ъ꽦**: +- ?곗쿂 ?몄텧 ?잛닔: 理쒓렐 14??留됰? 李⑦듃 (?ㅻ뒛 媛뺤“) +- PC ?쒖꽦 ?쒓컙: 理쒓렐 14??留됰? 李⑦듃 (珥????쒓컙 ?섏궛) +- ?곸쐞 紐낅졊: 30???⑹궛 Top 10, ?쒖쐞 + 紐낅졊??+ ?ъ슜?잛닔 + 鍮꾩쑉 諛? -**빌드 검증**: `dotnet build --output "C:/Temp/axtest"` — **0 errors, 0 warnings** 확인 +**鍮뚮뱶 寃€利?*: `dotnet build --output "C:/Temp/axtest"` ??**0 errors, 0 warnings** ?뺤씤 -### v0.8 → v0.9 (UX 버그 수정 + 클립보드 영속성 + 다국어 + 단일 인스턴스) +### v0.8 ??v0.9 (UX 踰꾧렇 ?섏젙 + ?대┰蹂대뱶 ?곸냽??+ ?ㅺ뎅??+ ?⑥씪 ?몄뒪?댁뒪) -| 파일 | 변경 내용 | +| ?뚯씪 | 蹂€寃??댁슜 | |------|----------| -| `Views/LauncherWindow.xaml` | `Window` 요소에 `PreviewKeyDown="Window_PreviewKeyDown"` 추가. TextBox에서 키 핸들러 제거 (ScrollViewer 키 소비 문제 해결) | -| `Views/LauncherWindow.xaml.cs` | `Window_PreviewKeyDown` 으로 Escape·Enter·Down·Up·Right·Tab 일괄 처리. Tab 커서 위치를 `Dispatcher.BeginInvoke(DispatcherPriority.Input)`으로 뒤로 이동 수정. `Window_KeyDown`은 Ctrl+, 전담 | -| `Services/ClipboardHistoryService.cs` | JSON 영속성 추가 — `%APPDATA%\AxCommander\clipboard_history.json`. `Initialize()` 시 로드, 항목 변경·삭제 시 비동기 저장, `Dispose()` 시 동기 저장 | -| `Handlers/ClipboardHistoryHandler.cs` | 클립보드 항목 선택 후 이전 창 포커스 복원 + Ctrl+V 자동 붙여넣기. `SetForegroundWindow` P/Invoke 추가, 150ms 딜레이 후 `WindowTracker.PreviousWindow`로 포커스 이동 | -| `App.xaml.cs` | 단일 인스턴스 Mutex (`Global\\AXCommander_SingleInstance`) 추가. 중복 실행 시 안내 메시지 후 `Shutdown()`. 트레이 `DoubleClick` → `MouseClick` (좌클릭 한 번으로 런처 토글). `L10n.SetLanguage(settings.Settings.Launcher.Language)` 호출 추가. `OnExit()`에 Mutex 해제 추가 | -| `Services/SettingsService.cs` | `CreateDefaults()` 에서 `D:\Non_Document` 존재 시 인덱스 경로에 자동 추가 | -| `Services/L10n.cs` (신규) | 정적 다국어 서비스 — `L10n.SetLanguage(lang)` / `L10n.Get(key)`. 지원 언어: ko·en·ja·zh·vi. 키: placeholder·loading·no_results·clipboard_empty·merge_hint 등 | -| `Models/AppSettings.cs` | `LauncherSettings`에 `Language` 프로퍼티 추가 (`"ko"` 기본값) | -| `ViewModels/SettingsViewModel.cs` | `Language` 프로퍼티 추가, `Save()` 시 `L10n.SetLanguage()` 호출 | -| `ViewModels/LauncherViewModel.cs` | `PlaceholderText` → `L10n.Get("placeholder")` 반환 | -| `Views/SettingsWindow.xaml` | 일반 탭 상단에 언어 선택 ComboBox 추가 (한국어/English/日本語/中文/Tiếng Việt) | -| `Handlers/HelpHandler.cs` | 헤더 항목 `Data = "__HELP_OVERVIEW__"` 설정. `ExecuteAsync` 에서 `HelpDetailWindow` 열기 | -| `Views/HelpDetailWindow.xaml` (신규) | 프레임리스 다크 창 (720×640). 모든 도움말 항목을 카드 형태로 표시. ESC 닫기, 드래그 이동 | -| `Views/HelpDetailWindow.xaml.cs` (신규) | `HelpItemModel` 클래스 (Category·Command·Title·Description·Example·Symbol·ColorBrush) | -| `Views/` | `AboutWindow`에 `mascot.png` 이미지 표시 — `Assets/mascot.png` 파일이 있을 때만 표시 (없으면 공간 숨김) | +| `Views/LauncherWindow.xaml` | `Window` ?붿냼??`PreviewKeyDown="Window_PreviewKeyDown"` 異붽?. TextBox?먯꽌 ???몃뱾???쒓굅 (ScrollViewer ???뚮퉬 臾몄젣 ?닿껐) | +| `Views/LauncherWindow.xaml.cs` | `Window_PreviewKeyDown` ?쇰줈 Escape쨌Enter쨌Down쨌Up쨌Right쨌Tab ?쇨큵 泥섎━. Tab 而ㅼ꽌 ?꾩튂瑜?`Dispatcher.BeginInvoke(DispatcherPriority.Input)`?쇰줈 ?ㅻ줈 ?대룞 ?섏젙. `Window_KeyDown`?€ Ctrl+, ?꾨떞 | +| `Services/ClipboardHistoryService.cs` | JSON ?곸냽??異붽? ??`%APPDATA%\AxCommander\clipboard_history.json`. `Initialize()` ??濡쒕뱶, ??ぉ 蹂€寃승룹궘????鍮꾨룞湲??€?? `Dispose()` ???숆린 ?€??| +| `Handlers/ClipboardHistoryHandler.cs` | ?대┰蹂대뱶 ??ぉ ?좏깮 ???댁쟾 李??ъ빱??蹂듭썝 + Ctrl+V ?먮룞 遺숈뿬?j린. `SetForegroundWindow` P/Invoke 異붽?, 150ms ?쒕젅????`WindowTracker.PreviousWindow`濡??ъ빱???대룞 | +| `App.xaml.cs` | ?⑥씪 ?몄뒪?댁뒪 Mutex (`Global\\AXCommander_SingleInstance`) 異붽?. 以묐났 ?ㅽ뻾 ???덈궡 硫붿떆吏€ ??`Shutdown()`. ?몃젅??`DoubleClick` ??`MouseClick` (醫뚰겢由???踰덉쑝濡??곗쿂 ?좉?). `L10n.SetLanguage(settings.Settings.Launcher.Language)` ?몄텧 異붽?. `OnExit()`??Mutex ?댁젣 異붽? | +| `Services/SettingsService.cs` | `CreateDefaults()` ?먯꽌 `D:\Non_Document` 議댁옱 ???몃뜳??寃쎈줈???먮룞 異붽? | +| `Services/L10n.cs` (?좉퇋) | ?뺤쟻 ?ㅺ뎅???쒕퉬????`L10n.SetLanguage(lang)` / `L10n.Get(key)`. 吏€???몄뼱: ko쨌en쨌ja쨌zh쨌vi. ?? placeholder쨌loading쨌no_results쨌clipboard_empty쨌merge_hint ??| +| `Models/AppSettings.cs` | `LauncherSettings`??`Language` ?꾨줈?쇳떚 異붽? (`"ko"` 湲곕낯媛? | +| `ViewModels/SettingsViewModel.cs` | `Language` ?꾨줈?쇳떚 異붽?, `Save()` ??`L10n.SetLanguage()` ?몄텧 | +| `ViewModels/LauncherViewModel.cs` | `PlaceholderText` ??`L10n.Get("placeholder")` 諛섑솚 | +| `Views/SettingsWindow.xaml` | ?쇰컲 ???곷떒???몄뼱 ?좏깮 ComboBox 異붽? (?쒓뎅??English/?ζ쑍沃?訝?뻼/Ti梳퓆g Vi沼뇍) | +| `Handlers/HelpHandler.cs` | ?ㅻ뜑 ??ぉ `Data = "__HELP_OVERVIEW__"` ?ㅼ젙. `ExecuteAsync` ?먯꽌 `HelpDetailWindow` ?닿린 | +| `Views/HelpDetailWindow.xaml` (?좉퇋) | ?꾨젅?꾨━???ㅽ겕 李?(720횞640). 紐⑤뱺 ?꾩?留???ぉ??移대뱶 ?뺥깭濡??쒖떆. ESC ?リ린, ?쒕옒洹??대룞 | +| `Views/HelpDetailWindow.xaml.cs` (?좉퇋) | `HelpItemModel` ?대옒??(Category쨌Command쨌Title쨌Description쨌Example쨌Symbol쨌ColorBrush) | +| `Views/` | `AboutWindow`??`mascot.png` ?대?吏€ ?쒖떆 ??`Assets/mascot.png` ?뚯씪???덉쓣 ?뚮쭔 ?쒖떆 (?놁쑝硫?怨듦컙 ?④?) | -**방향키 내비게이션 버그 원인 및 수정**: +**諛⑺뼢???대퉬寃뚯씠??踰꾧렇 ?먯씤 諛??섏젙**: -TextBox 내부의 `PART_ContentHost`(ScrollViewer)가 터널링 단계(PreviewKeyDown)에서 Up/Down 키를 소비하므로 TextBox 레벨 이벤트 핸들러로는 차단 불가. 수정: Window 레벨 `PreviewKeyDown`으로 이동 — Window는 터널링 최상위이므로 모든 자식 요소보다 먼저 키 이벤트를 수신. +TextBox ?대???`PART_ContentHost`(ScrollViewer)媛€ ?곕꼸留??④퀎(PreviewKeyDown)?먯꽌 Up/Down ?ㅻ? ?뚮퉬?섎?濡?TextBox ?덈꺼 ?대깽???몃뱾?щ줈??李⑤떒 遺덇?. ?섏젙: Window ?덈꺼 `PreviewKeyDown`?쇰줈 ?대룞 ??Window???곕꼸留?理쒖긽?꾩씠誘€濡?紐⑤뱺 ?먯떇 ?붿냼蹂대떎 癒쇱? ???대깽?몃? ?섏떊. -**Tab 커서 위치 버그 원인 및 수정**: +**Tab 而ㅼ꽌 ?꾩튂 踰꾧렇 ?먯씤 諛??섏젙**: -`_vm.InputText = title` 바인딩 업데이트는 렌더링 사이클 이후에 TextBox에 반영되므로 직후 `CaretIndex`를 설정해도 바인딩이 덮어씀. 수정: `Dispatcher.BeginInvoke(() => InputBox.CaretIndex = ..., DispatcherPriority.Input)` 으로 다음 입력 처리 사이클에 커서 위치 설정. +`_vm.InputText = title` 諛붿씤???낅뜲?댄듃???뚮뜑留??ъ씠???댄썑??TextBox??諛섏쁺?섎?濡?吏곹썑 `CaretIndex`瑜??ㅼ젙?대룄 諛붿씤?⑹씠 ??뼱?€. ?섏젙: `Dispatcher.BeginInvoke(() => InputBox.CaretIndex = ..., DispatcherPriority.Input)` ?쇰줈 ?ㅼ쓬 ?낅젰 泥섎━ ?ъ씠?댁뿉 而ㅼ꽌 ?꾩튂 ?ㅼ젙. -**클립보드 히스토리 JSON 형식** (`clipboard_history.json`): +**?대┰蹂대뱶 ?덉뒪?좊━ JSON ?뺤떇** (`clipboard_history.json`): ```json [ - { "text": "복사한 텍스트", "ts": "2026-03-26T10:30:00" }, - { "text": "이전 복사", "ts": "2026-03-26T10:25:00" } + { "text": "蹂듭궗???띿뒪??, "ts": "2026-03-26T10:30:00" }, + { "text": "?댁쟾 蹂듭궗", "ts": "2026-03-26T10:25:00" } ] ``` -이미지 타입은 직렬화하지 않음 (텍스트 전용 저장). +?대?吏€ ?€?낆? 吏곷젹?뷀븯吏€ ?딆쓬 (?띿뒪???꾩슜 ?€??. -**빌드 검증**: `dotnet build --output "C:/Temp/axtest3"` — **0 errors, 0 warnings** 확인 +**鍮뚮뱶 寃€利?*: `dotnet build --output "C:/Temp/axtest3"` ??**0 errors, 0 warnings** ?뺤씤 -### v0.9 2차 (잠금 해제 알림 + 화면 캡처 설정 + 테마 모양 + 트레이 메뉴 개선) +### v0.9 2李?(?좉툑 ?댁젣 ?뚮┝ + ?붾㈃ 罹≪쿂 ?ㅼ젙 + ?뚮쭏 紐⑥뼇 + ?몃젅??硫붾돱 媛쒖꽑) -| 파일 | 변경 내용 | +| ?뚯씪 | 蹂€寃??댁슜 | |------|----------| -| `Assets/Quotes/famous.json` (신규) | 내장 명언 500개 JSON (EmbeddedResource) — 동서양 철학자·사상가·과학자·경영자·작가·한국 위인 등 다양한 인물 | -| `Services/QuoteService.cs` (신규) | `GetRandomQuote()` — `famous.json` EmbeddedResource 로드, 앱 생애 동안 한 번만 파싱, 랜덤 반환 | -| `Services/WorktimeReminderService.cs` (신규) | `SessionTrackingService`로부터 잠금 해제 이벤트를 구독하여 누적 사용시간 계산. 설정한 간격(30~240분) 이상 경과 시 `ReminderPopupWindow` 표시. `enabled` 설정이 꺼져 있으면 즉시 비활성 | -| `Views/ReminderPopupWindow.xaml/.cs` (신규) | 잠금 해제 팝업 — 사용 시간·격려 문구·명언 표시. 설정한 화면 모서리(4방향)에 위치. `SetNoActivate()` P/Invoke로 포커스 비활성 상태 유지. 설정한 초 후 자동 닫힘 | -| `Models/AppSettings.cs` | `ScreenCaptureSettings` 중첩 클래스 추가 (`Prefix`, `SaveToFile`, `SavePath`). `ReminderSettings` 중첩 클래스 추가 (`Enabled`, `Position`, `IntervalMinutes`, `AutoDismissSeconds`) | -| `Views/SettingsWindow.xaml/.cs` | 캡처 탭 추가 — `cap` 프리픽스 TextBox, 파일 저장 토글, 저장 경로 TextBox+폴더 선택 버튼. 알림 탭 추가 — 활성화 토글, 위치 ComboBox(4방향), 간격 ComboBox(30/60/120/240분), 자동 닫힘 ComboBox(5/10/15/20/30초) | -| `ViewModels/SettingsViewModel.cs` | `CapPrefix`, `SaveToFile`, `SavePath`, `ReminderEnabled`, `ReminderPosition`, `ReminderIntervalMinutes`, `ReminderAutoDismissSeconds` 프로퍼티 추가 | -| `Handlers/ScreenCaptureHandler.cs` | `Prefix` 프로퍼티를 `settings.ScreenCapture.Prefix` 런타임 값으로 교체. 캡처 성공 시 `settings.ScreenCapture.SaveToFile`이 true면 `SavePath`(빈 값이면 기본 경로)에 PNG 파일 저장 | -| `App.xaml.cs` | `WorktimeReminderService` 초기화 + `SessionTrackingService`와 연결. `OnExit()`에 `_worktimeReminder?.Dispose()` 추가 | -| `Themes/*.xaml` (9개 파일) | 각 테마에 `WindowCornerRadius`·`ItemCornerRadius` `CornerRadius` 리소스 추가 (테마별 고유 값 적용) | -| `Views/LauncherWindow.xaml` | 창 최상위 `Border.CornerRadius` → `{DynamicResource WindowCornerRadius}`. 항목 `ControlTemplate Border.CornerRadius` → `{DynamicResource ItemCornerRadius}` | -| `Views/LauncherWindow.xaml.cs` | `BuildCustomDictionary()`에 `WindowCornerRadius`·`ItemCornerRadius` 기본값(20, 10) 추가 | -| `Views/TrayContextMenu.cs` | `DarkTrayRenderer`/`DarkColorTable` → `ModernTrayRenderer`/`ModernColorTable` 전면 재작성. WPF `Application.Current.Resources`에서 `LauncherBackground`·`AccentColor`·`PrimaryText` 등을 읽어 테마 색상 반영. `SetWindowRgn` P/Invoke로 메뉴 창 모서리 라운딩. 시작 시 자동실행 항목 글리프 → 전구(`\uE82F`), 활성 시 앰버 색상(`#FFB300`) + 후광 효과. `OnRenderItemCheck` 빈 override로 기본 체크마크 억제 | -| `Themes/Symbols.cs` | `ReminderBell = "\uEA8F"` (벨 아이콘) + `Lightbulb = "\uE82F"` (전구 아이콘) 추가 | -| `Handlers/HelpHandler.cs` | `cap` 항목: 프리픽스 변경 가능·파일 저장 경로 설명 추가. `info` 항목: 커맨드 표시 `"info · *"`, `*` 단축키 설명 추가. 신규 `알림` 카테고리 항목 추가 (잠금 해제 사용시간 알림) | +| `Assets/Quotes/famous.json` (?좉퇋) | ?댁옣 紐낆뼵 500媛?JSON (EmbeddedResource) ???숈꽌??泥좏븰?먃룹궗?곴?쨌怨쇳븰?먃룰꼍?곸옄쨌?묎?쨌?쒓뎅 ?꾩씤 ???ㅼ뼇???몃Ъ | +| `Services/QuoteService.cs` (?좉퇋) | `GetRandomQuote()` ??`famous.json` EmbeddedResource 濡쒕뱶, ???앹븷 ?숈븞 ??踰덈쭔 ?뚯떛, ?쒕뜡 諛섑솚 | +| `Services/WorktimeReminderService.cs` (?좉퇋) | `SessionTrackingService`濡쒕????좉툑 ?댁젣 ?대깽?몃? 援щ룆?섏뿬 ?꾩쟻 ?ъ슜?쒓컙 怨꾩궛. ?ㅼ젙??媛꾧꺽(30~240遺? ?댁긽 寃쎄낵 ??`ReminderPopupWindow` ?쒖떆. `enabled` ?ㅼ젙??爰쇱졇 ?덉쑝硫?利됱떆 鍮꾪솢??| +| `Views/ReminderPopupWindow.xaml/.cs` (?좉퇋) | ?좉툑 ?댁젣 ?앹뾽 ???ъ슜 ?쒓컙쨌寃⑸젮 臾멸뎄쨌紐낆뼵 ?쒖떆. ?ㅼ젙???붾㈃ 紐⑥꽌由?4諛⑺뼢)???꾩튂. `SetNoActivate()` P/Invoke濡??ъ빱??鍮꾪솢???곹깭 ?좎?. ?ㅼ젙??珥????먮룞 ?ロ옒 | +| `Models/AppSettings.cs` | `ScreenCaptureSettings` 以묒꺽 ?대옒??異붽? (`Prefix`, `SaveToFile`, `SavePath`). `ReminderSettings` 以묒꺽 ?대옒??異붽? (`Enabled`, `Position`, `IntervalMinutes`, `AutoDismissSeconds`) | +| `Views/SettingsWindow.xaml/.cs` | 罹≪쿂 ??異붽? ??`cap` ?꾨━?쎌뒪 TextBox, ?뚯씪 ?€???좉?, ?€??寃쎈줈 TextBox+?대뜑 ?좏깮 踰꾪듉. ?뚮┝ ??異붽? ???쒖꽦???좉?, ?꾩튂 ComboBox(4諛⑺뼢), 媛꾧꺽 ComboBox(30/60/120/240遺?, ?먮룞 ?ロ옒 ComboBox(5/10/15/20/30珥? | +| `ViewModels/SettingsViewModel.cs` | `CapPrefix`, `SaveToFile`, `SavePath`, `ReminderEnabled`, `ReminderPosition`, `ReminderIntervalMinutes`, `ReminderAutoDismissSeconds` ?꾨줈?쇳떚 異붽? | +| `Handlers/ScreenCaptureHandler.cs` | `Prefix` ?꾨줈?쇳떚瑜?`settings.ScreenCapture.Prefix` ?고???媛믪쑝濡?援먯껜. 罹≪쿂 ?깃났 ??`settings.ScreenCapture.SaveToFile`??true硫?`SavePath`(鍮?媛믪씠硫?湲곕낯 寃쎈줈)??PNG ?뚯씪 ?€??| +| `App.xaml.cs` | `WorktimeReminderService` 珥덇린??+ `SessionTrackingService`?€ ?곌껐. `OnExit()`??`_worktimeReminder?.Dispose()` 異붽? | +| `Themes/*.xaml` (9媛??뚯씪) | 媛??뚮쭏??`WindowCornerRadius`쨌`ItemCornerRadius` `CornerRadius` 由ъ냼??異붽? (?뚮쭏蹂?怨좎쑀 媛??곸슜) | +| `Views/LauncherWindow.xaml` | 李?理쒖긽??`Border.CornerRadius` ??`{DynamicResource WindowCornerRadius}`. ??ぉ `ControlTemplate Border.CornerRadius` ??`{DynamicResource ItemCornerRadius}` | +| `Views/LauncherWindow.xaml.cs` | `BuildCustomDictionary()`??`WindowCornerRadius`쨌`ItemCornerRadius` 湲곕낯媛?20, 10) 異붽? | +| `Views/TrayContextMenu.cs` | `DarkTrayRenderer`/`DarkColorTable` ??`ModernTrayRenderer`/`ModernColorTable` ?꾨㈃ ?ъ옉?? WPF `Application.Current.Resources`?먯꽌 `LauncherBackground`쨌`AccentColor`쨌`PrimaryText` ?깆쓣 ?쎌뼱 ?뚮쭏 ?됱긽 諛섏쁺. `SetWindowRgn` P/Invoke濡?硫붾돱 李?紐⑥꽌由??쇱슫?? ?쒖옉 ???먮룞?ㅽ뻾 ??ぉ 湲€由ы봽 ???꾧뎄(`\uE82F`), ?쒖꽦 ???곕쾭 ?됱긽(`#FFB300`) + ?꾧킅 ?④낵. `OnRenderItemCheck` 鍮?override濡?湲곕낯 泥댄겕留덊겕 ?듭젣 | +| `Themes/Symbols.cs` | `ReminderBell = "\uEA8F"` (踰??꾩씠肄? + `Lightbulb = "\uE82F"` (?꾧뎄 ?꾩씠肄? 異붽? | +| `Handlers/HelpHandler.cs` | `cap` ??ぉ: ?꾨━?쎌뒪 蹂€寃?媛€?Β룻뙆???€??寃쎈줈 ?ㅻ챸 異붽?. `info` ??ぉ: 而ㅻ㎤???쒖떆 `"info 쨌 *"`, `*` ?⑥텞???ㅻ챸 異붽?. ?좉퇋 `?뚮┝` 移댄뀒怨좊━ ??ぉ 異붽? (?좉툑 ?댁젣 ?ъ슜?쒓컙 ?뚮┝) | -**WorktimeReminderService 동작 흐름**: +**WorktimeReminderService ?숈옉 ?먮쫫**: ``` -SessionTrackingService.Unlocked 이벤트 - → WorktimeReminderService.OnUnlocked() - → 설정 disabled? → 무시 - → 마지막 알림 이후 경과 시간 < IntervalMinutes? → 무시 - → ReminderPopupWindow(사용시간, 명언) 표시 (Dispatcher.Invoke) - → _lastReminderTime 갱신 +SessionTrackingService.Unlocked ?대깽?? + ??WorktimeReminderService.OnUnlocked() + ???ㅼ젙 disabled? ??臾댁떆 + ??留덉?留??뚮┝ ?댄썑 寃쎄낵 ?쒓컙 < IntervalMinutes? ??臾댁떆 + ??ReminderPopupWindow(?ъ슜?쒓컙, 紐낆뼵) ?쒖떆 (Dispatcher.Invoke) + ??_lastReminderTime 媛깆떊 ``` -**트레이 메뉴 `ThemeColor()` 헬퍼**: +**?몃젅??硫붾돱 `ThemeColor()` ?ы띁**: ```csharp private static Color ThemeColor(string key, Color fallback) { @@ -1135,493 +1139,493 @@ private static Color ThemeColor(string key, Color fallback) return fallback; } ``` -WPF ResourceDictionary를 WinForms GDI 렌더러에서 안전하게 읽기 위해 try/catch로 감쌉니다. +WPF ResourceDictionary瑜?WinForms GDI ?뚮뜑?ъ뿉???덉쟾?섍쾶 ?쎄린 ?꾪빐 try/catch濡?媛먯뙃?덈떎. -**빌드 검증**: `dotnet build` — **0 errors, 0 warnings** 확인 +**鍮뚮뱶 寃€利?*: `dotnet build` ??**0 errors, 0 warnings** ?뺤씤 -### v0.9 3차 (보안 강화 + 글로벌 캡처 단축키 + 영역 미세조정) +### v0.9 3李?(蹂댁븞 媛뺥솕 + 湲€濡쒕쾶 罹≪쿂 ?⑥텞??+ ?곸뿭 誘몄꽭議곗젙) -| 파일 | 변경 내용 | +| ?뚯씪 | 蹂€寃??댁슜 | |------|----------| -| `Services/ClipboardHistoryService.cs` | 클립보드 히스토리 저장을 **DPAPI 암호화**로 전환. `clipboard_history.json`(평문) → `clipboard_history.dat`(DPAPI). 구버전 평문 파일 자동 마이그레이션 + 원본 삭제. `DataProtectionScope.CurrentUser` — 현재 Windows 사용자 계정에서만 복호화 가능 | -| `AxCommander.csproj` | `System.Security.Cryptography.ProtectedData 8.0.0` NuGet 패키지 추가 (로컬 전용, 네트워크 통신 없음) | -| `Models/AppSettings.cs` | `ScreenCaptureSettings`에서 `SaveToFile`, `SavePath` 완전 제거 (보안 정책). `GlobalHotkeyEnabled`, `GlobalHotkey`, `GlobalHotkeyMode`, `ScrollDelayMs` 추가. `CustomThemeColors`에 `WindowCornerRadius`, `ItemCornerRadius` 추가 | -| `Handlers/ScreenCaptureHandler.cs` | 파일 저장 로직(`ShouldSave`, `GetSaveDir`, `bmp.Save()`) 전면 제거 — 캡처 결과는 **클립보드에만 복사**. `CaptureDirectAsync(mode)` public 메서드 추가 (글로벌 단축키용). 스크롤 딜레이 하드코딩 120ms → `ScrollDelayMs` 설정값 사용 | -| `Core/InputListener.cs` | `_captureHotkey` + `CaptureHotkeyTriggered` 이벤트 추가. `UpdateCaptureHotkey(string, bool)` 메서드로 캡처 단축키 동적 등록/해제 | -| `Core/HotkeyParser.cs` | `PrintScreen`(0x2C), `Pause`(0x13), `ScrollLock`(0x91) 키 추가 | -| `App.xaml.cs` | `OnCaptureHotkeyTriggered` 핸들러 추가 — 런처 없이 `CaptureDirectAsync` 직접 호출. 설정 저장 시 캡처 단축키 갱신 | -| `ViewModels/SettingsViewModel.cs` | `CapGlobalHotkeyEnabled`, `CapGlobalHotkey`, `CapGlobalMode`, `CapScrollDelayMs/Str`, `CustomWindowCornerRadius`, `CustomItemCornerRadius` 프로퍼티 + Load/Save | -| `Views/SettingsWindow.xaml` | 캡처 탭: 파일 저장 UI 전면 제거, 글로벌 단축키 섹션 추가 (활성 토글·키 레코더·모드 선택·기본값 복원), 스크롤 딜레이 ComboBox. 색상 편집 탭: "모양 (모서리 라운딩)" 섹션 + 슬라이더 2개 (창/항목) | -| `Views/SettingsWindow.xaml.cs` | `CapHotkeyRecorder_PreviewKeyDown` 키 녹화 핸들러, `ResetCapGlobalHotkey_Click` 추가 | -| `Views/LauncherWindow.xaml.cs` | `BuildCustomDictionary()`가 커스텀 `WindowCornerRadius`/`ItemCornerRadius` 설정값 적용 (기존 하드코딩 20/10 → 사용자 값) | -| `Views/LauncherWindow.xaml` | 액션 breadcrumb 바 하드코딩 `#4B5EFC` → `{DynamicResource AccentColor}` 교체 | -| `Views/RegionSelectWindow.xaml.cs` | `_endPoint` 필드 추가, 드래그 종료 후 화살표 키(1px/Shift 10px) 미세조정 + Enter 확정 지원 | -| `Views/TrayContextMenu.cs` | `SetWindowRgn` 실패 시 `DeleteObject(rgn)` 호출 → GDI 핸들 누수 수정 | -| `Handlers/HelpHandler.cs` | `_entries.Length - 6` 하드코딩 → `_entries.Count(e => e.Category != "키보드")` 동적 계산. `cap` 항목 설명에 글로벌 단축키 언급 추가 | -| `Views/ReminderPopupWindow.xaml.cs` | `GetWindowLong`/`SetWindowLong` → `GetWindowLongPtr`/`SetWindowLongPtr` 64비트 안전 교체. 타이머 Tick 핸들러 해제. Esc 키 닫기 지원 | -| `Services/WorktimeReminderService.cs` | `lock(_lock)` 스레드 동기화 추가 (SessionSwitch 백그라운드 스레드 ↔ UI 스레드 레이스 컨디션 해소). `IntervalMinutes` 최소값 보호 (`Math.Max(1, ...)`) | +| `Services/ClipboardHistoryService.cs` | ?대┰蹂대뱶 ?덉뒪?좊━ ?€?μ쓣 **DPAPI ?뷀샇??*濡??꾪솚. `clipboard_history.json`(?됰Ц) ??`clipboard_history.dat`(DPAPI). 援щ쾭???됰Ц ?뚯씪 ?먮룞 留덉씠洹몃젅?댁뀡 + ?먮낯 ??젣. `DataProtectionScope.CurrentUser` ???꾩옱 Windows ?ъ슜??怨꾩젙?먯꽌留?蹂듯샇??媛€??| +| `AxCommander.csproj` | `System.Security.Cryptography.ProtectedData 8.0.0` NuGet ?⑦궎吏€ 異붽? (濡쒖뺄 ?꾩슜, ?ㅽ듃?뚰겕 ?듭떊 ?놁쓬) | +| `Models/AppSettings.cs` | `ScreenCaptureSettings`?먯꽌 `SaveToFile`, `SavePath` ?꾩쟾 ?쒓굅 (蹂댁븞 ?뺤콉). `GlobalHotkeyEnabled`, `GlobalHotkey`, `GlobalHotkeyMode`, `ScrollDelayMs` 異붽?. `CustomThemeColors`??`WindowCornerRadius`, `ItemCornerRadius` 異붽? | +| `Handlers/ScreenCaptureHandler.cs` | ?뚯씪 ?€??濡쒖쭅(`ShouldSave`, `GetSaveDir`, `bmp.Save()`) ?꾨㈃ ?쒓굅 ??罹≪쿂 寃곌낵??**?대┰蹂대뱶?먮쭔 蹂듭궗**. `CaptureDirectAsync(mode)` public 硫붿꽌??異붽? (湲€濡쒕쾶 ?⑥텞?ㅼ슜). ?ㅽ겕濡??쒕젅???섎뱶肄붾뵫 120ms ??`ScrollDelayMs` ?ㅼ젙媛??ъ슜 | +| `Core/InputListener.cs` | `_captureHotkey` + `CaptureHotkeyTriggered` ?대깽??異붽?. `UpdateCaptureHotkey(string, bool)` 硫붿꽌?쒕줈 罹≪쿂 ?⑥텞???숈쟻 ?깅줉/?댁젣 | +| `Core/HotkeyParser.cs` | `PrintScreen`(0x2C), `Pause`(0x13), `ScrollLock`(0x91) ??異붽? | +| `App.xaml.cs` | `OnCaptureHotkeyTriggered` ?몃뱾??異붽? ???곗쿂 ?놁씠 `CaptureDirectAsync` 吏곸젒 ?몄텧. ?ㅼ젙 ?€????罹≪쿂 ?⑥텞??媛깆떊 | +| `ViewModels/SettingsViewModel.cs` | `CapGlobalHotkeyEnabled`, `CapGlobalHotkey`, `CapGlobalMode`, `CapScrollDelayMs/Str`, `CustomWindowCornerRadius`, `CustomItemCornerRadius` ?꾨줈?쇳떚 + Load/Save | +| `Views/SettingsWindow.xaml` | 罹≪쿂 ?? ?뚯씪 ?€??UI ?꾨㈃ ?쒓굅, 湲€濡쒕쾶 ?⑥텞???뱀뀡 異붽? (?쒖꽦 ?좉?쨌???덉퐫?붋룸え???좏깮쨌湲곕낯媛?蹂듭썝), ?ㅽ겕濡??쒕젅??ComboBox. ?됱긽 ?몄쭛 ?? "紐⑥뼇 (紐⑥꽌由??쇱슫??" ?뱀뀡 + ?щ씪?대뜑 2媛?(李???ぉ) | +| `Views/SettingsWindow.xaml.cs` | `CapHotkeyRecorder_PreviewKeyDown` ???뱁솕 ?몃뱾?? `ResetCapGlobalHotkey_Click` 異붽? | +| `Views/LauncherWindow.xaml.cs` | `BuildCustomDictionary()`媛€ 而ㅼ뒪?€ `WindowCornerRadius`/`ItemCornerRadius` ?ㅼ젙媛??곸슜 (湲곗〈 ?섎뱶肄붾뵫 20/10 ???ъ슜??媛? | +| `Views/LauncherWindow.xaml` | ?≪뀡 breadcrumb 諛??섎뱶肄붾뵫 `#4B5EFC` ??`{DynamicResource AccentColor}` 援먯껜 | +| `Views/RegionSelectWindow.xaml.cs` | `_endPoint` ?꾨뱶 異붽?, ?쒕옒洹?醫낅즺 ???붿궡????1px/Shift 10px) 誘몄꽭議곗젙 + Enter ?뺤젙 吏€??| +| `Views/TrayContextMenu.cs` | `SetWindowRgn` ?ㅽ뙣 ??`DeleteObject(rgn)` ?몄텧 ??GDI ?몃뱾 ?꾩닔 ?섏젙 | +| `Handlers/HelpHandler.cs` | `_entries.Length - 6` ?섎뱶肄붾뵫 ??`_entries.Count(e => e.Category != "?ㅻ낫??)` ?숈쟻 怨꾩궛. `cap` ??ぉ ?ㅻ챸??湲€濡쒕쾶 ?⑥텞???멸툒 異붽? | +| `Views/ReminderPopupWindow.xaml.cs` | `GetWindowLong`/`SetWindowLong` ??`GetWindowLongPtr`/`SetWindowLongPtr` 64鍮꾪듃 ?덉쟾 援먯껜. ?€?대㉧ Tick ?몃뱾???댁젣. Esc ???リ린 吏€??| +| `Services/WorktimeReminderService.cs` | `lock(_lock)` ?ㅻ젅???숆린??異붽? (SessionSwitch 諛깃렇?쇱슫???ㅻ젅????UI ?ㅻ젅???덉씠??而⑤뵒???댁냼). `IntervalMinutes` 理쒖냼媛?蹂댄샇 (`Math.Max(1, ...)`) | -**보안 정책 변경**: -- 캡처: 파일 저장 기능 코드에서 완전 제거. 설정 UI에도 없음. 클립보드에만 복사. -- 클립보드 히스토리: DPAPI `DataProtectionScope.CurrentUser`로 암호화 저장. 파일 확장자 `.json` → `.dat`. 다른 사용자/PC에서 열 수 없음. -- 통계(`stats/*.json`): 민감 데이터 아님, 암호화 미적용. +**蹂댁븞 ?뺤콉 蹂€寃?*: +- 罹≪쿂: ?뚯씪 ?€??湲곕뒫 肄붾뱶?먯꽌 ?꾩쟾 ?쒓굅. ?ㅼ젙 UI?먮룄 ?놁쓬. ?대┰蹂대뱶?먮쭔 蹂듭궗. +- ?대┰蹂대뱶 ?덉뒪?좊━: DPAPI `DataProtectionScope.CurrentUser`濡??뷀샇???€?? ?뚯씪 ?뺤옣??`.json` ??`.dat`. ?ㅻⅨ ?ъ슜??PC?먯꽌 ?????놁쓬. +- ?듦퀎(`stats/*.json`): 誘쇨컧 ?곗씠???꾨떂, ?뷀샇??誘몄쟻?? -**빌드 검증**: `dotnet build` — **0 errors, 0 warnings** 확인 +**鍮뚮뱶 寃€利?*: `dotnet build` ??**0 errors, 0 warnings** ?뺤씤 -### v0.9 → v0.9.x (대규모 기능 확장 — 유틸리티 8종 + 스포이드 + 서비스 관리) +### v0.9 ??v0.9.x (?€洹쒕え 湲곕뒫 ?뺤옣 ???좏떥由ы떚 8醫?+ ?ㅽ룷?대뱶 + ?쒕퉬??愿€由? -| 파일 | 변경 내용 | +| ?뚯씪 | 蹂€寃??댁슜 | |------|----------| -| `Handlers/ColorPickHandler.cs` (신규) | `pick` 프리픽스. 전체 화면 스포이드 모드(`EyeDropperWindow`) → 클릭 지점 색상 HEX 코드 추출 → 반투명 결과 창(`ColorPickResultWindow`) 5초 표시 → 클립보드 복사 | -| `Views/EyeDropperWindow.xaml/.cs` (신규) | 전체 화면 투명 오버레이. 마우스 따라다니는 돋보기 원 + 실시간 HEX 코드 레이블. `GetPixel` P/Invoke로 화면 픽셀 색상 읽기. 좌클릭 확정, 우클릭/Esc 취소 | -| `Views/ColorPickResultWindow.xaml/.cs` (신규) | 반투명 다크 팝업. 색상 미리보기 원 + HEX/RGB 텍스트 + 자동 닫힘 5초 타이머 | -| `Handlers/DateCalcHandler.cs` (신규) | `date` 프리픽스. `+30d`/`-100d` 가감, D-day 계산, Unix timestamp ↔ 날짜 변환, 요일·ISO 주차, `date unix` 현재 타임스탬프 | -| `Handlers/ServiceHandler.cs` (신규) | `svc` 프리픽스. `ServiceController` API로 Windows 서비스 검색·상태 조회. `svc start/stop/restart [이름]`으로 제어(관리자 권한 UAC). `svc restart clipboard` → AX 클립보드 히스토리 서비스 강제 재시작 | -| `Services/ClipboardHistoryService.cs` | `Reinitialize()` 메서드 추가 — Dispose 후 내부 상태 초기화 + 클립보드 모니터링 재개 | -| `AxCommander.csproj` | `System.ServiceProcess.ServiceController 8.0.1` NuGet 패키지 추가 (로컬 전용) | -| `Handlers/TextStatsHandler.cs` (신규) | `stats` 프리픽스. 클립보드 텍스트 글자·단어·줄 수, UTF-8 바이트, 키워드 빈도(Top 5), 읽기 시간 추정, 특정 키워드 검색 | -| `Handlers/FavoriteHandler.cs` (신규) | `fav` 프리픽스. 자주 쓰는 파일·폴더 경로를 `favorites.json`에 저장, `fav add/del` 서브커맨드 | -| `Handlers/RenameHandler.cs` (신규) | `rename` 프리픽스. 폴더\패턴 파일 목록, 템플릿 변수 `{n}`순번 `{date}`날짜 `{orig}`원본명, 미리보기 후 실행 | -| `Handlers/MonitorHandler.cs` (신규) | `monitor` 프리픽스. CPU·메모리(`GlobalMemoryStatusEx`)·디스크·가동시간·Top 5 프로세스 | -| `Handlers/ScaffoldHandler.cs` (신규) | `scaffold` 프리픽스. 내장 5개 + 사용자 JSON 템플릿 | -| `Themes/Symbols.cs` | EyeDropper·DateIcon·ServiceIcon + TextStats·Favorite·RenameIcon·MonitorIcon·ScaffoldIcon 8개 심볼 추가 | -| `Handlers/ClipboardPipeHandler.cs` (신규) | `pipe` 프리픽스. 19종 필터를 `>` 체이닝 — upper/lower/trim/sort/unique/reverse/number/quote/b64e/b64d/urle/urld/md/lines/count/csv/tab/trimall 등 | -| `Handlers/JournalHandler.cs` (신규) | `journal` 프리픽스. `UsageStatisticsService` 데이터 기반 업무 일지 마크다운 자동 생성 (활성 시간, 런처 호출, 명령어 사용 순위) | -| `Handlers/RoutineHandler.cs` (신규) | `routine` 프리픽스. `routines.json` + 내장 2개(morning/endofday). 앱·폴더·URL·명령을 순서대로 일괄 실행 | -| `Handlers/BatchTextHandler.cs` (신규) | `batch` 프리픽스. 클립보드 각 줄에 동시 변환 — prefix/suffix/wrap/number/sort/unique/trim/replace/csv/split/indent 등 14종 | -| `Handlers/DiffHandler.cs` (신규) | `diff` 프리픽스. 클립보드 최근 2개 비교 + 파일 2개 경로 비교 + **파일 선택 다이얼로그(OpenFileDialog)** 지원 | -| `Handlers/WindowSwitchHandler.cs` (신규) | `win` 프리픽스. `EnumWindows` P/Invoke로 열린 창 목록 조회·검색, `SetForegroundWindow`로 즉시 전환. 최소화 창 자동 복원 | -| `Handlers/HelpHandler.cs` | 14개 신규 핸들러 도움말 항목 추가 | -| `Views/HelpDetailWindow.xaml/.cs` | **카테고리별 페이지네이션 재설계** — 상단 카테고리 탭 바 + ← → 키 페이지 전환 + 이전/다음 버튼 + 페이지 인디케이터 | -| `App.xaml.cs` | 14개 핸들러 등록 + `DispatcherUnhandledException` 전역 예외 핸들러 + `LoadAppIcon` 내장 리소스 폴백 | -| `Services/ClipboardHistoryService.cs` | `Reinitialize()` 메서드 추가 (ServiceHandler의 클립보드 강제 재시작용) | -| `AxCommander.csproj` | `IncludeNativeLibrariesForSelfExtract=true` (단일 EXE 배포), `System.ServiceProcess.ServiceController 8.0.1` 추가, mascot/icon 내장 리소스 | +| `Handlers/ColorPickHandler.cs` (?좉퇋) | `pick` ?꾨━?쎌뒪. ?꾩껜 ?붾㈃ ?ㅽ룷?대뱶 紐⑤뱶(`EyeDropperWindow`) ???대┃ 吏€???됱긽 HEX 肄붾뱶 異붿텧 ??諛섑닾紐?寃곌낵 李?`ColorPickResultWindow`) 5珥??쒖떆 ???대┰蹂대뱶 蹂듭궗 | +| `Views/EyeDropperWindow.xaml/.cs` (?좉퇋) | ?꾩껜 ?붾㈃ ?щ챸 ?ㅻ쾭?덉씠. 留덉슦???곕씪?ㅻ땲???뗫낫湲???+ ?ㅼ떆媛?HEX 肄붾뱶 ?덉씠釉? `GetPixel` P/Invoke濡??붾㈃ ?쎌? ?됱긽 ?쎄린. 醫뚰겢由??뺤젙, ?고겢由?Esc 痍⑥냼 | +| `Views/ColorPickResultWindow.xaml/.cs` (?좉퇋) | 諛섑닾紐??ㅽ겕 ?앹뾽. ?됱긽 誘몃━蹂닿린 ??+ HEX/RGB ?띿뒪??+ ?먮룞 ?ロ옒 5珥??€?대㉧ | +| `Handlers/DateCalcHandler.cs` (?좉퇋) | `date` ?꾨━?쎌뒪. `+30d`/`-100d` 媛€媛? D-day 怨꾩궛, Unix timestamp ???좎쭨 蹂€?? ?붿씪쨌ISO 二쇱감, `date unix` ?꾩옱 ?€?꾩뒪?ы봽 | +| `Handlers/ServiceHandler.cs` (?좉퇋) | `svc` ?꾨━?쎌뒪. `ServiceController` API濡?Windows ?쒕퉬??寃€?됀룹긽??議고쉶. `svc start/stop/restart [?대쫫]`?쇰줈 ?쒖뼱(愿€由ъ옄 沅뚰븳 UAC). `svc restart clipboard` ??AX ?대┰蹂대뱶 ?덉뒪?좊━ ?쒕퉬??媛뺤젣 ?ъ떆??| +| `Services/ClipboardHistoryService.cs` | `Reinitialize()` 硫붿꽌??異붽? ??Dispose ???대? ?곹깭 珥덇린??+ ?대┰蹂대뱶 紐⑤땲?곕쭅 ?ш컻 | +| `AxCommander.csproj` | `System.ServiceProcess.ServiceController 8.0.1` NuGet ?⑦궎吏€ 異붽? (濡쒖뺄 ?꾩슜) | +| `Handlers/TextStatsHandler.cs` (?좉퇋) | `stats` ?꾨━?쎌뒪. ?대┰蹂대뱶 ?띿뒪??湲€?먃룸떒?는룹쨪 ?? UTF-8 諛붿씠?? ?ㅼ썙??鍮덈룄(Top 5), ?쎄린 ?쒓컙 異붿젙, ?뱀젙 ?ㅼ썙??寃€??| +| `Handlers/FavoriteHandler.cs` (?좉퇋) | `fav` ?꾨━?쎌뒪. ?먯< ?곕뒗 ?뚯씪쨌?대뜑 寃쎈줈瑜?`favorites.json`???€?? `fav add/del` ?쒕툕而ㅻ㎤??| +| `Handlers/RenameHandler.cs` (?좉퇋) | `rename` ?꾨━?쎌뒪. ?대뜑\?⑦꽩 ?뚯씪 紐⑸줉, ?쒗뵆由?蹂€??`{n}`?쒕쾲 `{date}`?좎쭨 `{orig}`?먮낯紐? 誘몃━蹂닿린 ???ㅽ뻾 | +| `Handlers/MonitorHandler.cs` (?좉퇋) | `monitor` ?꾨━?쎌뒪. CPU쨌硫붾え由?`GlobalMemoryStatusEx`)쨌?붿뒪??룰??숈떆媛꽷톂op 5 ?꾨줈?몄뒪 | +| `Handlers/ScaffoldHandler.cs` (?좉퇋) | `scaffold` ?꾨━?쎌뒪. ?댁옣 5媛?+ ?ъ슜??JSON ?쒗뵆由?| +| `Themes/Symbols.cs` | EyeDropper쨌DateIcon쨌ServiceIcon + TextStats쨌Favorite쨌RenameIcon쨌MonitorIcon쨌ScaffoldIcon 8媛??щ낵 異붽? | +| `Handlers/ClipboardPipeHandler.cs` (?좉퇋) | `pipe` ?꾨━?쎌뒪. 19醫??꾪꽣瑜?`>` 泥댁씠????upper/lower/trim/sort/unique/reverse/number/quote/b64e/b64d/urle/urld/md/lines/count/csv/tab/trimall ??| +| `Handlers/JournalHandler.cs` (?좉퇋) | `journal` ?꾨━?쎌뒪. `UsageStatisticsService` ?곗씠??湲곕컲 ?낅Т ?쇱? 留덊겕?ㅼ슫 ?먮룞 ?앹꽦 (?쒖꽦 ?쒓컙, ?곗쿂 ?몄텧, 紐낅졊???ъ슜 ?쒖쐞) | +| `Handlers/RoutineHandler.cs` (?좉퇋) | `routine` ?꾨━?쎌뒪. `routines.json` + ?댁옣 2媛?morning/endofday). ?굿룻뤃?붋톃RL쨌紐낅졊???쒖꽌?€濡??쇨큵 ?ㅽ뻾 | +| `Handlers/BatchTextHandler.cs` (?좉퇋) | `batch` ?꾨━?쎌뒪. ?대┰蹂대뱶 媛?以꾩뿉 ?숈떆 蹂€????prefix/suffix/wrap/number/sort/unique/trim/replace/csv/split/indent ??14醫?| +| `Handlers/DiffHandler.cs` (?좉퇋) | `diff` ?꾨━?쎌뒪. ?대┰蹂대뱶 理쒓렐 2媛?鍮꾧탳 + ?뚯씪 2媛?寃쎈줈 鍮꾧탳 + **?뚯씪 ?좏깮 ?ㅼ씠?쇰줈洹?OpenFileDialog)** 吏€??| +| `Handlers/WindowSwitchHandler.cs` (?좉퇋) | `win` ?꾨━?쎌뒪. `EnumWindows` P/Invoke濡??대┛ 李?紐⑸줉 議고쉶쨌寃€?? `SetForegroundWindow`濡?利됱떆 ?꾪솚. 理쒖냼??李??먮룞 蹂듭썝 | +| `Handlers/HelpHandler.cs` | 14媛??좉퇋 ?몃뱾???꾩?留???ぉ 異붽? | +| `Views/HelpDetailWindow.xaml/.cs` | **移댄뀒怨좊━蹂??섏씠吏€?ㅼ씠???ъ꽕怨?* ???곷떒 移댄뀒怨좊━ ??諛?+ ???????섏씠吏€ ?꾪솚 + ?댁쟾/?ㅼ쓬 踰꾪듉 + ?섏씠吏€ ?몃뵒耳€?댄꽣 | +| `App.xaml.cs` | 14媛??몃뱾???깅줉 + `DispatcherUnhandledException` ?꾩뿭 ?덉쇅 ?몃뱾??+ `LoadAppIcon` ?댁옣 由ъ냼???대갚 | +| `Services/ClipboardHistoryService.cs` | `Reinitialize()` 硫붿꽌??異붽? (ServiceHandler???대┰蹂대뱶 媛뺤젣 ?ъ떆?묒슜) | +| `AxCommander.csproj` | `IncludeNativeLibrariesForSelfExtract=true` (?⑥씪 EXE 諛고룷), `System.ServiceProcess.ServiceController 8.0.1` 異붽?, mascot/icon ?댁옣 由ъ냼??| -**배포** (`build.bat` 더블클릭으로 3종 자동 빌드): +**諛고룷** (`build.bat` ?붾툝?대┃?쇰줈 3醫??먮룞 鍮뚮뱶): -| 파일 | 크기 | 용도 | +| ?뚯씪 | ?ш린 | ?⑸룄 | |------|------|------| -| `dist\AxCommander\` | 163MB (폴더) | 본체 EXE + DLL — 폴더째 복사해도 실행 가능 | -| `dist\AxCommander_Setup.exe` | ~136MB | 오프라인 인스톨러 (본체+런타임 모두 ZIP 내장, 인터넷 불필요) | -| `dist\AxCommander_Setup_Online.exe` | **~1MB** | 온라인 인스톨러 (.NET Framework 4.8 기반, 본체(~2MB) ZIP 내장 + .NET 8 Runtime 인터넷 자동 설치) | +| `dist\AxCommander\` | 163MB (?대뜑) | 蹂몄껜 EXE + DLL ???대뜑吏?蹂듭궗?대룄 ?ㅽ뻾 媛€??| +| `dist\AxCommander_Setup.exe` | ~136MB | ?ㅽ봽?쇱씤 ?몄뒪?⑤윭 (蹂몄껜+?고???紐⑤몢 ZIP ?댁옣, ?명꽣??遺덊븘?? | +| `dist\AxCommander_Setup_Online.exe` | **~1MB** | ?⑤씪???몄뒪?⑤윭 (.NET Framework 4.8 湲곕컲, 蹂몄껜(~2MB) ZIP ?댁옣 + .NET 8 Runtime ?명꽣???먮룞 ?ㅼ튂) | -인스톨러 기능: 설치 경로 선택 · 바탕화면 바로가기 · 시작 메뉴 · 자동 실행 · 프로그램 추가/제거 · 기존 설치 감지 → 업그레이드 · 제거 +?몄뒪?⑤윭 湲곕뒫: ?ㅼ튂 寃쎈줈 ?좏깮 쨌 諛뷀깢?붾㈃ 諛붾줈媛€湲?쨌 ?쒖옉 硫붾돱 쨌 ?먮룞 ?ㅽ뻾 쨌 ?꾨줈洹몃옩 異붽?/?쒓굅 쨌 湲곗〈 ?ㅼ튂 媛먯? ???낃렇?덉씠??쨌 ?쒓굅 -**v0.9.x 최종 수정 (디자인/오류 검수)**: +**v0.9.x 理쒖쥌 ?섏젙 (?붿옄???ㅻ쪟 寃€??**: -| 파일 | 수정 | +| ?뚯씪 | ?섏젙 | |------|------| -| `Views/SettingsWindow.xaml` | `{StaticResource ModernComboBox}` 참조 2곳 제거 — 해당 스타일 미정의로 설정 창 XamlParseException 크래시 수정 | -| `Views/TrayContextMenu.cs` | `MakeItem()`에 1×1 투명 더미 `Image` 설정 — `OnRenderItemImage` 콜백이 호출되지 않아 글리프 아이콘 미표시 문제 수정. `OnRenderItemCheck`에서도 `DrawGlyph()` 호출. 전구 꺼짐 색상 `#A0A08C` → `#78788C` 진한 회색으로 변경 | -| `App.xaml.cs` | 자동실행 `autoStartItem`에 `Image = new Bitmap(1,1)` 추가 | -| `Views/HelpDetailWindow.xaml.cs` | `NavigateToPage()` 빈 카테고리 방어 코드 | -| `Handlers/WindowSwitchHandler.cs` | 자기 프로세스 제외를 하드코딩 타이틀 대신 `Process.GetCurrentProcess().ProcessName` 비교로 변경 | +| `Views/SettingsWindow.xaml` | `{StaticResource ModernComboBox}` 李몄“ 2怨??쒓굅 ???대떦 ?ㅽ???誘몄젙?섎줈 ?ㅼ젙 李?XamlParseException ?щ옒???섏젙 | +| `Views/TrayContextMenu.cs` | `MakeItem()`??1횞1 ?щ챸 ?붾? `Image` ?ㅼ젙 ??`OnRenderItemImage` 肄쒕갚???몄텧?섏? ?딆븘 湲€由ы봽 ?꾩씠肄?誘명몴??臾몄젣 ?섏젙. `OnRenderItemCheck`?먯꽌??`DrawGlyph()` ?몄텧. ?꾧뎄 爰쇱쭚 ?됱긽 `#A0A08C` ??`#78788C` 吏꾪븳 ?뚯깋?쇰줈 蹂€寃?| +| `App.xaml.cs` | ?먮룞?ㅽ뻾 `autoStartItem`??`Image = new Bitmap(1,1)` 異붽? | +| `Views/HelpDetailWindow.xaml.cs` | `NavigateToPage()` 鍮?移댄뀒怨좊━ 諛⑹뼱 肄붾뱶 | +| `Handlers/WindowSwitchHandler.cs` | ?먭린 ?꾨줈?몄뒪 ?쒖쇅瑜??섎뱶肄붾뵫 ?€?댄? ?€??`Process.GetCurrentProcess().ProcessName` 鍮꾧탳濡?蹂€寃?| -**v0.9.x UI/UX 최종 수정**: +**v0.9.x UI/UX 理쒖쥌 ?섏젙**: -| 파일 | 수정 | +| ?뚯씪 | ?섏젙 | |------|------| -| `Views/SettingsWindow.xaml` | 사이드바 `TabPanel`을 `ScrollViewer`로 감싸 탭 10개+ 스크롤 지원. `ModernComboBox` 미정의 참조 제거 (XamlParseException 수정) | -| `Views/TrayContextMenu.cs` | `MakeItem()`에 1×1 더미 Image 설정 → 글리프 아이콘 표시. `DrawLightbulbGlow`를 `PathGradientBrush` 원형 그라데이션으로 교체 (빛 대칭). `OnRenderItemCheck`에서도 `DrawGlyph` 호출 | -| `Views/HelpDetailWindow.xaml` | 카테고리 탭 바 `ScrollViewer` → `WrapPanel` (스크롤 제거, 모두 표시). 창 크기 880×680 | -| `Views/HelpDetailWindow.xaml.cs` | 프로그램 개요 3개 항목(설명/사용법/저장경로) 자동 삽입. `NavigateToPage()` 빈 카테고리 방어 코드 | -| `Handlers/HelpHandler.cs` | `static _entries` → `_baseEntries` + `GetEntries()` 동적 메서드. 설정에서 변경한 캡처 프리픽스·글로벌 핫키 실시간 반영 | -| `Views/AboutWindow.xaml/.cs` | 상단 원형 → 앱 아이콘(icon.ico) 표시. 마스코트는 숨김 상태로 로드 → 사용자 클릭 시 오버레이만. 조직명 행에서 이름/직급 제거 (하단에만 표시). `TryLoadAppIcon()` + `TryLoadMascot()` 분리 | -| `Services/LogService.cs` | `PurgeOldLogs()` 추가 — 14일 초과 로그 자동 삭제 (앱 세션 당 1회) | -| `App.xaml.cs` | `DispatcherUnhandledException` 전역 예외 핸들러. `LoadAppIcon` pack:// 내장 리소스 폴백. `HelpHandler(settings)` 주입 | +| `Views/SettingsWindow.xaml` | ?ъ씠?쒕컮 `TabPanel`??`ScrollViewer`濡?媛먯떥 ??10媛? ?ㅽ겕濡?吏€?? `ModernComboBox` 誘몄젙??李몄“ ?쒓굅 (XamlParseException ?섏젙) | +| `Views/TrayContextMenu.cs` | `MakeItem()`??1횞1 ?붾? Image ?ㅼ젙 ??湲€由ы봽 ?꾩씠肄??쒖떆. `DrawLightbulbGlow`瑜?`PathGradientBrush` ?먰삎 洹몃씪?곗씠?섏쑝濡?援먯껜 (鍮??€移?. `OnRenderItemCheck`?먯꽌??`DrawGlyph` ?몄텧 | +| `Views/HelpDetailWindow.xaml` | 移댄뀒怨좊━ ??諛?`ScrollViewer` ??`WrapPanel` (?ㅽ겕濡??쒓굅, 紐⑤몢 ?쒖떆). 李??ш린 880횞680 | +| `Views/HelpDetailWindow.xaml.cs` | ?꾨줈洹몃옩 媛쒖슂 3媛???ぉ(?ㅻ챸/?ъ슜踰??€?κ꼍濡? ?먮룞 ?쎌엯. `NavigateToPage()` 鍮?移댄뀒怨좊━ 諛⑹뼱 肄붾뱶 | +| `Handlers/HelpHandler.cs` | `static _entries` ??`_baseEntries` + `GetEntries()` ?숈쟻 硫붿꽌?? ?ㅼ젙?먯꽌 蹂€寃쏀븳 罹≪쿂 ?꾨━?쎌뒪쨌湲€濡쒕쾶 ?ロ궎 ?ㅼ떆媛?諛섏쁺 | +| `Views/AboutWindow.xaml/.cs` | ?곷떒 ?먰삎 ?????꾩씠肄?icon.ico) ?쒖떆. 留덉뒪肄뷀듃???④? ?곹깭濡?濡쒕뱶 ???ъ슜???대┃ ???ㅻ쾭?덉씠留? 議곗쭅紐??됱뿉???대쫫/吏곴툒 ?쒓굅 (?섎떒?먮쭔 ?쒖떆). `TryLoadAppIcon()` + `TryLoadMascot()` 遺꾨━ | +| `Services/LogService.cs` | `PurgeOldLogs()` 異붽? ??14??珥덇낵 濡쒓렇 ?먮룞 ??젣 (???몄뀡 ??1?? | +| `App.xaml.cs` | `DispatcherUnhandledException` ?꾩뿭 ?덉쇅 ?몃뱾?? `LoadAppIcon` pack:// ?댁옣 由ъ냼???대갚. `HelpHandler(settings)` 二쇱엯 | -**v0.9.x 추가 기능**: +**v0.9.x 異붽? 湲곕뒫**: -| 파일 | 변경 | +| ?뚯씪 | 蹂€寃?| |------|------| -| `Services/FaviconService.cs` (신규) | URL 별칭 항목에 사이트 favicon 표시. Google Favicon API → 디스크 캐시(`%APPDATA%\AxCommander\favicons\`) → `IconPath`에 경로 전달 | -| `Handlers/AliasHandler.cs` | `UrlAliasHandler.GetFaviconPath()` — favicon 캐시 경로 조회 + 백그라운드 다운로드 | -| `Views/LauncherWindow.xaml` | 아이템 아이콘 영역에 `IconPath` 이미지 표시 지원 (`NullToCollapsedConverter`로 심볼/이미지 자동 전환) | -| `Themes/Converters.cs` | `NullToCollapsedConverter` 추가 | -| `App.xaml` | `NullToCollapsedConverter` 글로벌 등록 | -| `Handlers/WebSearchHandler.cs` | `?ni`(네이버 이미지), `?gi`(구글 이미지) 엔진 추가 (총 10개) | -| `Handlers/HelpHandler.cs` | 웹 검색 항목에 10개 엔진 전체 목록 표시 | -| `ViewModels/SettingsViewModel.cs` | `ValidateBeforeSave()` — 예약어/프리픽스 충돌 감지. 충돌 시 `MessageBox` 알림 + 저장 거부 | -| `Views/SettingsWindow.xaml/.cs` | 하단 바에 **내보내기/불러오기** 버튼 추가 (`.axsettings` 파일) | +| `Services/FaviconService.cs` (?좉퇋) | URL 蹂꾩묶 ??ぉ???ъ씠??favicon ?쒖떆. Google Favicon API ???붿뒪??罹먯떆(`%APPDATA%\AxCommander\favicons\`) ??`IconPath`??寃쎈줈 ?꾨떖 | +| `Handlers/AliasHandler.cs` | `UrlAliasHandler.GetFaviconPath()` ??favicon 罹먯떆 寃쎈줈 議고쉶 + 諛깃렇?쇱슫???ㅼ슫濡쒕뱶 | +| `Views/LauncherWindow.xaml` | ?꾩씠???꾩씠肄??곸뿭??`IconPath` ?대?吏€ ?쒖떆 吏€??(`NullToCollapsedConverter`濡??щ낵/?대?吏€ ?먮룞 ?꾪솚) | +| `Themes/Converters.cs` | `NullToCollapsedConverter` 異붽? | +| `App.xaml` | `NullToCollapsedConverter` 湲€濡쒕쾶 ?깅줉 | +| `Handlers/WebSearchHandler.cs` | `?ni`(?ㅼ씠踰??대?吏€), `?gi`(援ш? ?대?吏€) ?붿쭊 異붽? (珥?10媛? | +| `Handlers/HelpHandler.cs` | ??寃€????ぉ??10媛??붿쭊 ?꾩껜 紐⑸줉 ?쒖떆 | +| `ViewModels/SettingsViewModel.cs` | `ValidateBeforeSave()` ???덉빟???꾨━?쎌뒪 異⑸룎 媛먯?. 異⑸룎 ??`MessageBox` ?뚮┝ + ?€??嫄곕? | +| `Views/SettingsWindow.xaml/.cs` | ?섎떒 諛붿뿉 **?대낫?닿린/遺덈윭?ㅺ린** 踰꾪듉 異붽? (`.axsettings` ?뚯씪) | -**v0.9.x 아이콘 교체 + 최종 디자인 검수**: +**v0.9.x ?꾩씠肄?援먯껜 + 理쒖쥌 ?붿옄??寃€??*: -| 파일 | 수정 | +| ?뚯씪 | ?섏젙 | |------|------| -| `Assets/icon.ico` | 다이아몬드 픽셀 보석 컷 아이콘으로 교체 (Blue/Green/Red/Green 4색, 흰색 facet 선, 7크기 16~256px) | -| `Assets/diamond_pixel.svg` | 아이콘 SVG 원본 (참고용) | -| `tools/IconGenerator/` | 아이콘 생성 콘솔 앱 (.NET 8 WinForms, `System.Drawing`으로 보석 다이아몬드 렌더링 → ICO 출력) | -| `Views/AboutWindow.xaml` | 버전 텍스트 폴백 `"v0.0.1"` 유지로 정리 (당시 csproj 버전도 프리릴리스 기준으로 관리) | -| `Views/SettingsWindow.xaml` | 사이드바 `ScrollViewer`에서 `DockPanel.Dock="Top"` 제거 → 마지막 자식으로 남은 공간 채워 스크롤 정상 동작 | +| `Assets/icon.ico` | ?ㅼ씠?꾨が???쎌? 蹂댁꽍 而??꾩씠肄섏쑝濡?援먯껜 (Blue/Green/Red/Green 4?? ?곗깋 facet ?? 7?ш린 16~256px) | +| `Assets/diamond_pixel.svg` | ?꾩씠肄?SVG ?먮낯 (李멸퀬?? | +| `tools/IconGenerator/` | ?꾩씠肄??앹꽦 肄섏넄 ??(.NET 8 WinForms, `System.Drawing`?쇰줈 蹂댁꽍 ?ㅼ씠?꾨が???뚮뜑留???ICO 異쒕젰) | +| `Views/AboutWindow.xaml` | 踰꾩쟾 ?띿뒪???대갚 `"v0.0.1"` ?좎?濡??뺣━ (?뱀떆 csproj 踰꾩쟾???꾨━由대━??湲곗??쇰줈 愿€由? | +| `Views/SettingsWindow.xaml` | ?ъ씠?쒕컮 `ScrollViewer`?먯꽌 `DockPanel.Dock="Top"` ?쒓굅 ??留덉?留??먯떇?쇰줈 ?⑥? 怨듦컙 梨꾩썙 ?ㅽ겕濡??뺤긽 ?숈옉 | -**최종 검수 결과**: -- 전체 빌드 (3개 프로젝트): **0 errors, 0 warnings** -- 당시 버전 텍스트와 빌드 산출물 일치 확인 ✓ -- CornerRadius DynamicResource 바인딩: 정상 ✓ -- 사이드바 ScrollViewer: 수정 완료 (DockPanel.Dock 제거) ✓ -- 전구 글로우: PathGradientBrush 중심 대칭 확인 ✓ -- HelpHandler 항목: 전체 정확성 확인 ✓ -- 아이콘 로딩: pack:// 리소스 + 파일시스템 폴백 정상 ✓ +**理쒖쥌 寃€??寃곌낵**: +- ?꾩껜 鍮뚮뱶 (3媛??꾨줈?앺듃): **0 errors, 0 warnings** +- ?뱀떆 踰꾩쟾 ?띿뒪?몄? 鍮뚮뱶 ?곗텧臾??쇱튂 ?뺤씤 ?? +- CornerRadius DynamicResource 諛붿씤?? ?뺤긽 ?? +- ?ъ씠?쒕컮 ScrollViewer: ?섏젙 ?꾨즺 (DockPanel.Dock ?쒓굅) ?? +- ?꾧뎄 湲€濡쒖슦: PathGradientBrush 以묒떖 ?€移??뺤씤 ?? +- HelpHandler ??ぉ: ?꾩껜 ?뺥솗???뺤씤 ?? +- ?꾩씠肄?濡쒕뵫: pack:// 由ъ냼??+ ?뚯씪?쒖뒪???대갚 ?뺤긽 ?? --- -## 🚧 개발 이력 — `!` 예약어 기반 AI 대화 기능 도입 +## ?슙 媛쒕컻 ?대젰 ??`!` ?덉빟??湲곕컲 AI ?€??湲곕뒫 ?꾩엯 -> **상태**: 핵심 구현 완료 -> **버전**: v0.0.5 -> **마지막 업데이트**: 2026-03-28 +> **?곹깭**: ?듭떖 援ы쁽 ?꾨즺 +> **踰꾩쟾**: v0.0.5 +> **留덉?留??낅뜲?댄듃**: 2026-03-28 -### 개요 +### 媛쒖슂 -`!` 예약어를 입력하면 LLM(대규모 언어 모델) 서비스에 질의를 보내고 응답을 받아 표시하는 **초기 AI 대화 기능**입니다. 이 구간은 현재 AX Agent로 확장되기 전 도입 이력을 설명합니다. +`!` ?덉빟?대? ?낅젰?섎㈃ LLM(?€洹쒕え ?몄뼱 紐⑤뜽) ?쒕퉬?ㅼ뿉 吏덉쓽瑜?蹂대궡怨??묐떟??諛쏆븘 ?쒖떆?섎뒗 **珥덇린 AI ?€??湲곕뒫**?낅땲?? ??援ш컙?€ ?꾩옱 AX Agent濡??뺤옣?섍린 ???꾩엯 ?대젰???ㅻ챸?⑸땲?? -### 입력 방식 +### ?낅젰 諛⑹떇 -| 입력 | 동작 | +| ?낅젰 | ?숈옉 | |------|------| -| `!안녕하세요` | `!` 제거 후 "안녕하세요"를 LLM에 전송 | -| `! 안녕하세요` | `!`와 텍스트 사이 공백 제거 후 "안녕하세요"를 LLM에 전송 | -| `!` (단독) | 대화 창만 열기 (빈 상태) | +| `!?덈뀞?섏꽭?? | `!` ?쒓굅 ??"?덈뀞?섏꽭??瑜?LLM???꾩넚 | +| `! ?덈뀞?섏꽭?? | `!`?€ ?띿뒪???ъ씠 怨듬갚 ?쒓굅 ??"?덈뀞?섏꽭??瑜?LLM???꾩넚 | +| `!` (?⑤룆) | ?€??李쎈쭔 ?닿린 (鍮??곹깭) | -### 대화 창 (ChatWindow) 초기 설계 +### ?€??李?(ChatWindow) 珥덇린 ?ㅺ퀎 -**레이아웃: 2패널 구조** +**?덉씠?꾩썐: 2?⑤꼸 援ъ“** ``` -┌──────────────────────────────────────────────────┐ -│ [≡] AX Commander — AI 대화 [_][□][✕] │ -├──────────┬───────────────────────────────────────┤ -│ [+ 새 대화] │ │ -│ [🔍 검색] │ 대화 메시지 영역 │ -│ │ (마크다운 렌더링) │ -│ ── 고정 ── │ │ -│ 📌 서버설정 │ │ -│ 📌 코드리뷰 │ │ -│ │ │ -│ ── 오늘 ── │ │ -│ API 오류.. │ │ -│ 배포 방법.. │ │ -│ │ │ -│ ── 어제 ── │ ┌────────────────────────────────┐ │ -│ 회의록 정리 │ │ 메시지를 입력하세요... [▶] │ │ -│ │ └────────────────────────────────┘ │ -├──────────┴───────────────────────────────────────┤ -│ Ollama ▾ │ llama3:8b ▾ │ ● 연결됨 │ 토큰: 1.2k │ -└──────────────────────────────────────────────────┘ +?뚢??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? +??[?? AX Commander ??AI ?€?? [_][??[?? ?? +?쒋??€?€?€?€?€?€?€?€?€?р??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? +??[+ ???€?? ?? ?? +??[?뵇 寃€?? ?? ?€??硫붿떆吏€ ?곸뿭 ?? +?? ?? (留덊겕?ㅼ슫 ?뚮뜑留? ?? +???€?€ 怨좎젙 ?€?€ ?? ?? +???뱦 ?쒕쾭?ㅼ젙 ?? ?? +???뱦 肄붾뱶由щ럭 ?? ?? +?? ?? ?? +???€?€ ?ㅻ뒛 ?€?€ ?? ?? +??API ?ㅻ쪟.. ?? ?? +??諛고룷 諛⑸쾿.. ?? ?? +?? ?? ?? +???€?€ ?댁젣 ?€?€ ?? ?뚢??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€???? +???뚯쓽濡??뺣━ ?? ??硫붿떆吏€瑜??낅젰?섏꽭??.. [?? ???? +?? ?? ?붴??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€???? +?쒋??€?€?€?€?€?€?€?€?€?닳??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? +??Ollama ????llama3:8b ???????곌껐?? ???좏겙: 1.2k ?? +?붴??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? ``` -**좌측 패널 — 대화 목록**: -- **새 대화** 버튼 (Ctrl+N) -- **검색** — 대화 제목·내용 필터 -- **고정 대화** — 핀 고정 항목이 최상단에 위치 (우클릭 > 고정/해제) -- **날짜별 그룹** — 오늘 / 어제 / 이번 주 / 이전 순서 -- **대화 삭제** — 우클릭 > 삭제 (확인 다이얼로그) +**醫뚯륫 ?⑤꼸 ???€??紐⑸줉**: +- **???€??* 踰꾪듉 (Ctrl+N) +- **寃€??* ???€???쒕ぉ쨌?댁슜 ?꾪꽣 +- **怨좎젙 ?€??* ???€ 怨좎젙 ??ぉ??理쒖긽?⑥뿉 ?꾩튂 (?고겢由?> 怨좎젙/?댁젣) +- **?좎쭨蹂?洹몃9** ???ㅻ뒛 / ?댁젣 / ?대쾲 二?/ ?댁쟾 ?쒖꽌 +- **?€????젣** ???고겢由?> ??젣 (?뺤씤 ?ㅼ씠?쇰줈洹? -**우측 패널 — 대화 영역**: -- 메시지 버블 (사용자: 우측 / AI: 좌측) -- **마크다운 렌더링** — 코드 블록, 목록, 볼드 등 기본 지원 -- **코드 블록 복사** 버튼 -- **스트리밍 응답** — SSE/스트림 지원 시 한 글자씩 표시 -- **재생성** 버튼 — 마지막 응답을 다시 요청 -- **복사** 버튼 — 개별 메시지 클립보드 복사 +**?곗륫 ?⑤꼸 ???€???곸뿭**: +- 硫붿떆吏€ 踰꾨툝 (?ъ슜?? ?곗륫 / AI: 醫뚯륫) +- **留덊겕?ㅼ슫 ?뚮뜑留?* ??肄붾뱶 釉붾줉, 紐⑸줉, 蹂쇰뱶 ??湲곕낯 吏€?? +- **肄붾뱶 釉붾줉 蹂듭궗** 踰꾪듉 +- **?ㅽ듃由щ컢 ?묐떟** ??SSE/?ㅽ듃由?吏€??????湲€?먯뵫 ?쒖떆 +- **?ъ깮??* 踰꾪듉 ??留덉?留??묐떟???ㅼ떆 ?붿껌 +- **蹂듭궗** 踰꾪듉 ??媛쒕퀎 硫붿떆吏€ ?대┰蹂대뱶 蹂듭궗 -**창 기능**: -- 창 크기 자유 조절 (가로·세로) -- 전체 화면 / 최소화 / 최대화 지원 -- 테마 연동 (DynamicResource 사용, 런처와 동일한 8종 테마) -- 독립 창 (런처와 별도로 열림, 항상 위 선택 가능) +**李?湲곕뒫**: +- 李??ш린 ?먯쑀 議곗젅 (媛€濡쑣룹꽭濡? +- ?꾩껜 ?붾㈃ / 理쒖냼??/ 理쒕???吏€?? +- ?뚮쭏 ?곕룞 (DynamicResource ?ъ슜, ?곗쿂?€ ?숈씪??8醫??뚮쭏) +- ?낅┰ 李?(?곗쿂?€ 蹂꾨룄濡??대┝, ??긽 ???좏깮 媛€?? -### 대화 저장 — 로컬 전용 +### ?€???€????濡쒖뺄 ?꾩슜 -**핵심**: LLM API(Ollama, vLLM, Gemini)는 모두 **무상태(stateless)**. 서버 측에서 이전 대화를 기억하지 않음. 따라서 **모든 대화는 로컬에 저장**하고, API 호출 시 이전 대화 맥락을 함께 전송해야 함. +**?듭떖**: LLM API(Ollama, vLLM, Gemini)??紐⑤몢 **臾댁긽??stateless)**. ?쒕쾭 痢≪뿉???댁쟾 ?€?붾? 湲곗뼲?섏? ?딆쓬. ?곕씪??**紐⑤뱺 ?€?붾뒗 濡쒖뺄???€??*?섍퀬, API ?몄텧 ???댁쟾 ?€??留λ씫???④퍡 ?꾩넚?댁빞 ?? ``` %APPDATA%/AxCommander/ conversations/ - {uuid}.json ← 개별 대화 파일 - conversation-index.json ← 제목·날짜·고정 여부 인덱스 + {uuid}.json ??媛쒕퀎 ?€???뚯씪 + conversation-index.json ???쒕ぉ쨌?좎쭨쨌怨좎젙 ?щ? ?몃뜳?? ``` -**대화 파일 구조 (예시)**: +**?€???뚯씪 援ъ“ (?덉떆)**: ```json { "id": "a1b2c3d4-...", - "title": "서버 설정 방법", + "title": "?쒕쾭 ?ㅼ젙 諛⑸쾿", "createdAt": "2026-03-27T10:00:00", "updatedAt": "2026-03-27T10:05:00", "pinned": true, "provider": "ollama", "model": "llama3:8b", "messages": [ - { "role": "user", "content": "nginx 설정 방법 알려줘", "timestamp": "..." }, - { "role": "assistant", "content": "nginx 설정은...", "timestamp": "..." } + { "role": "user", "content": "nginx ?ㅼ젙 諛⑸쾿 ?뚮젮以?, "timestamp": "..." }, + { "role": "assistant", "content": "nginx ?ㅼ젙?€...", "timestamp": "..." } ] } ``` -**보관 정책**: -- 기본 보관 기간: **30일** (설정에서 변경 가능: 7일 / 30일 / 90일 / 무제한) -- 고정(📌)된 대화는 보관 기간과 무관하게 **영구 보관** -- 만료된 대화는 앱 시작 시 자동 정리 +**蹂닿? ?뺤콉**: +- 湲곕낯 蹂닿? 湲곌컙: **30??* (?ㅼ젙?먯꽌 蹂€寃?媛€?? 7??/ 30??/ 90??/ 臾댁젣?? +- 怨좎젙(?뱦)???€?붾뒗 蹂닿? 湲곌컙怨?臾닿??섍쾶 **?곴뎄 蹂닿?** +- 留뚮즺???€?붾뒗 ???쒖옉 ???먮룞 ?뺣━ -**대화 관리 동작**: -- **보관함으로 이동**: 우클릭 > "보관함으로 이동" — 보관 기간이 지나도 자동 삭제되지 않음 (수동 삭제만 가능) -- **삭제**: 우클릭 > "삭제" — 확인 대화상자("이 대화를 정말 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.") 표시 후 진행 -- **보관함 탭**: 좌측 패널 하단에 "보관함" 탭 별도 표시, 보관된 대화 목록 열람 가능 -- 보관함 내 대화도 삭제 가능 (동일한 확인 절차) +**?€??愿€由??숈옉**: +- **蹂닿??⑥쑝濡??대룞**: ?고겢由?> "蹂닿??⑥쑝濡??대룞" ??蹂닿? 湲곌컙??吏€?섎룄 ?먮룞 ??젣?섏? ?딆쓬 (?섎룞 ??젣留?媛€?? +- **??젣**: ?고겢由?> "??젣" ???뺤씤 ?€?붿긽??"???€?붾? ?뺣쭚 ??젣?섏떆寃좎뒿?덇퉴? ???묒뾽?€ ?섎룎由????놁뒿?덈떎.") ?쒖떆 ??吏꾪뻾 +- **蹂닿?????*: 醫뚯륫 ?⑤꼸 ?섎떒??"蹂닿??? ??蹂꾨룄 ?쒖떆, 蹂닿????€??紐⑸줉 ?대엺 媛€?? +- 蹂닿??????€?붾룄 ??젣 媛€??(?숈씪???뺤씤 ?덉감) -**API 호출 시 컨텍스트 전송**: -- 전체 대화 이력을 `messages` 배열로 전송 (OpenAI 호환 형식) -- 토큰 한도 초과 시 오래된 메시지부터 자동 잘라냄 (sliding window) -- 시스템 프롬프트는 설정에서 커스터마이징 가능 +**API ?몄텧 ??而⑦뀓?ㅽ듃 ?꾩넚**: +- ?꾩껜 ?€???대젰??`messages` 諛곗뿴濡??꾩넚 (OpenAI ?명솚 ?뺤떇) +- ?좏겙 ?쒕룄 珥덇낵 ???ㅻ옒??硫붿떆吏€遺€???먮룞 ?섎씪??(sliding window) +- ?쒖뒪???꾨\?꾪듃???ㅼ젙?먯꽌 而ㅼ뒪?곕쭏?댁쭠 媛€?? -### 지원 LLM 서비스 (초기 4종) +### 吏€??LLM ?쒕퉬??(珥덇린 4醫? -설정 창에서 서비스별 모델 등록 후, 대화 창 입력 바에서 모델 선택 Popup으로 전환 가능. +?ㅼ젙 李쎌뿉???쒕퉬?ㅻ퀎 紐⑤뜽 ?깅줉 ?? ?€??李??낅젰 諛붿뿉??紐⑤뜽 ?좏깮 Popup?쇰줈 ?꾪솚 媛€?? -| 서비스 | 연결 방식 | 설정값 | +| ?쒕퉬??| ?곌껐 諛⑹떇 | ?ㅼ젙媛?| |--------|----------|--------| -| **Ollama** | 로컬 HTTP (`http://localhost:11434`) | 엔드포인트 URL, 모델명 | -| **vLLM** | HTTP API (OpenAI 호환) | 엔드포인트 URL, 모델명, API 키 | -| **Gemini API** | Google REST API | API 키, 모델명 (gemini-2.0-flash 등) | -| **Claude API** | Anthropic REST API | API 키, 모델명 (claude-sonnet-4-20250514 등) | +| **Ollama** | 濡쒖뺄 HTTP (`http://localhost:11434`) | ?붾뱶?ъ씤??URL, 紐⑤뜽紐?| +| **vLLM** | HTTP API (OpenAI ?명솚) | ?붾뱶?ъ씤??URL, 紐⑤뜽紐? API ??| +| **Gemini API** | Google REST API | API ?? 紐⑤뜽紐?(gemini-2.0-flash ?? | +| **Claude API** | Anthropic REST API | API ?? 紐⑤뜽紐?(claude-sonnet-4-20250514 ?? | -### API 키 암호화 체계 +### API ???뷀샇??泥닿퀎 -**암호화 모드 전환**: `settings.json` → `llm.encryptionEnabled` 설정으로 제어 +**?뷀샇??紐⑤뱶 ?꾪솚**: `settings.json` ??`llm.encryptionEnabled` ?ㅼ젙?쇰줈 ?쒖뼱 -| 모드 | `encryptionEnabled` | 설명 | 용도 | +| 紐⑤뱶 | `encryptionEnabled` | ?ㅻ챸 | ?⑸룄 | |------|---------------------|------|------| -| **비암호화 (기본)** | `false` | API 키·모델명을 평문으로 저장/표시 | 내부 개발 배포, 테스트 | -| **암호화** | `true` | AES-256-CBC(앱 공용 키)로 암호화 저장 | 운영 배포 | +| **鍮꾩븫?명솕 (湲곕낯)** | `false` | API ?ㅒ룸え?몃챸???됰Ц?쇰줈 ?€???쒖떆 | ?대? 媛쒕컻 諛고룷, ?뚯뒪??| +| **?뷀샇??* | `true` | AES-256-CBC(??怨듭슜 ??濡??뷀샇???€??| ?댁쁺 諛고룷 | -**비암호화 모드** (현재 기본값): -- API 키, 모델명이 settings.json에 **평문**으로 저장됨 -- 설정 창에서 입력한 값이 그대로 보이고 저장됨 -- 내부 개발자 배포 시 빠른 설정에 적합 +**鍮꾩븫?명솕 紐⑤뱶** (?꾩옱 湲곕낯媛?: +- API ?? 紐⑤뜽紐낆씠 settings.json??**?됰Ц**?쇰줈 ?€?λ맖 +- ?ㅼ젙 李쎌뿉???낅젰??媛믪씠 洹몃?濡?蹂댁씠怨??€?λ맖 +- ?대? 媛쒕컻??諛고룷 ??鍮좊Ⅸ ?ㅼ젙???곹빀 -**암호화 모드** (`encryptionEnabled: true`로 전환 시): -- 앱 내장 고정 키 + AES-256-CBC로 암호화 -- PBKDF2(SHA-256, 100,000회 반복)로 256-bit 키 파생 -- 관리자 PC에서 암호화한 값이 모든 PC에서 동일하게 복호화됨 -- AxKeyEncryptor 도구로 사전 암호화 가능 -- 설정 창에서 이미 저장된 키는 "(저장됨)"으로 표시 +**?뷀샇??紐⑤뱶** (`encryptionEnabled: true`濡??꾪솚 ??: +- ???댁옣 怨좎젙 ??+ AES-256-CBC濡??뷀샇?? +- PBKDF2(SHA-256, 100,000??諛섎났)濡?256-bit ???뚯깮 +- 愿€由ъ옄 PC?먯꽌 ?뷀샇?뷀븳 媛믪씠 紐⑤뱺 PC?먯꽌 ?숈씪?섍쾶 蹂듯샇?붾맖 +- AxKeyEncryptor ?꾧뎄濡??ъ쟾 ?뷀샇??媛€?? +- ?ㅼ젙 李쎌뿉???대? ?€?λ맂 ?ㅻ뒗 "(?€?λ맖)"?쇰줈 ?쒖떆 -**운영 배포 시 암호화 전환 방법**: -1. `settings.json`에서 `"encryptionEnabled": true` 설정 -2. 기존 평문 키/모델명은 앱 재시작 시 설정 저장하면 자동으로 암호화됨 -3. 또는 AxKeyEncryptor 도구로 미리 암호화한 값 배포 +**?댁쁺 諛고룷 ???뷀샇???꾪솚 諛⑸쾿**: +1. `settings.json`?먯꽌 `"encryptionEnabled": true` ?ㅼ젙 +2. 湲곗〈 ?됰Ц ??紐⑤뜽紐낆? ???ъ떆?????ㅼ젙 ?€?ν븯硫??먮룞?쇰줈 ?뷀샇?붾맖 +3. ?먮뒗 AxKeyEncryptor ?꾧뎄濡?誘몃━ ?뷀샇?뷀븳 媛?諛고룷 -**하위 호환**: 암호화 모드에서 복호화 실패 시 평문으로 간주하여 동작 (마이그레이션 안전) +**?섏쐞 ?명솚**: ?뷀샇??紐⑤뱶?먯꽌 蹂듯샇???ㅽ뙣 ???됰Ц?쇰줈 媛꾩<?섏뿬 ?숈옉 (留덉씠洹몃젅?댁뀡 ?덉쟾) -> **대화 내역 암호화**는 `encryptionEnabled`와 별개로 항상 **PC별 AES-256-GCM + DPAPI**로 암호화됩니다. 이는 대화 프라이버시 보호를 위한 별도 계층입니다. +> **?€???댁뿭 ?뷀샇??*??`encryptionEnabled`?€ 蹂꾧컻濡???긽 **PC蹂?AES-256-GCM + DPAPI**濡??뷀샇?붾맗?덈떎. ?대뒗 ?€???꾨씪?대쾭??蹂댄샇瑜??꾪븳 蹂꾨룄 怨꾩링?낅땲?? -### 설정 UI (도입 당시 기준) +### ?ㅼ젙 UI (?꾩엯 ?뱀떆 湲곗?) -| 설정 항목 | 타입 | 기본값 | +| ?ㅼ젙 ??ぉ | ?€??| 湲곕낯媛?| |-----------|------|--------| -| LLM 서비스 선택 | ComboBox (Ollama/vLLM/Gemini) | Ollama | -| 엔드포인트 URL | TextBox | `http://localhost:11434` | -| 모델명 | TextBox / ComboBox | `llama3:8b` | -| API 키 (암호화) | PasswordBox | (없음) | -| 시스템 프롬프트 | TextBox (여러 줄) | "당신은 유능한 AI 비서입니다." | -| 대화 보관 기간 | ComboBox | 30일 | -| 최대 컨텍스트 토큰 | Slider / TextBox | 4096 | -| 스트리밍 응답 | ToggleSwitch | ON | -| 연결 테스트 | Button | "연결 테스트" | +| LLM ?쒕퉬???좏깮 | ComboBox (Ollama/vLLM/Gemini) | Ollama | +| ?붾뱶?ъ씤??URL | TextBox | `http://localhost:11434` | +| 紐⑤뜽紐?| TextBox / ComboBox | `llama3:8b` | +| API ??(?뷀샇?? | PasswordBox | (?놁쓬) | +| ?쒖뒪???꾨\?꾪듃 | TextBox (?щ윭 以? | "?뱀떊?€ ?좊뒫??AI 鍮꾩꽌?낅땲??" | +| ?€??蹂닿? 湲곌컙 | ComboBox | 30??| +| 理쒕? 而⑦뀓?ㅽ듃 ?좏겙 | Slider / TextBox | 4096 | +| ?ㅽ듃由щ컢 ?묐떟 | ToggleSwitch | ON | +| ?곌껐 ?뚯뒪??| Button | "?곌껐 ?뚯뒪?? | -### 구현 파일 구조 (도입 당시 설계안) +### 援ы쁽 ?뚯씪 援ъ“ (?꾩엯 ?뱀떆 ?ㅺ퀎?? ``` src/AxCommander/ Models/ - ChatMessage.cs ← 메시지 모델 (role, content, timestamp) - Conversation.cs ← 대화 모델 (id, title, messages, pinned, ...) - LlmSettings.cs ← LLM 설정 모델 + ChatMessage.cs ??硫붿떆吏€ 紐⑤뜽 (role, content, timestamp) + Conversation.cs ???€??紐⑤뜽 (id, title, messages, pinned, ...) + LlmSettings.cs ??LLM ?ㅼ젙 紐⑤뜽 Services/ - LlmService.cs ← LLM API 추상화 (Ollama/vLLM/Gemini 통합) - OllamaClient.cs ← Ollama HTTP 클라이언트 - VllmClient.cs ← vLLM (OpenAI 호환) 클라이언트 - GeminiClient.cs ← Gemini REST 클라이언트 - ConversationStore.cs ← 대화 로컬 저장/로드/삭제/만료 처리 - KeyEncryptionService.cs ← API 키 암호화/복호화 + LlmService.cs ??LLM API 異붿긽??(Ollama/vLLM/Gemini ?듯빀) + OllamaClient.cs ??Ollama HTTP ?대씪?댁뼵?? + VllmClient.cs ??vLLM (OpenAI ?명솚) ?대씪?댁뼵?? + GeminiClient.cs ??Gemini REST ?대씪?댁뼵?? + ConversationStore.cs ???€??濡쒖뺄 ?€??濡쒕뱶/??젣/留뚮즺 泥섎━ + KeyEncryptionService.cs ??API ???뷀샇??蹂듯샇?? ViewModels/ - ChatViewModel.cs ← 대화 창 ViewModel + ChatViewModel.cs ???€??李?ViewModel Views/ - ChatWindow.xaml / .cs ← 전용 대화 창 (2패널) + ChatWindow.xaml / .cs ???꾩슜 ?€??李?(2?⑤꼸) Handlers/ - LlmChatHandler.cs ← ! 예약어 핸들러 (런처에서 ChatWindow 열기) + LlmChatHandler.cs ??! ?덉빟???몃뱾??(?곗쿂?먯꽌 ChatWindow ?닿린) -src/AxKeyEncryptor/ ← 별도 프로젝트 (암호화 도구) - Program.cs ← 콘솔 또는 간단한 WinForms GUI +src/AxKeyEncryptor/ ??蹂꾨룄 ?꾨줈?앺듃 (?뷀샇???꾧뎄) + Program.cs ??肄섏넄 ?먮뒗 媛꾨떒??WinForms GUI ``` -### 단계별 구현 현황 +### ?④퀎蹂?援ы쁽 ?꾪솴 -| 단계 | 내용 | 상태 | +| ?④퀎 | ?댁슜 | ?곹깭 | |------|------|------| -| **1단계** | Ollama 연결 + 기본 대화 창 (단일 대화) | ✅ 완료 | -| **2단계** | 대화 목록 + 저장/로드 + 고정/삭제/분류/이름변경 | ✅ 완료 | -| **3단계** | vLLM / Gemini / Claude 연결 추가 + 설정 탭 | ✅ 완료 | -| **4단계** | 스트리밍 응답 + 마크다운/코드 구문 강조 렌더링 | ✅ 완료 | -| **5단계** | 프롬프트 카드 + 사용자 프롬프트 템플릿 | ✅ 완료 | -| **6단계** | 토큰 사용량(k/m 단위) + 응답 소요시간 표시 | ✅ 완료 | -| **7단계** | 타이핑 효과 + 피드백(좋아요/싫어요) 영속성 | ✅ 완료 | -| **8단계** | 커스텀 Popup 메뉴 통일 (ContextMenu 제거) | ✅ 완료 | -| **9단계** | 지연 캡처 (Shift+Enter 3/5/10초 타이머) | ✅ 완료 | -| **후속 확장** | 멀티 에이전트, 내보내기, Cowork 탭 | 이후 AX Agent 로드맵으로 이관 | +| **1?④퀎** | Ollama ?곌껐 + 湲곕낯 ?€??李?(?⑥씪 ?€?? | ???꾨즺 | +| **2?④퀎** | ?€??紐⑸줉 + ?€??濡쒕뱶 + 怨좎젙/??젣/遺꾨쪟/?대쫫蹂€寃?| ???꾨즺 | +| **3?④퀎** | vLLM / Gemini / Claude ?곌껐 異붽? + ?ㅼ젙 ??| ???꾨즺 | +| **4?④퀎** | ?ㅽ듃由щ컢 ?묐떟 + 留덊겕?ㅼ슫/肄붾뱶 援щЦ 媛뺤“ ?뚮뜑留?| ???꾨즺 | +| **5?④퀎** | ?꾨\?꾪듃 移대뱶 + ?ъ슜???꾨\?꾪듃 ?쒗뵆由?| ???꾨즺 | +| **6?④퀎** | ?좏겙 ?ъ슜??k/m ?⑥쐞) + ?묐떟 ?뚯슂?쒓컙 ?쒖떆 | ???꾨즺 | +| **7?④퀎** | ?€?댄븨 ?④낵 + ?쇰뱶諛?醫뗭븘???レ뼱?? ?곸냽??| ???꾨즺 | +| **8?④퀎** | 而ㅼ뒪?€ Popup 硫붾돱 ?듭씪 (ContextMenu ?쒓굅) | ???꾨즺 | +| **9?④퀎** | 吏€??罹≪쿂 (Shift+Enter 3/5/10珥??€?대㉧) | ???꾨즺 | +| **?꾩냽 ?뺤옣** | 硫€???먯씠?꾪듃, ?대낫?닿린, Cowork ??| ?댄썑 AX Agent 濡쒕뱶留듭쑝濡??닿? | --- -## 알려진 제한사항 및 향후 개선 +## ?뚮젮吏??쒗븳?ы빆 諛??ν썑 媛쒖꽑 -| 항목 | 현황 | 개선 방향 | +| ??ぉ | ?꾪솴 | 媛쒖꽑 諛⑺뼢 | |------|------|----------| -| 클립보드 히스토리 이미지 | 텍스트만 지원 | `IDataObject` 이미지 타입 추가 | -| 클립보드 병합 항목 시각 표시 | 힌트 바로만 개수 표시 | 리스트 항목에 체크마크 아이콘 추가 | -| 스니펫 글로벌 확장 | 런처에서만 동작 | `WH_KEYBOARD_LL` 백그라운드 확장 | -| 인덱스 경로 | Desktop + Start Menu | Program Files 등 추가 옵션 | -| 보안 제외 패턴 편집 | 읽기 전용 표시 | 설정 UI에서 패턴 추가/삭제 지원 | +| ?대┰蹂대뱶 ?덉뒪?좊━ ?대?吏€ | ?띿뒪?몃쭔 吏€??| `IDataObject` ?대?吏€ ?€??異붽? | +| ?대┰蹂대뱶 蹂묓빀 ??ぉ ?쒓컖 ?쒖떆 | ?뚰듃 諛붾줈留?媛쒖닔 ?쒖떆 | 由ъ뒪????ぉ??泥댄겕留덊겕 ?꾩씠肄?異붽? | +| ?ㅻ땲??湲€濡쒕쾶 ?뺤옣 | ?곗쿂?먯꽌留??숈옉 | `WH_KEYBOARD_LL` 諛깃렇?쇱슫???뺤옣 | +| ?몃뜳??寃쎈줈 | Desktop + Start Menu | Program Files ??異붽? ?듭뀡 | +| 蹂댁븞 ?쒖쇅 ?⑦꽩 ?몄쭛 | ?쎄린 ?꾩슜 ?쒖떆 | ?ㅼ젙 UI?먯꽌 ?⑦꽩 異붽?/??젣 吏€??| -### 향후 개선 — ONNX 임베딩 코드 검색 (사양 확보 시) +### ?ν썑 媛쒖꽑 ??ONNX ?꾨쿋??肄붾뱶 寃€??(?ъ뼇 ?뺣낫 ?? -현재 코드 검색은 **TF-IDF + SQLite 영속 인덱스** 방식을 사용합니다 (v0.5.x). -사내 PC 사양이 확보되면 ONNX 로컬 임베딩으로 업그레이드하여 시맨틱 검색 품질을 크게 개선할 수 있습니다. +?꾩옱 肄붾뱶 寃€?됱? **TF-IDF + SQLite ?곸냽 ?몃뜳??* 諛⑹떇???ъ슜?⑸땲??(v0.5.x). +?щ궡 PC ?ъ뼇???뺣낫?섎㈃ ONNX 濡쒖뺄 ?꾨쿋?⑹쑝濡??낃렇?덉씠?쒗븯???쒕㎤??寃€???덉쭏???ш쾶 媛쒖꽑?????덉뒿?덈떎. -#### 현재 구현 (TF-IDF + SQLite) -- **방식**: 키워드 기반 TF-IDF 코사인 유사도 + 바이그램 + 스톱워드 제거 -- **저장**: `%APPDATA%\AxCopilot\index\{folderHash}.db` (SQLite) -- **장점**: 외부 의존 없음, 배포 +3MB, 저사양 PC에서도 동작 -- **한계**: 동의어/의미 유사성 미지원 ("사용자 인증" ↔ "로그인 검증" 매칭 불가) +#### ?꾩옱 援ы쁽 (TF-IDF + SQLite) +- **諛⑹떇**: ?ㅼ썙??湲곕컲 TF-IDF 肄붿궗???좎궗??+ 諛붿씠洹몃옩 + ?ㅽ넲?뚮뱶 ?쒓굅 +- **?€??*: `%APPDATA%\AxCopilot\index\{folderHash}.db` (SQLite) +- **?μ젏**: ?몃? ?섏〈 ?놁쓬, 諛고룷 +3MB, ?€?ъ뼇 PC?먯꽌???숈옉 +- **?쒓퀎**: ?숈쓽???섎? ?좎궗??誘몄???("?ъ슜???몄쬆" ??"濡쒓렇??寃€利? 留ㅼ묶 遺덇?) -#### ONNX 임베딩 업그레이드 계획 +#### ONNX ?꾨쿋???낃렇?덉씠??怨꾪쉷 -| 항목 | 내용 | +| ??ぉ | ?댁슜 | |------|------| -| **NuGet** | `Microsoft.ML.OnnxRuntime` 1.17+ (CPU 전용) | -| **모델** | `all-MiniLM-L6-v2` (90MB, 384차원) 또는 `bge-small-en` (130MB) | -| **벡터 DB** | 기존 SQLite에 BLOB 컬럼 추가 (384×float32 = 1.5KB/청크) | -| **배포 크기** | 현재 ~20MB → ~160MB (+140MB) | -| **최소 사양** | RAM 4GB 이상, CPU AVX2 지원 권장 | +| **NuGet** | `Microsoft.ML.OnnxRuntime` 1.17+ (CPU ?꾩슜) | +| **紐⑤뜽** | `all-MiniLM-L6-v2` (90MB, 384李⑥썝) ?먮뒗 `bge-small-en` (130MB) | +| **踰≫꽣 DB** | 湲곗〈 SQLite??BLOB 而щ읆 異붽? (384횞float32 = 1.5KB/泥?겕) | +| **諛고룷 ?ш린** | ?꾩옱 ~20MB ??~160MB (+140MB) | +| **理쒖냼 ?ъ뼇** | RAM 4GB ?댁긽, CPU AVX2 吏€??沅뚯옣 | -#### 업그레이드 절차 (개발자 가이드) +#### ?낃렇?덉씠???덉감 (媛쒕컻??媛€?대뱶) -1. **NuGet 추가**: +1. **NuGet 異붽?**: ```bash dotnet add src/AxCopilot/AxCopilot.csproj package Microsoft.ML.OnnxRuntime --version 1.17.0 ``` -2. **모델 배치**: `Assets/models/all-MiniLM-L6-v2.onnx` (빌드 시 복사) +2. **紐⑤뜽 諛곗튂**: `Assets/models/all-MiniLM-L6-v2.onnx` (鍮뚮뱶 ??蹂듭궗) -3. **CodeIndexService 수정**: +3. **CodeIndexService ?섏젙**: ```csharp - // 인덱싱 시 청크별 임베딩 벡터 생성 + // ?몃뜳????泥?겕蹂??꾨쿋??踰≫꽣 ?앹꽦 var embedding = _onnxSession.Run(new[] { tokenizedInput }); - // SQLite chunks 테이블에 embedding BLOB 컬럼 추가 - // 검색 시 코사인 유사도를 벡터 간 계산 + // SQLite chunks ?뚯씠釉붿뿉 embedding BLOB 而щ읆 異붽? + // 寃€????肄붿궗???좎궗?꾨? 踰≫꽣 媛?怨꾩궛 ``` -4. **SQLite 스키마 확장**: +4. **SQLite ?ㅽ궎留??뺤옣**: ```sql ALTER TABLE chunks ADD COLUMN embedding BLOB; - -- 검색 시: SELECT ... ORDER BY cosine_similarity(query_vec, embedding) DESC + -- 寃€???? SELECT ... ORDER BY cosine_similarity(query_vec, embedding) DESC ``` -5. **설정 추가**: `AppSettings.Llm.Code.UseEmbeddingSearch` (bool, default false) - - false: 기존 TF-IDF 사용 (저사양 호환) - - true: ONNX 임베딩 사용 (고품질) +5. **?ㅼ젙 異붽?**: `AppSettings.Llm.Code.UseEmbeddingSearch` (bool, default false) + - false: 湲곗〈 TF-IDF ?ъ슜 (?€?ъ뼇 ?명솚) + - true: ONNX ?꾨쿋???ъ슜 (怨좏뭹吏? -6. **폴백**: ONNX 로드 실패 시 자동으로 TF-IDF 모드로 전환 +6. **?대갚**: ONNX 濡쒕뱶 ?ㅽ뙣 ???먮룞?쇰줈 TF-IDF 紐⑤뱶濡??꾪솚 -> **참고**: 사내 PC 사양(CPU, RAM)이 낮아 ONNX 런타임 로드 시간(3~5초)과 -> 인덱싱 시간이 길어질 수 있음. 반드시 사양 확인 후 도입 결정. +> **李멸퀬**: ?щ궡 PC ?ъ뼇(CPU, RAM)????븘 ONNX ?고???濡쒕뱶 ?쒓컙(3~5珥?怨? +> ?몃뜳???쒓컙??湲몄뼱吏????덉쓬. 諛섎뱶???ъ뼇 ?뺤씤 ???꾩엯 寃곗젙. -### 미지원 — 개발 계획 없음 +### 誘몄?????媛쒕컻 怨꾪쉷 ?놁쓬 -아래 기능은 Alfred 비교에서 언급된 바 있으나 **AX Commander에 불필요한 기능으로 확정**되어 구현하지 않습니다. 향후 Alfred 비교 시에도 이 항목들은 비교 대상에서 제외합니다. +?꾨옒 湲곕뒫?€ Alfred 鍮꾧탳?먯꽌 ?멸툒??諛??덉쑝??**AX Commander??遺덊븘?뷀븳 湲곕뒫?쇰줈 ?뺤젙**?섏뼱 援ы쁽?섏? ?딆뒿?덈떎. ?ν썑 Alfred 鍮꾧탳 ?쒖뿉??????ぉ?ㅼ? 鍮꾧탳 ?€?곸뿉???쒖쇅?⑸땲?? -| 기능 | 이유 | +| 湲곕뒫 | ?댁쑀 | |------|------| -| 워크플로우 자동화 체인 | 사내 업무 흐름상 불필요. 배치 명령(`>`)으로 충분히 대체 가능 | -| 연락처 검색 | MAPI/vCard 연동 복잡도 대비 사용 빈도 낮음 | -| 사전 (Dictionary) | OS 내장 사전 및 브라우저 검색으로 충분히 대체 가능 | -| QR코드 생성 | 업무 활용도 낮음, 외부 의존성 없는 구현 비용 대비 효용 낮음 | +| ?뚰겕?뚮줈???먮룞??泥댁씤 | ?щ궡 ?낅Т ?먮쫫??遺덊븘?? 諛곗튂 紐낅졊(`>`)?쇰줈 異⑸텇???€泥?媛€??| +| ?곕씫泥?寃€??| MAPI/vCard ?곕룞 蹂듭옟???€鍮??ъ슜 鍮덈룄 ??쓬 | +| ?ъ쟾 (Dictionary) | OS ?댁옣 ?ъ쟾 諛?釉뚮씪?곗? 寃€?됱쑝濡?異⑸텇???€泥?媛€??| +| QR肄붾뱶 ?앹꽦 | ?낅Т ?쒖슜????쓬, ?몃? ?섏〈???녿뒗 援ы쁽 鍮꾩슜 ?€鍮??⑥슜 ??쓬 | --- -## 개발 환경 +## 媛쒕컻 ?섍꼍 - **IDE**: Visual Studio 2022 / JetBrains Rider / VS Code (C# Dev Kit) - **SDK**: .NET 8 SDK -- **타겟**: `net8.0-windows`, `win-x64` -- **UI 프레임워크**: WPF (`UseWPF=true`) + WinForms (`UseWindowsForms=true`, ColorDialog 사용) -- **테스트**: xUnit 2.9.0, FluentAssertions 6.12.0 +- **?€寃?*: `net8.0-windows`, `win-x64` +- **UI ?꾨젅?꾩썙??*: WPF (`UseWPF=true`) + WinForms (`UseWindowsForms=true`, ColorDialog ?ъ슜) +- **?뚯뒪??*: xUnit 2.9.0, FluentAssertions 6.12.0 --- -## 경쟁 제품 기능 비교 +## 寃쎌웳 ?쒗뭹 湲곕뒫 鍮꾧탳 -아래 비교표는 **런처 영역(AX Commander) 초기 프리릴리스 기준**으로 macOS Alfred 5, macOS Spotlight, Windows PowerToys Run과 비교한 기록입니다. +?꾨옒 鍮꾧탳?쒕뒗 **?곗쿂 ?곸뿭(AX Commander) 珥덇린 ?꾨━由대━??湲곗?**?쇰줈 macOS Alfred 5, macOS Spotlight, Windows PowerToys Run怨?鍮꾧탳??湲곕줉?낅땲?? -| 기능 | AX Commander | Alfred 5 | Spotlight | PowerToys Run | +| 湲곕뒫 | AX Commander | Alfred 5 | Spotlight | PowerToys Run | |------|:---:|:---:|:---:|:---:| -| 앱/파일 퍼지 검색 | O | O | O | O | -| 한국어 초성 검색 | **O** | X | X | X | -| 실행 빈도 학습 | O | O | O | O | -| 계산기 + 수학 함수 | O | O | △ (기본) | O | -| 단위 변환 | O | O | O | O | -| 통화 변환 (실시간) | O | O | X | X | -| 웹 검색 (다중 엔진) | O | O | O | O | -| 클립보드 히스토리 | O | O (Powerpack) | X | X | -| 클립보드 파이프라인 체이닝 | **O** | X | X | X | -| 텍스트 일괄 처리 (batch) | **O** | X | X | X | -| 텍스트 스니펫 + 자동 확장 | O | O (Powerpack) | X | X | -| 파일 액션 서브메뉴 | O | O | X | X | -| JSON 포맷/검증 | O | X | X | X | -| 인코딩/해싱 (Base64, SHA) | O | X | X | X | -| 색상 변환 (HEX/RGB/HSL) | O | X | X | X | -| 스포이드 색상 추출 | **O** | X | X | X | -| 포트/프로세스 조회 | O | X | X | X | -| 환경변수 조회 | O | X | X | X | -| 화면 캡처 (4모드) | O | X | △ (스크린샷) | X | -| 글로벌 캡처 단축키 | O | X | O | X | -| 스크롤 캡처 (자동 스티칭) | **O** | X | X | X | -| 영역 캡처 키보드 미세조정 | **O** | X | X | X | -| 창 스냅 레이아웃 | O | X | X | O | -| 워크스페이스 저장/복원 | O | X | X | X | -| 윈도우 스위처 (검색+전환) | **O** | X | X | O | -| 시스템 명령 (잠금/절전/종료) | O | O | X | O | -| 미디어 제어 | O | O | O | X | -| 타이머/알람 | O | X | X | X | -| 프로세스 종료 (kill) | O | X | X | O | -| 서비스 관리 (svc) | **O** | X | X | X | -| 날짜 계산/D-day/타임스탬프 | **O** | X | X | X | -| 파일 비교 (diff) | **O** | X | X | X | -| 파일 일괄 이름변경 | **O** | X | X | O | -| 프로젝트 스캐폴딩 | **O** | X | X | X | -| 즐겨찾기 관리 | O | X | X | X | -| 업무 일지 자동 생성 | **O** | X | X | X | -| 루틴 자동화 | **O** | △ (워크플로우) | X | X | -| 시스템 리소스 모니터 | O | X | X | O | -| 이모지 피커 | O | X | X | O | -| 최근 파일 | O | O | O | X | -| 빠른 메모 | O | X | X | X | -| 앱 제거 | O | X | X | X | -| 잠금 해제 사용시간 알림 | **O** | X | X | X | -| 테마 (9종 + 커스텀 + 모양) | O | O | X | △ (제한) | -| 다국어 (5개 언어) | O | O | O | O | -| 플러그인 DLL 확장 | O | O | X | O | -| DPAPI 클립보드 암호화 | **O** | X | X | X | -| 단일 EXE 배포 | **O** | X | N/A | X | -| 완전 오프라인 (외부 통신 없음) | **O** | △ | O | O | +| ???뚯씪 ?쇱? 寃€??| O | O | O | O | +| ?쒓뎅??珥덉꽦 寃€??| **O** | X | X | X | +| ?ㅽ뻾 鍮덈룄 ?숈뒿 | O | O | O | O | +| 怨꾩궛湲?+ ?섑븰 ?⑥닔 | O | O | ??(湲곕낯) | O | +| ?⑥쐞 蹂€??| O | O | O | O | +| ?듯솕 蹂€??(?ㅼ떆媛? | O | O | X | X | +| ??寃€??(?ㅼ쨷 ?붿쭊) | O | O | O | O | +| ?대┰蹂대뱶 ?덉뒪?좊━ | O | O (Powerpack) | X | X | +| ?대┰蹂대뱶 ?뚯씠?꾨씪??泥댁씠??| **O** | X | X | X | +| ?띿뒪???쇨큵 泥섎━ (batch) | **O** | X | X | X | +| ?띿뒪???ㅻ땲??+ ?먮룞 ?뺤옣 | O | O (Powerpack) | X | X | +| ?뚯씪 ?≪뀡 ?쒕툕硫붾돱 | O | O | X | X | +| JSON ?щ㎎/寃€利?| O | X | X | X | +| ?몄퐫???댁떛 (Base64, SHA) | O | X | X | X | +| ?됱긽 蹂€??(HEX/RGB/HSL) | O | X | X | X | +| ?ㅽ룷?대뱶 ?됱긽 異붿텧 | **O** | X | X | X | +| ?ы듃/?꾨줈?몄뒪 議고쉶 | O | X | X | X | +| ?섍꼍蹂€??議고쉶 | O | X | X | X | +| ?붾㈃ 罹≪쿂 (4紐⑤뱶) | O | X | ??(?ㅽ겕由곗꺑) | X | +| 湲€濡쒕쾶 罹≪쿂 ?⑥텞??| O | X | O | X | +| ?ㅽ겕濡?罹≪쿂 (?먮룞 ?ㅽ떚移? | **O** | X | X | X | +| ?곸뿭 罹≪쿂 ?ㅻ낫??誘몄꽭議곗젙 | **O** | X | X | X | +| 李??ㅻ깄 ?덉씠?꾩썐 | O | X | X | O | +| ?뚰겕?ㅽ럹?댁뒪 ?€??蹂듭썝 | O | X | X | X | +| ?덈룄???ㅼ쐞泥?(寃€???꾪솚) | **O** | X | X | O | +| ?쒖뒪??紐낅졊 (?좉툑/?덉쟾/醫낅즺) | O | O | X | O | +| 誘몃뵒???쒖뼱 | O | O | O | X | +| ?€?대㉧/?뚮엺 | O | X | X | X | +| ?꾨줈?몄뒪 醫낅즺 (kill) | O | X | X | O | +| ?쒕퉬??愿€由?(svc) | **O** | X | X | X | +| ?좎쭨 怨꾩궛/D-day/?€?꾩뒪?ы봽 | **O** | X | X | X | +| ?뚯씪 鍮꾧탳 (diff) | **O** | X | X | X | +| ?뚯씪 ?쇨큵 ?대쫫蹂€寃?| **O** | X | X | O | +| ?꾨줈?앺듃 ?ㅼ틦?대뵫 | **O** | X | X | X | +| 利먭꺼李얘린 愿€由?| O | X | X | X | +| ?낅Т ?쇱? ?먮룞 ?앹꽦 | **O** | X | X | X | +| 猷⑦떞 ?먮룞??| **O** | ??(?뚰겕?뚮줈?? | X | X | +| ?쒖뒪??由ъ냼??紐⑤땲??| O | X | X | O | +| ?대え吏€ ?쇱빱 | O | X | X | O | +| 理쒓렐 ?뚯씪 | O | O | O | X | +| 鍮좊Ⅸ 硫붾え | O | X | X | X | +| ???쒓굅 | O | X | X | X | +| ?좉툑 ?댁젣 ?ъ슜?쒓컙 ?뚮┝ | **O** | X | X | X | +| ?뚮쭏 (9醫?+ 而ㅼ뒪?€ + 紐⑥뼇) | O | O | X | ??(?쒗븳) | +| ?ㅺ뎅??(5媛??몄뼱) | O | O | O | O | +| ?뚮윭洹몄씤 DLL ?뺤옣 | O | O | X | O | +| DPAPI ?대┰蹂대뱶 ?뷀샇??| **O** | X | X | X | +| ?⑥씪 EXE 諛고룷 | **O** | X | N/A | X | +| ?꾩쟾 ?ㅽ봽?쇱씤 (?몃? ?듭떊 ?놁쓬) | **O** | ??| O | O | -**O** = 지원, **△** = 부분 지원, **X** = 미지원, **굵은 O** = AX Commander 고유 기능 +**O** = 吏€?? **??* = 遺€遺?吏€?? **X** = 誘몄??? **援듭? O** = AX Commander 怨좎쑀 湲곕뒫 --- -## 새로운 핸들러/키워드 추가 방법 (개발자 가이드) +## ?덈줈???몃뱾???ㅼ썙??異붽? 諛⑸쾿 (媛쒕컻??媛€?대뱶) -### 1단계: IActionHandler 구현 +### 1?④퀎: IActionHandler 援ы쁽 ```csharp // Handlers/MyNewHandler.cs @@ -1632,78 +1636,78 @@ namespace AxCommander.Handlers; public class MyNewHandler : IActionHandler { - // 이 핸들러를 트리거하는 프리픽스 (null이면 퍼지 검색에 통합) + // ???몃뱾?щ? ?몃━嫄고븯???꾨━?쎌뒪 (null?대㈃ ?쇱? 寃€?됱뿉 ?듯빀) public string? Prefix => "myprefix"; public PluginMetadata Metadata => new( "MyNew", - "내 새로운 기능 — myprefix", + "???덈줈??湲곕뒫 ??myprefix", "1.0", "AX"); public Task> GetItemsAsync(string query, CancellationToken ct) { - // query: 프리픽스 이후의 입력 텍스트 - // LauncherItem의 Data 필드에 실행 시 필요한 데이터를 담아 반환 + // query: ?꾨━?쎌뒪 ?댄썑???낅젰 ?띿뒪?? + // LauncherItem??Data ?꾨뱶???ㅽ뻾 ???꾩슂???곗씠?곕? ?댁븘 諛섑솚 return Task.FromResult>( [ new LauncherItem( - "제목", - "설명 · Enter로 실행", + "?쒕ぉ", + "?ㅻ챸 쨌 Enter濡??ㅽ뻾", null, - "실행 시 전달될 데이터", + "?ㅽ뻾 ???꾨떖???곗씠??, Symbol: Symbols.Info) ]); } public Task ExecuteAsync(LauncherItem item, CancellationToken ct) { - // item.Data에서 데이터를 꺼내 실행 + // item.Data?먯꽌 ?곗씠?곕? 爰쇰궡 ?ㅽ뻾 if (item.Data is string data) { - // 작업 수행 + // ?묒뾽 ?섑뻾 } return Task.CompletedTask; } } ``` -### 2단계: 핸들러 등록 (App.xaml.cs) +### 2?④퀎: ?몃뱾???깅줉 (App.xaml.cs) ```csharp -// App.xaml.cs OnStartup() 내부, HelpHandler 위에 추가 +// App.xaml.cs OnStartup() ?대?, HelpHandler ?꾩뿉 異붽? commandResolver.RegisterHandler(new MyNewHandler()); ``` -### 3단계: 심볼 추가 (Symbols.cs) +### 3?④퀎: ?щ낵 異붽? (Symbols.cs) ```csharp // Themes/Symbols.cs -public const string MyNewIcon = "\uE946"; // Segoe MDL2 Assets 유니코드 +public const string MyNewIcon = "\uE946"; // Segoe MDL2 Assets ?좊땲肄붾뱶 ``` -참고: [Segoe MDL2 Assets 아이콘 목록](https://learn.microsoft.com/en-us/windows/apps/design/style/segoe-ui-symbol-font) +李멸퀬: [Segoe MDL2 Assets ?꾩씠肄?紐⑸줉](https://learn.microsoft.com/en-us/windows/apps/design/style/segoe-ui-symbol-font) -### 4단계: 도움말 항목 추가 (HelpHandler.cs) +### 4?④퀎: ?꾩?留???ぉ 異붽? (HelpHandler.cs) -`_entries` 배열에 항목 추가 (키보드 섹션 위에): +`_entries` 諛곗뿴????ぉ 異붽? (?ㅻ낫???뱀뀡 ?꾩뿉): ```csharp -new("카테고리", "myprefix", "기능 제목", - "기능 설명", - "사용 예시", - Symbols.MyNewIcon, "#HEX색상"), +new("移댄뀒怨좊━", "myprefix", "湲곕뒫 ?쒕ぉ", + "湲곕뒫 ?ㅻ챸", + "?ъ슜 ?덉떆", + Symbols.MyNewIcon, "#HEX?됱긽"), ``` -### 5단계: 설정이 필요한 경우 +### 5?④퀎: ?ㅼ젙???꾩슂??寃쎌슦 -1. `Models/AppSettings.cs`에 설정 클래스 추가 -2. `ViewModels/SettingsViewModel.cs`에 프로퍼티 추가 -3. `Views/SettingsWindow.xaml`에 탭 또는 섹션 추가 +1. `Models/AppSettings.cs`???ㅼ젙 ?대옒??異붽? +2. `ViewModels/SettingsViewModel.cs`???꾨줈?쇳떚 異붽? +3. `Views/SettingsWindow.xaml`?????먮뒗 ?뱀뀡 異붽? -### 6단계: 외부 DLL 플러그인 +### 6?④퀎: ?몃? DLL ?뚮윭洹몄씤 -외부 개발자는 `AxCommander.SDK` 프로젝트의 `IActionHandler`를 구현하는 DLL을 만들어 `settings.json`의 `plugins` 배열에 등록합니다: +?몃? 媛쒕컻?먮뒗 `AxCommander.SDK` ?꾨줈?앺듃??`IActionHandler`瑜?援ы쁽?섎뒗 DLL??留뚮뱾??`settings.json`??`plugins` 諛곗뿴???깅줉?⑸땲?? ```json "plugins": [ @@ -1711,31 +1715,31 @@ new("카테고리", "myprefix", "기능 제목", ] ``` -런타임에 `PluginHost`가 Assembly.LoadFrom()으로 로드하고 `IActionHandler` 구현체를 자동 검색하여 등록합니다. +?고??꾩뿉 `PluginHost`媛€ Assembly.LoadFrom()?쇰줈 濡쒕뱶?섍퀬 `IActionHandler` 援ы쁽泥대? ?먮룞 寃€?됲븯???깅줉?⑸땲?? --- -## 사내 LLM / AI Agent 연동 가이드 (향후 확장) +## ?щ궡 LLM / AI Agent ?곕룞 媛€?대뱶 (?ν썑 ?뺤옣) -AX Commander는 사내 LLM 또는 AI Agent를 연동하여 **자연어 질의-응답** 기능을 추가할 수 있도록 설계되어 있습니다. +AX Commander???щ궡 LLM ?먮뒗 AI Agent瑜??곕룞?섏뿬 **?먯뿰??吏덉쓽-?묐떟** 湲곕뒫??異붽??????덈룄濡??ㅺ퀎?섏뼱 ?덉뒿?덈떎. -### 연동 시나리오 +### ?곕룞 ?쒕굹由ъ삤 -1. **사내 인트라넷 LLM API**: 별도 프리픽스(`ai` 또는 `?? `) 입력 → 사내 AI 서버에 질의 → 응답을 런처 결과로 표시 -2. **키워드 없는 자동 감지**: 프리픽스가 없고 퍼지 검색 결과가 없을 때 → 자동으로 AI에 질의 폴백 -3. **클립보드 AI 분석**: 클립보드 텍스트를 AI에 전달하여 요약/번역/교정 결과 반환 +1. **?щ궡 ?명듃?쇰꽬 LLM API**: 蹂꾨룄 ?꾨━?쎌뒪(`ai` ?먮뒗 `?? `) ?낅젰 ???щ궡 AI ?쒕쾭??吏덉쓽 ???묐떟???곗쿂 寃곌낵濡??쒖떆 +2. **?ㅼ썙???녿뒗 ?먮룞 媛먯?**: ?꾨━?쎌뒪媛€ ?녾퀬 ?쇱? 寃€??寃곌낵媛€ ?놁쓣 ?????먮룞?쇰줈 AI??吏덉쓽 ?대갚 +3. **?대┰蹂대뱶 AI 遺꾩꽍**: ?대┰蹂대뱶 ?띿뒪?몃? AI???꾨떖?섏뿬 ?붿빟/踰덉뿭/援먯젙 寃곌낵 諛섑솚 -### 구현 방법 +### 援ы쁽 諛⑸쾿 -#### 방법 A: 전용 핸들러 (권장) +#### 諛⑸쾿 A: ?꾩슜 ?몃뱾??(沅뚯옣) ```csharp // Handlers/AiQueryHandler.cs public class AiQueryHandler : IActionHandler { - public string? Prefix => "ai"; // 또는 "??" 등 + public string? Prefix => "ai"; // ?먮뒗 "??" ?? - private readonly HttpClient _client; // 사내 인트라넷 전용 + private readonly HttpClient _client; // ?щ궡 ?명듃?쇰꽬 ?꾩슜 public AiQueryHandler(string intranetEndpoint) { @@ -1746,25 +1750,25 @@ public class AiQueryHandler : IActionHandler public async Task> GetItemsAsync(string query, CancellationToken ct) { if (string.IsNullOrWhiteSpace(query)) - return [new LauncherItem("AI에게 질문하세요", "사내 LLM에 질의합니다", null, null)]; + return [new LauncherItem("AI?먭쾶 吏덈Ц?섏꽭??, "?щ궡 LLM??吏덉쓽?⑸땲??, null, null)]; try { - // 사내 인트라넷 API 호출 (DEVELOPMENT.md 개발 원칙에 의거, - // 사내 명시 허가된 엔드포인트만 호출 가능) + // ?щ궡 ?명듃?쇰꽬 API ?몄텧 (DEVELOPMENT.md 媛쒕컻 ?먯튃???섍굅, + // ?щ궡 紐낆떆 ?덇????붾뱶?ъ씤?몃쭔 ?몄텧 媛€?? var response = await _client.PostAsJsonAsync("/api/chat", new { prompt = query }, ct); var result = await response.Content.ReadAsStringAsync(ct); return [new LauncherItem( - "AI 응답", - result.Length > 200 ? result[..197] + "…" : result, + "AI ?묐떟", + result.Length > 200 ? result[..197] + "?? : result, null, result, Symbol: Symbols.Lightbulb)]; } catch (Exception ex) { - return [new LauncherItem("AI 응답 실패", ex.Message, null, null, Symbol: Symbols.Error)]; + return [new LauncherItem("AI ?묐떟 ?ㅽ뙣", ex.Message, null, null, Symbol: Symbols.Error)]; } } @@ -1777,9 +1781,9 @@ public class AiQueryHandler : IActionHandler } ``` -#### 방법 B: CommandResolver 폴백 통합 +#### 諛⑸쾿 B: CommandResolver ?대갚 ?듯빀 -`Core/CommandResolver.cs`의 `ResolveAsync` 메서드에서 퍼지 검색 결과가 0건일 때 AI 핸들러로 폴백: +`Core/CommandResolver.cs`??`ResolveAsync` 硫붿꽌?쒖뿉???쇱? 寃€??寃곌낵媛€ 0嫄댁씪 ??AI ?몃뱾?щ줈 ?대갚: ```csharp // Core/CommandResolver.cs @@ -1789,14 +1793,14 @@ if (fuzzyResults.Count == 0 && _aiHandler != null) } ``` -#### 방법 C: JSON 스킬 플러그인 (기존 인프라 활용) +#### 諛⑸쾿 C: JSON ?ㅽ궗 ?뚮윭洹몄씤 (湲곗〈 ?명봽???쒖슜) -기존 `JsonSkillLoader`가 이미 HTTP API 호출을 지원하므로, `.skill.json` 파일로 LLM API를 등록: +湲곗〈 `JsonSkillLoader`媛€ ?대? HTTP API ?몄텧??吏€?먰븯誘€濡? `.skill.json` ?뚯씪濡?LLM API瑜??깅줉: ```json { "prefix": "ai", - "name": "사내 AI 질의", + "name": "?щ궡 AI 吏덉쓽", "type": "http", "url": "https://intranet.company.com/api/llm", "method": "POST", @@ -1805,56 +1809,56 @@ if (fuzzyResults.Count == 0 && _aiHandler != null) } ``` -### 보안 고려사항 +### 蹂댁븞 怨좊젮?ы빆 -| 항목 | 원칙 | +| ??ぉ | ?먯튃 | |------|------| -| 엔드포인트 | **사내 인트라넷 URL만 허용** — settings.json에 명시적 등록 필요 | -| 타임아웃 | 최대 10초 (런처 UX 유지) | -| 데이터 | 클립보드 내용을 AI에 전달할 때 보안 패턴 검사 선행 (기존 `excludePatterns` 활용) | -| 인증 | Windows 인증(SSPI) 또는 사내 토큰 — `CredentialManager` (advapi32.dll, DPAPI) 사용 | -| 로깅 | AI 질의 내용은 로그에 기록하지 않음 (민감 데이터 포함 가능) | +| ?붾뱶?ъ씤??| **?щ궡 ?명듃?쇰꽬 URL留??덉슜** ??settings.json??紐낆떆???깅줉 ?꾩슂 | +| ?€?꾩븘??| 理쒕? 10珥?(?곗쿂 UX ?좎?) | +| ?곗씠??| ?대┰蹂대뱶 ?댁슜??AI???꾨떖????蹂댁븞 ?⑦꽩 寃€???좏뻾 (湲곗〈 `excludePatterns` ?쒖슜) | +| ?몄쬆 | Windows ?몄쬆(SSPI) ?먮뒗 ?щ궡 ?좏겙 ??`CredentialManager` (advapi32.dll, DPAPI) ?ъ슜 | +| 濡쒓퉭 | AI 吏덉쓽 ?댁슜?€ 濡쒓렇??湲곕줉?섏? ?딆쓬 (誘쇨컧 ?곗씠???ы븿 媛€?? | -### 설정 UI 확장 +### ?ㅼ젙 UI ?뺤옣 -설정 창에 **AI 탭**을 추가하여 다음을 관리: +?ㅼ젙 李쎌뿉 **AI ??*??異붽??섏뿬 ?ㅼ쓬??愿€由? -| 설정 항목 | 설명 | +| ?ㅼ젙 ??ぉ | ?ㅻ챸 | |----------|------| -| AI 연동 활성화 | 기능 전체 토글 | -| 사내 API 엔드포인트 | 인트라넷 URL 입력 | -| 프리픽스 | `ai`, `??`, 또는 빈 값 (자동 폴백) | -| 타임아웃 (초) | 1~30초 | -| 자동 폴백 | 검색 결과 0건 시 자동으로 AI 질의 | +| AI ?곕룞 ?쒖꽦??| 湲곕뒫 ?꾩껜 ?좉? | +| ?щ궡 API ?붾뱶?ъ씤??| ?명듃?쇰꽬 URL ?낅젰 | +| ?꾨━?쎌뒪 | `ai`, `??`, ?먮뒗 鍮?媛?(?먮룞 ?대갚) | +| ?€?꾩븘??(珥? | 1~30珥?| +| ?먮룞 ?대갚 | 寃€??寃곌낵 0嫄????먮룞?쇰줈 AI 吏덉쓽 | -### 로드맵 +### 濡쒕뱶留? -| 단계 | 내용 | +| ?④퀎 | ?댁슜 | |------|------| -| Phase 1 | `ai` 프리픽스 핸들러 + 사내 REST API 연동 (텍스트 질의/응답) | -| Phase 2 | 자동 폴백 (퍼지 검색 결과 없을 때) | -| Phase 3 | 클립보드 AI 분석 (`ai summarize`, `ai translate`, `ai proofread`) | -| Phase 4 | Agent 모드 — 멀티턴 대화 + 도구 호출 (파일 읽기, 계산 등을 AI가 결정) | +| Phase 1 | `ai` ?꾨━?쎌뒪 ?몃뱾??+ ?щ궡 REST API ?곕룞 (?띿뒪??吏덉쓽/?묐떟) | +| Phase 2 | ?먮룞 ?대갚 (?쇱? 寃€??寃곌낵 ?놁쓣 ?? | +| Phase 3 | ?대┰蹂대뱶 AI 遺꾩꽍 (`ai summarize`, `ai translate`, `ai proofread`) | +| Phase 4 | Agent 紐⑤뱶 ??硫€?고꽩 ?€??+ ?꾧뎄 ?몄텧 (?뚯씪 ?쎄린, 怨꾩궛 ?깆쓣 AI媛€ 寃곗젙) | --- -## 슬래시 명령어 (/ Commands) +## ?щ옒??紐낅졊??(/ Commands) -AX Agent 대화 입력창에서 `/`를 입력하면 자동완성 팝업이 표시됩니다. 현재 탭에 맞는 명령어만 필터링됩니다. +AX Agent ?€???낅젰李쎌뿉??`/`瑜??낅젰?섎㈃ ?먮룞?꾩꽦 ?앹뾽???쒖떆?⑸땲?? ?꾩옱 ??뿉 留욌뒗 紐낅졊?대쭔 ?꾪꽣留곷맗?덈떎. -### 공통 명령어 (모든 탭) +### 怨듯넻 紐낅졊??(紐⑤뱺 ?? -| 명령어 | 기능 | 설명 | +| 紐낅졊??| 湲곕뒫 | ?ㅻ챸 | |--------|------|------| -| `/summary` | Summary | 텍스트/문서를 핵심 포인트 중심으로 요약 | -| `/translate` | Translate | 텍스트를 영어로 번역 (원문 톤 유지) | -| `/explain` | Explain | 내용을 쉽고 자세하게 설명 (예시 포함) | -| `/fix` | Fix | 맞춤법, 문법, 자연스러운 표현 교정 | -| `/help` | Help | 슬래시 명령어 도움말 창 표시 | +| `/summary` | Summary | ?띿뒪??臾몄꽌瑜??듭떖 ?ъ씤??以묒떖?쇰줈 ?붿빟 | +| `/translate` | Translate | ?띿뒪?몃? ?곸뼱濡?踰덉뿭 (?먮Ц ???좎?) | +| `/explain` | Explain | ?댁슜???쎄퀬 ?먯꽭?섍쾶 ?ㅻ챸 (?덉떆 ?ы븿) | +| `/fix` | Fix | 留욎땄踰? 臾몃쾿, ?먯뿰?ㅻ윭???쒗쁽 援먯젙 | +| `/help` | Help | ?щ옒??紐낅졊???꾩?留?李??쒖떆 | -### 개발 명령어 (Cowork/Code 탭 전용) +### 媛쒕컻 紐낅졊??(Cowork/Code ???꾩슜) -| 명령어 | 기능 | 사용 도구 | +| 紐낅졊??| 湲곕뒫 | ?ъ슜 ?꾧뎄 | |--------|------|-----------| | `/review` | Code Review | `code_review` (diff_review) | | `/pr` | PR Summary | `code_review` (pr_summary) | @@ -1863,854 +1867,854 @@ AX Agent 대화 입력창에서 `/`를 입력하면 자동완성 팝업이 표 | `/build` | Build | `build_run` | | `/search` | Search | `search_codebase` | -### 스킬 명령어 +### ?ㅽ궗 紐낅졊?? -`%APPDATA%\AxCopilot\skills\` 폴더에 `*.skill.md` 파일을 추가하면 슬래시 명령어로 자동 등록됩니다. +`%APPDATA%\AxCopilot\skills\` ?대뜑??`*.skill.md` ?뚯씪??異붽??섎㈃ ?щ옒??紐낅졊?대줈 ?먮룞 ?깅줉?⑸땲?? -**스킬 파일 형식** (2종류 지원): +**?ㅽ궗 ?뚯씪 ?뺤떇** (2醫낅쪟 吏€??: -1) **기존 형식** (`*.skill.md` 단일 파일): +1) **湲곗〈 ?뺤떇** (`*.skill.md` ?⑥씪 ?뚯씪): ```markdown --- name: skill-name -label: 표시 이름 -description: 설명 +label: ?쒖떆 ?대쫫 +description: ?ㅻ챸 icon: \uE768 --- -시스템 프롬프트 내용... +?쒖뒪???꾨\?꾪듃 ?댁슜... ``` -2) **SKILL.md 표준** (agentskills.io 호환, Claude Code/Cursor/Windsurf 공통): +2) **SKILL.md ?쒖?** (agentskills.io ?명솚, Claude Code/Cursor/Windsurf 怨듯넻): ``` skill-name/ -├── SKILL.md -├── scripts/ (선택) -└── references/ (선택) +?쒋??€ SKILL.md +?쒋??€ scripts/ (?좏깮) +?붴??€ references/ (?좏깮) ``` ```markdown --- name: skill-name -description: 설명. 사용 시점 키워드 포함 권장. +description: ?ㅻ챸. ?ъ슜 ?쒖젏 ?ㅼ썙???ы븿 沅뚯옣. license: Apache-2.0 compatibility: Requires Python 3.14+ metadata: - label: 표시 이름 + label: ?쒖떆 ?대쫫 icon: \uE768 author: team-name version: "1.0" allowed-tools: process file_read grep_tool --- -지시사항 마크다운... +吏€?쒖궗??留덊겕?ㅼ슫... ``` -**기본 제공 스킬** (자동 생성): -- `/daily-standup` — 데일리 스탠드업 보고서 -- `/bug-hunt` — 잠재적 버그 패턴 검색 -- `/code-explain` — 코드 상세 설명 +**湲곕낯 ?쒓났 ?ㅽ궗** (?먮룞 ?앹꽦): +- `/daily-standup` ???곗씪由??ㅽ깲?쒖뾽 蹂닿퀬?? +- `/bug-hunt` ???좎옱??踰꾧렇 ?⑦꽩 寃€?? +- `/code-explain` ??肄붾뱶 ?곸꽭 ?ㅻ챸 -### 에이전트 도구 목록 (v0.5.0) +### ?먯씠?꾪듃 ?꾧뎄 紐⑸줉 (v0.5.0) -| 도구명 | 기능 | 탭 | +| ?꾧뎄紐?| 湲곕뒫 | ??| |--------|------|----| -| `file_read` | 파일 읽기 | Cowork/Code | -| `file_write` | 파일 쓰기 | Cowork/Code | -| `file_edit` | 파일 편집 (줄 기반) | Cowork/Code | -| `glob` | 파일 패턴 검색 | Cowork/Code | -| `grep_tool` | 텍스트 검색 | Cowork/Code | -| `process` | 프로세스 실행 | Cowork/Code | -| `folder_map` | 폴더 구조 조회 | Cowork/Code | -| `document_read` | 문서 읽기 (PDF/DOCX) | Cowork/Code | -| `search_codebase` | 코드 시맨틱 검색 (TF-IDF) | Cowork/Code | -| `code_review` | AI 코드 리뷰 | Cowork/Code | -| `project_rules` | AX.md 개발 지침 관리 | Cowork/Code | -| `git_tool` | Git 작업 | Code | -| `build_run` | 빌드/테스트 실행 | Code | -| `dev_env_detect` | 개발 환경 감지 | Code | -| `lsp` | LSP 코드 인텔리전스 | Code | -| `test_loop` | 테스트 자동 루프 | Code | -| `spawn_agent` | 서브에이전트 생성 | Code | -| `wait_agents` | 서브에이전트 결과 대기 | Code | -| `skill_manager` | 스킬 관리 (list/info/reload) | Cowork/Code | -| `memory` | 에이전트 메모리 관리 | Cowork/Code | -| `excel_create` | Excel 생성 | Cowork/Code | -| `docx_create` | Word 생성 | Cowork/Code | -| `csv_create` | CSV 생성 | Cowork/Code | -| `markdown_create` | 마크다운 생성 | Cowork/Code | -| `html_create` | HTML 생성 | Cowork/Code | -| `chart_create` | 차트 생성 | Cowork/Code | -| `batch_create` | 배치 스크립트 생성 | Cowork/Code | -| `document_review` | 문서 품질 검증 | Cowork/Code | -| `format_convert` | 포맷 변환 | Cowork/Code | +| `file_read` | ?뚯씪 ?쎄린 | Cowork/Code | +| `file_write` | ?뚯씪 ?곌린 | Cowork/Code | +| `file_edit` | ?뚯씪 ?몄쭛 (以?湲곕컲) | Cowork/Code | +| `glob` | ?뚯씪 ?⑦꽩 寃€??| Cowork/Code | +| `grep_tool` | ?띿뒪??寃€??| Cowork/Code | +| `process` | ?꾨줈?몄뒪 ?ㅽ뻾 | Cowork/Code | +| `folder_map` | ?대뜑 援ъ“ 議고쉶 | Cowork/Code | +| `document_read` | 臾몄꽌 ?쎄린 (PDF/DOCX) | Cowork/Code | +| `search_codebase` | 肄붾뱶 ?쒕㎤??寃€??(TF-IDF) | Cowork/Code | +| `code_review` | AI 肄붾뱶 由щ럭 | Cowork/Code | +| `project_rules` | AX.md 媛쒕컻 吏€移?愿€由?| Cowork/Code | +| `git_tool` | Git ?묒뾽 | Code | +| `build_run` | 鍮뚮뱶/?뚯뒪???ㅽ뻾 | Code | +| `dev_env_detect` | 媛쒕컻 ?섍꼍 媛먯? | Code | +| `lsp` | LSP 肄붾뱶 ?명뀛由ъ쟾??| Code | +| `test_loop` | ?뚯뒪???먮룞 猷⑦봽 | Code | +| `spawn_agent` | ?쒕툕?먯씠?꾪듃 ?앹꽦 | Code | +| `wait_agents` | ?쒕툕?먯씠?꾪듃 寃곌낵 ?€湲?| Code | +| `skill_manager` | ?ㅽ궗 愿€由?(list/info/reload) | Cowork/Code | +| `memory` | ?먯씠?꾪듃 硫붾え由?愿€由?| Cowork/Code | +| `excel_create` | Excel ?앹꽦 | Cowork/Code | +| `docx_create` | Word ?앹꽦 | Cowork/Code | +| `csv_create` | CSV ?앹꽦 | Cowork/Code | +| `markdown_create` | 留덊겕?ㅼ슫 ?앹꽦 | Cowork/Code | +| `html_create` | HTML ?앹꽦 | Cowork/Code | +| `chart_create` | 李⑦듃 ?앹꽦 | Cowork/Code | +| `batch_create` | 諛곗튂 ?ㅽ겕由쏀듃 ?앹꽦 | Cowork/Code | +| `document_review` | 臾몄꽌 ?덉쭏 寃€利?| Cowork/Code | +| `format_convert` | ?щ㎎ 蹂€??| Cowork/Code | --- -## 버전 이력 +## 踰꾩쟾 ?대젰 -> **⚠ 버전 변경 시 반드시 아래 모든 항목을 동시에 수정하세요. 하나라도 빠지면 버전 불일치가 발생합니다.** +> **??踰꾩쟾 蹂€寃???諛섎뱶???꾨옒 紐⑤뱺 ??ぉ???숈떆???섏젙?섏꽭?? ?섎굹?쇰룄 鍮좎?硫?踰꾩쟾 遺덉씪移섍? 諛쒖깮?⑸땲??** > -> | # | 수정 대상 | 파일 경로 | 수정 내용 | +> | # | ?섏젙 ?€??| ?뚯씪 寃쎈줈 | ?섏젙 ?댁슜 | > |---|----------|----------|----------| -> | 1 | **프로젝트 버전** | `src/AxCopilot/AxCopilot.csproj` → `` | 버전 번호 변경 (설정 창·Windows 속성에 자동 반영) | -> | 2 | **인스톨러 프로젝트 버전** | `src/AxCopilot.Installer/AxCopilot.Installer.csproj` → `` | 인스톨러 어셈블리 버전 일치 | -> | 3 | **인스톨러 표시 버전** | `src/AxCopilot.Installer/SetupForm.cs` → `AppVer` 상수 | 설치 UI 헤더·레지스트리에 표시되는 버전 문자열 | -> | 4 | **개발 문서 버전 이력** | `docs/DEVELOPMENT.md` → 버전 이력 섹션 | 새 버전 항목 추가 (이 파일) | -> | 5 | **사용자 가이드 문서** | `src/AxCopilot/Assets/AX Copilot 사용가이드.htm` | 헤더 `version-tag` + 버전 이력 섹션에 새 항목 추가 | -> | 6 | **헬프 창 내용** | `src/AxCopilot/Views/HelpDetailWindow.xaml.cs` | `_overviewItems`의 신기능 항목·프리뷰 항목 갱신 | -> | 7 | **MCP 클라이언트 버전** | `src/AxCopilot/Services/McpClientService.cs` → `clientInfo.version` | MCP 프로토콜 클라이언트 버전 문자열 | -> | 8 | **로드맵 문서** | `docs/AGENT_ROADMAP.md`, `docs/AGENT_ROADMAP.html`, `docs/LAUNCHER_ROADMAP.md`, `docs/LAUNCHER_ROADMAP.html` | 푸터/헤더 버전 번호 갱신 | +> | 1 | **?꾨줈?앺듃 踰꾩쟾** | `src/AxCopilot/AxCopilot.csproj` ??`` | 踰꾩쟾 踰덊샇 蹂€寃?(?ㅼ젙 李승톆indows ?띿꽦???먮룞 諛섏쁺) | +> | 2 | **?몄뒪?⑤윭 ?꾨줈?앺듃 踰꾩쟾** | `src/AxCopilot.Installer/AxCopilot.Installer.csproj` ??`` | ?몄뒪?⑤윭 ?댁뀍釉붾━ 踰꾩쟾 ?쇱튂 | +> | 3 | **?몄뒪?⑤윭 ?쒖떆 踰꾩쟾** | `src/AxCopilot.Installer/SetupForm.cs` ??`AppVer` ?곸닔 | ?ㅼ튂 UI ?ㅻ뜑쨌?덉??ㅽ듃由ъ뿉 ?쒖떆?섎뒗 踰꾩쟾 臾몄옄??| +> | 4 | **媛쒕컻 臾몄꽌 踰꾩쟾 ?대젰** | `docs/DEVELOPMENT.md` ??踰꾩쟾 ?대젰 ?뱀뀡 | ??踰꾩쟾 ??ぉ 異붽? (???뚯씪) | +> | 5 | **?ъ슜??媛€?대뱶 臾몄꽌** | `src/AxCopilot/Assets/AX Copilot ?ъ슜媛€?대뱶.htm` | ?ㅻ뜑 `version-tag` + 踰꾩쟾 ?대젰 ?뱀뀡??????ぉ 異붽? | +> | 6 | **?ы봽 李??댁슜** | `src/AxCopilot/Views/HelpDetailWindow.xaml.cs` | `_overviewItems`???좉린????ぉ쨌?꾨━酉???ぉ 媛깆떊 | +> | 7 | **MCP ?대씪?댁뼵??踰꾩쟾** | `src/AxCopilot/Services/McpClientService.cs` ??`clientInfo.version` | MCP ?꾨줈?좎퐳 ?대씪?댁뼵??踰꾩쟾 臾몄옄??| +> | 8 | **濡쒕뱶留?臾몄꽌** | `docs/AGENT_ROADMAP.md`, `docs/AGENT_ROADMAP.html`, `docs/LAUNCHER_ROADMAP.md`, `docs/LAUNCHER_ROADMAP.html` | ?명꽣/?ㅻ뜑 踰꾩쟾 踰덊샇 媛깆떊 | > -> **인스톨러 주의**: `SetupForm.cs`의 `AppVer` 상수는 설치 UI 헤더 표시 + `RegAdd()`에서 -> 레지스트리 `DisplayVersion`에 기록됩니다. 이 값이 앱 본체와 다르면 업그레이드 감지가 오작동합니다. -> **반드시 앱 본체 csproj ``과 동일하게 유지하세요.** +> **?몄뒪?⑤윭 二쇱쓽**: `SetupForm.cs`??`AppVer` ?곸닔???ㅼ튂 UI ?ㅻ뜑 ?쒖떆 + `RegAdd()`?먯꽌 +> ?덉??ㅽ듃由?`DisplayVersion`??湲곕줉?⑸땲?? ??媛믪씠 ??蹂몄껜?€ ?ㅻⅤ硫??낃렇?덉씠??媛먯?媛€ ?ㅼ옉?숉빀?덈떎. +> **諛섎뱶????蹂몄껜 csproj ``怨??숈씪?섍쾶 ?좎??섏꽭??** > -> 설정 창(`SettingsWindow.xaml.cs → SetVersionText()`)과 정보 창(`AboutWindow.xaml.cs`)은 -> 앱 본체 csproj ``을 리플렉션으로 읽으므로 별도 수정 불필요합니다. +> ?ㅼ젙 李?`SettingsWindow.xaml.cs ??SetVersionText()`)怨??뺣낫 李?`AboutWindow.xaml.cs`)?€ +> ??蹂몄껜 csproj ``??由ы뵆?됱뀡?쇰줈 ?쎌쑝誘€濡?蹂꾨룄 ?섏젙 遺덊븘?뷀빀?덈떎. -> **⚠ 사용자 노출 문서 작성 원칙 (사용자 가이드 · 헬프 창)** +> **???ъ슜???몄텧 臾몄꽌 ?묒꽦 ?먯튃 (?ъ슜??媛€?대뱶 쨌 ?ы봽 李?** > -> 사용자 가이드(`AX Copilot 사용가이드.htm`)와 헬프 창(`HelpDetailWindow.xaml.cs`)은 -> **사용자가 직접 보는 문서**입니다. 외부에 내부 기술 스택이 노출되지 않도록 아래 원칙을 반드시 준수하세요. +> ?ъ슜??媛€?대뱶(`AX Copilot ?ъ슜媛€?대뱶.htm`)?€ ?ы봽 李?`HelpDetailWindow.xaml.cs`)?€ +> **?ъ슜?먭? 吏곸젒 蹂대뒗 臾몄꽌**?낅땲?? ?몃????대? 湲곗닠 ?ㅽ깮???몄텧?섏? ?딅룄濡??꾨옒 ?먯튃??諛섎뱶??以€?섑븯?몄슂. > -> | 구분 | 사용 금지 (내부 기술) | 대신 사용 (사용자 관점) | +> | 援щ텇 | ?ъ슜 湲덉? (?대? 湲곗닠) | ?€???ъ슜 (?ъ슜??愿€?? | > |------|---------------------|----------------------| -> | 프로토콜/라이브러리 | MCP, JSON-RPC, stdio, P/Invoke, DPAPI, LCS, REST API | "외부 도구 연결", "암호화 저장" | -> | 클래스/서비스명 | McpClientService, TokenEstimator, AuditLogService, DiffService | 기능 설명으로 대체 | -> | 내부 구조 | ParentId/BranchLabel, FallbackModels, SettingsViewModel | "대화 분기", "자동 전환", "설정" | -> | 코드 패턴 | CJK 가중치, 동적 반복 한도, SWE-bench, 다단계 반성 | "더 정확한 분석", "AI 성능 개선" | -> | 파일명/경로 | english.json, movies.json, SetupForm.cs, endpoint/apiKey | 언급하지 않음 | +> | ?꾨줈?좎퐳/?쇱씠釉뚮윭由?| MCP, JSON-RPC, stdio, P/Invoke, DPAPI, LCS, REST API | "?몃? ?꾧뎄 ?곌껐", "?뷀샇???€?? | +> | ?대옒???쒕퉬?ㅻ챸 | McpClientService, TokenEstimator, AuditLogService, DiffService | 湲곕뒫 ?ㅻ챸?쇰줈 ?€泥?| +> | ?대? 援ъ“ | ParentId/BranchLabel, FallbackModels, SettingsViewModel | "?€??遺꾧린", "?먮룞 ?꾪솚", "?ㅼ젙" | +> | 肄붾뱶 ?⑦꽩 | CJK 媛€以묒튂, ?숈쟻 諛섎났 ?쒕룄, SWE-bench, ?ㅻ떒怨?諛섏꽦 | "???뺥솗??遺꾩꽍", "AI ?깅뒫 媛쒖꽑" | +> | ?뚯씪紐?寃쎈줈 | english.json, movies.json, SetupForm.cs, endpoint/apiKey | ?멸툒?섏? ?딆쓬 | > -> **원칙**: 사용자에게는 "무엇을 할 수 있는지"만 전달합니다. -> "어떻게 구현했는지"는 이 개발 문서(`DEVELOPMENT.md`)에만 기록합니다. +> **?먯튃**: ?ъ슜?먯뿉寃뚮뒗 "臾댁뾿???????덈뒗吏€"留??꾨떖?⑸땲?? +> "?대뼸寃?援ы쁽?덈뒗吏€"????媛쒕컻 臾몄꽌(`DEVELOPMENT.md`)?먮쭔 湲곕줉?⑸땲?? > -> **적용 대상**: 버전 이력, 신기능 설명, 개요 항목, 모든 사용자 노출 텍스트 +> **?곸슜 ?€??*: 踰꾩쟾 ?대젰, ?좉린???ㅻ챸, 媛쒖슂 ??ぉ, 紐⑤뱺 ?ъ슜???몄텧 ?띿뒪?? ### v0.8.0 -> **개발 범위**: 에이전트 인프라 전면 고도화 — Phase 17-UI, 17-A~G, 18-A~C, L3 완료. 사내/사외 네트워크 모드 추가. +> **媛쒕컻 踰붿쐞**: ?먯씠?꾪듃 ?명봽???꾨㈃ 怨좊룄????Phase 17-UI, 17-A~G, 18-A~C, L3 ?꾨즺. ?щ궡/?ъ쇅 ?ㅽ듃?뚰겕 紐⑤뱶 異붽?. -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **에이전트 채팅 화면 개편 (Phase 17-UI)** | 채팅 창 서브 바에 Plan 모드 3상태 토글 (Off / Auto / Always) 추가. 클릭 시 순환 전환, 활성 상태 색상 강조. `LlmSettings.PlanMode` 설정 연동 | -| **Reflexion 강화 (Phase 17-A)** | `ReflexionService` 확장: 자기 평가 → 전략 수정 루프 구현. 도구 실행 실패 시 반성 기반 재시도 전략 자동 선택 | -| **구조화된 이벤트 로그 (Phase 17-B)** | `AgentEventLog` JSONL 기록 시스템. `AgentLoopService`에 세션 ID 생성 + SessionStart / ToolRequest / ToolResult / SessionEnd 이벤트 기록 통합 | -| **훅 시스템 고도화 (Phase 17-C)** | `ExtendedHookRunner`: PreCompact / UserPromptSubmit / AgentThinking 훅 이벤트 추가. `asyncRewake` 속성으로 비동기 훅 완료 후 에이전트 재개 가능 | -| **스킬 시스템 고도화 (Phase 17-D)** | `PathBasedSkillActivator`: 경로 패턴 기반 스킬 자동 활성화. `SkillExtensionStore` 사이드카 패턴으로 스킬 확장 메타데이터 관리 | -| **메모리/컨텍스트 고도화 (Phase 17-E)** | `ContextCondenser` 경로 규칙 연동. `PathScopedRuleInjector`로 작업 폴더에 따른 규칙 자동 주입. `@include` 지시문 처리 | -| **권한 시스템 고도화 (Phase 17-F)** | `PermissionSystem` Chain of Responsibility 패턴. Allow/Deny 규칙 설정 UI 연동. acceptEdits 모드에서 파일 편집 도구 자동 승인 | -| **멀티파일 Diff + 자동 컨텍스트 (Phase 17-G)** | `MultiFileDiffViewModel`: 파일별 diff 추적 + 일괄 수락. `AutoContextCollector`: `@파일명` 멘션 정규식 파싱 + 자동 파일 내용 주입. `ToolRiskMapper`: 도구별 Low/Medium/High 위험도 분류 | -| **멀티에이전트 팀 (Phase 18-A)** | `DelegateAgentTool` + `BackgroundAgentService` + `WorktreeManager`. `AgentLoopService`에 `RunSubAgentAsync` 위임 연결. ToolRegistry에 자동 등록 | -| **에이전트 리플레이 (Phase 18-B)** | `AgentReplayService`: JSONL 이벤트 로그 파일 열거 + 단계별 재생. `ReplayTimelineViewModel`: 재생 UI 바인딩 ViewModel | -| **플러그인 설치 서비스 (Phase 18-C)** | `PluginInstallService`: 로컬 zip 파일 기반 설치 (URL 다운로드 없음). `PluginManifest` / `InstalledPlugin` / `PluginInstallResult` 레코드. 레지스트리 JSONL 영속화 | -| **사내/사외 네트워크 모드** | `AppSettings.InternalModeEnabled` (기본: 사내 모드). 사외 전환 시 비밀번호 `axgo123!` 인증 필요. `WebSearchHandler` + `HttpTool` 에서 모드 체크 적용 | -| **알림 센터 (L3-7)** | `NotificationCenterService`: 알림 타입(Info/Success/Warning/Error) + 히스토리 큐(최대 50건). `NotificationRaised` 이벤트로 UI 구독 지원. 기존 `NotificationService` 트레이 BalloonTip 위임 | -| **플러그인 갤러리 ViewModel (L3-1)** | `PluginGalleryViewModel`: 설치된 플러그인 목록 + 설치/제거/활성화 커맨드 바인딩. `PluginItemViewModel` 래퍼 | -| **파라미터 퀵링크 (L3-4)** | `QuickLinkHandler` (`ql` 프리픽스) + `UrlTemplateEngine`. `{0}`, `{query}` 플레이스홀더 치환. 설정에서 `QuickLinkEntry` 목록 관리 | -| **AI 스니펫 (L3-3)** | `AiSnippetHandler` (`ai` 프리픽스) + `SnippetTemplateService`. 업무 이메일/요약/번역/코드리뷰/커밋 기본 템플릿 5종 내장. LLM 호출 후 클립보드 복사. AI 비활성화 시 항목 미표시 | -| **웹 검색 AI 요약 (L3-2)** | `WebSearchSummaryHandler` (`?!` 프리픽스) + `ContentExtractor`. URL 또는 검색어 입력 시 AI가 요약 생성 후 클립보드 복사. 사외 모드 + AI 활성화 상태에서만 동작 | +| **?먯씠?꾪듃 梨꾪똿 ?붾㈃ 媛쒗렪 (Phase 17-UI)** | 梨꾪똿 李??쒕툕 諛붿뿉 Plan 紐⑤뱶 3?곹깭 ?좉? (Off / Auto / Always) 異붽?. ?대┃ ???쒗솚 ?꾪솚, ?쒖꽦 ?곹깭 ?됱긽 媛뺤“. `LlmSettings.PlanMode` ?ㅼ젙 ?곕룞 | +| **Reflexion 媛뺥솕 (Phase 17-A)** | `ReflexionService` ?뺤옣: ?먭린 ?됯? ???꾨왂 ?섏젙 猷⑦봽 援ы쁽. ?꾧뎄 ?ㅽ뻾 ?ㅽ뙣 ??諛섏꽦 湲곕컲 ?ъ떆???꾨왂 ?먮룞 ?좏깮 | +| **援ъ“?붾맂 ?대깽??濡쒓렇 (Phase 17-B)** | `AgentEventLog` JSONL 湲곕줉 ?쒖뒪?? `AgentLoopService`???몄뀡 ID ?앹꽦 + SessionStart / ToolRequest / ToolResult / SessionEnd ?대깽??湲곕줉 ?듯빀 | +| **???쒖뒪??怨좊룄??(Phase 17-C)** | `ExtendedHookRunner`: PreCompact / UserPromptSubmit / AgentThinking ???대깽??異붽?. `asyncRewake` ?띿꽦?쇰줈 鍮꾨룞湲????꾨즺 ???먯씠?꾪듃 ?ш컻 媛€??| +| **?ㅽ궗 ?쒖뒪??怨좊룄??(Phase 17-D)** | `PathBasedSkillActivator`: 寃쎈줈 ?⑦꽩 湲곕컲 ?ㅽ궗 ?먮룞 ?쒖꽦?? `SkillExtensionStore` ?ъ씠?쒖뭅 ?⑦꽩?쇰줈 ?ㅽ궗 ?뺤옣 硫뷀??곗씠??愿€由?| +| **硫붾え由?而⑦뀓?ㅽ듃 怨좊룄??(Phase 17-E)** | `ContextCondenser` 寃쎈줈 洹쒖튃 ?곕룞. `PathScopedRuleInjector`濡??묒뾽 ?대뜑???곕Ⅸ 洹쒖튃 ?먮룞 二쇱엯. `@include` 吏€?쒕Ц 泥섎━ | +| **沅뚰븳 ?쒖뒪??怨좊룄??(Phase 17-F)** | `PermissionSystem` Chain of Responsibility ?⑦꽩. Allow/Deny 洹쒖튃 ?ㅼ젙 UI ?곕룞. acceptEdits 紐⑤뱶?먯꽌 ?뚯씪 ?몄쭛 ?꾧뎄 ?먮룞 ?뱀씤 | +| **硫€?고뙆??Diff + ?먮룞 而⑦뀓?ㅽ듃 (Phase 17-G)** | `MultiFileDiffViewModel`: ?뚯씪蹂?diff 異붿쟻 + ?쇨큵 ?섎씫. `AutoContextCollector`: `@?뚯씪紐? 硫섏뀡 ?뺢퇋???뚯떛 + ?먮룞 ?뚯씪 ?댁슜 二쇱엯. `ToolRiskMapper`: ?꾧뎄蹂?Low/Medium/High ?꾪뿕??遺꾨쪟 | +| **硫€?곗뿉?댁쟾???€ (Phase 18-A)** | `DelegateAgentTool` + `BackgroundAgentService` + `WorktreeManager`. `AgentLoopService`??`RunSubAgentAsync` ?꾩엫 ?곌껐. ToolRegistry???먮룞 ?깅줉 | +| **?먯씠?꾪듃 由ы뵆?덉씠 (Phase 18-B)** | `AgentReplayService`: JSONL ?대깽??濡쒓렇 ?뚯씪 ?닿굅 + ?④퀎蹂??ъ깮. `ReplayTimelineViewModel`: ?ъ깮 UI 諛붿씤??ViewModel | +| **?뚮윭洹몄씤 ?ㅼ튂 ?쒕퉬??(Phase 18-C)** | `PluginInstallService`: 濡쒖뺄 zip ?뚯씪 湲곕컲 ?ㅼ튂 (URL ?ㅼ슫濡쒕뱶 ?놁쓬). `PluginManifest` / `InstalledPlugin` / `PluginInstallResult` ?덉퐫?? ?덉??ㅽ듃由?JSONL ?곸냽??| +| **?щ궡/?ъ쇅 ?ㅽ듃?뚰겕 紐⑤뱶** | `AppSettings.InternalModeEnabled` (湲곕낯: ?щ궡 紐⑤뱶). ?ъ쇅 ?꾪솚 ??鍮꾨?踰덊샇 `axgo123!` ?몄쬆 ?꾩슂. `WebSearchHandler` + `HttpTool` ?먯꽌 紐⑤뱶 泥댄겕 ?곸슜 | +| **?뚮┝ ?쇳꽣 (L3-7)** | `NotificationCenterService`: ?뚮┝ ?€??Info/Success/Warning/Error) + ?덉뒪?좊━ ??理쒕? 50嫄?. `NotificationRaised` ?대깽?몃줈 UI 援щ룆 吏€?? 湲곗〈 `NotificationService` ?몃젅??BalloonTip ?꾩엫 | +| **?뚮윭洹몄씤 媛ㅻ윭由?ViewModel (L3-1)** | `PluginGalleryViewModel`: ?ㅼ튂???뚮윭洹몄씤 紐⑸줉 + ?ㅼ튂/?쒓굅/?쒖꽦??而ㅻ㎤??諛붿씤?? `PluginItemViewModel` ?섑띁 | +| **?뚮씪誘명꽣 ?듬쭅??(L3-4)** | `QuickLinkHandler` (`ql` ?꾨━?쎌뒪) + `UrlTemplateEngine`. `{0}`, `{query}` ?뚮젅?댁뒪?€??移섑솚. ?ㅼ젙?먯꽌 `QuickLinkEntry` 紐⑸줉 愿€由?| +| **AI ?ㅻ땲??(L3-3)** | `AiSnippetHandler` (`ai` ?꾨━?쎌뒪) + `SnippetTemplateService`. ?낅Т ?대찓???붿빟/踰덉뿭/肄붾뱶由щ럭/而ㅻ컠 湲곕낯 ?쒗뵆由?5醫??댁옣. LLM ?몄텧 ???대┰蹂대뱶 蹂듭궗. AI 鍮꾪솢?깊솕 ????ぉ 誘명몴??| +| **??寃€??AI ?붿빟 (L3-2)** | `WebSearchSummaryHandler` (`?!` ?꾨━?쎌뒪) + `ContentExtractor`. URL ?먮뒗 寃€?됱뼱 ?낅젰 ??AI媛€ ?붿빟 ?앹꽦 ???대┰蹂대뱶 蹂듭궗. ?ъ쇅 紐⑤뱶 + AI ?쒖꽦???곹깭?먯꽌留??숈옉 | ### v0.7.3 -> **개발 범위**: AX Agent 권한 코어 재구성 + slash 입력 계층 분리 + 설정/상태 표현 정리 +> **媛쒕컻 踰붿쐞**: AX Agent 沅뚰븳 肄붿뼱 ?ш뎄??+ slash ?낅젰 怨꾩링 遺꾨━ + ?ㅼ젙/?곹깭 ?쒗쁽 ?뺣━ -업데이트: 2026-04-04 10:49 (KST) +?낅뜲?댄듃: 2026-04-04 10:49 (KST) -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **권한 모드 정규화** | `Default`, `AcceptEdits`, `Plan`, `BypassPermissions`, `DontAsk`, `Deny`를 정식 권한 모드로 도입하고, 기존 `Ask`, `Auto`는 호환 alias로 유지 | -| **권한 판정 체인 재구성** | 권한 해석 순서를 `deny 패턴 규칙 → allow/override 규칙 → 글로벌 모드 → 기본 Ask` 순서로 재정리하여 `claude-code` 수준의 정책 해석 흐름에 맞춤 | -| **도구 권한 클래스 분리** | `file_write/file_edit/file_manage`와 `process/build_run/test_loop/snippet_runner/spawn_agent`를 별도 권한 클래스로 분리해 `AcceptEdits`는 파일 편집 자동 허용, `Plan`은 쓰기 차단으로 동작하도록 보강 | -| **AX Agent 권한 UI 반영** | 권한 팝업, 상단 배너, slash 명령 응답, 상태 요약에 새 권한 명칭과 설명을 반영하고, 도구별 override 요약이 현재 모드와 함께 보이도록 정리 | -| **AX Agent 설정창 문자열 복구** | `AgentSettingsWindow`를 전면 정리해 깨진 한글 문자열을 복구하고, 운영 모드/계획 모드/추론 강도/폴더 데이터 활용을 현재 AX 용어로 표시하도록 수정 | -| **권한 용어 및 상태 표현 통일** | `Plan`, `Bypass`, `DontAsk`처럼 영문으로 남아 있던 권한 표현을 `계획 중심`, `완전 자동`, `질문 없이 진행`으로 정리하고 인라인 설정 패널 문구도 함께 통일 | -| **권한 UI·실행 로직 결합 정리** | 권한 팝업을 `권한 요청/편집 자동 승인/계획 모드/권한 건너뛰기` 중심 리스트로 재구성하고, `BtnPermissionMode` 및 인라인 `NextPermission` 순환 로직도 같은 4단계 축으로 단순화 | -| **슬래시 팔레트 UI 정리** | `/` 입력 시 첫 항목을 기본 선택하도록 조정하고, 항목 우측 즐겨찾기 버튼/유형 배지를 제거해 `아이콘+명령+설명` 중심의 단순 리스트 탐색 구조로 정리 | -| **하단 컴포저 패널 단순화** | 인라인 설정 빠른 버튼을 `Fast/추론/계획/권한` 중심으로 줄이고 부가 버튼(스킬/명령 브라우저/MCP)을 숨겨 입력 흐름을 방해하지 않도록 정리 | -| **모델/프리셋 상단 바 컴팩트화** | 입력창 상단 모델/프리셋 버튼의 높이와 패딩을 줄이고, 모델명이 길 때 자동 말줄임(`…`) 처리해 입력창 폭이 좁아도 상단 바가 깨지지 않도록 보강 | -| **좌측 사이드바 밀도 정리** | 사이드바 헤더/검색/메뉴/대화 리스트의 간격과 글자 크기를 재조정하고, 대화 카드의 제목/시간/상태 배지 크기를 낮춰 `claw-code`형 컴팩트 밀도에 맞춤 | -| **메시지 버블 레이아웃 정리** | 사용자/어시스턴트 버블의 패딩·폰트·타임스탬프 크기와 좌우 마진을 조정해 대화 영역을 더 촘촘하게 정리하고, 액션 버튼 크기도 줄여 시각적 잡음을 완화 | -| **에이전트 이벤트 배너 표시방식 정리** | 실행 이벤트 배너의 카드 밀도(패딩/마진/폰트)를 줄이고, ToolCall/ToolResult 긴 요약은 자동 절단해 펼침 토글 없이 읽히도록 정리. 권한/계획/결정 배지 라벨도 한국어로 통일 | -| **도구 결과 카드 시각 단순화** | 파일 경로 배너를 파일명 중심 2단 표기(파일명/디렉터리)로 바꾸고, 빠른 작업 버튼을 텍스트 라벨 대신 아이콘 전용으로 축소해 이벤트 카드 본문 가독성을 개선 | -| **Slash palette 상태 분리 시작** | `ChatWindow` 내부에 퍼져 있던 slash 선택 상태를 `SlashPaletteState`로 분리해 이후 Codex/Claude형 composer 개편의 기반을 마련 | -| **설정/상태 연동** | `AppSettings`, `AppStateService`, `AgentSettingsWindow`, `ChatWindow`가 동일 권한 체계를 참조하도록 정리하고 대화별 권한 상태 저장 흐름을 유지 | -| **런처 이미지 미리보기 창 (Phase L2-3)** | `ClipboardImagePreviewWindow` 신규 추가. 원본 해상도 이미지 표시, `Ctrl+휠`/`+`/`-`/`0`/`F`/`Esc` 단축키, PNG·JPEG·BMP 저장, 클립보드 복사, `#` 이미지 항목 `Shift+Enter` 연결, 단축키 도움말 갱신 | -| **검증** | `dotnet build` 경고 0 / 오류 0, `dotnet test` 436 passed / 0 failed 확인 | +| **沅뚰븳 紐⑤뱶 ?뺢퇋??* | `Default`, `AcceptEdits`, `Plan`, `BypassPermissions`, `DontAsk`, `Deny`瑜??뺤떇 沅뚰븳 紐⑤뱶濡??꾩엯?섍퀬, 湲곗〈 `Ask`, `Auto`???명솚 alias濡??좎? | +| **沅뚰븳 ?먯젙 泥댁씤 ?ш뎄??* | 沅뚰븳 ?댁꽍 ?쒖꽌瑜?`deny ?⑦꽩 洹쒖튃 ??allow/override 洹쒖튃 ??湲€濡쒕쾶 紐⑤뱶 ??湲곕낯 Ask` ?쒖꽌濡??ъ젙由ы븯??`claude-code` ?섏????뺤콉 ?댁꽍 ?먮쫫??留욎땄 | +| **?꾧뎄 沅뚰븳 ?대옒??遺꾨━** | `file_write/file_edit/file_manage`?€ `process/build_run/test_loop/snippet_runner/spawn_agent`瑜?蹂꾨룄 沅뚰븳 ?대옒?ㅻ줈 遺꾨━??`AcceptEdits`???뚯씪 ?몄쭛 ?먮룞 ?덉슜, `Plan`?€ ?곌린 李⑤떒?쇰줈 ?숈옉?섎룄濡?蹂닿컯 | +| **AX Agent 沅뚰븳 UI 諛섏쁺** | 沅뚰븳 ?앹뾽, ?곷떒 諛곕꼫, slash 紐낅졊 ?묐떟, ?곹깭 ?붿빟????沅뚰븳 紐낆묶怨??ㅻ챸??諛섏쁺?섍퀬, ?꾧뎄蹂?override ?붿빟???꾩옱 紐⑤뱶?€ ?④퍡 蹂댁씠?꾨줉 ?뺣━ | +| **AX Agent ?ㅼ젙李?臾몄옄??蹂듦뎄** | `AgentSettingsWindow`瑜??꾨㈃ ?뺣━??源⑥쭊 ?쒓? 臾몄옄?댁쓣 蹂듦뎄?섍퀬, ?댁쁺 紐⑤뱶/怨꾪쉷 紐⑤뱶/異붾줎 媛뺣룄/?대뜑 ?곗씠???쒖슜???꾩옱 AX ?⑹뼱濡??쒖떆?섎룄濡??섏젙 | +| **沅뚰븳 ?⑹뼱 諛??곹깭 ?쒗쁽 ?듭씪** | `Plan`, `Bypass`, `DontAsk`泥섎읆 ?곷Ц?쇰줈 ?⑥븘 ?덈뜕 沅뚰븳 ?쒗쁽??`怨꾪쉷 以묒떖`, `?꾩쟾 ?먮룞`, `吏덈Ц ?놁씠 吏꾪뻾`?쇰줈 ?뺣━?섍퀬 ?몃씪???ㅼ젙 ?⑤꼸 臾멸뎄???④퍡 ?듭씪 | +| **沅뚰븳 UI쨌?ㅽ뻾 濡쒖쭅 寃고빀 ?뺣━** | 沅뚰븳 ?앹뾽??`沅뚰븳 ?붿껌/?몄쭛 ?먮룞 ?뱀씤/怨꾪쉷 紐⑤뱶/沅뚰븳 嫄대꼫?곌린` 以묒떖 由ъ뒪?몃줈 ?ш뎄?깊븯怨? `BtnPermissionMode` 諛??몃씪??`NextPermission` ?쒗솚 濡쒖쭅??媛숈? 4?④퀎 異뺤쑝濡??⑥닚??| +| **?щ옒???붾젅??UI ?뺣━** | `/` ?낅젰 ??泥???ぉ??湲곕낯 ?좏깮?섎룄濡?議곗젙?섍퀬, ??ぉ ?곗륫 利먭꺼李얘린 踰꾪듉/?좏삎 諛곗?瑜??쒓굅??`?꾩씠肄?紐낅졊+?ㅻ챸` 以묒떖???⑥닚 由ъ뒪???먯깋 援ъ“濡??뺣━ | +| **?섎떒 而댄룷?€ ?⑤꼸 ?⑥닚??* | ?몃씪???ㅼ젙 鍮좊Ⅸ 踰꾪듉??`Fast/異붾줎/怨꾪쉷/沅뚰븳` 以묒떖?쇰줈 以꾩씠怨?遺€媛€ 踰꾪듉(?ㅽ궗/紐낅졊 釉뚮씪?곗?/MCP)???④꺼 ?낅젰 ?먮쫫??諛⑺빐?섏? ?딅룄濡??뺣━ | +| **紐⑤뜽/?꾨━???곷떒 諛?而댄뙥?명솕** | ?낅젰李??곷떒 紐⑤뜽/?꾨━??踰꾪듉???믪씠?€ ?⑤뵫??以꾩씠怨? 紐⑤뜽紐낆씠 湲????먮룞 留먯쨪??`??) 泥섎━???낅젰李???씠 醫곸븘???곷떒 諛붽? 源⑥?吏€ ?딅룄濡?蹂닿컯 | +| **醫뚯륫 ?ъ씠?쒕컮 諛€???뺣━** | ?ъ씠?쒕컮 ?ㅻ뜑/寃€??硫붾돱/?€??由ъ뒪?몄쓽 媛꾧꺽怨?湲€???ш린瑜??ъ“?뺥븯怨? ?€??移대뱶???쒕ぉ/?쒓컙/?곹깭 諛곗? ?ш린瑜???떠 `claw-code`??而댄뙥??諛€?꾩뿉 留욎땄 | +| **硫붿떆吏€ 踰꾨툝 ?덉씠?꾩썐 ?뺣━** | ?ъ슜???댁떆?ㅽ꽩??踰꾨툝???⑤뵫쨌?고듃쨌?€?꾩뒪?ы봽 ?ш린?€ 醫뚯슦 留덉쭊??議곗젙???€???곸뿭????珥섏킌?섍쾶 ?뺣━?섍퀬, ?≪뀡 踰꾪듉 ?ш린??以꾩뿬 ?쒓컖???≪쓬???꾪솕 | +| **?먯씠?꾪듃 ?대깽??諛곕꼫 ?쒖떆諛⑹떇 ?뺣━** | ?ㅽ뻾 ?대깽??諛곕꼫??移대뱶 諛€???⑤뵫/留덉쭊/?고듃)瑜?以꾩씠怨? ToolCall/ToolResult 湲??붿빟?€ ?먮룞 ?덈떒???쇱묠 ?좉? ?놁씠 ?쏀엳?꾨줉 ?뺣━. 沅뚰븳/怨꾪쉷/寃곗젙 諛곗? ?쇰꺼???쒓뎅?대줈 ?듭씪 | +| **?꾧뎄 寃곌낵 移대뱶 ?쒓컖 ?⑥닚??* | ?뚯씪 寃쎈줈 諛곕꼫瑜??뚯씪紐?以묒떖 2???쒓린(?뚯씪紐??붾젆?곕━)濡?諛붽씀怨? 鍮좊Ⅸ ?묒뾽 踰꾪듉???띿뒪???쇰꺼 ?€???꾩씠肄??꾩슜?쇰줈 異뺤냼???대깽??移대뱶 蹂몃Ц 媛€?낆꽦??媛쒖꽑 | +| **Slash palette ?곹깭 遺꾨━ ?쒖옉** | `ChatWindow` ?대????쇱졇 ?덈뜕 slash ?좏깮 ?곹깭瑜?`SlashPaletteState`濡?遺꾨━???댄썑 Codex/Claude??composer 媛쒗렪??湲곕컲??留덈젴 | +| **?ㅼ젙/?곹깭 ?곕룞** | `AppSettings`, `AppStateService`, `AgentSettingsWindow`, `ChatWindow`媛€ ?숈씪 沅뚰븳 泥닿퀎瑜?李몄“?섎룄濡??뺣━?섍퀬 ?€?붾퀎 沅뚰븳 ?곹깭 ?€???먮쫫???좎? | +| **?곗쿂 ?대?吏€ 誘몃━蹂닿린 李?(Phase L2-3)** | `ClipboardImagePreviewWindow` ?좉퇋 異붽?. ?먮낯 ?댁긽???대?吏€ ?쒖떆, `Ctrl+??/`+`/`-`/`0`/`F`/`Esc` ?⑥텞?? PNG쨌JPEG쨌BMP ?€?? ?대┰蹂대뱶 蹂듭궗, `#` ?대?吏€ ??ぉ `Shift+Enter` ?곌껐, ?⑥텞???꾩?留?媛깆떊 | +| **寃€利?* | `dotnet build` 寃쎄퀬 0 / ?ㅻ쪟 0, `dotnet test` 436 passed / 0 failed ?뺤씤 | ### v0.7.2 -> **개발 범위**: 안정화 릴리즈 — 런처 속도, 에이전트 컨텍스트 압축, 대화 복원, 버그 수정 11건 +> **媛쒕컻 踰붿쐞**: ?덉젙??由대━利????곗쿂 ?띾룄, ?먯씠?꾪듃 而⑦뀓?ㅽ듃 ?뺤텞, ?€??蹂듭썝, 踰꾧렇 ?섏젙 11嫄? -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **컨텍스트 압축 (Context Condenser)** | 2단계 자동 압축 구현. 1단계: 오래된 도구 결과를 LLM 호출 없이 1500자로 축약. 2단계: 이전 대화를 LLM으로 요약하여 교체. 모델별 토큰 한도 자동 인식 (Claude 180K, Gemini 900K, GPT-4 120K, Ollama 16K). 65% 임계값에서 압축 시작 | -| **대화 이력 복원** | 앱 재시작 시 탭별 마지막 대화를 자동 복원. `LastConversationIds` 설정에 탭↔대화 ID 매핑 저장. 종료·탭 전환 시 자동 영속화 | -| **런처 속도 개선** | 핫키 응답 ~230ms 절감. `Thread.Sleep` 단축 (200→110ms), 애니메이션 최적화 (fade 160→100ms, slide 200→120ms). 텍스트 미사용 시 즉시 런처 표시 | -| **검증 리팩터링** | 도구 실행 후 검증을 읽기 전용(`file_read`, `directory_list`)으로 제한. 검증 결과를 보고만 하고 직접 수정하지 않도록 변경 — 문서 품질 저하 방지 | -| **설정 비밀번호 수정** | 개발자 모드·스텝바이스텝 토글이 설정 창 열 때마다 비밀번호 재입력을 요구하던 문제 수정. `IsLoaded` 가드 추가 | -| **계획 버튼 동기화** | PlanViewerWindow에서 승인 후 대화창 인라인 승인/취소 버튼이 자동 축소되지 않던 문제 수정. `TCS.ContinueWith` 콜백 추가 | -| **야간 시간 수정** | PC 미종료 상태에서 자정 넘길 때 근무 시간이 전날부터 누적되던 문제 수정. `_sessionStart`를 자정(DateTime.Today)으로 리셋 | -| **클립보드 붙여넣기 수정** | 이전 활성 창에 `SetForegroundWindow` 호출 후 `Ctrl+V` 전송하도록 변경 — 런처가 포커스를 뺏는 문제 해결 | -| **활성 창 캡처 수정** | 런처가 완전히 숨겨질 때까지 대기 + 대상 창에 `SetForegroundWindow` 호출 — 런처 자체가 캡처되던 문제 해결 | -| **스크롤 캡처 수정** | `FindOverlap` 다중 행 비교로 오버랩 감지 정확도 향상. `StitchFrames`를 증분 스티칭으로 변경 — 전체 프레임 중복 붙여넣기 문제 해결 | -| **런처 잔여 결과 제거** | `OnShown()`에서 `Results.Clear()` 호출 추가 — 런처 재표시 시 이전 검색 결과가 순간적으로 보이던 문제 해결 | -| **AI 모델 호환성 가이드** | 개발자 가이드에 도구 사용(Function Calling) 지원 모델 표 추가. 클라우드(Claude/Gemini) + Ollama 로컬 모델 15종 호환성 명시. 사내 환경 추천 조합 포함 | +| **而⑦뀓?ㅽ듃 ?뺤텞 (Context Condenser)** | 2?④퀎 ?먮룞 ?뺤텞 援ы쁽. 1?④퀎: ?ㅻ옒???꾧뎄 寃곌낵瑜?LLM ?몄텧 ?놁씠 1500?먮줈 異뺤빟. 2?④퀎: ?댁쟾 ?€?붾? LLM?쇰줈 ?붿빟?섏뿬 援먯껜. 紐⑤뜽蹂??좏겙 ?쒕룄 ?먮룞 ?몄떇 (Claude 180K, Gemini 900K, GPT-4 120K, Ollama 16K). 65% ?꾧퀎媛믪뿉???뺤텞 ?쒖옉 | +| **?€???대젰 蹂듭썝** | ???ъ떆??????퀎 留덉?留??€?붾? ?먮룞 蹂듭썝. `LastConversationIds` ?ㅼ젙????넄?€??ID 留ㅽ븨 ?€?? 醫낅즺쨌???꾪솚 ???먮룞 ?곸냽??| +| **?곗쿂 ?띾룄 媛쒖꽑** | ?ロ궎 ?묐떟 ~230ms ?덇컧. `Thread.Sleep` ?⑥텞 (200??10ms), ?좊땲硫붿씠??理쒖쟻??(fade 160??00ms, slide 200??20ms). ?띿뒪??誘몄궗????利됱떆 ?곗쿂 ?쒖떆 | +| **寃€利?由ы뙥?곕쭅** | ?꾧뎄 ?ㅽ뻾 ??寃€利앹쓣 ?쎄린 ?꾩슜(`file_read`, `directory_list`)?쇰줈 ?쒗븳. 寃€利?寃곌낵瑜?蹂닿퀬留??섍퀬 吏곸젒 ?섏젙?섏? ?딅룄濡?蹂€寃???臾몄꽌 ?덉쭏 ?€??諛⑹? | +| **?ㅼ젙 鍮꾨?踰덊샇 ?섏젙** | 媛쒕컻??紐⑤뱶쨌?ㅽ뀦諛붿씠?ㅽ뀦 ?좉????ㅼ젙 李????뚮쭏??鍮꾨?踰덊샇 ?ъ엯?μ쓣 ?붽뎄?섎뜕 臾몄젣 ?섏젙. `IsLoaded` 媛€??異붽? | +| **怨꾪쉷 踰꾪듉 ?숆린??* | PlanViewerWindow?먯꽌 ?뱀씤 ???€?붿갹 ?몃씪???뱀씤/痍⑥냼 踰꾪듉???먮룞 異뺤냼?섏? ?딅뜕 臾몄젣 ?섏젙. `TCS.ContinueWith` 肄쒕갚 異붽? | +| **?쇨컙 ?쒓컙 ?섏젙** | PC 誘몄쥌猷??곹깭?먯꽌 ?먯젙 ?섍만 ??洹쇰Т ?쒓컙???꾨궇遺€???꾩쟻?섎뜕 臾몄젣 ?섏젙. `_sessionStart`瑜??먯젙(DateTime.Today)?쇰줈 由ъ뀑 | +| **?대┰蹂대뱶 遺숈뿬?j린 ?섏젙** | ?댁쟾 ?쒖꽦 李쎌뿉 `SetForegroundWindow` ?몄텧 ??`Ctrl+V` ?꾩넚?섎룄濡?蹂€寃????곗쿂媛€ ?ъ빱?ㅻ? 類뤿뒗 臾몄젣 ?닿껐 | +| **?쒖꽦 李?罹≪쿂 ?섏젙** | ?곗쿂媛€ ?꾩쟾???④꺼吏??뚭퉴吏€ ?€湲?+ ?€??李쎌뿉 `SetForegroundWindow` ?몄텧 ???곗쿂 ?먯껜媛€ 罹≪쿂?섎뜕 臾몄젣 ?닿껐 | +| **?ㅽ겕濡?罹≪쿂 ?섏젙** | `FindOverlap` ?ㅼ쨷 ??鍮꾧탳濡??ㅻ쾭??媛먯? ?뺥솗???μ긽. `StitchFrames`瑜?利앸텇 ?ㅽ떚移?쑝濡?蹂€寃????꾩껜 ?꾨젅??以묐났 遺숈뿬?j린 臾몄젣 ?닿껐 | +| **?곗쿂 ?붿뿬 寃곌낵 ?쒓굅** | `OnShown()`?먯꽌 `Results.Clear()` ?몄텧 異붽? ???곗쿂 ?ы몴?????댁쟾 寃€??寃곌낵媛€ ?쒓컙?곸쑝濡?蹂댁씠??臾몄젣 ?닿껐 | +| **AI 紐⑤뜽 ?명솚??媛€?대뱶** | 媛쒕컻??媛€?대뱶???꾧뎄 ?ъ슜(Function Calling) 吏€??紐⑤뜽 ??異붽?. ?대씪?곕뱶(Claude/Gemini) + Ollama 濡쒖뺄 紐⑤뜽 15醫??명솚??紐낆떆. ?щ궡 ?섍꼍 異붿쿇 議고빀 ?ы븿 | ### v0.7.1 -> **개발 범위**: 에이전트 루프 검증 강제 + UI 개선 + 도구 스키마 수정 +> **媛쒕컻 踰붿쐞**: ?먯씠?꾪듃 猷⑦봽 寃€利?媛뺤젣 + UI 媛쒖꽑 + ?꾧뎄 ?ㅽ궎留??섏젙 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **도구 실행 후 검증 강제 (Post-Tool Verification)** | 문서 생성 도구(`file_write`, `docx_create`, `html_create`, `excel_create` 등) 실행 후 LLM에 검증 전용 호출을 자동 삽입. 생성된 파일을 `file_read`로 읽고 내용 완전성·구조·맞춤법을 확인하도록 강제. 문제 발견 시 즉시 수정 도구 호출. OpenHands 등 오픈소스에는 없는 차별화 기능. `EnablePostToolVerification` 설정 토글 (기본 OFF) | -| **Gemini 배열 스키마 수정** | `MultiReadTool.paths`와 `UserAskTool.options`에 `Items` 필드 추가. Gemini API가 array 타입 파라미터에 items 필드를 필수로 요구하는 문제 해결 | -| **워크플로우 분석기 UI 개선** | 타이틀바 전체 영역 드래그 가능 (`Background="Transparent"` 추가), 활성 탭 텍스트 White 강조, 상태 텍스트 `TextTrimming` + `MaxWidth` 적용 | -| **플랜 뷰어 버튼 가시성** | 아웃라인 버튼 배경 `0x18` 틴트 + 테두리 `0x80` 불투명도 + `1.2px` 두께로 가시성 개선 | -| **워터마크 슬래시 칩 충돌 수정** | 슬래시 칩 활성 시 `InputWatermark` 즉시 숨김 처리 | -| **피드백 학습 컨텍스트** | `BuildFeedbackContext()`를 Cowork/Code 시스템 프롬프트에 주입. 최근 20건 대화의 좋아요/싫어요 패턴 분석 | -| **수정 후 재시도 버튼** | 두 번째 액션바에 재시도 버튼 추가 (사용자 피드백 입력 후 재생성) | -| **설정 추가** | `EnablePostToolVerification`(bool, 기본 false) — 문서 생성 후 검증 LLM 호출 강제 | +| **?꾧뎄 ?ㅽ뻾 ??寃€利?媛뺤젣 (Post-Tool Verification)** | 臾몄꽌 ?앹꽦 ?꾧뎄(`file_write`, `docx_create`, `html_create`, `excel_create` ?? ?ㅽ뻾 ??LLM??寃€利??꾩슜 ?몄텧???먮룞 ?쎌엯. ?앹꽦???뚯씪??`file_read`濡??쎄퀬 ?댁슜 ?꾩쟾?굿룰뎄議걔룸쭪異ㅻ쾿???뺤씤?섎룄濡?媛뺤젣. 臾몄젣 諛쒓껄 ??利됱떆 ?섏젙 ?꾧뎄 ?몄텧. OpenHands ???ㅽ뵂?뚯뒪?먮뒗 ?녿뒗 李⑤퀎??湲곕뒫. `EnablePostToolVerification` ?ㅼ젙 ?좉? (湲곕낯 OFF) | +| **Gemini 諛곗뿴 ?ㅽ궎留??섏젙** | `MultiReadTool.paths`?€ `UserAskTool.options`??`Items` ?꾨뱶 異붽?. Gemini API媛€ array ?€???뚮씪誘명꽣??items ?꾨뱶瑜??꾩닔濡??붽뎄?섎뒗 臾몄젣 ?닿껐 | +| **?뚰겕?뚮줈??遺꾩꽍湲?UI 媛쒖꽑** | ?€?댄?諛??꾩껜 ?곸뿭 ?쒕옒洹?媛€??(`Background="Transparent"` 異붽?), ?쒖꽦 ???띿뒪??White 媛뺤“, ?곹깭 ?띿뒪??`TextTrimming` + `MaxWidth` ?곸슜 | +| **?뚮옖 酉곗뼱 踰꾪듉 媛€?쒖꽦** | ?꾩썐?쇱씤 踰꾪듉 諛곌꼍 `0x18` ?댄듃 + ?뚮몢由?`0x80` 遺덊닾紐낅룄 + `1.2px` ?먭퍡濡?媛€?쒖꽦 媛쒖꽑 | +| **?뚰꽣留덊겕 ?щ옒??移?異⑸룎 ?섏젙** | ?щ옒??移??쒖꽦 ??`InputWatermark` 利됱떆 ?④? 泥섎━ | +| **?쇰뱶諛??숈뒿 而⑦뀓?ㅽ듃** | `BuildFeedbackContext()`瑜?Cowork/Code ?쒖뒪???꾨\?꾪듃??二쇱엯. 理쒓렐 20嫄??€?붿쓽 醫뗭븘???レ뼱???⑦꽩 遺꾩꽍 | +| **?섏젙 ???ъ떆??踰꾪듉** | ??踰덉㎏ ?≪뀡諛붿뿉 ?ъ떆??踰꾪듉 異붽? (?ъ슜???쇰뱶諛??낅젰 ???ъ깮?? | +| **?ㅼ젙 異붽?** | `EnablePostToolVerification`(bool, 湲곕낯 false) ??臾몄꽌 ?앹꽦 ??寃€利?LLM ?몄텧 媛뺤젣 | ### v0.7.0 -> **개발 범위**: Phase 16 — 에이전트 지능 강화 + 개발자 경험 +> **媛쒕컻 踰붿쐞**: Phase 16 ???먯씠?꾪듃 吏€??媛뺥솕 + 媛쒕컻??寃쏀뿕 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **플랜 모드 (Plan Mode)** | 에이전트 도구 실행 전 구조화된 계획 생성→사용자 검토/승인→실행 흐름. `PlanMode` 3모드(off/always/auto). always=LLM 텍스트 전용 계획 생성(최대 3회 수정 요청), auto=계획 감지 시 승인 요청 | -| **도구/커넥터 관리 UI** | 설정 › AX Agent › 도구 탭 신설. 52개 에이전트 도구를 6개 카테고리(파일/검색, 문서 생성, 문서 품질, 코드/개발, 데이터/유틸, 시스템)별 카드 표시. 개별 활성/비활성 토글 + MCP 서버 연결 상태 실시간 표시. `DisabledTools` 설정으로 영속 | -| **프로젝트 규칙 시스템** | `.ax/rules/*.md` YAML 프론트매터(name, description, applies-to, when) 파싱. glob 패턴 매칭, when 조건 필터링. 시스템 프롬프트에 "프로젝트 규칙" 섹션 자동 주입. ProjectRuleTool에 list_rules/read_rule 액션 추가. `EnableProjectRules` 토글 | -| **반복 테스트-수정 루프** | TestLoopTool `auto_fix` 액션 — 테스트 실행→구조화된 실패 파싱(.NET Failed/pytest FAILED, 파일 경로·라인 번호 추출)→`[AUTO_FIX:]` 마커 출력. AgentLoopService에서 test_loop+AUTO_FIX 감지 시 반복 예산 자동 확장. `MaxTestFixIterations` 설정 | -| **병렬 도구 실행** | 읽기 전용 도구(file_read, grep_tool, glob 등 12종 ReadOnlyTools 셋) 자동 분류 → `Task.WhenAll()` 병렬 실행, 쓰기 도구는 순차 유지. ParallelState 클래스로 async ref 제약 해결. `EnableParallelTools` 토글 | -| **SKILL.md 표준 호환** | 외부↔내부 도구 이름 매핑 테이블 20개(Bash→process, Read→file_read, Grep→grep_tool, execute_command→process 등). ParseSkillFile에서 스킬 본문 로드 시 자동 치환 | -| **사내 보안 예외** | AntiTamper 보안 감지에 사내 IP 대역(11.99/11.90/12.25/12.23/12.24) 예외 처리. IsTrustedNetwork()로 IPv4 프리픽스 매칭 | -| **설정 추가** | `PlanMode`(off/always/auto), `EnableProjectRules`(bool), `MaxTestFixIterations`(int), `EnableParallelTools`(bool), `DisabledTools`(List\) | +| **?뚮옖 紐⑤뱶 (Plan Mode)** | ?먯씠?꾪듃 ?꾧뎄 ?ㅽ뻾 ??援ъ“?붾맂 怨꾪쉷 ?앹꽦?믪궗?⑹옄 寃€???뱀씤?믪떎???먮쫫. `PlanMode` 3紐⑤뱶(off/always/auto). always=LLM ?띿뒪???꾩슜 怨꾪쉷 ?앹꽦(理쒕? 3???섏젙 ?붿껌), auto=怨꾪쉷 媛먯? ???뱀씤 ?붿껌 | +| **?꾧뎄/而ㅻ꽖??愿€由?UI** | ?ㅼ젙 ??AX Agent ???꾧뎄 ???좎꽕. 52媛??먯씠?꾪듃 ?꾧뎄瑜?6媛?移댄뀒怨좊━(?뚯씪/寃€?? 臾몄꽌 ?앹꽦, 臾몄꽌 ?덉쭏, 肄붾뱶/媛쒕컻, ?곗씠???좏떥, ?쒖뒪??蹂?移대뱶 ?쒖떆. 媛쒕퀎 ?쒖꽦/鍮꾪솢???좉? + MCP ?쒕쾭 ?곌껐 ?곹깭 ?ㅼ떆媛??쒖떆. `DisabledTools` ?ㅼ젙?쇰줈 ?곸냽 | +| **?꾨줈?앺듃 洹쒖튃 ?쒖뒪??* | `.ax/rules/*.md` YAML ?꾨줎?몃ℓ??name, description, applies-to, when) ?뚯떛. glob ?⑦꽩 留ㅼ묶, when 議곌굔 ?꾪꽣留? ?쒖뒪???꾨\?꾪듃??"?꾨줈?앺듃 洹쒖튃" ?뱀뀡 ?먮룞 二쇱엯. ProjectRuleTool??list_rules/read_rule ?≪뀡 異붽?. `EnableProjectRules` ?좉? | +| **諛섎났 ?뚯뒪???섏젙 猷⑦봽** | TestLoopTool `auto_fix` ?≪뀡 ???뚯뒪???ㅽ뻾?믨뎄議고솕???ㅽ뙣 ?뚯떛(.NET Failed/pytest FAILED, ?뚯씪 寃쎈줈쨌?쇱씤 踰덊샇 異붿텧)??[AUTO_FIX:]` 留덉빱 異쒕젰. AgentLoopService?먯꽌 test_loop+AUTO_FIX 媛먯? ??諛섎났 ?덉궛 ?먮룞 ?뺤옣. `MaxTestFixIterations` ?ㅼ젙 | +| **蹂묐젹 ?꾧뎄 ?ㅽ뻾** | ?쎄린 ?꾩슜 ?꾧뎄(file_read, grep_tool, glob ??12醫?ReadOnlyTools ?? ?먮룞 遺꾨쪟 ??`Task.WhenAll()` 蹂묐젹 ?ㅽ뻾, ?곌린 ?꾧뎄???쒖감 ?좎?. ParallelState ?대옒?ㅻ줈 async ref ?쒖빟 ?닿껐. `EnableParallelTools` ?좉? | +| **SKILL.md ?쒖? ?명솚** | ?몃??붾궡遺€ ?꾧뎄 ?대쫫 留ㅽ븨 ?뚯씠釉?20媛?Bash?뭦rocess, Read?뭚ile_read, Grep?뭛rep_tool, execute_command?뭦rocess ??. ParseSkillFile?먯꽌 ?ㅽ궗 蹂몃Ц 濡쒕뱶 ???먮룞 移섑솚 | +| **?щ궡 蹂댁븞 ?덉쇅** | AntiTamper 蹂댁븞 媛먯????щ궡 IP ?€??11.99/11.90/12.25/12.23/12.24) ?덉쇅 泥섎━. IsTrustedNetwork()濡?IPv4 ?꾨━?쎌뒪 留ㅼ묶 | +| **?ㅼ젙 異붽?** | `PlanMode`(off/always/auto), `EnableProjectRules`(bool), `MaxTestFixIterations`(int), `EnableParallelTools`(bool), `DisabledTools`(List\) | ### v0.6.1 -> **개발 범위**: 설정 UI 개선 + 헬프 IP 보호 + 모델 선택 버그 수정 + 차세대 고도화 계획 수립 +> **媛쒕컻 踰붿쐞**: ?ㅼ젙 UI 媛쒖꽑 + ?ы봽 IP 蹂댄샇 + 紐⑤뜽 ?좏깮 踰꾧렇 ?섏젙 + 李⑥꽭?€ 怨좊룄??怨꾪쉷 ?섎┰ -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **고품질 문서 생성 설정** | 설정 › 에이전트 › 코워크에 "고품질 문서 생성" ToggleSwitch 추가. 멀티패스 문서 엔진 기본값 OFF (무료 API 환경 호환성). 비활성 시 `document_plan`/`document_assemble` 도구 차단 | -| **헬프 화면 IP 보호** | 버전별 신기능 항목 삭제, 영역별 핵심 기능 중심 재구성. 내부 기술 용어(SSE, AES-256-GCM, DPAPI, OpenXML 등) 노출 제거. CLAUDE.md에 헬프 IP 보호 규칙 추가 | -| **모델 선택 팝업 버그 수정** | 서비스만 변경 후 모델 미선택 시 팝업 닫으면 이전 서비스/모델로 롤백. 모델 확정(`Save`) 시에만 변경 반영 | -| **ESC 키 닫기 확장** | AboutWindow(개발 정보) ESC 키 닫기 추가 | -| **가이드 버전 표기 제거** | 사용자/개발자 가이드 헤더 version-tag 및 푸터 버전 번호 제거. CLAUDE.md에 가이드 버전 미표기 규칙 추가 | -| **차세대 고도화 계획 수립** | Phase 16(v0.7.0)~18(v2.0) 계획: 플랜 모드, 도구 관리 UI, 프로젝트 규칙, 자기 성찰, 멀티파일 Diff, 에이전트 팀 등 18개 기능 | +| **怨좏뭹吏?臾몄꽌 ?앹꽦 ?ㅼ젙** | ?ㅼ젙 ???먯씠?꾪듃 ??肄붿썙?ъ뿉 "怨좏뭹吏?臾몄꽌 ?앹꽦" ToggleSwitch 異붽?. 硫€?고뙣??臾몄꽌 ?붿쭊 湲곕낯媛?OFF (臾대즺 API ?섍꼍 ?명솚??. 鍮꾪솢????`document_plan`/`document_assemble` ?꾧뎄 李⑤떒 | +| **?ы봽 ?붾㈃ IP 蹂댄샇** | 踰꾩쟾蹂??좉린????ぉ ??젣, ?곸뿭蹂??듭떖 湲곕뒫 以묒떖 ?ш뎄?? ?대? 湲곗닠 ?⑹뼱(SSE, AES-256-GCM, DPAPI, OpenXML ?? ?몄텧 ?쒓굅. CLAUDE.md???ы봽 IP 蹂댄샇 洹쒖튃 異붽? | +| **紐⑤뜽 ?좏깮 ?앹뾽 踰꾧렇 ?섏젙** | ?쒕퉬?ㅻ쭔 蹂€寃???紐⑤뜽 誘몄꽑?????앹뾽 ?レ쑝硫??댁쟾 ?쒕퉬??紐⑤뜽濡?濡ㅻ갚. 紐⑤뜽 ?뺤젙(`Save`) ?쒖뿉留?蹂€寃?諛섏쁺 | +| **ESC ???リ린 ?뺤옣** | AboutWindow(媛쒕컻 ?뺣낫) ESC ???リ린 異붽? | +| **媛€?대뱶 踰꾩쟾 ?쒓린 ?쒓굅** | ?ъ슜??媛쒕컻??媛€?대뱶 ?ㅻ뜑 version-tag 諛??명꽣 踰꾩쟾 踰덊샇 ?쒓굅. CLAUDE.md??媛€?대뱶 踰꾩쟾 誘명몴湲?洹쒖튃 異붽? | +| **李⑥꽭?€ 怨좊룄??怨꾪쉷 ?섎┰** | Phase 16(v0.7.0)~18(v2.0) 怨꾪쉷: ?뚮옖 紐⑤뱶, ?꾧뎄 愿€由?UI, ?꾨줈?앺듃 洹쒖튃, ?먭린 ?깆같, 硫€?고뙆??Diff, ?먯씠?꾪듃 ?€ ??18媛?湲곕뒫 | ### v0.6.0 -> **개발 범위**: Phase 15 — 멀티패스 문서 엔진 + 내장 스킬 29종 확장 + 에이전트 도구 42개 + PPT 네이티브 생성 +> **媛쒕컻 踰붿쐞**: Phase 15 ??硫€?고뙣??臾몄꽌 ?붿쭊 + ?댁옣 ?ㅽ궗 29醫??뺤옣 + ?먯씠?꾪듃 ?꾧뎄 42媛?+ PPT ?ㅼ씠?곕툕 ?앹꽦 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **멀티패스 문서 생성 엔진** | `document_plan` (개요 구조화) + `document_assemble` (섹션별 조립) 도구 신규 추가. 3페이지 이상 문서 작성 시 개요→섹션별 상세→조립 방식으로 품질 대폭 향상. 코워크 보고서/문서 프리셋에 멀티패스 지시문 자동 포함 | -| **PPT 네이티브 생성** | `pptx_create` 도구 — OpenXML SDK 기반 C# 네이티브 구현. Python/Node 없이 슬라이드 생성 (title/content/two_column/table/blank 레이아웃, 4종 테마) | -| **데이터 분석 도구** | `data_pivot` — CSV/JSON 그룹화·피벗·집계 (sum/avg/count/min/max), 필터·정렬·Top N 지원. LINQ 기반 순수 C# 구현 | -| **템플릿 렌더링** | `template_render` — Mustache 스타일 변수 치환 + 반복({{#list}}) + 조건부({{^cond}}) 렌더링. 정기 보고서 템플릿 자동화 | -| **이미지 분석** | `image_analyze` — LLM 멀티모달 활용 이미지 설명/텍스트 추출/차트 데이터 해석/비교 분석 | -| **파일 변경 감지** | `file_watch` — 폴더 내 최근 변경·생성 파일 탐지 (상대 시간 지원: 1h/24h/7d), 유형별 통계 | -| **텍스트 요약** | `text_summarize` — 긴 텍스트/문서 청크 분할 → 핵심 문장 추출 요약 (bullet/paragraph/executive/technical 스타일) | -| **내장 스킬 16종 추가** | email-draft, translate, compare, weekly-report, log-analyze, sql-report, data-convert, refactor, gen-test, impact + 외부 검증 스킬 6종: security-audit (보안 코드 감사/OWASP), prd-generator (요구사항 정의서/유저스토리), adr-writer (아키텍처 결정 기록), changelog (변경이력/릴리즈노트), dependency-audit (의존성 분석/라이선스), perf-audit (성능 감사/안티패턴) — **총 29종** | -| **설정 추가** | `EnableMultiPassDocument` (멀티패스 문서 ON/OFF), `MultiPassThresholdPages` (자동 멀티패스 기준 페이지 수, 기본 3) | -| **가이드 뷰어 버튼 수정** | 닫기/최소화/최대화 버튼 MouseLeftButtonDown + Handled로 DragMove 충돌 해결 | -| **ESC 키 닫기** | GuideViewerWindow, HelpDetailWindow에서 Escape 키로 창 닫기 지원 | +| **硫€?고뙣??臾몄꽌 ?앹꽦 ?붿쭊** | `document_plan` (媛쒖슂 援ъ“?? + `document_assemble` (?뱀뀡蹂?議곕┰) ?꾧뎄 ?좉퇋 異붽?. 3?섏씠吏€ ?댁긽 臾몄꽌 ?묒꽦 ??媛쒖슂?믪꽮?섎퀎 ?곸꽭?믪“由?諛⑹떇?쇰줈 ?덉쭏 ?€???μ긽. 肄붿썙??蹂닿퀬??臾몄꽌 ?꾨━?뗭뿉 硫€?고뙣??吏€?쒕Ц ?먮룞 ?ы븿 | +| **PPT ?ㅼ씠?곕툕 ?앹꽦** | `pptx_create` ?꾧뎄 ??OpenXML SDK 湲곕컲 C# ?ㅼ씠?곕툕 援ы쁽. Python/Node ?놁씠 ?щ씪?대뱶 ?앹꽦 (title/content/two_column/table/blank ?덉씠?꾩썐, 4醫??뚮쭏) | +| **?곗씠??遺꾩꽍 ?꾧뎄** | `data_pivot` ??CSV/JSON 洹몃9?붋룻뵾踰쀂룹쭛怨?(sum/avg/count/min/max), ?꾪꽣쨌?뺣젹쨌Top N 吏€?? LINQ 湲곕컲 ?쒖닔 C# 援ы쁽 | +| **?쒗뵆由??뚮뜑留?* | `template_render` ??Mustache ?ㅽ???蹂€??移섑솚 + 諛섎났({{#list}}) + 議곌굔遺€({{^cond}}) ?뚮뜑留? ?뺢린 蹂닿퀬???쒗뵆由??먮룞??| +| **?대?吏€ 遺꾩꽍** | `image_analyze` ??LLM 硫€?곕え???쒖슜 ?대?吏€ ?ㅻ챸/?띿뒪??異붿텧/李⑦듃 ?곗씠???댁꽍/鍮꾧탳 遺꾩꽍 | +| **?뚯씪 蹂€寃?媛먯?** | `file_watch` ???대뜑 ??理쒓렐 蹂€寃승룹깮???뚯씪 ?먯? (?곷? ?쒓컙 吏€?? 1h/24h/7d), ?좏삎蹂??듦퀎 | +| **?띿뒪???붿빟** | `text_summarize` ??湲??띿뒪??臾몄꽌 泥?겕 遺꾪븷 ???듭떖 臾몄옣 異붿텧 ?붿빟 (bullet/paragraph/executive/technical ?ㅽ??? | +| **?댁옣 ?ㅽ궗 16醫?異붽?** | email-draft, translate, compare, weekly-report, log-analyze, sql-report, data-convert, refactor, gen-test, impact + ?몃? 寃€利??ㅽ궗 6醫? security-audit (蹂댁븞 肄붾뱶 媛먯궗/OWASP), prd-generator (?붽뎄?ы빆 ?뺤쓽???좎??ㅽ넗由?, adr-writer (?꾪궎?띿쿂 寃곗젙 湲곕줉), changelog (蹂€寃쎌씠??由대━利덈끂??, dependency-audit (?섏〈??遺꾩꽍/?쇱씠?좎뒪), perf-audit (?깅뒫 媛먯궗/?덊떚?⑦꽩) ??**珥?29醫?* | +| **?ㅼ젙 異붽?** | `EnableMultiPassDocument` (硫€?고뙣??臾몄꽌 ON/OFF), `MultiPassThresholdPages` (?먮룞 硫€?고뙣??湲곗? ?섏씠吏€ ?? 湲곕낯 3) | +| **媛€?대뱶 酉곗뼱 踰꾪듉 ?섏젙** | ?リ린/理쒖냼??理쒕???踰꾪듉 MouseLeftButtonDown + Handled濡?DragMove 異⑸룎 ?닿껐 | +| **ESC ???リ린** | GuideViewerWindow, HelpDetailWindow?먯꽌 Escape ?ㅻ줈 李??リ린 吏€??| ### v0.5.4 -> **개발 범위**: Phase 12-3 완료 + 대화 UX 안정화 + 슬래시 팝업 고도화 + 설정 개선 +> **媛쒕컻 踰붿쐞**: Phase 12-3 ?꾨즺 + ?€??UX ?덉젙??+ ?щ옒???앹뾽 怨좊룄??+ ?ㅼ젙 媛쒖꽑 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **Phase 12-3 완료** | 실행이력상세도를 개발자 탭으로 이동. Phase 12-3 (런타임 스킬 + 워크플로우 분석기 + 설정 개선) 전체 완료 | -| **글로우 효과 지속** | 레인보우 글로우가 스트리밍 종료 시까지 지속 (기존 3초 자동 꺼짐 → StopRainbowGlow 페이드아웃). Chat/Cowork/Code 전체 적용 | -| **스트리밍 경과 시간 표시** | 헤더 우측에 실시간 경과 시간 표시 (0s, 5s, 12s...). 완료 후 하단에 최종 시간 + 토큰 사용량 한 줄 TextBlock 표시 (줄바꿈 방지) | -| **슬래시 팝업 UX 개선** | ↑/↓ 방향키 아이템 단위 이동 + 선택 하이라이트, Enter로 실행, 마우스 휠 스크롤 지원, 기본 표시 7개 (최대 20), `/help` 직접 입력 시 도움말 창 표시, 슬라이더에 현재 값 실시간 표시 | -| **도움말 창 닫기 수정** | DragMove 충돌 해결 — MouseLeftButtonDown + Handled로 닫기 이벤트 우선 처리. 드래그는 헤더 영역에서만 동작 | -| **설정 접기/열기 수정** | 도구 카테고리·스킬 그룹 접기/열기를 MouseLeftButtonDown으로 변경 (ScrollViewer 내 MouseUp 소실 WPF 이슈 해결) | -| **설정 닫기 다이얼로그 제거** | 저장하지 않고 닫을 때 확인 팝업 + 하단 토스트 배너 제거, 바로 닫힘 (변경사항 자동 revert) | -| **설정 스킬 로딩 지연 해결** | 스킬 미로드 시 백그라운드 Task로 RuntimeDetector 포함 비동기 로드 후 UI 구성 | -| **탭 전환 시 대화 유지** | StopStreamingIfActive() — 탭 전환 시 스트리밍 즉시 중단 + 대화 즉시 저장. originTab 캡처로 올바른 탭에 ID 매핑. SendRegenerateAsync 이력 갱신 추가 | -| **섹션 간 간격 개선** | 차단 확장자 → 도구/커넥터 간 16px 마진, 도움말 창 스킬 항목 간격 확대, 명령어 열 너비 120px | +| **Phase 12-3 ?꾨즺** | ?ㅽ뻾?대젰?곸꽭?꾨? 媛쒕컻????쑝濡??대룞. Phase 12-3 (?고????ㅽ궗 + ?뚰겕?뚮줈??遺꾩꽍湲?+ ?ㅼ젙 媛쒖꽑) ?꾩껜 ?꾨즺 | +| **湲€濡쒖슦 ?④낵 吏€??* | ?덉씤蹂댁슦 湲€濡쒖슦媛€ ?ㅽ듃由щ컢 醫낅즺 ?쒓퉴吏€ 吏€??(湲곗〈 3珥??먮룞 爰쇱쭚 ??StopRainbowGlow ?섏씠?쒖븘??. Chat/Cowork/Code ?꾩껜 ?곸슜 | +| **?ㅽ듃由щ컢 寃쎄낵 ?쒓컙 ?쒖떆** | ?ㅻ뜑 ?곗륫???ㅼ떆媛?寃쎄낵 ?쒓컙 ?쒖떆 (0s, 5s, 12s...). ?꾨즺 ???섎떒??理쒖쥌 ?쒓컙 + ?좏겙 ?ъ슜????以?TextBlock ?쒖떆 (以꾨컮轅?諛⑹?) | +| **?щ옒???앹뾽 UX 媛쒖꽑** | ????諛⑺뼢???꾩씠???⑥쐞 ?대룞 + ?좏깮 ?섏씠?쇱씠?? Enter濡??ㅽ뻾, 留덉슦?????ㅽ겕濡?吏€?? 湲곕낯 ?쒖떆 7媛?(理쒕? 20), `/help` 吏곸젒 ?낅젰 ???꾩?留?李??쒖떆, ?щ씪?대뜑???꾩옱 媛??ㅼ떆媛??쒖떆 | +| **?꾩?留?李??リ린 ?섏젙** | DragMove 異⑸룎 ?닿껐 ??MouseLeftButtonDown + Handled濡??リ린 ?대깽???곗꽑 泥섎━. ?쒕옒洹몃뒗 ?ㅻ뜑 ?곸뿭?먯꽌留??숈옉 | +| **?ㅼ젙 ?묎린/?닿린 ?섏젙** | ?꾧뎄 移댄뀒怨좊━쨌?ㅽ궗 洹몃9 ?묎린/?닿린瑜?MouseLeftButtonDown?쇰줈 蹂€寃?(ScrollViewer ??MouseUp ?뚯떎 WPF ?댁뒋 ?닿껐) | +| **?ㅼ젙 ?リ린 ?ㅼ씠?쇰줈洹??쒓굅** | ?€?ν븯吏€ ?딄퀬 ?レ쓣 ???뺤씤 ?앹뾽 + ?섎떒 ?좎뒪??諛곕꼫 ?쒓굅, 諛붾줈 ?ロ옒 (蹂€寃쎌궗???먮룞 revert) | +| **?ㅼ젙 ?ㅽ궗 濡쒕뵫 吏€???닿껐** | ?ㅽ궗 誘몃줈????諛깃렇?쇱슫??Task濡?RuntimeDetector ?ы븿 鍮꾨룞湲?濡쒕뱶 ??UI 援ъ꽦 | +| **???꾪솚 ???€???좎?** | StopStreamingIfActive() ?????꾪솚 ???ㅽ듃由щ컢 利됱떆 以묐떒 + ?€??利됱떆 ?€?? originTab 罹≪쿂濡??щ컮瑜???뿉 ID 留ㅽ븨. SendRegenerateAsync ?대젰 媛깆떊 異붽? | +| **?뱀뀡 媛?媛꾧꺽 媛쒖꽑** | 李⑤떒 ?뺤옣?????꾧뎄/而ㅻ꽖??媛?16px 留덉쭊, ?꾩?留?李??ㅽ궗 ??ぉ 媛꾧꺽 ?뺣?, 紐낅졊?????덈퉬 120px | ### v0.5.3 -> **개발 범위**: Phase L2 클립보드 고도화 + Phase 14 에이전트 도구/스킬 확장 + 설정 UI 개선 + 가이드 시스템 +> **媛쒕컻 踰붿쐞**: Phase L2 ?대┰蹂대뱶 怨좊룄??+ Phase 14 ?먯씠?꾪듃 ?꾧뎄/?ㅽ궗 ?뺤옣 + ?ㅼ젙 UI 媛쒖꽑 + 媛€?대뱶 ?쒖뒪?? -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| 클립보드 이미지 원본 보존 | 원본 PNG를 `clipboard_images/` 캐시 폴더에 저장, 썸네일(80px)은 표시용으로만 사용. Enter 복원 시 원본 해상도로 클립보드 복사. 캐시 정리 정책 (30일/500MB) | -| Shift+Enter 자동 복사 | 히스토리 미리보기(Shift+Enter) 시 시스템 클립보드에 자동 복사 (텍스트/이미지 원본 해상도) | -| 스킬 갤러리 버그 수정 | YAML 아이콘 이스케이프 변환, DragMove 닫기 충돌 해결(3창), 카드 클릭 상세 팝업, 상단바 정렬 | -| **에이전트 도구 12종 추가** | json_tool, regex_tool, diff_tool, clipboard_tool, notify_tool, env_tool, zip_tool, http_tool, sql_tool, base64_tool, hash_tool, datetime_tool | -| **내장 스킬 3종 추가** | api-docs, db-schema, commit-review (총 13종 번들) | -| **설정 UI 개선** | 독 바 탭 3번째 위치로 이동 (테마 뒤), 기타 탭 접기/열기 섹션 (등록된 도구·MCP 커넥터·슬래시 스킬 각각 접기/펼치기) | -| **About 정보 변경** | 개발 정보에서 ".NET 8" 제거 → "Commander + Agent" 표시 (기술 스택 비노출) | -| **가이드 시스템 신설** | 사용자 가이드 + 개발자 가이드 분리 (개발자 가이드에만 버전 이력 포함). AES-256-CBC 고정 키 암호화 (.enc). GuideViewerWindow 내장 뷰어 (WebView2 비동기 초기화). 개발자 모드 ON→개발자 가이드, OFF→사용자 가이드. 트레이 메뉴 → 외부 브라우저 대신 앱 내 뷰어로 전환 | -| **가이드 암호화 도구** | GuideEncryptor.cs (AES-256-CBC 암호화/복호화 유틸리티), encrypt_guides.ps1 (빌드 전 암호화 스크립트) | +| ?대┰蹂대뱶 ?대?吏€ ?먮낯 蹂댁〈 | ?먮낯 PNG瑜?`clipboard_images/` 罹먯떆 ?대뜑???€?? ?몃꽕??80px)?€ ?쒖떆?⑹쑝濡쒕쭔 ?ъ슜. Enter 蹂듭썝 ???먮낯 ?댁긽?꾨줈 ?대┰蹂대뱶 蹂듭궗. 罹먯떆 ?뺣━ ?뺤콉 (30??500MB) | +| Shift+Enter ?먮룞 蹂듭궗 | ?덉뒪?좊━ 誘몃━蹂닿린(Shift+Enter) ???쒖뒪???대┰蹂대뱶???먮룞 蹂듭궗 (?띿뒪???대?吏€ ?먮낯 ?댁긽?? | +| ?ㅽ궗 媛ㅻ윭由?踰꾧렇 ?섏젙 | YAML ?꾩씠肄??댁뒪耳€?댄봽 蹂€?? DragMove ?リ린 異⑸룎 ?닿껐(3李?, 移대뱶 ?대┃ ?곸꽭 ?앹뾽, ?곷떒諛??뺣젹 | +| **?먯씠?꾪듃 ?꾧뎄 12醫?異붽?** | json_tool, regex_tool, diff_tool, clipboard_tool, notify_tool, env_tool, zip_tool, http_tool, sql_tool, base64_tool, hash_tool, datetime_tool | +| **?댁옣 ?ㅽ궗 3醫?異붽?** | api-docs, db-schema, commit-review (珥?13醫?踰덈뱾) | +| **?ㅼ젙 UI 媛쒖꽑** | ??諛???3踰덉㎏ ?꾩튂濡??대룞 (?뚮쭏 ??, 湲고? ???묎린/?닿린 ?뱀뀡 (?깅줉???꾧뎄쨌MCP 而ㅻ꽖?걔룹뒳?섏떆 ?ㅽ궗 媛곴컖 ?묎린/?쇱튂湲? | +| **About ?뺣낫 蹂€寃?* | 媛쒕컻 ?뺣낫?먯꽌 ".NET 8" ?쒓굅 ??"Commander + Agent" ?쒖떆 (湲곗닠 ?ㅽ깮 鍮꾨끂異? | +| **媛€?대뱶 ?쒖뒪???좎꽕** | ?ъ슜??媛€?대뱶 + 媛쒕컻??媛€?대뱶 遺꾨━ (媛쒕컻??媛€?대뱶?먮쭔 踰꾩쟾 ?대젰 ?ы븿). AES-256-CBC 怨좎젙 ???뷀샇??(.enc). GuideViewerWindow ?댁옣 酉곗뼱 (WebView2 鍮꾨룞湲?珥덇린??. 媛쒕컻??紐⑤뱶 ON?믨컻諛쒖옄 媛€?대뱶, OFF?믪궗?⑹옄 媛€?대뱶. ?몃젅??硫붾돱 ???몃? 釉뚮씪?곗? ?€??????酉곗뼱濡??꾪솚 | +| **媛€?대뱶 ?뷀샇???꾧뎄** | GuideEncryptor.cs (AES-256-CBC ?뷀샇??蹂듯샇???좏떥由ы떚), encrypt_guides.ps1 (鍮뚮뱶 ???뷀샇???ㅽ겕由쏀듃) | ### v0.5.2 -> **개발 범위**: Phase 12-4/12-5 런타임 스킬 + 워크플로우 분석기 + 개발자 탭 + 설정 개선 +> **媛쒕컻 踰붿쐞**: Phase 12-4/12-5 ?고????ㅽ궗 + ?뚰겕?뚮줈??遺꾩꽍湲?+ 媛쒕컻????+ ?ㅼ젙 媛쒖꽑 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **런타임 의존 스킬 (12-4)** | RuntimeDetector — Python/Node.js 설치 감지 (where.exe + --version, 5분 캐시). SkillDefinition.Requires/IsAvailable/UnavailableHint. 고급 스킬 4종 번들 (docx-creator, xlsx-analyzer, pdf-processor, pptx-creator). 슬래시 팝업에서 비가용 스킬 회색 표시. 기타 탭에 스킬 목록 카드 | -| **워크플로우 분석기 (12-5)** | WorkflowAnalyzerWindow — 세로 타임라인 실시간 시각화. AgentEvent 확장 (ElapsedMs/InputTokens/OutputTokens/ToolInput/Iteration). Stopwatch 타이밍 + LastTokenUsage 토큰. AgentLogLevel 3단계 분기 (simple/detailed/debug) | -| **개발자 탭 분리** | 설정 › 에이전트에 개발자 서브탭 신설. 비밀번호 보호 세션 전용. 개발자모드/실행이력상세도/스텝바이스텝/워크플로우 시각화/감사로그/에이전트고급/모델폴백/MCP서버 배치 | -| **설정 개선** | AgentLogLevel 기본값 simple, DevMode 세션 전용화 (매번 재인증), WorkflowVisualizer 토글 추가, 개발자모드 ? 툴팁 제거 | -| **UI 개선** | 훅/MCP 서버 추가 다이얼로그에 플레이스홀더 입력 예시, 좌우 패딩 증가, 훅 ESC 닫기, 코드 리뷰 툴팁 오탈자(변경사항) 수정 | -| **설정 기능 탭 개편** | 기능 설정 페이지를 3개 서브탭(AI 기능 / AX Commander / 디자인·기타)으로 분류. 클립보드 확장을 디자인·기타로 이동, 실행이력상세도를 코워크/코드 탭으로 복귀 | -| **Phase 13 계획 수립** | 스킬 생태계 + 에이전트 분석 고도화 5개 항목 (스킬 갤러리/편집기/가져오기·내보내기/통계 대시보드/AgentLogLevel 연동). AGENT_ROADMAP 문서 반영 | -| **스킬 시각적 편집기 (13-2)** | SkillEditorWindow — 폼 기반 스킬 생성/편집 GUI. 아이콘 선택기(MDL2 20종), 도구 체크리스트(ToolRegistry 연동), 템플릿 삽입(도구목록/출력형식/단계별), 토큰 예상 미리보기, YAML 프론트매터 + 마크다운 본문 자동 생성, 사용자 스킬 폴더 저장. 스킬 갤러리 연동 (새 스킬 → 편집기, 사용자 스킬 편집 → 시각적 편집기) | +| **?고????섏〈 ?ㅽ궗 (12-4)** | RuntimeDetector ??Python/Node.js ?ㅼ튂 媛먯? (where.exe + --version, 5遺?罹먯떆). SkillDefinition.Requires/IsAvailable/UnavailableHint. 怨좉툒 ?ㅽ궗 4醫?踰덈뱾 (docx-creator, xlsx-analyzer, pdf-processor, pptx-creator). ?щ옒???앹뾽?먯꽌 鍮꾧????ㅽ궗 ?뚯깋 ?쒖떆. 湲고? ??뿉 ?ㅽ궗 紐⑸줉 移대뱶 | +| **?뚰겕?뚮줈??遺꾩꽍湲?(12-5)** | WorkflowAnalyzerWindow ???몃줈 ?€?꾨씪???ㅼ떆媛??쒓컖?? AgentEvent ?뺤옣 (ElapsedMs/InputTokens/OutputTokens/ToolInput/Iteration). Stopwatch ?€?대컢 + LastTokenUsage ?좏겙. AgentLogLevel 3?④퀎 遺꾧린 (simple/detailed/debug) | +| **媛쒕컻????遺꾨━** | ?ㅼ젙 ???먯씠?꾪듃??媛쒕컻???쒕툕???좎꽕. 鍮꾨?踰덊샇 蹂댄샇 ?몄뀡 ?꾩슜. 媛쒕컻?먮え???ㅽ뻾?대젰?곸꽭???ㅽ뀦諛붿씠?ㅽ뀦/?뚰겕?뚮줈???쒓컖??媛먯궗濡쒓렇/?먯씠?꾪듃怨좉툒/紐⑤뜽?대갚/MCP?쒕쾭 諛곗튂 | +| **?ㅼ젙 媛쒖꽑** | AgentLogLevel 湲곕낯媛?simple, DevMode ?몄뀡 ?꾩슜??(留ㅻ쾲 ?ъ씤利?, WorkflowVisualizer ?좉? 異붽?, 媛쒕컻?먮え??? ?댄똻 ?쒓굅 | +| **UI 媛쒖꽑** | ??MCP ?쒕쾭 異붽? ?ㅼ씠?쇰줈洹몄뿉 ?뚮젅?댁뒪?€???낅젰 ?덉떆, 醫뚯슦 ?⑤뵫 利앷?, ??ESC ?リ린, 肄붾뱶 由щ럭 ?댄똻 ?ㅽ깉??蹂€寃쎌궗?? ?섏젙 | +| **?ㅼ젙 湲곕뒫 ??媛쒗렪** | 湲곕뒫 ?ㅼ젙 ?섏씠吏€瑜?3媛??쒕툕??AI 湲곕뒫 / AX Commander / ?붿옄?맞룰린?€)?쇰줈 遺꾨쪟. ?대┰蹂대뱶 ?뺤옣???붿옄?맞룰린?€濡??대룞, ?ㅽ뻾?대젰?곸꽭?꾨? 肄붿썙??肄붾뱶 ??쑝濡?蹂듦? | +| **Phase 13 怨꾪쉷 ?섎┰** | ?ㅽ궗 ?앺깭怨?+ ?먯씠?꾪듃 遺꾩꽍 怨좊룄??5媛???ぉ (?ㅽ궗 媛ㅻ윭由??몄쭛湲?媛€?몄삤湲걔룸궡蹂대궡湲??듦퀎 ?€?쒕낫??AgentLogLevel ?곕룞). AGENT_ROADMAP 臾몄꽌 諛섏쁺 | +| **?ㅽ궗 ?쒓컖???몄쭛湲?(13-2)** | SkillEditorWindow ????湲곕컲 ?ㅽ궗 ?앹꽦/?몄쭛 GUI. ?꾩씠肄??좏깮湲?MDL2 20醫?, ?꾧뎄 泥댄겕由ъ뒪??ToolRegistry ?곕룞), ?쒗뵆由??쎌엯(?꾧뎄紐⑸줉/異쒕젰?뺤떇/?④퀎蹂?, ?좏겙 ?덉긽 誘몃━蹂닿린, YAML ?꾨줎?몃ℓ??+ 留덊겕?ㅼ슫 蹂몃Ц ?먮룞 ?앹꽦, ?ъ슜???ㅽ궗 ?대뜑 ?€?? ?ㅽ궗 媛ㅻ윭由??곕룞 (???ㅽ궗 ???몄쭛湲? ?ъ슜???ㅽ궗 ?몄쭛 ???쒓컖???몄쭛湲? | ### v0.5.1 -> **개발 범위**: Phase 12 스킬/커넥터 고도화 + UI 개선 + 버그 수정 +> **媛쒕컻 踰붿쐞**: Phase 12 ?ㅽ궗/而ㅻ꽖??怨좊룄??+ UI 媛쒖꽑 + 踰꾧렇 ?섏젙 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **슬래시 명령 영어 전환** | 내장 슬래시 명령 11개를 한국어(/요약,/번역)에서 영어(/summary,/translate,/review,/pr 등)로 전환. IME 전환 없이 즉시 입력 가능 | -| **도구/커넥터 관리 UI (12-1)** | 설정 › 에이전트 › 기타 탭에 등록된 도구 29종을 5개 카테고리(파일/프로세스/코드분석/문서생성/에이전트)로 분류하여 표시. MCP 커넥터 안내 섹션 | -| **SKILL.md 표준 호환 (12-2)** | SkillService — *.skill.md (기존) + 폴더/SKILL.md (표준) 2형식 동시 지원. YAML metadata 맵 파싱, license/compatibility/allowed-tools 필드. SkillDefinition 확장 | -| **커스텀 ComboBox** | 전역 ComboBox/ComboBoxItem 스타일 — ControlTemplate 기반 모던 드롭다운, 호버/선택 효과, Slide 애니메이션. 설정창 전체(27개소) 자동 적용 | -| **BlockedPaths 패턴 수정** | `*\Documents\*` → `*Documents*` — 백슬래시 없는 패턴으로 수정하여 정상 차단 동작 | -| **사용자 가이드 정리** | v0.5.1 이력 추가, v0.4.0 이하 이전 이력으로 접기, 내부 기술 용어 제거(DPAPI, Ollama/vLLM, 클래스명 등), 푸터 버전 갱신 | +| **?щ옒??紐낅졊 ?곸뼱 ?꾪솚** | ?댁옣 ?щ옒??紐낅졊 11媛쒕? ?쒓뎅??/?붿빟,/踰덉뿭)?먯꽌 ?곸뼱(/summary,/translate,/review,/pr ??濡??꾪솚. IME ?꾪솚 ?놁씠 利됱떆 ?낅젰 媛€??| +| **?꾧뎄/而ㅻ꽖??愿€由?UI (12-1)** | ?ㅼ젙 ???먯씠?꾪듃 ??湲고? ??뿉 ?깅줉???꾧뎄 29醫낆쓣 5媛?移댄뀒怨좊━(?뚯씪/?꾨줈?몄뒪/肄붾뱶遺꾩꽍/臾몄꽌?앹꽦/?먯씠?꾪듃)濡?遺꾨쪟?섏뿬 ?쒖떆. MCP 而ㅻ꽖???덈궡 ?뱀뀡 | +| **SKILL.md ?쒖? ?명솚 (12-2)** | SkillService ??*.skill.md (湲곗〈) + ?대뜑/SKILL.md (?쒖?) 2?뺤떇 ?숈떆 吏€?? YAML metadata 留??뚯떛, license/compatibility/allowed-tools ?꾨뱶. SkillDefinition ?뺤옣 | +| **而ㅼ뒪?€ ComboBox** | ?꾩뿭 ComboBox/ComboBoxItem ?ㅽ?????ControlTemplate 湲곕컲 紐⑤뜕 ?쒕∼?ㅼ슫, ?몃쾭/?좏깮 ?④낵, Slide ?좊땲硫붿씠?? ?ㅼ젙李??꾩껜(27媛쒖냼) ?먮룞 ?곸슜 | +| **BlockedPaths ?⑦꽩 ?섏젙** | `*\Documents\*` ??`*Documents*` ??諛깆뒳?섏떆 ?녿뒗 ?⑦꽩?쇰줈 ?섏젙?섏뿬 ?뺤긽 李⑤떒 ?숈옉 | +| **?ъ슜??媛€?대뱶 ?뺣━** | v0.5.1 ?대젰 異붽?, v0.4.0 ?댄븯 ?댁쟾 ?대젰?쇰줈 ?묎린, ?대? 湲곗닠 ?⑹뼱 ?쒓굅(DPAPI, Ollama/vLLM, ?대옒?ㅻ챸 ??, ?명꽣 踰꾩쟾 媛깆떊 | ### v0.5.0 -> **개발 범위**: 대화 서비스 Phase 9~11 완료 + 런처 Phase L1 추가 + 저장 공간 관리 + 문서 체계화 +> **媛쒕컻 踰붿쐞**: ?€???쒕퉬??Phase 9~11 ?꾨즺 + ?곗쿂 Phase L1 異붽? + ?€??怨듦컙 愿€由?+ 臾몄꽌 泥닿퀎?? -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **LSP 코드 인텔리전스 (9-1)** | LspClientService — C#/TS/Python/C++/Java 언어 서버 자동 감지. `lsp_code_intel` 도구 (goto_definition, find_references, symbols). 설정 `EnableLsp` 토글 | -| **서브에이전트 (9-2)** | SubAgentTool (`spawn_agent`) + WaitAgentsTool (`wait_agents`). 읽기 전용 격리 실행. `MaxSubAgents` 설정으로 동시 실행 제한 | -| **코드 시맨틱 검색 (9-3)** | CodeIndexService — TF-IDF 인덱싱 (camelCase 분할, 50라인 청크). `search_codebase` 도구. `EnableCodeIndex`/`CodeIndexMaxFileKb` 설정 | -| **자동 테스트 루프 (9-4)** | TestLoopTool — generate/run/analyze 3단계. .NET/Python/Node.js/Go 프레임워크 자동 감지 | -| **이벤트 트리거 (9-5)** | AgentTriggerService — FileSystemWatcher(파일 변경) + DispatcherTimer(스케줄). triggers.json 규칙 기반 | -| **PDF 내보내기 (9-6)** | PdfExportService — HTML 인쇄 최적화 + 브라우저 자동 인쇄. 대화 내보내기에 "PDF 인쇄용 HTML" 옵션 추가 | -| **diff 뷰어 (9-7)** | DiffViewerPanel — 라인 기반 diff (Added/Removed/Equal), 라인 번호, Accept/Reject 버튼 | -| **탐색기 셸 확장** | ShellExtensionService — HKCU 레지스트리 우클릭 메뉴 등록/해제. 파일/폴더/폴더배경 3종 | -| **저장 공간 관리** | StorageAnalyzer — 앱 데이터 사용량 분석 (대화/감사/로그/인덱스/클립보드), 드라이브 여유 공간, 7/14/30일 정리. 설정 공통 탭에 UI | -| **설정 도움말 아이콘** | AI 관련 설정 17개에 `?` 아이콘 + `HelpTooltipStyle` 커스텀 다크 툴팁 | -| **폴백 모델 개선** | 서비스별 그룹화 (Ollama/vLLM/Gemini/Claude). ViewModel과 AppSettings 동시 읽기로 저장 전 즉시 반영 | -| **클립보드 붙여넣기** | Alt+SetForegroundWindow 우회. TryGetSelectedText 후크 스레드 분리 | -| **독 바 개선** | 버튼 히트 테스트 수정 (MouseLeftButtonDown), 시작 시 자동 표시, 설정 실시간 반영 | -| **포맷 메뉴** | AI 자동 선택 맨 위로 이동 | -| **코드 탭 아이콘** | 파일(앰버)/권한(파랑·빨강)/데이터활용(녹·앰버·회) 색상 구분 | -| **사내 환경 원칙** | CLAUDE.md에 외부 의존 최소화, 데이터 로컬 저장, 텔레메트리 금지 지침 추가 | -| **문서 체계화** | CLAUDE.md 문서 관리 원칙 추가, AGENT/LAUNCHER ROADMAP Phase 9/L1 완료 표시, NEXT_ROADMAP 차기 계획 전면 업데이트 | -| **자동 모델 선택 (10-1)** | AutoRouterService — 질문 유형(코딩/번역/분석) 감지 → 최적 모델 자동 라우팅. 잠금 모드 지원 | -| **에이전트 메모리 (10-2)** | MemoryTool — 프로젝트 규칙, 코딩 선호도 자동 기억. 대화 간 영속 유지 | -| **멀티모달 입력 (10-4)** | 이미지/스크린샷 Ctrl+V 붙여넣기 → base64 인코딩 → Gemini/Claude/Ollama/OpenAI Vision API 직접 전달. 이미지 미리보기 UI | -| **코드 검색 개선 (10-5)** | TF-IDF + SQLite 영속 인덱스, 증분 업데이트, 바이그램 토큰, 스톱워드 필터링 | -| **에이전트 훅 시스템 (10-6)** | 도구 호출 전/후 사용자 정의 스크립트 실행. hooks.json 규칙 기반 | -| **스킬 시스템 (11-1)** | SkillService — *.skill.md YAML 프론트매터 파싱 → 슬래시 명령 자동 등록. 3폴더 우선순위(앱→%APPDATA%→커스텀). 기본 스킬 3종(daily-standup/bug-hunt/code-explain) 자동 생성. `skill_manager` 도구 | -| **AI 코드 리뷰 (11-2)** | CodeReviewTool — diff_review/file_review/pr_summary. 정적 분석(빈 catch/동기 대기/하드코딩 키/긴 메서드). Git diff 파서. 리뷰 초점(bugs/performance/security/style) | -| **드래그&드롭 AI (11-3)** | 파일 드래그 시 유형별 AI 액션 팝업(코드→리뷰/설명/리팩토링, 문서→요약/번역, 데이터→분석/시각화, 이미지→설명). "첨부만" 옵션. `EnableDragDropAiActions` 설정 | -| **프로젝트 지침 (11 추가)** | ProjectRuleTool — AX.md read/append/write. 사용자 승인 후 저장. 상위 3단계 탐색 | -| **슬래시 명령어 강화 (11 추가)** | 탭별 필터링(Chat=공통, Cowork/Code=공통+개발). `/help` 도움말 창. 총 12개 내장 명령 | -| **사용 통계 차트 확장** | 메인 탭 미니차트 2종, 커맨더 탭 요일별 평균차트, 에이전트 탭 탭비율+토큰비율 차트 | -| **인사 문구 외부화** | greetings.json 외부 파일 로딩 + 임베디드 리소스 폴백 + 5분 캐시 | -| **캡처 알림 개선** | 지연 캡처 카운트다운 알림 제거 (시작/초단위 모두). 완료 알림만 유지 | -| **알림 아이콘 수정** | ToolTipIcon.Info → ToolTipIcon.None 변경으로 앱 트레이 아이콘 표시 | +| **LSP 肄붾뱶 ?명뀛由ъ쟾??(9-1)** | LspClientService ??C#/TS/Python/C++/Java ?몄뼱 ?쒕쾭 ?먮룞 媛먯?. `lsp_code_intel` ?꾧뎄 (goto_definition, find_references, symbols). ?ㅼ젙 `EnableLsp` ?좉? | +| **?쒕툕?먯씠?꾪듃 (9-2)** | SubAgentTool (`spawn_agent`) + WaitAgentsTool (`wait_agents`). ?쎄린 ?꾩슜 寃⑸━ ?ㅽ뻾. `MaxSubAgents` ?ㅼ젙?쇰줈 ?숈떆 ?ㅽ뻾 ?쒗븳 | +| **肄붾뱶 ?쒕㎤??寃€??(9-3)** | CodeIndexService ??TF-IDF ?몃뜳??(camelCase 遺꾪븷, 50?쇱씤 泥?겕). `search_codebase` ?꾧뎄. `EnableCodeIndex`/`CodeIndexMaxFileKb` ?ㅼ젙 | +| **?먮룞 ?뚯뒪??猷⑦봽 (9-4)** | TestLoopTool ??generate/run/analyze 3?④퀎. .NET/Python/Node.js/Go ?꾨젅?꾩썙???먮룞 媛먯? | +| **?대깽???몃━嫄?(9-5)** | AgentTriggerService ??FileSystemWatcher(?뚯씪 蹂€寃? + DispatcherTimer(?ㅼ?以?. triggers.json 洹쒖튃 湲곕컲 | +| **PDF ?대낫?닿린 (9-6)** | PdfExportService ??HTML ?몄뇙 理쒖쟻??+ 釉뚮씪?곗? ?먮룞 ?몄뇙. ?€???대낫?닿린??"PDF ?몄뇙??HTML" ?듭뀡 異붽? | +| **diff 酉곗뼱 (9-7)** | DiffViewerPanel ???쇱씤 湲곕컲 diff (Added/Removed/Equal), ?쇱씤 踰덊샇, Accept/Reject 踰꾪듉 | +| **?먯깋湲????뺤옣** | ShellExtensionService ??HKCU ?덉??ㅽ듃由??고겢由?硫붾돱 ?깅줉/?댁젣. ?뚯씪/?대뜑/?대뜑諛곌꼍 3醫?| +| **?€??怨듦컙 愿€由?* | StorageAnalyzer ?????곗씠???ъ슜??遺꾩꽍 (?€??媛먯궗/濡쒓렇/?몃뜳???대┰蹂대뱶), ?쒕씪?대툕 ?ъ쑀 怨듦컙, 7/14/30???뺣━. ?ㅼ젙 怨듯넻 ??뿉 UI | +| **?ㅼ젙 ?꾩?留??꾩씠肄?* | AI 愿€???ㅼ젙 17媛쒖뿉 `?` ?꾩씠肄?+ `HelpTooltipStyle` 而ㅼ뒪?€ ?ㅽ겕 ?댄똻 | +| **?대갚 紐⑤뜽 媛쒖꽑** | ?쒕퉬?ㅻ퀎 洹몃9??(Ollama/vLLM/Gemini/Claude). ViewModel怨?AppSettings ?숈떆 ?쎄린濡??€????利됱떆 諛섏쁺 | +| **?대┰蹂대뱶 遺숈뿬?j린** | Alt+SetForegroundWindow ?고쉶. TryGetSelectedText ?꾪겕 ?ㅻ젅??遺꾨━ | +| **??諛?媛쒖꽑** | 踰꾪듉 ?덊듃 ?뚯뒪???섏젙 (MouseLeftButtonDown), ?쒖옉 ???먮룞 ?쒖떆, ?ㅼ젙 ?ㅼ떆媛?諛섏쁺 | +| **?щ㎎ 硫붾돱** | AI ?먮룞 ?좏깮 留??꾨줈 ?대룞 | +| **肄붾뱶 ???꾩씠肄?* | ?뚯씪(?곕쾭)/沅뚰븳(?뚮옉쨌鍮④컯)/?곗씠?고솢???뮤룹빊踰꽷룻쉶) ?됱긽 援щ텇 | +| **?щ궡 ?섍꼍 ?먯튃** | CLAUDE.md???몃? ?섏〈 理쒖냼?? ?곗씠??濡쒖뺄 ?€?? ?붾젅硫뷀듃由?湲덉? 吏€移?異붽? | +| **臾몄꽌 泥닿퀎??* | CLAUDE.md 臾몄꽌 愿€由??먯튃 異붽?, AGENT/LAUNCHER ROADMAP Phase 9/L1 ?꾨즺 ?쒖떆, NEXT_ROADMAP 李④린 怨꾪쉷 ?꾨㈃ ?낅뜲?댄듃 | +| **?먮룞 紐⑤뜽 ?좏깮 (10-1)** | AutoRouterService ??吏덈Ц ?좏삎(肄붾뵫/踰덉뿭/遺꾩꽍) 媛먯? ??理쒖쟻 紐⑤뜽 ?먮룞 ?쇱슦?? ?좉툑 紐⑤뱶 吏€??| +| **?먯씠?꾪듃 硫붾え由?(10-2)** | MemoryTool ???꾨줈?앺듃 洹쒖튃, 肄붾뵫 ?좏샇???먮룞 湲곗뼲. ?€??媛??곸냽 ?좎? | +| **硫€?곕え???낅젰 (10-4)** | ?대?吏€/?ㅽ겕由곗꺑 Ctrl+V 遺숈뿬?j린 ??base64 ?몄퐫????Gemini/Claude/Ollama/OpenAI Vision API 吏곸젒 ?꾨떖. ?대?吏€ 誘몃━蹂닿린 UI | +| **肄붾뱶 寃€??媛쒖꽑 (10-5)** | TF-IDF + SQLite ?곸냽 ?몃뜳?? 利앸텇 ?낅뜲?댄듃, 諛붿씠洹몃옩 ?좏겙, ?ㅽ넲?뚮뱶 ?꾪꽣留?| +| **?먯씠?꾪듃 ???쒖뒪??(10-6)** | ?꾧뎄 ?몄텧 ?????ъ슜???뺤쓽 ?ㅽ겕由쏀듃 ?ㅽ뻾. hooks.json 洹쒖튃 湲곕컲 | +| **?ㅽ궗 ?쒖뒪??(11-1)** | SkillService ??*.skill.md YAML ?꾨줎?몃ℓ???뚯떛 ???щ옒??紐낅졊 ?먮룞 ?깅줉. 3?대뜑 ?곗꽑?쒖쐞(?기넂%APPDATA%?믪빱?ㅽ?). 湲곕낯 ?ㅽ궗 3醫?daily-standup/bug-hunt/code-explain) ?먮룞 ?앹꽦. `skill_manager` ?꾧뎄 | +| **AI 肄붾뱶 由щ럭 (11-2)** | CodeReviewTool ??diff_review/file_review/pr_summary. ?뺤쟻 遺꾩꽍(鍮?catch/?숆린 ?€湲??섎뱶肄붾뵫 ??湲?硫붿꽌??. Git diff ?뚯꽌. 由щ럭 珥덉젏(bugs/performance/security/style) | +| **?쒕옒洹??쒕∼ AI (11-3)** | ?뚯씪 ?쒕옒洹????좏삎蹂?AI ?≪뀡 ?앹뾽(肄붾뱶?믩━酉??ㅻ챸/由ы뙥?좊쭅, 臾몄꽌?믪슂??踰덉뿭, ?곗씠?겸넂遺꾩꽍/?쒓컖?? ?대?吏€?믪꽕紐?. "泥⑤?留? ?듭뀡. `EnableDragDropAiActions` ?ㅼ젙 | +| **?꾨줈?앺듃 吏€移?(11 異붽?)** | ProjectRuleTool ??AX.md read/append/write. ?ъ슜???뱀씤 ???€?? ?곸쐞 3?④퀎 ?먯깋 | +| **?щ옒??紐낅졊??媛뺥솕 (11 異붽?)** | ??퀎 ?꾪꽣留?Chat=怨듯넻, Cowork/Code=怨듯넻+媛쒕컻). `/help` ?꾩?留?李? 珥?12媛??댁옣 紐낅졊 | +| **?ъ슜 ?듦퀎 李⑦듃 ?뺤옣** | 硫붿씤 ??誘몃땲李⑦듃 2醫? 而ㅻ㎤?????붿씪蹂??됯퇏李⑦듃, ?먯씠?꾪듃 ????퉬???좏겙鍮꾩쑉 李⑦듃 | +| **?몄궗 臾멸뎄 ?몃???* | greetings.json ?몃? ?뚯씪 濡쒕뵫 + ?꾨쿋?붾뱶 由ъ냼???대갚 + 5遺?罹먯떆 | +| **罹≪쿂 ?뚮┝ 媛쒖꽑** | 吏€??罹≪쿂 移댁슫?몃떎???뚮┝ ?쒓굅 (?쒖옉/珥덈떒??紐⑤몢). ?꾨즺 ?뚮┝留??좎? | +| **?뚮┝ ?꾩씠肄??섏젙** | ToolTipIcon.Info ??ToolTipIcon.None 蹂€寃쎌쑝濡????몃젅???꾩씠肄??쒖떆 | ### v0.4.0 -> **개발 범위**: 런처 고도화 Phase L1 (LAUNCHER_ROADMAP) + 대화 서비스 고도화 Phase 9 (AGENT_ROADMAP) 병행 +> **媛쒕컻 踰붿쐞**: ?곗쿂 怨좊룄??Phase L1 (LAUNCHER_ROADMAP) + ?€???쒕퉬??怨좊룄??Phase 9 (AGENT_ROADMAP) 蹂묓뻾 > -> | 영역 | 문서 | 완료 항목 | +> | ?곸뿭 | 臾몄꽌 | ?꾨즺 ??ぉ | > |------|------|----------| -> | 런처 | `LAUNCHER_ROADMAP.md` | L1-1(선택 텍스트 AI), L1-5(독 바), L1-6(대화상자 통합), L1-7(클립보드 핀/카테고리) | -> | 대화 서비스 | `AGENT_ROADMAP.md` | Phase 8 완료, 기술부채 해결 | +> | ?곗쿂 | `LAUNCHER_ROADMAP.md` | L1-1(?좏깮 ?띿뒪??AI), L1-5(??諛?, L1-6(?€?붿긽???듯빀), L1-7(?대┰蹂대뱶 ?€/移댄뀒怨좊━) | +> | ?€???쒕퉬??| `AGENT_ROADMAP.md` | Phase 8 ?꾨즺, 湲곗닠遺€梨??닿껐 | -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **선택 텍스트 AI 명령 (L1-1)** | TextActionPopup — 핫키 시 선택 텍스트 감지 (Ctrl+C 시뮬레이션), 커서 위치에 액션 팝업 표시 (번역/요약/교정/설명/다시쓰기), ↑↓/마우스 선택, Enter 실행 → AX Agent에 `!` 프리픽스로 전달 | -| **독 바 (L1-5)** | DockBarWindow — 화면 하단 고정 미니 바. 설정 기반 동적 아이템 빌드 (`DockBarItems`). CPU(PerformanceCounter)/RAM(GlobalMemoryStatusEx)/시계 실시간 표시. 무지개 글로우, 투명도(0.3~1.0), 위치 기억(`DockBarLeft/Top`), 드래그 이동. 트레이 메뉴 토글 | -| **대화상자 통합 (L1-6)** | FileDialogWatcher — `SetWinEventHook(EVENT_OBJECT_SHOW)` + `#32770` 클래스 감지. 열기/저장 대화상자 감지 시 런처 자동 열기 (`cd ` 프리픽스) | -| **클립보드 핀/카테고리 (L1-7)** | ClipboardEntry에 `IsPinned`/`Category` 추가. 자동 카테고리 분류 (URL/코드/경로/일반). 핀 항목 상단 고정 + 삭제 보호. `#pin`/`#url`/`#코드`/`#경로` 필터. Ctrl+P 핀 토글 | -| **아이콘 교체** | 다이아몬드 픽셀 ICO (7 sizes, 25% block, rounded) 생성. 상=파랑/하=빨강/좌=녹/우=녹. AboutWindow/LauncherWindow/SetupForm/SVG 전체 색상 통일. 모든 Window에 `Icon=` 속성 추가. 바로가기에 `IconLocation` 명시 | -| **독 바 설정 탭** | SettingsWindow에 독 바 탭 추가 — 자동 표시, 글로우 효과, 투명도 슬라이더, 위치 초기화 버튼, 표시 항목 토글 (8종) | -| **인스톨러** | UAC `requireAdministrator` 유지. SetupForm 다이아몬드 아이콘 `FillRoundRect`로 둥근 모서리. 바로가기 `IconLocation` 설정 | -| **UI 통일** | 알림 카테고리 CheckBox → ToggleSwitch. Ollama/vLLM 서버 주소 라벨 "기본 서버 주소"로 통일. 개발자 정보창 기여자 표시 (`about.json` contributors). 창 높이 조정 | +| **?좏깮 ?띿뒪??AI 紐낅졊 (L1-1)** | TextActionPopup ???ロ궎 ???좏깮 ?띿뒪??媛먯? (Ctrl+C ?쒕??덉씠??, 而ㅼ꽌 ?꾩튂???≪뀡 ?앹뾽 ?쒖떆 (踰덉뿭/?붿빟/援먯젙/?ㅻ챸/?ㅼ떆?곌린), ?묅넃/留덉슦???좏깮, Enter ?ㅽ뻾 ??AX Agent??`!` ?꾨━?쎌뒪濡??꾨떖 | +| **??諛?(L1-5)** | DockBarWindow ???붾㈃ ?섎떒 怨좎젙 誘몃땲 諛? ?ㅼ젙 湲곕컲 ?숈쟻 ?꾩씠??鍮뚮뱶 (`DockBarItems`). CPU(PerformanceCounter)/RAM(GlobalMemoryStatusEx)/?쒓퀎 ?ㅼ떆媛??쒖떆. 臾댁?媛?湲€濡쒖슦, ?щ챸??0.3~1.0), ?꾩튂 湲곗뼲(`DockBarLeft/Top`), ?쒕옒洹??대룞. ?몃젅??硫붾돱 ?좉? | +| **?€?붿긽???듯빀 (L1-6)** | FileDialogWatcher ??`SetWinEventHook(EVENT_OBJECT_SHOW)` + `#32770` ?대옒??媛먯?. ?닿린/?€???€?붿긽??媛먯? ???곗쿂 ?먮룞 ?닿린 (`cd ` ?꾨━?쎌뒪) | +| **?대┰蹂대뱶 ?€/移댄뀒怨좊━ (L1-7)** | ClipboardEntry??`IsPinned`/`Category` 異붽?. ?먮룞 移댄뀒怨좊━ 遺꾨쪟 (URL/肄붾뱶/寃쎈줈/?쇰컲). ?€ ??ぉ ?곷떒 怨좎젙 + ??젣 蹂댄샇. `#pin`/`#url`/`#肄붾뱶`/`#寃쎈줈` ?꾪꽣. Ctrl+P ?€ ?좉? | +| **?꾩씠肄?援먯껜** | ?ㅼ씠?꾨が???쎌? ICO (7 sizes, 25% block, rounded) ?앹꽦. ???뚮옉/??鍮④컯/醫??????? AboutWindow/LauncherWindow/SetupForm/SVG ?꾩껜 ?됱긽 ?듭씪. 紐⑤뱺 Window??`Icon=` ?띿꽦 異붽?. 諛붾줈媛€湲곗뿉 `IconLocation` 紐낆떆 | +| **??諛??ㅼ젙 ??* | SettingsWindow????諛???異붽? ???먮룞 ?쒖떆, 湲€濡쒖슦 ?④낵, ?щ챸???щ씪?대뜑, ?꾩튂 珥덇린??踰꾪듉, ?쒖떆 ??ぉ ?좉? (8醫? | +| **?몄뒪?⑤윭** | UAC `requireAdministrator` ?좎?. SetupForm ?ㅼ씠?꾨が???꾩씠肄?`FillRoundRect`濡??κ렐 紐⑥꽌由? 諛붾줈媛€湲?`IconLocation` ?ㅼ젙 | +| **UI ?듭씪** | ?뚮┝ 移댄뀒怨좊━ CheckBox ??ToggleSwitch. Ollama/vLLM ?쒕쾭 二쇱냼 ?쇰꺼 "湲곕낯 ?쒕쾭 二쇱냼"濡??듭씪. 媛쒕컻???뺣낫李?湲곗뿬???쒖떆 (`about.json` contributors). 李??믪씠 議곗젙 | ### v0.3.1 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **SnapHandler 레이아웃 확장** | 기존 11개 → 22개 스냅 옵션. 3등분(third-l/c/r), 2/3+1/3(two3-l/r), 3분할 조합(l-rt, l-rb, r-lt, r-lb) 추가 | -| **Everything SDK 연동** | `es` 프리픽스로 Everything 초고속 파일 검색 통합. Everything 미설치 시 graceful fallback. 파일 타입별 아이콘 구분 | -| **플러그인 자동 설치** | `PluginHost.InstallFromZip()` — 로컬 zip에서 DLL/JSON 스킬 자동 추출·등록·로드. `UninstallPlugin()` 제거 기능 포함. URL 기반 설치는 사내 보안 정책으로 제외 | -| **이미지 클립보드 영속화** | 클립보드 히스토리 이미지 항목을 PNG→Base64로 DPAPI 암호화 저장/복원. 앱 재시작 후에도 이미지 히스토리 유지 | -| **다크 테마 대비 강화** | 6종 다크 테마 SecondaryText/PlaceholderText/HintText 밝기 +12~20 추가 개선. 헬프/단축키 창 텍스트 가독성 향상 | -| **인스톨러 버전 동기화** | SetupForm.cs `AppVer` 1.2.2→1.3.1 수정. 버전 관리 체크리스트에 MCP 버전·로드맵 문서 항목 추가 | -| **사용자 가이드 업데이트** | version-tag v0.2.2→v0.3.1, v0.3.0/v0.3.1 버전 이력 추가, version-tag에 `color:#fff` 추가 | -| **헬프 창 업데이트** | v0.3.1 신기능 항목 추가, 파일 타입별 심볼 12종 추가 (Excel/Word/Pdf/Image/Video/Music/Archive/Code 등) | -| **문서 정비** | AI_Service_Review.html → AGENT_ROADMAP.html 병합 후 삭제, 기술부채 항목 완료 표시, LAUNCHER_ROADMAP 생성 | +| **SnapHandler ?덉씠?꾩썐 ?뺤옣** | 湲곗〈 11媛???22媛??ㅻ깄 ?듭뀡. 3?깅텇(third-l/c/r), 2/3+1/3(two3-l/r), 3遺꾪븷 議고빀(l-rt, l-rb, r-lt, r-lb) 異붽? | +| **Everything SDK ?곕룞** | `es` ?꾨━?쎌뒪濡?Everything 珥덇퀬???뚯씪 寃€???듯빀. Everything 誘몄꽕移???graceful fallback. ?뚯씪 ?€?낅퀎 ?꾩씠肄?援щ텇 | +| **?뚮윭洹몄씤 ?먮룞 ?ㅼ튂** | `PluginHost.InstallFromZip()` ??濡쒖뺄 zip?먯꽌 DLL/JSON ?ㅽ궗 ?먮룞 異붿텧쨌?깅줉쨌濡쒕뱶. `UninstallPlugin()` ?쒓굅 湲곕뒫 ?ы븿. URL 湲곕컲 ?ㅼ튂???щ궡 蹂댁븞 ?뺤콉?쇰줈 ?쒖쇅 | +| **?대?吏€ ?대┰蹂대뱶 ?곸냽??* | ?대┰蹂대뱶 ?덉뒪?좊━ ?대?吏€ ??ぉ??PNG?묪ase64濡?DPAPI ?뷀샇???€??蹂듭썝. ???ъ떆???꾩뿉???대?吏€ ?덉뒪?좊━ ?좎? | +| **?ㅽ겕 ?뚮쭏 ?€鍮?媛뺥솕** | 6醫??ㅽ겕 ?뚮쭏 SecondaryText/PlaceholderText/HintText 諛앷린 +12~20 異붽? 媛쒖꽑. ?ы봽/?⑥텞??李??띿뒪??媛€?낆꽦 ?μ긽 | +| **?몄뒪?⑤윭 踰꾩쟾 ?숆린??* | SetupForm.cs `AppVer` 1.2.2??.3.1 ?섏젙. 踰꾩쟾 愿€由?泥댄겕由ъ뒪?몄뿉 MCP 踰꾩쟾쨌濡쒕뱶留?臾몄꽌 ??ぉ 異붽? | +| **?ъ슜??媛€?대뱶 ?낅뜲?댄듃** | version-tag v0.2.2?뭭0.3.1, v0.3.0/v0.3.1 踰꾩쟾 ?대젰 異붽?, version-tag??`color:#fff` 異붽? | +| **?ы봽 李??낅뜲?댄듃** | v0.3.1 ?좉린????ぉ 異붽?, ?뚯씪 ?€?낅퀎 ?щ낵 12醫?異붽? (Excel/Word/Pdf/Image/Video/Music/Archive/Code ?? | +| **臾몄꽌 ?뺣퉬** | AI_Service_Review.html ??AGENT_ROADMAP.html 蹂묓빀 ????젣, 湲곗닠遺€梨???ぉ ?꾨즺 ?쒖떆, LAUNCHER_ROADMAP ?앹꽦 | ### v0.3.0 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **MCP 클라이언트** | McpClientService (stdio/JSON-RPC 2.0). ConnectAsync → initialize → tools/list → tools/call. McpTool이 IAgentTool로 래핑 | -| **모델 폴백** | LlmService.SendAsync에 FallbackModels 순차 시도. 실패 시 토스트 알림으로 폴백 모델 안내 | -| **대화 분기** | ChatConversation.ParentId/BranchLabel, ForkConversation(). 우클릭 "여기서 분기" 메뉴. 사이드바 들여쓰기 표시 | -| **커맨드 팔레트** | CommandPaletteWindow (Ctrl+Shift+P). 16개 명령, 한글 초성 검색 | -| **보안 감사 로그** | AuditLogService — JSON 영속화, 30일 보관, 설정 토글 + 폴더 열기 버튼 | -| **에이전트 자율성** | 동적 반복 한도 (도구 15+회 → 한도 2배, 최대 50). 다단계 반성 | -| **토큰 관리** | TokenEstimator (모델별 비용, CJK 가중치). 상태바 비용 표시 | -| **스플릿 뷰** | Code 탭 파일 수정 시 자동 프리뷰, AutoPreview 설정 | -| **다중 서버** | RegisteredModel에 endpoint/apiKey 필드. 모델별 서버 라우팅 (Ollama/vLLM) | -| **대화별 설정** | Permission/DataUsage/Mood를 대화별 독립 저장·복원 | -| **DiffService** | LCS 기반 라인 diff (Added/Removed/Equal). GetSummary() 통계 | +| **MCP ?대씪?댁뼵??* | McpClientService (stdio/JSON-RPC 2.0). ConnectAsync ??initialize ??tools/list ??tools/call. McpTool??IAgentTool濡??섑븨 | +| **紐⑤뜽 ?대갚** | LlmService.SendAsync??FallbackModels ?쒖감 ?쒕룄. ?ㅽ뙣 ???좎뒪???뚮┝?쇰줈 ?대갚 紐⑤뜽 ?덈궡 | +| **?€??遺꾧린** | ChatConversation.ParentId/BranchLabel, ForkConversation(). ?고겢由?"?ш린??遺꾧린" 硫붾돱. ?ъ씠?쒕컮 ?ㅼ뿬?곌린 ?쒖떆 | +| **而ㅻ㎤???붾젅??* | CommandPaletteWindow (Ctrl+Shift+P). 16媛?紐낅졊, ?쒓? 珥덉꽦 寃€??| +| **蹂댁븞 媛먯궗 濡쒓렇** | AuditLogService ??JSON ?곸냽?? 30??蹂닿?, ?ㅼ젙 ?좉? + ?대뜑 ?닿린 踰꾪듉 | +| **?먯씠?꾪듃 ?먯쑉??* | ?숈쟻 諛섎났 ?쒕룄 (?꾧뎄 15+?????쒕룄 2諛? 理쒕? 50). ?ㅻ떒怨?諛섏꽦 | +| **?좏겙 愿€由?* | TokenEstimator (紐⑤뜽蹂?鍮꾩슜, CJK 媛€以묒튂). ?곹깭諛?鍮꾩슜 ?쒖떆 | +| **?ㅽ뵆由?酉?* | Code ???뚯씪 ?섏젙 ???먮룞 ?꾨━酉? AutoPreview ?ㅼ젙 | +| **?ㅼ쨷 ?쒕쾭** | RegisteredModel??endpoint/apiKey ?꾨뱶. 紐⑤뜽蹂??쒕쾭 ?쇱슦??(Ollama/vLLM) | +| **?€?붾퀎 ?ㅼ젙** | Permission/DataUsage/Mood瑜??€?붾퀎 ?낅┰ ?€?Β룸났??| +| **DiffService** | LCS 湲곕컲 ?쇱씤 diff (Added/Removed/Equal). GetSummary() ?듦퀎 | ### v0.2.2 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **AX.md 프로젝트 문맥 파일** | 작업 폴더에 AX.md를 만들면 Cowork/Code 시스템 프롬프트에 자동 주입. 상위 3단계까지 탐색, 최대 8000자 | -| **팁 알림 시스템** | Cowork/Code 탭 전환 시 24개 사용법 팁 랜덤 표시. 설정: 표시 여부(ShowTips) + 자동 사라짐 시간(TipDurationSeconds, 0~30초) | -| **개발자 모드** | 설정 → 공통 → 개발자 모드 (비밀번호 보호). 도구 호출 파라미터/결과 상세 표시 + 스텝별 승인/건너뛰기/중단 | -| **통계 강화** | DailyUsageStats에 ChatCounts(탭별), TotalTokens/PromptTokens/CompletionTokens 추가. 통계 윈도우에 대화 빈도 + 토큰 사용량 14일 막대 차트 | -| **무지개 글로우** | 메시지 전송 시 입력창 테두리에 7색 무지개 그라데이션 회전 애니메이션 (2초, LinearGradientBrush 회전) | -| **런처 중복 제거** | IndexService: Path 기반 중복 방지. CommandResolver: 검색 결과에서 같은 Path 필터링 (2중 방어) | +| **AX.md ?꾨줈?앺듃 臾몃㎘ ?뚯씪** | ?묒뾽 ?대뜑??AX.md瑜?留뚮뱾硫?Cowork/Code ?쒖뒪???꾨\?꾪듃???먮룞 二쇱엯. ?곸쐞 3?④퀎源뚯? ?먯깋, 理쒕? 8000??| +| **???뚮┝ ?쒖뒪??* | Cowork/Code ???꾪솚 ??24媛??ъ슜踰????쒕뜡 ?쒖떆. ?ㅼ젙: ?쒖떆 ?щ?(ShowTips) + ?먮룞 ?щ씪吏??쒓컙(TipDurationSeconds, 0~30珥? | +| **媛쒕컻??紐⑤뱶** | ?ㅼ젙 ??怨듯넻 ??媛쒕컻??紐⑤뱶 (鍮꾨?踰덊샇 蹂댄샇). ?꾧뎄 ?몄텧 ?뚮씪誘명꽣/寃곌낵 ?곸꽭 ?쒖떆 + ?ㅽ뀦蹂??뱀씤/嫄대꼫?곌린/以묐떒 | +| **?듦퀎 媛뺥솕** | DailyUsageStats??ChatCounts(??퀎), TotalTokens/PromptTokens/CompletionTokens 異붽?. ?듦퀎 ?덈룄?곗뿉 ?€??鍮덈룄 + ?좏겙 ?ъ슜??14??留됰? 李⑦듃 | +| **臾댁?媛?湲€濡쒖슦** | 硫붿떆吏€ ?꾩넚 ???낅젰李??뚮몢由ъ뿉 7??臾댁?媛?洹몃씪?곗씠???뚯쟾 ?좊땲硫붿씠??(2珥? LinearGradientBrush ?뚯쟾) | +| **?곗쿂 以묐났 ?쒓굅** | IndexService: Path 湲곕컲 以묐났 諛⑹?. CommandResolver: 寃€??寃곌낵?먯꽌 媛숈? Path ?꾪꽣留?(2以?諛⑹뼱) | ### v0.2.1 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **Code 시스템 프롬프트 고도화** | Claude Code/OpenCode 벤치마크 기반 8단계 워크플로우 (ORIENT→BASELINE→ANALYZE→PLAN→IMPLEMENT→VERIFY→GIT→REPORT). 테스트 우선, 변경 영향 분석, 자기 검증 | -| **GitTool** | 사내 GitHub Enterprise 연동. status/diff/log/add/commit/branch/checkout/stash/remote 지원. push/pull/fetch/rebase 차단 (사용자 직접 수행) | -| **BuildRunTool lint/format** | action="lint", action="format" 추가. ESLint/Prettier(JS), Ruff/Black(Python), dotnet format(C#), checkstyle(Maven) 자동 매핑 | -| **Grep 강화** | context_lines(0~5줄) 파라미터로 매치 전후 코드 표시, case_sensitive 파라미터로 대소문자 구분 제어 | -| **FileEdit replace_all** | replace_all=true 시 모든 매치 일괄 교체. false면 기존 유일성 검증 유지 | -| **루트 드라이브 차단** | C:\, D:\ 등 최상위 드라이브를 작업공간으로 설정하는 것을 차단 (하위 폴더 선택 필수) | -| **프리셋 순서 정렬** | TopicPreset.Order 필드 추가, JSON에서 order 값으로 표시 순서 제어 | -| **카테고리 필터 개선** | Cowork/Code: 프리셋 카테고리 기반 필터, 커스텀 프리셋 `__custom__` 통합 분류 | -| **에이전트 이름 매핑** | Code 카테고리별 에이전트 이름 (코드개발/리팩터링/코드리뷰/보안점검/테스트) + 대화 이력 아이콘 정확 표시 | -| **AI Agent 상세 가이드** | 사용자 가이드에 Chat/Cowork/Code 3탭 상세 설명, 경고 문구 (백업 필수), 공통 기능 안내 | -| **보안 점검 리네이밍** | "보안 취약점 점검" → "보안 점검"으로 간결하게 변경 | +| **Code ?쒖뒪???꾨\?꾪듃 怨좊룄??* | Claude Code/OpenCode 踰ㅼ튂留덊겕 湲곕컲 8?④퀎 ?뚰겕?뚮줈??(ORIENT?묪ASELINE?묨NALYZE?뭁LAN?묲MPLEMENT?뭋ERIFY?묰IT?뭃EPORT). ?뚯뒪???곗꽑, 蹂€寃??곹뼢 遺꾩꽍, ?먭린 寃€利?| +| **GitTool** | ?щ궡 GitHub Enterprise ?곕룞. status/diff/log/add/commit/branch/checkout/stash/remote 吏€?? push/pull/fetch/rebase 李⑤떒 (?ъ슜??吏곸젒 ?섑뻾) | +| **BuildRunTool lint/format** | action="lint", action="format" 異붽?. ESLint/Prettier(JS), Ruff/Black(Python), dotnet format(C#), checkstyle(Maven) ?먮룞 留ㅽ븨 | +| **Grep 媛뺥솕** | context_lines(0~5以? ?뚮씪誘명꽣濡?留ㅼ튂 ?꾪썑 肄붾뱶 ?쒖떆, case_sensitive ?뚮씪誘명꽣濡??€?뚮Ц??援щ텇 ?쒖뼱 | +| **FileEdit replace_all** | replace_all=true ??紐⑤뱺 留ㅼ튂 ?쇨큵 援먯껜. false硫?湲곗〈 ?좎씪??寃€利??좎? | +| **猷⑦듃 ?쒕씪?대툕 李⑤떒** | C:\, D:\ ??理쒖긽???쒕씪?대툕瑜??묒뾽怨듦컙?쇰줈 ?ㅼ젙?섎뒗 寃껋쓣 李⑤떒 (?섏쐞 ?대뜑 ?좏깮 ?꾩닔) | +| **?꾨━???쒖꽌 ?뺣젹** | TopicPreset.Order ?꾨뱶 異붽?, JSON?먯꽌 order 媛믪쑝濡??쒖떆 ?쒖꽌 ?쒖뼱 | +| **移댄뀒怨좊━ ?꾪꽣 媛쒖꽑** | Cowork/Code: ?꾨━??移댄뀒怨좊━ 湲곕컲 ?꾪꽣, 而ㅼ뒪?€ ?꾨━??`__custom__` ?듯빀 遺꾨쪟 | +| **?먯씠?꾪듃 ?대쫫 留ㅽ븨** | Code 移댄뀒怨좊━蹂??먯씠?꾪듃 ?대쫫 (肄붾뱶媛쒕컻/由ы뙥?곕쭅/肄붾뱶由щ럭/蹂댁븞?먭?/?뚯뒪?? + ?€???대젰 ?꾩씠肄??뺥솗 ?쒖떆 | +| **AI Agent ?곸꽭 媛€?대뱶** | ?ъ슜??媛€?대뱶??Chat/Cowork/Code 3???곸꽭 ?ㅻ챸, 寃쎄퀬 臾멸뎄 (諛깆뾽 ?꾩닔), 怨듯넻 湲곕뒫 ?덈궡 | +| **蹂댁븞 ?먭? 由щ꽕?대컢** | "蹂댁븞 痍⑥빟???먭?" ??"蹂댁븞 ?먭?"?쇰줈 媛꾧껐?섍쾶 蹂€寃?| ### v0.2.0 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **Code 탭 활성화** | 코딩 에이전트 탭 활성화 — 코드 개발, 리팩터링, 코드 리뷰, 보안 점검, 테스트 작성 5개 프리셋 | -| **DevEnvDetectTool** | IDE(VS Code, Visual Studio, IntelliJ, PyCharm) + 런타임(dotnet, python/conda, java, node, gcc) + 빌드도구(MSBuild, Maven, Gradle, CMake) 자동 감지. 레지스트리+PATH+환경변수, 60초 캐시 | -| **BuildRunTool** | 프로젝트 타입 감지(*.csproj, pom.xml, package.json 등 7종) + 빌드/테스트/실행 명령 자동 매핑 | -| **CodeSettings** | Nexus URL, NuGet/PyPI/Maven/npm 저장소 설정, 선호 IDE 경로, 빌드 타임아웃(30~300초), 완료 알림 | -| **Code 시스템 프롬프트** | 분석→계획→구현→검증→보고 5단계 워크플로우, 언어별 가이드라인(C#/Python/Java/C++/JS), 패키지 저장소 주입 | -| **설정 UI** | Code 탭 전용 설정 패널 — Nexus 저장소, 언어별 소스 URL, IDE 경로, 빌드 타임아웃, 완료 알림 | -| **마크다운 렌더러 완성** | 테이블(`\|`), 인용(`>`), 취소선(`~~`), 링크(`[text](url)`) 지원 추가 | -| **메시지 삭제** | 우클릭 → "이후 메시지 모두 삭제" (확인 다이얼로그 + 재렌더링) | -| **탭 단축키** | Ctrl+1=Chat, Ctrl+2=Cowork, Ctrl+3=Code | -| **에러 복구 UI** | LLM 오류 시 "재시도" 버튼 자동 표시 | -| **카테고리 필터 개선** | Cowork/Code: 프리셋 카테고리 기반 필터, 커스텀 프리셋 통합 분류 | -| **에이전트 이름 확장** | Code 프리셋별 에이전트 이름 매핑 (코드 개발/리팩터링/리뷰/보안/테스트) | -| **최대화 버튼** | 타이틀바에 최소화-최대화-닫기 3버튼 | -| **서브 바** | 탭 바 아래에 대화 제목(좌) + 미리보기 버튼(우) 분리 배치 | -| **완료 알림** | Cowork/Code 에이전트 완료 시 시스템 트레이 알림 | +| **Code ???쒖꽦??* | 肄붾뵫 ?먯씠?꾪듃 ???쒖꽦????肄붾뱶 媛쒕컻, 由ы뙥?곕쭅, 肄붾뱶 由щ럭, 蹂댁븞 ?먭?, ?뚯뒪???묒꽦 5媛??꾨━??| +| **DevEnvDetectTool** | IDE(VS Code, Visual Studio, IntelliJ, PyCharm) + ?고???dotnet, python/conda, java, node, gcc) + 鍮뚮뱶?꾧뎄(MSBuild, Maven, Gradle, CMake) ?먮룞 媛먯?. ?덉??ㅽ듃由?PATH+?섍꼍蹂€?? 60珥?罹먯떆 | +| **BuildRunTool** | ?꾨줈?앺듃 ?€??媛먯?(*.csproj, pom.xml, package.json ??7醫? + 鍮뚮뱶/?뚯뒪???ㅽ뻾 紐낅졊 ?먮룞 留ㅽ븨 | +| **CodeSettings** | Nexus URL, NuGet/PyPI/Maven/npm ?€?μ냼 ?ㅼ젙, ?좏샇 IDE 寃쎈줈, 鍮뚮뱶 ?€?꾩븘??30~300珥?, ?꾨즺 ?뚮┝ | +| **Code ?쒖뒪???꾨\?꾪듃** | 遺꾩꽍?믨퀎?띯넂援ы쁽?믨?利앪넂蹂닿퀬 5?④퀎 ?뚰겕?뚮줈?? ?몄뼱蹂?媛€?대뱶?쇱씤(C#/Python/Java/C++/JS), ?⑦궎吏€ ?€?μ냼 二쇱엯 | +| **?ㅼ젙 UI** | Code ???꾩슜 ?ㅼ젙 ?⑤꼸 ??Nexus ?€?μ냼, ?몄뼱蹂??뚯뒪 URL, IDE 寃쎈줈, 鍮뚮뱶 ?€?꾩븘?? ?꾨즺 ?뚮┝ | +| **留덊겕?ㅼ슫 ?뚮뜑???꾩꽦** | ?뚯씠釉?`\|`), ?몄슜(`>`), 痍⑥냼??`~~`), 留곹겕(`[text](url)`) 吏€??異붽? | +| **硫붿떆吏€ ??젣** | ?고겢由???"?댄썑 硫붿떆吏€ 紐⑤몢 ??젣" (?뺤씤 ?ㅼ씠?쇰줈洹?+ ?щ젋?붾쭅) | +| **???⑥텞??* | Ctrl+1=Chat, Ctrl+2=Cowork, Ctrl+3=Code | +| **?먮윭 蹂듦뎄 UI** | LLM ?ㅻ쪟 ??"?ъ떆?? 踰꾪듉 ?먮룞 ?쒖떆 | +| **移댄뀒怨좊━ ?꾪꽣 媛쒖꽑** | Cowork/Code: ?꾨━??移댄뀒怨좊━ 湲곕컲 ?꾪꽣, 而ㅼ뒪?€ ?꾨━???듯빀 遺꾨쪟 | +| **?먯씠?꾪듃 ?대쫫 ?뺤옣** | Code ?꾨━?뗫퀎 ?먯씠?꾪듃 ?대쫫 留ㅽ븨 (肄붾뱶 媛쒕컻/由ы뙥?곕쭅/由щ럭/蹂댁븞/?뚯뒪?? | +| **理쒕???踰꾪듉** | ?€?댄?諛붿뿉 理쒖냼??理쒕????リ린 3踰꾪듉 | +| **?쒕툕 諛?* | ??諛??꾨옒???€???쒕ぉ(醫? + 誘몃━蹂닿린 踰꾪듉(?? 遺꾨━ 諛곗튂 | +| **?꾨즺 ?뚮┝** | Cowork/Code ?먯씠?꾪듃 ?꾨즺 ???쒖뒪???몃젅???뚮┝ | ### v0.1.1 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **WebView2 프리뷰** | IE 기반 WebBrowser → Chromium 기반 WebView2 교체. AppData에 데이터 디렉터리 지정 | -| **Markdown 프리뷰** | Markdig NuGet으로 .md 파일을 무드 CSS 적용 HTML 렌더링 | -| **코드 블록 강화** | 라인 번호, 전체화면 팝업, 파일 저장 버튼, 언어별 확장자 자동 추천 | -| **무드 갤러리** | 텍스트 목록 → 2열 비주얼 카드 레이아웃으로 무드 미리보기 선택 | -| **에이전트 진행률 스티키 바** | 메시지 상단 고정 바 — 단계/퍼센트/경과시간, 완료 시 페이드아웃 | -| **파일 빠른 작업** | 생성 파일 배너에 [프리뷰][열기][폴더][복사] 4개 인라인 액션 버튼 | -| **작업 폴더 파일 탐색기** | 접이식 TreeView, 지연 로딩, 우클릭 메뉴(열기/삭제/이름변경), 에이전트 파일 생성 시 자동 새로고침, 상태 저장 | -| **document_review 도구** | 빈 섹션, 플레이스홀더, 날짜 정합성, HTML 태그 균형, 반복 텍스트, 기대 섹션 누락 검사 | -| **format_convert 도구** | md→html, html→txt, csv→html, md→txt 변환. 미지원 변환은 대안 워크플로우 안내 | -| **대화 내 검색** | Ctrl+F 검색 바, 이전/다음 탐색, 결과 개수 표시, ESC 닫기 | -| **메시지 우클릭 메뉴** | 텍스트 복사, 마크다운 복사, 인용 답장, 재생성 | -| **토스트 알림** | 복사/저장 등 액션 시 하단 중앙 페이드인-아웃 알림 | -| **대화 목록 성능** | 레이지 로딩 (50개 단위 + "더 보기"), 제목+내용 통합 검색 (Preview 필드) | -| **의사결정 UI** | 승인/수정/취소 버튼 선택 후 자동 숨김 + 결과 라벨 표시 | -| **채팅 반응형 너비** | 창 크기에 비례하여 메시지 버블 MaxWidth 자동 조절 (최소 500, 최대 1200) | -| **커스텀 프리셋/무드** | 아이콘 셋 선택 UI (5카테고리×8아이콘), 커스텀 무드 CSS 편집, 프리셋 배지 | -| **탭 전환 안정화** | Auto 권한 경고 초기화, 파일 탐색기 상태 복원, 안내문구 갱신 | -| **런처 개선** | 퍼지 검색 Shift+Enter로 폴더 열기, 웹검색 경고문 수정 | +| **WebView2 ?꾨━酉?* | IE 湲곕컲 WebBrowser ??Chromium 湲곕컲 WebView2 援먯껜. AppData???곗씠???붾젆?곕━ 吏€??| +| **Markdown ?꾨━酉?* | Markdig NuGet?쇰줈 .md ?뚯씪??臾대뱶 CSS ?곸슜 HTML ?뚮뜑留?| +| **肄붾뱶 釉붾줉 媛뺥솕** | ?쇱씤 踰덊샇, ?꾩껜?붾㈃ ?앹뾽, ?뚯씪 ?€??踰꾪듉, ?몄뼱蹂??뺤옣???먮룞 異붿쿇 | +| **臾대뱶 媛ㅻ윭由?* | ?띿뒪??紐⑸줉 ??2??鍮꾩<??移대뱶 ?덉씠?꾩썐?쇰줈 臾대뱶 誘몃━蹂닿린 ?좏깮 | +| **?먯씠?꾪듃 吏꾪뻾瑜??ㅽ떚??諛?* | 硫붿떆吏€ ?곷떒 怨좎젙 諛????④퀎/?쇱꽱??寃쎄낵?쒓컙, ?꾨즺 ???섏씠?쒖븘??| +| **?뚯씪 鍮좊Ⅸ ?묒뾽** | ?앹꽦 ?뚯씪 諛곕꼫??[?꾨━酉?[?닿린][?대뜑][蹂듭궗] 4媛??몃씪???≪뀡 踰꾪듉 | +| **?묒뾽 ?대뜑 ?뚯씪 ?먯깋湲?* | ?묒씠??TreeView, 吏€??濡쒕뵫, ?고겢由?硫붾돱(?닿린/??젣/?대쫫蹂€寃?, ?먯씠?꾪듃 ?뚯씪 ?앹꽦 ???먮룞 ?덈줈怨좎묠, ?곹깭 ?€??| +| **document_review ?꾧뎄** | 鍮??뱀뀡, ?뚮젅?댁뒪?€?? ?좎쭨 ?뺥빀?? HTML ?쒓렇 洹좏삎, 諛섎났 ?띿뒪?? 湲곕? ?뱀뀡 ?꾨씫 寃€??| +| **format_convert ?꾧뎄** | md?뭜tml, html?뭪xt, csv?뭜tml, md?뭪xt 蹂€?? 誘몄???蹂€?섏? ?€???뚰겕?뚮줈???덈궡 | +| **?€????寃€??* | Ctrl+F 寃€??諛? ?댁쟾/?ㅼ쓬 ?먯깋, 寃곌낵 媛쒖닔 ?쒖떆, ESC ?リ린 | +| **硫붿떆吏€ ?고겢由?硫붾돱** | ?띿뒪??蹂듭궗, 留덊겕?ㅼ슫 蹂듭궗, ?몄슜 ?듭옣, ?ъ깮??| +| **?좎뒪???뚮┝** | 蹂듭궗/?€?????≪뀡 ???섎떒 以묒븰 ?섏씠?쒖씤-?꾩썐 ?뚮┝ | +| **?€??紐⑸줉 ?깅뒫** | ?덉씠吏€ 濡쒕뵫 (50媛??⑥쐞 + "??蹂닿린"), ?쒕ぉ+?댁슜 ?듯빀 寃€??(Preview ?꾨뱶) | +| **?섏궗寃곗젙 UI** | ?뱀씤/?섏젙/痍⑥냼 踰꾪듉 ?좏깮 ???먮룞 ?④? + 寃곌낵 ?쇰꺼 ?쒖떆 | +| **梨꾪똿 諛섏쓳???덈퉬** | 李??ш린??鍮꾨??섏뿬 硫붿떆吏€ 踰꾨툝 MaxWidth ?먮룞 議곗젅 (理쒖냼 500, 理쒕? 1200) | +| **而ㅼ뒪?€ ?꾨━??臾대뱶** | ?꾩씠肄????좏깮 UI (5移댄뀒怨좊━횞8?꾩씠肄?, 而ㅼ뒪?€ 臾대뱶 CSS ?몄쭛, ?꾨━??諛곗? | +| **???꾪솚 ?덉젙??* | Auto 沅뚰븳 寃쎄퀬 珥덇린?? ?뚯씪 ?먯깋湲??곹깭 蹂듭썝, ?덈궡臾멸뎄 媛깆떊 | +| **?곗쿂 媛쒖꽑** | ?쇱? 寃€??Shift+Enter濡??대뜑 ?닿린, ?밴???寃쎄퀬臾??섏젙 | ### v0.1.0 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **Cowork 에이전트 루프 엔진** | LLM Function Calling 기반 Plan→Tool Execute→Observe→Re-evaluate 반복 루프. 최대 25회 반복, 실패 시 Self-Reflection 자동 재시도 (최대 3회) | -| **도구 시스템 (8종)** | file_read, file_write, file_edit, glob, grep, process, folder_map, document_read | -| **문서 생성 스킬 (6종)** | excel_create (.xlsx), docx_create (.docx), csv_create (.csv), markdown_create (.md), html_create (.html), script_create (.bat/.ps1) | -| **디자인 템플릿 시스템** | 10종 CSS 무드 템플릿 (modern, professional, creative, minimal, elegant, dark, colorful, corporate, magazine, dashboard). 대화창 하단 무드 아이콘 바로 선택 | -| **Task Decomposition** | LLM 응답에서 계획 단계 자동 추출 → 진행률 UI (단계 카드 + 프로그레스 바) | -| **Thinking UI** | LLM 추론 과정을 "Thinking..." 배너로 실시간 표시 | -| **Context Condenser** | 토큰 초과 시 이전 대화를 LLM으로 자동 요약하여 컨텍스트 윈도우 관리 | -| **Folder Map 도구** | 작업 폴더 디렉토리 트리 자동 생성 (depth/filter 지원, 빌드 산출물 자동 제외) | -| **Diff Preview** | file_edit 도구 실행 시 unified diff 생성 + 색상 하이라이팅 UI (추가=초록, 삭제=빨강) | -| **문서 읽기 도구** | PDF (PdfPig), DOCX, XLSX (OpenXml), CSV/TXT 등 다양한 형식 텍스트 추출. 보고서 작성 시 폴더 데이터 자동 참조 | -| **폴더 데이터 활용 설정** | 적극 활용(자동 탐색) / 소극 활용(요청 시) / 활용하지 않음 — 설정 + 대화창 하단 메뉴에서 전환 | -| **Cowork 설정 UI** | 파일 접근 권한, 출력 형식, 자동 미리보기, 에이전트 반복/재시도 횟수, 로그 상세도, 데이터 활용 수준 | -| **커스텀 폴더 메뉴** | 시스템 ContextMenu → 커스텀 Popup (Border+MouseLeftButtonUp 패턴, 14px 폰트) | -| **모델 선택기 개선** | 서비스 변경 시 팝업 유지, 모델 목록 동적 재구성 (closeOnClick 패턴) | -| **Gemini 모델 수정** | 존재하지 않는 모델 ID(gemini-3-flash 등) → 실제 모델(gemini-2.5-pro/flash 등)로 교체 | -| **에이전트 이벤트 UI** | Planning/StepStart/StepDone/ToolCall/ToolResult 배너 + 접이식 상세 보기 | +| **Cowork ?먯씠?꾪듃 猷⑦봽 ?붿쭊** | LLM Function Calling 湲곕컲 Plan?뭈ool Execute?뭀bserve?뭃e-evaluate 諛섎났 猷⑦봽. 理쒕? 25??諛섎났, ?ㅽ뙣 ??Self-Reflection ?먮룞 ?ъ떆??(理쒕? 3?? | +| **?꾧뎄 ?쒖뒪??(8醫?** | file_read, file_write, file_edit, glob, grep, process, folder_map, document_read | +| **臾몄꽌 ?앹꽦 ?ㅽ궗 (6醫?** | excel_create (.xlsx), docx_create (.docx), csv_create (.csv), markdown_create (.md), html_create (.html), script_create (.bat/.ps1) | +| **?붿옄???쒗뵆由??쒖뒪??* | 10醫?CSS 臾대뱶 ?쒗뵆由?(modern, professional, creative, minimal, elegant, dark, colorful, corporate, magazine, dashboard). ?€?붿갹 ?섎떒 臾대뱶 ?꾩씠肄?諛붾줈 ?좏깮 | +| **Task Decomposition** | LLM ?묐떟?먯꽌 怨꾪쉷 ?④퀎 ?먮룞 異붿텧 ??吏꾪뻾瑜?UI (?④퀎 移대뱶 + ?꾨줈洹몃젅??諛? | +| **Thinking UI** | LLM 異붾줎 怨쇱젙??"Thinking..." 諛곕꼫濡??ㅼ떆媛??쒖떆 | +| **Context Condenser** | ?좏겙 珥덇낵 ???댁쟾 ?€?붾? LLM?쇰줈 ?먮룞 ?붿빟?섏뿬 而⑦뀓?ㅽ듃 ?덈룄??愿€由?| +| **Folder Map ?꾧뎄** | ?묒뾽 ?대뜑 ?붾젆?좊━ ?몃━ ?먮룞 ?앹꽦 (depth/filter 吏€?? 鍮뚮뱶 ?곗텧臾??먮룞 ?쒖쇅) | +| **Diff Preview** | file_edit ?꾧뎄 ?ㅽ뻾 ??unified diff ?앹꽦 + ?됱긽 ?섏씠?쇱씠??UI (異붽?=珥덈줉, ??젣=鍮④컯) | +| **臾몄꽌 ?쎄린 ?꾧뎄** | PDF (PdfPig), DOCX, XLSX (OpenXml), CSV/TXT ???ㅼ뼇???뺤떇 ?띿뒪??異붿텧. 蹂닿퀬???묒꽦 ???대뜑 ?곗씠???먮룞 李몄“ | +| **?대뜑 ?곗씠???쒖슜 ?ㅼ젙** | ?곴레 ?쒖슜(?먮룞 ?먯깋) / ?뚭레 ?쒖슜(?붿껌 ?? / ?쒖슜?섏? ?딆쓬 ???ㅼ젙 + ?€?붿갹 ?섎떒 硫붾돱?먯꽌 ?꾪솚 | +| **Cowork ?ㅼ젙 UI** | ?뚯씪 ?묎렐 沅뚰븳, 異쒕젰 ?뺤떇, ?먮룞 誘몃━蹂닿린, ?먯씠?꾪듃 諛섎났/?ъ떆???잛닔, 濡쒓렇 ?곸꽭?? ?곗씠???쒖슜 ?섏? | +| **而ㅼ뒪?€ ?대뜑 硫붾돱** | ?쒖뒪??ContextMenu ??而ㅼ뒪?€ Popup (Border+MouseLeftButtonUp ?⑦꽩, 14px ?고듃) | +| **紐⑤뜽 ?좏깮湲?媛쒖꽑** | ?쒕퉬??蹂€寃????앹뾽 ?좎?, 紐⑤뜽 紐⑸줉 ?숈쟻 ?ш뎄??(closeOnClick ?⑦꽩) | +| **Gemini 紐⑤뜽 ?섏젙** | 議댁옱?섏? ?딅뒗 紐⑤뜽 ID(gemini-3-flash ?? ???ㅼ젣 紐⑤뜽(gemini-2.5-pro/flash ??濡?援먯껜 | +| **?먯씠?꾪듃 ?대깽??UI** | Planning/StepStart/StepDone/ToolCall/ToolResult 諛곕꼫 + ?묒씠???곸꽭 蹂닿린 | ### v0.0.7 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **Chat/Cowork/Code 3탭 UI** | 상단 탭을 Agent 단일 → Chat \| Cowork \| Code 3탭으로 전환. Cowork/Code 탭 활성화 (Phase 2/3 준비) | -| **작업 폴더 선택 바** | 입력 바 상단에 폴더 경로 표시 + 선택/해제 버튼. Cowork/Code 탭에서 자동 표시. 최근 폴더 10개 기억 | -| **파일 컨텍스트 첨부** | 파일 첨부 버튼 + 드래그 앤 드롭으로 파일을 대화 컨텍스트에 추가 (최대 10MB). 텍스트 파일 내용 자동 삽입 | -| **권한 시스템 설계** | 3단계 파일 접근 권한: Ask(매번 확인) / Auto(자동 허용) / Deny(차단). 설정에서 기본값 변경 가능 | -| **대화 주제 프리셋 7종** | 일반/경영/연구개발/제품분석/수율분석/제조기술/시스템 — JSON 기반 프리셋 동적 로드 (EmbeddedResource) | -| **대화 내보내기 확장** | Markdown + JSON + HTML + Text 4종 포맷 지원. HTML은 다크 테마 스타일 내장 | -| **메시지 타임스탬프** | 사용자/AI 메시지에 HH:mm 시간 표시 | -| **격려 알림 주기 타이머** | 주기적 타이머 추가 — 화면 잠금 없이도 설정 간격마다 격려 문구 팝업 표시 | -| **커스텀 메시지 박스** | 앱 전체 기본 MessageBox를 테마 통합 커스텀 다이얼로그로 교체 (인스톨러 포함) | +| **Chat/Cowork/Code 3??UI** | ?곷떒 ??쓣 Agent ?⑥씪 ??Chat \| Cowork \| Code 3??쑝濡??꾪솚. Cowork/Code ???쒖꽦??(Phase 2/3 以€鍮? | +| **?묒뾽 ?대뜑 ?좏깮 諛?* | ?낅젰 諛??곷떒???대뜑 寃쎈줈 ?쒖떆 + ?좏깮/?댁젣 踰꾪듉. Cowork/Code ??뿉???먮룞 ?쒖떆. 理쒓렐 ?대뜑 10媛?湲곗뼲 | +| **?뚯씪 而⑦뀓?ㅽ듃 泥⑤?** | ?뚯씪 泥⑤? 踰꾪듉 + ?쒕옒洹????쒕∼?쇰줈 ?뚯씪???€??而⑦뀓?ㅽ듃??異붽? (理쒕? 10MB). ?띿뒪???뚯씪 ?댁슜 ?먮룞 ?쎌엯 | +| **沅뚰븳 ?쒖뒪???ㅺ퀎** | 3?④퀎 ?뚯씪 ?묎렐 沅뚰븳: Ask(留ㅻ쾲 ?뺤씤) / Auto(?먮룞 ?덉슜) / Deny(李⑤떒). ?ㅼ젙?먯꽌 湲곕낯媛?蹂€寃?媛€??| +| **?€??二쇱젣 ?꾨━??7醫?* | ?쇰컲/寃쎌쁺/?곌뎄媛쒕컻/?쒗뭹遺꾩꽍/?섏쑉遺꾩꽍/?쒖“湲곗닠/?쒖뒪????JSON 湲곕컲 ?꾨━???숈쟻 濡쒕뱶 (EmbeddedResource) | +| **?€???대낫?닿린 ?뺤옣** | Markdown + JSON + HTML + Text 4醫??щ㎎ 吏€?? HTML?€ ?ㅽ겕 ?뚮쭏 ?ㅽ????댁옣 | +| **硫붿떆吏€ ?€?꾩뒪?ы봽** | ?ъ슜??AI 硫붿떆吏€??HH:mm ?쒓컙 ?쒖떆 | +| **寃⑸젮 ?뚮┝ 二쇨린 ?€?대㉧** | 二쇨린???€?대㉧ 異붽? ???붾㈃ ?좉툑 ?놁씠???ㅼ젙 媛꾧꺽留덈떎 寃⑸젮 臾멸뎄 ?앹뾽 ?쒖떆 | +| **而ㅼ뒪?€ 硫붿떆吏€ 諛뺤뒪** | ???꾩껜 湲곕낯 MessageBox瑜??뚮쭏 ?듯빀 而ㅼ뒪?€ ?ㅼ씠?쇰줈洹몃줈 援먯껜 (?몄뒪?⑤윭 ?ы븿) | ### v0.0.6 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **스트리밍 실시간 표시 수정** | 80ms 쓰로틀 + Task.Delay → 청크 단위 갱신 + `Dispatcher.InvokeAsync(Background)` 방식으로 전환. 응답이 실시간으로 부드럽게 표시 | -| **Shift+Enter 줄바꿈** | `AcceptsReturn="True"` + PreviewKeyDown 핸들러. Shift+Enter=줄바꿈, Enter=전송. 입력 영역 자동 수직 확장 (MinHeight 40 → MaxHeight 160) | -| **프롬프트 카드 워터마크** | 프롬프트 카드 선택 시 안내 문구를 실제 텍스트가 아닌 워터마크(placeholder) 오버레이로 표시. 입력 시 자동 사라짐 | -| **좋아요/싫어요 상호 배타 토글** | 좋아요↔싫어요 상호 배타 — 하나를 누르면 다른 쪽 자동 해제. `resetSibling`/`registerReset` 콜백 패턴 | -| **디스크 용량 초과 자동 삭제** | 드라이브 사용률 98% 초과 시 핀 고정 제외 오래된 대화부터 자동 삭제 (`PurgeForDiskSpace`). 2% 여유 확보 후 중단 | -| **우클릭 컨텍스트 메뉴** | 대화 제목에서 우클릭 시 커스텀 메뉴 바로 표시 (펜 아이콘 클릭 불필요). `MouseRightButtonDown` 이벤트 | -| **대화 더블클릭 오류 수정** | Visual 자식 인덱스 충돌 오류 — `RemoveAt`+`Insert` 패턴으로 안전 교체 + 스트리밍 중 대화 전환 시 `_streamCts?.Cancel()` 처리 | +| **?ㅽ듃由щ컢 ?ㅼ떆媛??쒖떆 ?섏젙** | 80ms ?곕줈?€ + Task.Delay ??泥?겕 ?⑥쐞 媛깆떊 + `Dispatcher.InvokeAsync(Background)` 諛⑹떇?쇰줈 ?꾪솚. ?묐떟???ㅼ떆媛꾩쑝濡?遺€?쒕읇寃??쒖떆 | +| **Shift+Enter 以꾨컮轅?* | `AcceptsReturn="True"` + PreviewKeyDown ?몃뱾?? Shift+Enter=以꾨컮轅? Enter=?꾩넚. ?낅젰 ?곸뿭 ?먮룞 ?섏쭅 ?뺤옣 (MinHeight 40 ??MaxHeight 160) | +| **?꾨\?꾪듃 移대뱶 ?뚰꽣留덊겕** | ?꾨\?꾪듃 移대뱶 ?좏깮 ???덈궡 臾멸뎄瑜??ㅼ젣 ?띿뒪?멸? ?꾨땶 ?뚰꽣留덊겕(placeholder) ?ㅻ쾭?덉씠濡??쒖떆. ?낅젰 ???먮룞 ?щ씪吏?| +| **醫뗭븘???レ뼱???곹샇 諛고? ?좉?** | 醫뗭븘?붴넄?レ뼱???곹샇 諛고? ???섎굹瑜??꾨Ⅴ硫??ㅻⅨ 履??먮룞 ?댁젣. `resetSibling`/`registerReset` 肄쒕갚 ?⑦꽩 | +| **?붿뒪???⑸웾 珥덇낵 ?먮룞 ??젣** | ?쒕씪?대툕 ?ъ슜瑜?98% 珥덇낵 ???€ 怨좎젙 ?쒖쇅 ?ㅻ옒???€?붾????먮룞 ??젣 (`PurgeForDiskSpace`). 2% ?ъ쑀 ?뺣낫 ??以묐떒 | +| **?고겢由?而⑦뀓?ㅽ듃 硫붾돱** | ?€???쒕ぉ?먯꽌 ?고겢由???而ㅼ뒪?€ 硫붾돱 諛붾줈 ?쒖떆 (???꾩씠肄??대┃ 遺덊븘??. `MouseRightButtonDown` ?대깽??| +| **?€???붾툝?대┃ ?ㅻ쪟 ?섏젙** | Visual ?먯떇 ?몃뜳??異⑸룎 ?ㅻ쪟 ??`RemoveAt`+`Insert` ?⑦꽩?쇰줈 ?덉쟾 援먯껜 + ?ㅽ듃由щ컢 以??€???꾪솚 ??`_streamCts?.Cancel()` 泥섎━ | ### v0.0.5 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **AX Agent 대화 창** | `!` 예약어로 AI 대화 창 (ChatWindow) 구현. 좌측 대화 목록 + 우측 메시지 영역 2패널 구조. Claude Desktop 스타일 디자인 | -| **LLM 4종 서비스 지원** | Ollama, vLLM(OpenAI 호환), Gemini, Claude API 통합. 설정 창에서 서비스/모델 등록 및 전환 | -| **스트리밍 + 타이핑 효과** | SSE 기반 스트리밍 응답. 12ms 타이머로 1~3글자씩 타이핑 효과 표시. 커서 깜빡임 애니메이션 | -| **마크다운 + 코드 구문 강조** | 코드 블록(10개 언어 키워드 하이라이팅), 목록, 볼드, 인라인 코드, 복사 버튼 | -| **토큰 사용량 표시** | 각 서비스별 실제 토큰 파싱. k/m 단위 표기 (1.2k, 2.3m). 응답 소요시간(초) 실시간 표시 | -| **프롬프트 카드** | 개발자 미리 설정 시스템 프롬프트 (Tag 형식). 카드 클릭 시 SystemCommand 자동 삽입 + placeholder 안내 | -| **사용자 프롬프트 템플릿** | 설정에서 추가/삭제 가능한 사용자 정의 프롬프트 템플릿. 입력 바 왼쪽 버튼으로 접근 | -| **대화 관리** | 고정/이름변경/분류(6종 카테고리)/삭제. 커스텀 Popup 메뉴. 인라인 제목 편집 (클릭 → 입력 → Enter) | -| **피드백 영속성** | 메시지별 좋아요/싫어요 상태 저장 및 대화 로드 시 복원 | -| **사용자 메시지 편집/복사** | 사용자 메시지에 편집/복사 버튼 추가. 편집 시 해당 메시지 이후 재생성 | -| **커스텀 Popup 메뉴 통일** | 모든 드롭다운 메뉴를 ContextMenu → 커스텀 Popup (12px 라운드, 호버, 드롭섀도) 으로 전환 | -| **캡처 순서 변경** | cap 명령 아이템 순서: 영역 선택 → 활성 창 → 스크롤 → 전체 화면 (사용 빈도순) | -| **지연 캡처** | Shift+Enter로 캡처 아이템 선택 시 타이머(3초/5초/10초) 선택 후 카운트다운 캡처 | -| **버그 수정** | 목록 텍스트 오버플로(StackPanel→Grid), 편집 Visual 자식 오류, + 버튼 클릭 불가, 제목 편집 이중 커밋 크래시 | +| **AX Agent ?€??李?* | `!` ?덉빟?대줈 AI ?€??李?(ChatWindow) 援ы쁽. 醫뚯륫 ?€??紐⑸줉 + ?곗륫 硫붿떆吏€ ?곸뿭 2?⑤꼸 援ъ“. Claude Desktop ?ㅽ????붿옄??| +| **LLM 4醫??쒕퉬??吏€??* | Ollama, vLLM(OpenAI ?명솚), Gemini, Claude API ?듯빀. ?ㅼ젙 李쎌뿉???쒕퉬??紐⑤뜽 ?깅줉 諛??꾪솚 | +| **?ㅽ듃由щ컢 + ?€?댄븨 ?④낵** | SSE 湲곕컲 ?ㅽ듃由щ컢 ?묐떟. 12ms ?€?대㉧濡?1~3湲€?먯뵫 ?€?댄븨 ?④낵 ?쒖떆. 而ㅼ꽌 源쒕묀???좊땲硫붿씠??| +| **留덊겕?ㅼ슫 + 肄붾뱶 援щЦ 媛뺤“** | 肄붾뱶 釉붾줉(10媛??몄뼱 ?ㅼ썙???섏씠?쇱씠??, 紐⑸줉, 蹂쇰뱶, ?몃씪??肄붾뱶, 蹂듭궗 踰꾪듉 | +| **?좏겙 ?ъ슜???쒖떆** | 媛??쒕퉬?ㅻ퀎 ?ㅼ젣 ?좏겙 ?뚯떛. k/m ?⑥쐞 ?쒓린 (1.2k, 2.3m). ?묐떟 ?뚯슂?쒓컙(珥? ?ㅼ떆媛??쒖떆 | +| **?꾨\?꾪듃 移대뱶** | 媛쒕컻??誘몃━ ?ㅼ젙 ?쒖뒪???꾨\?꾪듃 (Tag ?뺤떇). 移대뱶 ?대┃ ??SystemCommand ?먮룞 ?쎌엯 + placeholder ?덈궡 | +| **?ъ슜???꾨\?꾪듃 ?쒗뵆由?* | ?ㅼ젙?먯꽌 異붽?/??젣 媛€?ν븳 ?ъ슜???뺤쓽 ?꾨\?꾪듃 ?쒗뵆由? ?낅젰 諛??쇱そ 踰꾪듉?쇰줈 ?묎렐 | +| **?€??愿€由?* | 怨좎젙/?대쫫蹂€寃?遺꾨쪟(6醫?移댄뀒怨좊━)/??젣. 而ㅼ뒪?€ Popup 硫붾돱. ?몃씪???쒕ぉ ?몄쭛 (?대┃ ???낅젰 ??Enter) | +| **?쇰뱶諛??곸냽??* | 硫붿떆吏€蹂?醫뗭븘???レ뼱???곹깭 ?€??諛??€??濡쒕뱶 ??蹂듭썝 | +| **?ъ슜??硫붿떆吏€ ?몄쭛/蹂듭궗** | ?ъ슜??硫붿떆吏€???몄쭛/蹂듭궗 踰꾪듉 異붽?. ?몄쭛 ???대떦 硫붿떆吏€ ?댄썑 ?ъ깮??| +| **而ㅼ뒪?€ Popup 硫붾돱 ?듭씪** | 紐⑤뱺 ?쒕∼?ㅼ슫 硫붾돱瑜?ContextMenu ??而ㅼ뒪?€ Popup (12px ?쇱슫?? ?몃쾭, ?쒕∼?€?? ?쇰줈 ?꾪솚 | +| **罹≪쿂 ?쒖꽌 蹂€寃?* | cap 紐낅졊 ?꾩씠???쒖꽌: ?곸뿭 ?좏깮 ???쒖꽦 李????ㅽ겕濡????꾩껜 ?붾㈃ (?ъ슜 鍮덈룄?? | +| **吏€??罹≪쿂** | Shift+Enter濡?罹≪쿂 ?꾩씠???좏깮 ???€?대㉧(3珥?5珥?10珥? ?좏깮 ??移댁슫?몃떎??罹≪쿂 | +| **踰꾧렇 ?섏젙** | 紐⑸줉 ?띿뒪???ㅻ쾭?뚮줈(StackPanel?묰rid), ?몄쭛 Visual ?먯떇 ?ㅻ쪟, + 踰꾪듉 ?대┃ 遺덇?, ?쒕ぉ ?몄쭛 ?댁쨷 而ㅻ컠 ?щ옒??| ### v0.0.4 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **설정 알림 바로보기 버튼** | 알림 탭 하단에 "바로보기" 버튼 추가. 시간 미도래 시에도 설정한 위치·표시 시간으로 팝업 즉시 확인 가능 | -| **런처 안내 문구 랜덤화** | 고정 플레이스홀더 "무엇을 도와드릴까요?" → 25종 랜덤 문구. 정중한 인사 + 기능 홍보(계산기·클립보드·웹검색·즐겨찾기·스니펫·워크스페이스·캡처 등). 런처 열릴 때마다 교체. 5개국어 대응(ko/en/ja/zh/vi) | -| **다이아몬드 픽셀 아이콘 애니메이션** | 런처 입력창 좌측 4개 픽셀이 순차적으로 Opacity 점멸 (4초 주기 Forever). 디스플레이 패널 픽셀 점등 형상화 | -| **글로벌 단축키 콤보박스** | 불안정한 키 녹화 방식 제거 → 검증된 12종 키 조합 콤보박스 선택으로 변경. Alt+Space, Ctrl+Space, Ctrl+Alt+Space, Alt+X/A/Z, Ctrl+Shift+Space, Ctrl+`, Win+Space, Ctrl+Alt+A, Ctrl+;, F12 | -| **트레이 메뉴 개편** | "사용 가이드 문서보기" 항목 신규 추가 (GlyphGuide = `\uE736`). "정보" → "개발자 정보"로 이름 변경 + 종료 바로 위로 위치 이동 | -| **사용 통계 화면 FHD 최적화** | 창 높이 640→900px, MinHeight 540→700px. 차트 막대 높이 110→88px (MaxBarHeight 80→66). 자주 쓴 명령어 표시 개수 8→10개. 인기 명령어·즐겨찾기 섹션 간 마진 추가 | -| **사용 가이드 문서 배포** | `Assets/AX Commander 사용가이드.htm` 빌드 시 출력 폴더에 자동 복사. 트레이 메뉴에서 기본 브라우저로 열기. 버전 이력 섹션 포함 (v0.0.0 ~ v0.0.4) | +| **?ㅼ젙 ?뚮┝ 諛붾줈蹂닿린 踰꾪듉** | ?뚮┝ ???섎떒??"諛붾줈蹂닿린" 踰꾪듉 異붽?. ?쒓컙 誘몃룄???쒖뿉???ㅼ젙???꾩튂쨌?쒖떆 ?쒓컙?쇰줈 ?앹뾽 利됱떆 ?뺤씤 媛€??| +| **?곗쿂 ?덈궡 臾멸뎄 ?쒕뜡??* | 怨좎젙 ?뚮젅?댁뒪?€??"臾댁뾿???꾩??쒕┫源뚯슂?" ??25醫??쒕뜡 臾멸뎄. ?뺤쨷???몄궗 + 湲곕뒫 ?띾낫(怨꾩궛湲걔룻겢由쎈낫?쑣룹쎒寃€?됀룹쫹寃⑥갼湲걔룹뒪?덊렖쨌?뚰겕?ㅽ럹?댁뒪쨌罹≪쿂 ??. ?곗쿂 ?대┫ ?뚮쭏??援먯껜. 5媛쒓뎅???€??ko/en/ja/zh/vi) | +| **?ㅼ씠?꾨が???쎌? ?꾩씠肄??좊땲硫붿씠??* | ?곗쿂 ?낅젰李?醫뚯륫 4媛??쎌????쒖감?곸쑝濡?Opacity ?먮㈇ (4珥?二쇨린 Forever). ?붿뒪?뚮젅???⑤꼸 ?쎌? ?먮벑 ?뺤긽??| +| **湲€濡쒕쾶 ?⑥텞??肄ㅻ낫諛뺤뒪** | 遺덉븞?뺥븳 ???뱁솕 諛⑹떇 ?쒓굅 ??寃€利앸맂 12醫???議고빀 肄ㅻ낫諛뺤뒪 ?좏깮?쇰줈 蹂€寃? Alt+Space, Ctrl+Space, Ctrl+Alt+Space, Alt+X/A/Z, Ctrl+Shift+Space, Ctrl+`, Win+Space, Ctrl+Alt+A, Ctrl+;, F12 | +| **?몃젅??硫붾돱 媛쒗렪** | "?ъ슜 媛€?대뱶 臾몄꽌蹂닿린" ??ぉ ?좉퇋 異붽? (GlyphGuide = `\uE736`). "?뺣낫" ??"媛쒕컻???뺣낫"濡??대쫫 蹂€寃?+ 醫낅즺 諛붾줈 ?꾨줈 ?꾩튂 ?대룞 | +| **?ъ슜 ?듦퀎 ?붾㈃ FHD 理쒖쟻??* | 李??믪씠 640??00px, MinHeight 540??00px. 李⑦듃 留됰? ?믪씠 110??8px (MaxBarHeight 80??6). ?먯< ??紐낅졊???쒖떆 媛쒖닔 8??0媛? ?멸린 紐낅졊?는룹쫹寃⑥갼湲??뱀뀡 媛?留덉쭊 異붽? | +| **?ъ슜 媛€?대뱶 臾몄꽌 諛고룷** | `Assets/AX Commander ?ъ슜媛€?대뱶.htm` 鍮뚮뱶 ??異쒕젰 ?대뜑???먮룞 蹂듭궗. ?몃젅??硫붾돱?먯꽌 湲곕낯 釉뚮씪?곗?濡??닿린. 踰꾩쟾 ?대젰 ?뱀뀡 ?ы븿 (v0.0.0 ~ v0.0.4) | ### v0.0.3 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **키보드 단축키 16종 추가** | 1차: F1(도움말), F5(인덱스 새로 고침), Delete(항목 제거+확인), Ctrl+L(입력 초기화), Ctrl+C(이름 복사), Ctrl+Shift+C(경로 복사), Ctrl+Shift+E(탐색기 열기), Ctrl+Enter(관리자 실행), Alt+Enter(속성 보기). 2차: Ctrl+H(히스토리), Ctrl+R(최근), Ctrl+B(즐겨찾기), Ctrl+K(단축키 도움말), Ctrl+1~9(N번째 실행), F2(이름 바꾸기), PageUp/Down(페이지 스크롤) | -| **결과 목록 번호 뱃지** | 1~9 번호 표시 (IndexToNumberConverter). Ctrl+N으로 즉시 실행 연동 | -| **토스트 오버레이** | 별도 ToastOverlay Border (녹색 배경+체크 아이콘). 경로 복사 등 결과 표시, 2초 자동 숨김 | -| **도움말 검색** | HelpDetailWindow 상단에 SearchBox 추가. 실시간 키워드 필터링 (제목/명령/설명/카테고리) | -| **액션 모드 확장** | → 진입 시 7개 옵션: 경로 복사, 전체 경로 복사, 탐색기, 관리자, 터미널, 속성 보기, 이름 바꾸기 | -| **도움말 창 3탭 메뉴 재설계** | 상단 메뉴를 개요/단축키 현황/예약어 현황 3탭으로 분리. 하위 카테고리 탭 유지. 숫자키 1/2/3으로 탭 전환 | -| **프리픽스 변경** | `~` → 워크스페이스 관리 (기존 `!`), `cd` → 폴더 별칭 (기존 `~`), `!` → 비어있음 (신기능 배정 가능) | -| **설정 버전 마이그레이션** | SettingsService에 `MigrateIfNeeded()` 프레임워크 추가. 이전 버전 settings.json을 최신 스키마로 자동 마이그레이션. 신규 프로퍼티는 C# 기본값 자동 적용. 구조 변경(키 이름 변경 등)은 버전별 마이그레이션 로직 순차 실행 | -| **파괴적 동작 확인** | Delete 키 실행 시 MessageBox 확인 다이얼로그 (OK/Cancel) | -| **토스트 알림** | LauncherWindow에 ShowToast() 메서드 추가. 경로 복사 등 결과를 IndexStatusText에 임시 표시 | -| **Windows 실행 명령 (`^`)** | `^ notepad`, `^ cmd`, `^ calc` 등 Win+R 실행 창과 동일한 명령 실행. RunHandler 신규 추가 | -| **기본 앱 별칭 강화** | `note`, `txt` → 메모장, `msword`/`msexcel`/`mspowerpoint` + 확장자(`docx`, `xlsx`, `pptx`, `csv`, `doc`, `xls`, `ppt`) → 해당 Office 앱. Score 부스트(95)로 항상 최상단 표시 | -| **인스톨러 UI 아이콘** | 폼 아이콘(타이틀바+작업표시줄)에 다이아몬드 픽셀 아이콘 반영 | -| **Help 창 확대** | 880→1020px 너비 확대 + 카테고리 탭 패딩 축소 → 가로 스크롤 없이 모든 탭 표시 | -| **Help 개요 갱신** | 개요 문구에 v0.0.3 표기, 폴더 검색·루틴·일지·한글 앱 실행 기능 반영, 웹검색 예시(`?n` 네이버) 추가 | -| **코드 품질 개선** | ShowIndexingProgress 오버레이 누수 수정(finally 제거), RunHandler Process.Dispose, IndexService volatile, HelpDetailWindow 상수 추출, SetupForm Icon null 체크 | +| **?ㅻ낫???⑥텞??16醫?異붽?** | 1李? F1(?꾩?留?, F5(?몃뜳???덈줈 怨좎묠), Delete(??ぉ ?쒓굅+?뺤씤), Ctrl+L(?낅젰 珥덇린??, Ctrl+C(?대쫫 蹂듭궗), Ctrl+Shift+C(寃쎈줈 蹂듭궗), Ctrl+Shift+E(?먯깋湲??닿린), Ctrl+Enter(愿€由ъ옄 ?ㅽ뻾), Alt+Enter(?띿꽦 蹂닿린). 2李? Ctrl+H(?덉뒪?좊━), Ctrl+R(理쒓렐), Ctrl+B(利먭꺼李얘린), Ctrl+K(?⑥텞???꾩?留?, Ctrl+1~9(N踰덉㎏ ?ㅽ뻾), F2(?대쫫 諛붽씀湲?, PageUp/Down(?섏씠吏€ ?ㅽ겕濡? | +| **寃곌낵 紐⑸줉 踰덊샇 諭껋?** | 1~9 踰덊샇 ?쒖떆 (IndexToNumberConverter). Ctrl+N?쇰줈 利됱떆 ?ㅽ뻾 ?곕룞 | +| **?좎뒪???ㅻ쾭?덉씠** | 蹂꾨룄 ToastOverlay Border (?뱀깋 諛곌꼍+泥댄겕 ?꾩씠肄?. 寃쎈줈 蹂듭궗 ??寃곌낵 ?쒖떆, 2珥??먮룞 ?④? | +| **?꾩?留?寃€??* | HelpDetailWindow ?곷떒??SearchBox 異붽?. ?ㅼ떆媛??ㅼ썙???꾪꽣留?(?쒕ぉ/紐낅졊/?ㅻ챸/移댄뀒怨좊━) | +| **?≪뀡 紐⑤뱶 ?뺤옣** | ??吏꾩엯 ??7媛??듭뀡: 寃쎈줈 蹂듭궗, ?꾩껜 寃쎈줈 蹂듭궗, ?먯깋湲? 愿€由ъ옄, ?곕??? ?띿꽦 蹂닿린, ?대쫫 諛붽씀湲?| +| **?꾩?留?李?3??硫붾돱 ?ъ꽕怨?* | ?곷떒 硫붾돱瑜?媛쒖슂/?⑥텞???꾪솴/?덉빟???꾪솴 3??쑝濡?遺꾨━. ?섏쐞 移댄뀒怨좊━ ???좎?. ?レ옄??1/2/3?쇰줈 ???꾪솚 | +| **?꾨━?쎌뒪 蹂€寃?* | `~` ???뚰겕?ㅽ럹?댁뒪 愿€由?(湲곗〈 `!`), `cd` ???대뜑 蹂꾩묶 (湲곗〈 `~`), `!` ??鍮꾩뼱?덉쓬 (?좉린??諛곗젙 媛€?? | +| **?ㅼ젙 踰꾩쟾 留덉씠洹몃젅?댁뀡** | SettingsService??`MigrateIfNeeded()` ?꾨젅?꾩썙??異붽?. ?댁쟾 踰꾩쟾 settings.json??理쒖떊 ?ㅽ궎留덈줈 ?먮룞 留덉씠洹몃젅?댁뀡. ?좉퇋 ?꾨줈?쇳떚??C# 湲곕낯媛??먮룞 ?곸슜. 援ъ“ 蹂€寃????대쫫 蹂€寃????€ 踰꾩쟾蹂?留덉씠洹몃젅?댁뀡 濡쒖쭅 ?쒖감 ?ㅽ뻾 | +| **?뚭눼???숈옉 ?뺤씤** | Delete ???ㅽ뻾 ??MessageBox ?뺤씤 ?ㅼ씠?쇰줈洹?(OK/Cancel) | +| **?좎뒪???뚮┝** | LauncherWindow??ShowToast() 硫붿꽌??異붽?. 寃쎈줈 蹂듭궗 ??寃곌낵瑜?IndexStatusText???꾩떆 ?쒖떆 | +| **Windows ?ㅽ뻾 紐낅졊 (`^`)** | `^ notepad`, `^ cmd`, `^ calc` ??Win+R ?ㅽ뻾 李쎄낵 ?숈씪??紐낅졊 ?ㅽ뻾. RunHandler ?좉퇋 異붽? | +| **湲곕낯 ??蹂꾩묶 媛뺥솕** | `note`, `txt` ??硫붾え?? `msword`/`msexcel`/`mspowerpoint` + ?뺤옣??`docx`, `xlsx`, `pptx`, `csv`, `doc`, `xls`, `ppt`) ???대떦 Office ?? Score 遺€?ㅽ듃(95)濡???긽 理쒖긽???쒖떆 | +| **?몄뒪?⑤윭 UI ?꾩씠肄?* | ???꾩씠肄??€?댄?諛??묒뾽?쒖떆以????ㅼ씠?꾨が???쎌? ?꾩씠肄?諛섏쁺 | +| **Help 李??뺣?** | 880??020px ?덈퉬 ?뺣? + 移댄뀒怨좊━ ???⑤뵫 異뺤냼 ??媛€濡??ㅽ겕濡??놁씠 紐⑤뱺 ???쒖떆 | +| **Help 媛쒖슂 媛깆떊** | 媛쒖슂 臾멸뎄??v0.0.3 ?쒓린, ?대뜑 寃€?됀룸(?는룹씪吏€쨌?쒓? ???ㅽ뻾 湲곕뒫 諛섏쁺, ?밴????덉떆(`?n` ?ㅼ씠踰? 異붽? | +| **肄붾뱶 ?덉쭏 媛쒖꽑** | ShowIndexingProgress ?ㅻ쾭?덉씠 ?꾩닔 ?섏젙(finally ?쒓굅), RunHandler Process.Dispose, IndexService volatile, HelpDetailWindow ?곸닔 異붿텧, SetupForm Icon null 泥댄겕 | ### v0.0.2 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **빠른 실행 Placeholder** | 입력 필드에 힌트 텍스트 표시 (키워드, 표시 이름, 경로). ModernTextBox 템플릿에 `Tag` 기반 워터마크 추가 | -| **기본 앱 별칭 19종** | 한글+영문 이름으로 즉시 실행: 메모장/notepad, 계산기/calc, 엑셀/excel, 워드/word, 파워포인트/ppt, 탐색기/explorer, cmd, powershell, 그림판/paint, 캡처/snip, Edge, Teams, VS Code, Outlook, 원격/rdp, 작업관리자/taskmgr 등. 실제 설치된 앱만 자동 감지 | +| **鍮좊Ⅸ ?ㅽ뻾 Placeholder** | ?낅젰 ?꾨뱶???뚰듃 ?띿뒪???쒖떆 (?ㅼ썙?? ?쒖떆 ?대쫫, 寃쎈줈). ModernTextBox ?쒗뵆由우뿉 `Tag` 湲곕컲 ?뚰꽣留덊겕 異붽? | +| **湲곕낯 ??蹂꾩묶 19醫?* | ?쒓?+?곷Ц ?대쫫?쇰줈 利됱떆 ?ㅽ뻾: 硫붾え??notepad, 怨꾩궛湲?calc, ?묒?/excel, ?뚮뱶/word, ?뚯썙?ъ씤??ppt, ?먯깋湲?explorer, cmd, powershell, 洹몃┝??paint, 罹≪쿂/snip, Edge, Teams, VS Code, Outlook, ?먭꺽/rdp, ?묒뾽愿€由ъ옄/taskmgr ?? ?ㅼ젣 ?ㅼ튂???깅쭔 ?먮룞 媛먯? | ### v0.0.1 -| 구분 | 내용 | +| 援щ텇 | ?댁슜 | |------|------| -| **인스톨러 통합** | 온라인/오프라인 2종 → 오프라인 1종으로 통합. .NET Framework 4.8 기반 (Windows 기본 포함). 관리자 권한 자동 요청 (app.manifest `requireAdministrator`) | -| **검색 확장자 설정** | 설정 → 일반 탭에 태그형 확장자 UI. 기본 30+종 (실행/문서/텍스트/이미지). 사용자 추가/삭제 가능 | -| **폴더 인덱싱** | 인덱스 경로의 1단계 하위 폴더도 검색·열기 가능 | -| **인덱싱 현황 표시** | 런처 하단에 `✓ N개 항목 색인됨 (X.X초)` 자동 표시 → 5초 후 사라짐. 설정 저장 시 프로그레스 오버레이 | -| **Help 인기 탭** | ⭐ 인기 탭 추가 (2번째 위치). 파일검색/웹검색/클립보드 핵심 기능만 필터 | -| **다이아몬드 픽셀 아이콘** | 런처 입력창 좌측 + 정보 창 + 트레이 + 인스톨러 헤더에 벡터 다이아몬드 아이콘 적용 | -| **정보 창 아이콘** | 비트맵 ICO → 벡터 Canvas 렌더링 (해상도 독립, DPI 무관 선명) | -| **언어 라벨** | 설정 → Language (영어 표기로 변경, 다국어 사용자 접근성) | -| **버그 수정** | HelpDetailWindow 인기 탭 연산자 우선순위 버그 (`&&`/`||`), DispatcherTimer 중복 생성 방지, Installer nullable 경고 13개 해소 | +| **?몄뒪?⑤윭 ?듯빀** | ?⑤씪???ㅽ봽?쇱씤 2醫????ㅽ봽?쇱씤 1醫낆쑝濡??듯빀. .NET Framework 4.8 湲곕컲 (Windows 湲곕낯 ?ы븿). 愿€由ъ옄 沅뚰븳 ?먮룞 ?붿껌 (app.manifest `requireAdministrator`) | +| **寃€???뺤옣???ㅼ젙** | ?ㅼ젙 ???쇰컲 ??뿉 ?쒓렇???뺤옣??UI. 湲곕낯 30+醫?(?ㅽ뻾/臾몄꽌/?띿뒪???대?吏€). ?ъ슜??異붽?/??젣 媛€??| +| **?대뜑 ?몃뜳??* | ?몃뜳??寃쎈줈??1?④퀎 ?섏쐞 ?대뜑??寃€?됀룹뿴湲?媛€??| +| **?몃뜳???꾪솴 ?쒖떆** | ?곗쿂 ?섎떒??`??N媛???ぉ ?됱씤??(X.X珥?` ?먮룞 ?쒖떆 ??5珥????щ씪吏? ?ㅼ젙 ?€?????꾨줈洹몃젅???ㅻ쾭?덉씠 | +| **Help ?멸린 ??* | 狩??멸린 ??異붽? (2踰덉㎏ ?꾩튂). ?뚯씪寃€???밴????대┰蹂대뱶 ?듭떖 湲곕뒫留??꾪꽣 | +| **?ㅼ씠?꾨が???쎌? ?꾩씠肄?* | ?곗쿂 ?낅젰李?醫뚯륫 + ?뺣낫 李?+ ?몃젅??+ ?몄뒪?⑤윭 ?ㅻ뜑??踰≫꽣 ?ㅼ씠?꾨が???꾩씠肄??곸슜 | +| **?뺣낫 李??꾩씠肄?* | 鍮꾪듃留?ICO ??踰≫꽣 Canvas ?뚮뜑留?(?댁긽???낅┰, DPI 臾닿? ?좊챸) | +| **?몄뼱 ?쇰꺼** | ?ㅼ젙 ??Language (?곸뼱 ?쒓린濡?蹂€寃? ?ㅺ뎅???ъ슜???묎렐?? | +| **踰꾧렇 ?섏젙** | HelpDetailWindow ?멸린 ???곗궛???곗꽑?쒖쐞 踰꾧렇 (`&&`/`||`), DispatcherTimer 以묐났 ?앹꽦 諛⑹?, Installer nullable 寃쎄퀬 13媛??댁냼 | ### v0.0.0 -정식 릴리즈. 40개+ 명령어, 9종 테마, 11개 설정 탭, 클립보드 DPAPI 암호화, 잠금 해제 알림, 화면 캡처, 모던 트레이 메뉴, 설정 가져오기/내보내기. +?뺤떇 由대━利? 40媛? 紐낅졊?? 9醫??뚮쭏, 11媛??ㅼ젙 ?? ?대┰蹂대뱶 DPAPI ?뷀샇?? ?좉툑 ?댁젣 ?뚮┝, ?붾㈃ 罹≪쿂, 紐⑤뜕 ?몃젅??硫붾돱, ?ㅼ젙 媛€?몄삤湲??대낫?닿린. --- -## 개발 검토 — 워크플로우 병목 분석 그래프 +## 媛쒕컻 寃€?????뚰겕?뚮줈??蹂묐ぉ 遺꾩꽍 洹몃옒?? -> **상태**: 검토 완료 · 구현 대기 -> **검토일**: 2026-03-30 -> **대상**: 개발자 모드 전용 기능 +> **?곹깭**: 寃€???꾨즺 쨌 援ы쁽 ?€湲? +> **寃€?좎씪**: 2026-03-30 +> **?€??*: 媛쒕컻??紐⑤뱶 ?꾩슜 湲곕뒫 -### 배경 +### 諛곌꼍 -WorkflowAnalyzerWindow(타임라인 뷰)와 AgentStatsDashboardWindow(통계 대시보드)가 이미 구현되어 있으나, -**실시간으로 어디가 병목인지 시각적으로 보여주는 그래프**가 없음. -에이전트 실행 중 "LLM 호출이 느린 건지, 특정 도구가 느린 건지" 판단이 어려움. +WorkflowAnalyzerWindow(?€?꾨씪??酉??€ AgentStatsDashboardWindow(?듦퀎 ?€?쒕낫??媛€ ?대? 援ы쁽?섏뼱 ?덉쑝?? +**?ㅼ떆媛꾩쑝濡??대뵒媛€ 蹂묐ぉ?몄? ?쒓컖?곸쑝濡?蹂댁뿬二쇰뒗 洹몃옒??*媛€ ?놁쓬. +?먯씠?꾪듃 ?ㅽ뻾 以?"LLM ?몄텧???먮┛ 嫄댁?, ?뱀젙 ?꾧뎄媛€ ?먮┛ 嫄댁?" ?먮떒???대젮?€. -### 현재 보유 기반 +### ?꾩옱 蹂댁쑀 湲곕컲 -| 구성요소 | 상태 | 위치 | +| 援ъ꽦?붿냼 | ?곹깭 | ?꾩튂 | |----------|:----:|------| -| WorkflowAnalyzerWindow | ✅ | `Views/WorkflowAnalyzerWindow.xaml(.cs)` — 이벤트 타임라인, 요약 카드 | -| AgentEvent.ElapsedMs | ✅ | 각 도구 실행 소요시간 수집중 | -| AgentEvent.InputTokens/OutputTokens | ✅ | LLM 호출별 토큰량 수집중 | -| AgentEvent.Iteration | ✅ | 반복 번호 수집중 | -| AgentStatsDashboardWindow | ✅ | `Views/AgentStatsDashboardWindow.xaml(.cs)` — 일별 바 차트, 도구 빈도 | -| LLM 호출 자체의 소요시간 | ❌ 미수집 | `SendWithToolsAsync` 전후 Stopwatch 추가 필요 | -| 차트 라이브러리 | ❌ 불필요 | 모든 차트를 WPF Canvas+Rectangle 직접 구현 | +| WorkflowAnalyzerWindow | ??| `Views/WorkflowAnalyzerWindow.xaml(.cs)` ???대깽???€?꾨씪?? ?붿빟 移대뱶 | +| AgentEvent.ElapsedMs | ??| 媛??꾧뎄 ?ㅽ뻾 ?뚯슂?쒓컙 ?섏쭛以?| +| AgentEvent.InputTokens/OutputTokens | ??| LLM ?몄텧蹂??좏겙???섏쭛以?| +| AgentEvent.Iteration | ??| 諛섎났 踰덊샇 ?섏쭛以?| +| AgentStatsDashboardWindow | ??| `Views/AgentStatsDashboardWindow.xaml(.cs)` ???쇰퀎 諛?李⑦듃, ?꾧뎄 鍮덈룄 | +| LLM ?몄텧 ?먯껜???뚯슂?쒓컙 | ??誘몄닔吏?| `SendWithToolsAsync` ?꾪썑 Stopwatch 異붽? ?꾩슂 | +| 李⑦듃 ?쇱씠釉뚮윭由?| ??遺덊븘??| 紐⑤뱺 李⑦듃瑜?WPF Canvas+Rectangle 吏곸젒 援ы쁽 | -### 추가 구현 대상 — 3종 시각화 +### 異붽? 援ы쁽 ?€????3醫??쒓컖?? -#### ① 워터폴 차트 (시간 흐름 + 병목 색상) +#### ???뚰꽣??李⑦듃 (?쒓컙 ?먮쫫 + 蹂묐ぉ ?됱긽) ``` -시간 → 0s 2s 4s 6s 8s 10s - ├───────┼───────┼───────┼───────┼───────┤ -LLM 1 ████████ 2.1s (토큰 1.2K) -Tool 1 ███ 0.8s folder_map -LLM 2 ████████████ 3.5s (토큰 2.8K) ← 🔴 병목! -Tool 2 █ 0.2s file_read -LLM 3 ████ 1.2s (토큰 1.5K) -Tool 3 ██████ 1.8s html_create +?쒓컙 ?? 0s 2s 4s 6s 8s 10s + ?쒋??€?€?€?€?€?€?쇄??€?€?€?€?€?€?쇄??€?€?€?€?€?€?쇄??€?€?€?€?€?€?쇄??€?€?€?€?€?€?? +LLM 1 ?댿뻽?댿뻽?댿뻽?댿뻽 2.1s (?좏겙 1.2K) +Tool 1 ?댿뻽?? 0.8s folder_map +LLM 2 ?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽 3.5s (?좏겙 2.8K) ???뵶 蹂묐ぉ! +Tool 2 ?? 0.2s file_read +LLM 3 ?댿뻽?댿뻽 1.2s (?좏겙 1.5K) +Tool 3 ?댿뻽?댿뻽?댿뻽 1.8s html_create ``` -- **빨간 바**: 가장 긴 구간 (병목), **주황**: 평균 이상, **녹색**: 정상 -- LLM 호출과 도구 실행을 구분하여 시간 소비 패턴을 직관적으로 표현 -- **구현**: Canvas + Rectangle, 색상 임계값 자동 계산 (평균 × 1.5 = 주황, × 2.0 = 빨강) -- **전제 조건**: LLM 호출 소요시간 수집 (`SendWithToolsAsync` 전후 Stopwatch) +- **鍮④컙 諛?*: 媛€??湲?援ш컙 (蹂묐ぉ), **二쇳솴**: ?됯퇏 ?댁긽, **?뱀깋**: ?뺤긽 +- LLM ?몄텧怨??꾧뎄 ?ㅽ뻾??援щ텇?섏뿬 ?쒓컙 ?뚮퉬 ?⑦꽩??吏곴??곸쑝濡??쒗쁽 +- **援ы쁽**: Canvas + Rectangle, ?됱긽 ?꾧퀎媛??먮룞 怨꾩궛 (?됯퇏 횞 1.5 = 二쇳솴, 횞 2.0 = 鍮④컯) +- **?꾩젣 議곌굔**: LLM ?몄텧 ?뚯슂?쒓컙 ?섏쭛 (`SendWithToolsAsync` ?꾪썑 Stopwatch) -#### ② 도구별 누적 소요시간 바 차트 +#### ???꾧뎄蹂??꾩쟻 ?뚯슂?쒓컙 諛?李⑦듃 ``` -도구별 소요시간 (이번 세션) -───────────────────────────────────── -html_create ████████████████████ 4.2s ← 🔴 최다 -file_read ████████ 1.8s -folder_map ████ 0.9s -grep ██ 0.4s -LLM 호출 ██████████████████████████ 7.1s +?꾧뎄蹂??뚯슂?쒓컙 (?대쾲 ?몄뀡) +?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€ +html_create ?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽 4.2s ???뵶 理쒕떎 +file_read ?댿뻽?댿뻽?댿뻽?댿뻽 1.8s +folder_map ?댿뻽?댿뻽 0.9s +grep ?댿뻽 0.4s +LLM ?몄텧 ?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽?댿뻽 7.1s ``` -- 현재 AgentStatsDashboardWindow의 도구 빈도 바 차트와 동일 패턴 -- ElapsedMs 기준 내림차순 정렬 -- 실시간: 이벤트 수신 시 `Dictionary`에 누적 후 바 재렌더링 -- **구현 난이도**: 낮음 — 기존 코드 복제 수준 +- ?꾩옱 AgentStatsDashboardWindow???꾧뎄 鍮덈룄 諛?李⑦듃?€ ?숈씪 ?⑦꽩 +- ElapsedMs 湲곗? ?대┝李⑥닚 ?뺣젹 +- ?ㅼ떆媛? ?대깽???섏떊 ??`Dictionary`???꾩쟻 ??諛??щ젋?붾쭅 +- **援ы쁽 ?쒖씠??*: ??쓬 ??湲곗〈 肄붾뱶 蹂듭젣 ?섏? -#### ③ 반복별 토큰 추세선 +#### ??諛섎났蹂??좏겙 異붿꽭?? ``` -토큰 ↑ -3000 │ ● - │ ● ● -2000 │ ● ● - │● ● -1000 │ - 0 └───┬───┬───┬───┬───┬───┬──→ 반복 +?좏겙 ?? +3000 ?? ?? + ?? ?? ?? +2000 ?? ?? ?? + ?귘뿈 ?? +1000 ?? + 0 ?붴??€?€?р??€?€?р??€?€?р??€?€?р??€?€?р??€?€?р??€??諛섎났 1 2 3 4 5 6 ``` -- 꺾은선 그래프: Canvas + WPF `Polyline` (기본 도형) -- 입력 토큰 지속 증가 패턴 감지 → **"⚠ 컨텍스트 크기 급증"** 경고 배지 -- **구현 난이도**: 중간 +- 爰얠???洹몃옒?? Canvas + WPF `Polyline` (湲곕낯 ?꾪삎) +- ?낅젰 ?좏겙 吏€??利앷? ?⑦꽩 媛먯? ??**"??而⑦뀓?ㅽ듃 ?ш린 湲됱쬆"** 寃쎄퀬 諛곗? +- **援ы쁽 ?쒖씠??*: 以묎컙 -### 구현 비용 분석 +### 援ы쁽 鍮꾩슜 遺꾩꽍 -| 항목 | 예상 코드량 | 앱 크기 영향 | 비고 | +| ??ぉ | ?덉긽 肄붾뱶??| ???ш린 ?곹뼢 | 鍮꾧퀬 | |------|------------|:----------:|------| -| LLM 호출 시간 수집 | ~5줄 | 0 | AgentLoopService에 Stopwatch 추가 | -| 워터폴 차트 | ~150줄 | 0 | Canvas+Rectangle | -| 도구별 바 차트 | ~80줄 | 0 | 기존 바 차트 패턴 복제 | -| 토큰 추세선 | ~100줄 | 0 | Canvas+Polyline | -| 외부 차트 라이브러리 | 불필요 | 0 | WPF 기본 기능으로 충분 | -| **합계** | **~335줄** | **0KB** | | +| LLM ?몄텧 ?쒓컙 ?섏쭛 | ~5以?| 0 | AgentLoopService??Stopwatch 異붽? | +| ?뚰꽣??李⑦듃 | ~150以?| 0 | Canvas+Rectangle | +| ?꾧뎄蹂?諛?李⑦듃 | ~80以?| 0 | 湲곗〈 諛?李⑦듃 ?⑦꽩 蹂듭젣 | +| ?좏겙 異붿꽭??| ~100以?| 0 | Canvas+Polyline | +| ?몃? 李⑦듃 ?쇱씠釉뚮윭由?| 遺덊븘??| 0 | WPF 湲곕낯 湲곕뒫?쇰줈 異⑸텇 | +| **?⑷퀎** | **~335以?* | **0KB** | | -### 권장 구현 순서 +### 沅뚯옣 援ы쁽 ?쒖꽌 -| Phase | 범위 | 효과 | +| Phase | 踰붿쐞 | ?④낵 | |-------|------|------| -| **Phase 1** (즉시 가능) | LLM 호출 시간 수집 + 도구별 바 차트 | "어떤 도구가 느린지" 즉시 파악 | -| **Phase 2** (다음) | 워터폴 차트 | 시간 흐름에서 LLM vs 도구 비율 시각화 | -| **Phase 3** (선택) | 토큰 추세선 + 컨텍스트 폭발 경고 | 고급 디버깅용 | +| **Phase 1** (利됱떆 媛€?? | LLM ?몄텧 ?쒓컙 ?섏쭛 + ?꾧뎄蹂?諛?李⑦듃 | "?대뼡 ?꾧뎄媛€ ?먮┛吏€" 利됱떆 ?뚯븙 | +| **Phase 2** (?ㅼ쓬) | ?뚰꽣??李⑦듃 | ?쒓컙 ?먮쫫?먯꽌 LLM vs ?꾧뎄 鍮꾩쑉 ?쒓컖??| +| **Phase 3** (?좏깮) | ?좏겙 異붿꽭??+ 而⑦뀓?ㅽ듃 ??컻 寃쎄퀬 | 怨좉툒 ?붾쾭源낆슜 | -### 결론 +### 寃곕줎 -| 관점 | 평가 | +| 愿€??| ?됯? | |------|------| -| 기술 가능성 | ✅ 높음 — 데이터 수집 90% 완성, 차트는 기존 패턴 재활용 | -| 구현 난이도 | 중~하 — 외부 라이브러리 불필요 | -| 사용자 가치 | 높음 — "왜 느린지" 원인 즉시 파악 가능 | -| 앱 크기 | 0 영향 — 코드만 추가 | -| 배치 위치 | WorkflowAnalyzerWindow 내부 (요약 카드 아래, 타임라인 위) | +| 湲곗닠 媛€?μ꽦 | ???믪쓬 ???곗씠???섏쭛 90% ?꾩꽦, 李⑦듃??湲곗〈 ?⑦꽩 ?ы솢??| +| 援ы쁽 ?쒖씠??| 以??????몃? ?쇱씠釉뚮윭由?遺덊븘??| +| ?ъ슜??媛€移?| ?믪쓬 ??"???먮┛吏€" ?먯씤 利됱떆 ?뚯븙 媛€??| +| ???ш린 | 0 ?곹뼢 ??肄붾뱶留?異붽? | +| 諛곗튂 ?꾩튂 | WorkflowAnalyzerWindow ?대? (?붿빟 移대뱶 ?꾨옒, ?€?꾨씪???? | --- -## 개발 검토 — 에이전트 루프 검증 강제 (Post-Tool Verification) +## 媛쒕컻 寃€?????먯씠?꾪듃 猷⑦봽 寃€利?媛뺤젣 (Post-Tool Verification) -> **상태**: 구현 완료 -> **검토일**: 2026-03-31 -> **대상**: Cowork/Code 모드 에이전트 루프 +> **?곹깭**: 援ы쁽 ?꾨즺 +> **寃€?좎씪**: 2026-03-31 +> **?€??*: Cowork/Code 紐⑤뱶 ?먯씠?꾪듃 猷⑦봽 -### 배경 — 업계 오픈소스와의 비교 +### 諛곌꼍 ???낃퀎 ?ㅽ뵂?뚯뒪?€??鍮꾧탳 -에이전트 루프가 문서 생성 후 검수를 하지 않는 문제가 관찰됨. OpenHands(구 OpenDevin), Claude Code, Cursor 등 주요 오픈소스/상용 서비스의 에이전트 루프를 분석한 결과, **업계 전체가 동일한 구조적 한계**를 가지고 있음을 확인. +?먯씠?꾪듃 猷⑦봽媛€ 臾몄꽌 ?앹꽦 ??寃€?섎? ?섏? ?딅뒗 臾몄젣媛€ 愿€李곕맖. OpenHands(援?OpenDevin), Claude Code, Cursor ??二쇱슂 ?ㅽ뵂?뚯뒪/?곸슜 ?쒕퉬?ㅼ쓽 ?먯씠?꾪듃 猷⑦봽瑜?遺꾩꽍??寃곌낵, **?낃퀎 ?꾩껜媛€ ?숈씪??援ъ“???쒓퀎**瑜?媛€吏€怨??덉쓬???뺤씤. -#### 아키텍처 비교 +#### ?꾪궎?띿쿂 鍮꾧탳 -| 항목 | AX Copilot | OpenHands | Claude Code | +| ??ぉ | AX Copilot | OpenHands | Claude Code | |------|-----------|-----------|-------------| -| 루프 구조 | while + SendWithToolsAsync | while + agent.step(state) | while + tool_use | -| **반복당 LLM 호출** | **1회** | **1회** | **1회** | -| **검증 강제** | **✅ v0.7.1 구현** | ❌ 없음 | ❌ 없음 | -| 계획 단계 | PlanMode 3모드 | 없음 (implicit) | 없음 | -| 종료 조건 | 도구 호출 없음 | AgentFinishAction | 도구 호출 없음 | -| 자기 반성 | Self-Reflection 프롬프트 | 없음 | 없음 | -| 사용자 승인 | UserDecisionCallback | SecurityAnalyzer | 권한 프롬프트 | -| 컨텍스트 압축 | ContextCondenser | 요약 기반 | 없음 | +| 猷⑦봽 援ъ“ | while + SendWithToolsAsync | while + agent.step(state) | while + tool_use | +| **諛섎났??LLM ?몄텧** | **1??* | **1??* | **1??* | +| **寃€利?媛뺤젣** | **??v0.7.1 援ы쁽** | ???놁쓬 | ???놁쓬 | +| 怨꾪쉷 ?④퀎 | PlanMode 3紐⑤뱶 | ?놁쓬 (implicit) | ?놁쓬 | +| 醫낅즺 議곌굔 | ?꾧뎄 ?몄텧 ?놁쓬 | AgentFinishAction | ?꾧뎄 ?몄텧 ?놁쓬 | +| ?먭린 諛섏꽦 | Self-Reflection ?꾨\?꾪듃 | ?놁쓬 | ?놁쓬 | +| ?ъ슜???뱀씤 | UserDecisionCallback | SecurityAnalyzer | 沅뚰븳 ?꾨\?꾪듃 | +| 而⑦뀓?ㅽ듃 ?뺤텞 | ContextCondenser | ?붿빟 湲곕컲 | ?놁쓬 | -#### OpenHands 루프 의사코드 +#### OpenHands 猷⑦봽 ?섏궗肄붾뱶 ```python -# OpenHands: agent.step() = 1 LLM 호출 + 1 도구 실행 +# OpenHands: agent.step() = 1 LLM ?몄텧 + 1 ?꾧뎄 ?ㅽ뻾 while budget > 0: action = agent.step(state) # 1 LLM call observation = runtime.run(action) # 1 tool execution state.update(action, observation) if action == AgentFinishAction: break -# 검증 없음 — LLM이 자율적으로 다음 반복에서 확인 여부 결정 +# 寃€利??놁쓬 ??LLM???먯쑉?곸쑝濡??ㅼ쓬 諛섎났?먯꽌 ?뺤씤 ?щ? 寃곗젙 ``` -#### AX Copilot 검증 강제 루프 (개선 후) +#### AX Copilot 寃€利?媛뺤젣 猷⑦봽 (媛쒖꽑 ?? ``` -반복 1: LLM → "계획 수립" + file_read → 기존 파일 확인 -반복 2: LLM → "실행" + html_create → 문서 생성 - ↳ ★검증 LLM 호출★ → file_read로 내용 확인 → 수정 필요 시 도구 호출 -반복 3: LLM → 완료 응답 또는 추가 수정 +諛섎났 1: LLM ??"怨꾪쉷 ?섎┰" + file_read ??湲곗〈 ?뚯씪 ?뺤씤 +諛섎났 2: LLM ??"?ㅽ뻾" + html_create ??臾몄꽌 ?앹꽦 + ???낃?利?LLM ?몄텧????file_read濡??댁슜 ?뺤씤 ???섏젙 ?꾩슂 ???꾧뎄 ?몄텧 +諛섎났 3: LLM ???꾨즺 ?묐떟 ?먮뒗 異붽? ?섏젙 ``` -### 구현 상세 +### 援ы쁽 ?곸꽭 -| 구성요소 | 파일 | 내용 | +| 援ъ꽦?붿냼 | ?뚯씪 | ?댁슜 | |----------|------|------| -| 설정 | `AppSettings.cs` | `EnablePostToolVerification` (bool, 기본 false) | -| UI | `SettingsWindow.xaml` | "고품질 문서" 섹션에 토글 추가 | -| 바인딩 | `SettingsViewModel.cs` | Load/Save 매핑 | -| 엔진 | `AgentLoopService.cs` | `RunPostToolVerificationAsync()` + `IsDocumentCreationTool()` | +| ?ㅼ젙 | `AppSettings.cs` | `EnablePostToolVerification` (bool, 湲곕낯 false) | +| UI | `SettingsWindow.xaml` | "怨좏뭹吏?臾몄꽌" ?뱀뀡???좉? 異붽? | +| 諛붿씤??| `SettingsViewModel.cs` | Load/Save 留ㅽ븨 | +| ?붿쭊 | `AgentLoopService.cs` | `RunPostToolVerificationAsync()` + `IsDocumentCreationTool()` | -#### 검증 대상 도구 +#### 寃€利??€???꾧뎄 -| 도구명 | 설명 | +| ?꾧뎄紐?| ?ㅻ챸 | |--------|------| -| `file_write` | 일반 파일 쓰기 | -| `docx_create` | Word 문서 생성 | -| `html_create` | HTML 보고서 생성 | -| `excel_create` | Excel 파일 생성 | -| `csv_create` | CSV 파일 생성 | -| `script_create` | Python 스크립트 생성 | -| `pptx_create` | PowerPoint 생성 | +| `file_write` | ?쇰컲 ?뚯씪 ?곌린 | +| `docx_create` | Word 臾몄꽌 ?앹꽦 | +| `html_create` | HTML 蹂닿퀬???앹꽦 | +| `excel_create` | Excel ?뚯씪 ?앹꽦 | +| `csv_create` | CSV ?뚯씪 ?앹꽦 | +| `script_create` | Python ?ㅽ겕由쏀듃 ?앹꽦 | +| `pptx_create` | PowerPoint ?앹꽦 | -#### 검증 프롬프트 구조 +#### 寃€利??꾨\?꾪듃 援ъ“ -검증 LLM 호출 시 다음 4단계 체크리스트를 주입: -1. `file_read`로 생성된 파일 내용 읽기 -2. 사용자 요청 대비 완전성 확인 -3. 구조·형식 올바름 확인 -4. 문제 발견 시 즉시 수정 도구 호출 +寃€利?LLM ?몄텧 ???ㅼ쓬 4?④퀎 泥댄겕由ъ뒪?몃? 二쇱엯: +1. `file_read`濡??앹꽦???뚯씪 ?댁슜 ?쎄린 +2. ?ъ슜???붿껌 ?€鍮??꾩쟾???뺤씤 +3. 援ъ“쨌?뺤떇 ?щ컮由??뺤씤 +4. 臾몄젣 諛쒓껄 ??利됱떆 ?섏젙 ?꾧뎄 ?몄텧 -### 효과 +### ?④낵 -| 관점 | Before (v0.7.0) | After (v0.7.1) | +| 愿€??| Before (v0.7.0) | After (v0.7.1) | |------|-----------------|-----------------| -| 문서 생성 후 확인 | LLM 자율 판단 (대부분 생략) | 강제 확인 + 수정 | -| 반복당 최소 LLM 호출 | 1회 | 문서 생성 시 2회 | -| 누락 섹션 | 사용자가 직접 발견 | AI가 자동 감지 | -| 업계 비교 | OpenHands와 동일 | **차별화 포인트** | +| 臾몄꽌 ?앹꽦 ???뺤씤 | LLM ?먯쑉 ?먮떒 (?€遺€遺??앸왂) | 媛뺤젣 ?뺤씤 + ?섏젙 | +| 諛섎났??理쒖냼 LLM ?몄텧 | 1??| 臾몄꽌 ?앹꽦 ??2??| +| ?꾨씫 ?뱀뀡 | ?ъ슜?먭? 吏곸젒 諛쒓껄 | AI媛€ ?먮룞 媛먯? | +| ?낃퀎 鍮꾧탳 | OpenHands?€ ?숈씪 | **李⑤퀎???ъ씤??* | --- -## 양식 기반 문서 생성 (Template Mode) +## ?묒떇 湲곕컲 臾몄꽌 ?앹꽦 (Template Mode) -> **상태**: 구현 완료 -> **적용일**: 2026-03-30 -> **대상 스킬**: docx-creator, pptx-creator, xlsx-analyzer +> **?곹깭**: 援ы쁽 ?꾨즺 +> **?곸슜??*: 2026-03-30 +> **?€???ㅽ궗**: docx-creator, pptx-creator, xlsx-analyzer -### 개요 +### 媛쒖슂 -작업 폴더에 양식 파일(`.docx`, `.pptx`, `.xlsx`)을 넣어두면, 런타임 고급 스킬(`/docx-creator`, `/pptx-creator`, `/xlsx-analyzer`) 실행 시 **양식의 스타일·레이아웃을 자동으로 상속**하여 문서를 생성합니다. +?묒뾽 ?대뜑???묒떇 ?뚯씪(`.docx`, `.pptx`, `.xlsx`)???l뼱?먮㈃, ?고???怨좉툒 ?ㅽ궗(`/docx-creator`, `/pptx-creator`, `/xlsx-analyzer`) ?ㅽ뻾 ??**?묒떇???ㅽ??셋룸젅?댁븘?껋쓣 ?먮룞?쇰줈 ?곸냽**?섏뿬 臾몄꽌瑜??앹꽦?⑸땲?? -### 동작 원리 +### ?숈옉 ?먮━ ``` -사용자: "이번 달 보고서 작성해줘" +?ъ슜?? "?대쾲 ??蹂닿퀬???묒꽦?댁쨾" -┌─ 스킬 시스템 프롬프트 ─────────────────────┐ -│ 1. folder_map → 작업 폴더 스캔 │ -│ 2. 양식 후보 탐색 (파일명 키워드 매칭) │ -│ 3. 양식 발견 → document_read로 구조 파악 │ -│ 4. Document('양식.docx') 기반 생성 │ -│ (양식 없으면 → Document() 새 문서) │ -└──────────────────────────────────────────┘ +?뚢? ?ㅽ궗 ?쒖뒪???꾨\?꾪듃 ?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? +??1. folder_map ???묒뾽 ?대뜑 ?ㅼ틪 ?? +??2. ?묒떇 ?꾨낫 ?먯깋 (?뚯씪紐??ㅼ썙??留ㅼ묶) ?? +??3. ?묒떇 諛쒓껄 ??document_read濡?援ъ“ ?뚯븙 ?? +??4. Document('?묒떇.docx') 湲곕컲 ?앹꽦 ?? +?? (?묒떇 ?놁쑝硫???Document() ??臾몄꽌) ?? +?붴??€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?? ``` -### 양식 감지 키워드 +### ?묒떇 媛먯? ?ㅼ썙?? -파일명에 다음 키워드가 포함되면 양식으로 자동 인식: +?뚯씪紐낆뿉 ?ㅼ쓬 ?ㅼ썙?쒓? ?ы븿?섎㈃ ?묒떇?쇰줈 ?먮룞 ?몄떇: -| 키워드 | 예시 파일명 | +| ?ㅼ썙??| ?덉떆 ?뚯씪紐?| |--------|------------| -| 양식 | `월간보고_양식.docx` | +| ?묒떇 | `?붽컙蹂닿퀬_?묒떇.docx` | | template | `report_template.pptx` | -| 서식 | `서식_공문.docx` | -| 표준 | `표준_발표자료.pptx` | -| 기본 | `기본양식.xlsx` | +| ?쒖떇 | `?쒖떇_怨듬Ц.docx` | +| ?쒖? | `?쒖?_諛쒗몴?먮즺.pptx` | +| 湲곕낯 | `湲곕낯?묒떇.xlsx` | -사용자가 명시적으로 파일명을 지정하면 키워드 무관하게 해당 파일을 양식으로 사용합니다. +?ъ슜?먭? 紐낆떆?곸쑝濡??뚯씪紐낆쓣 吏€?뺥븯硫??ㅼ썙??臾닿??섍쾶 ?대떦 ?뚯씪???묒떇?쇰줈 ?ъ슜?⑸땲?? -### 스킬별 양식 활용 방식 +### ?ㅽ궗蹂??묒떇 ?쒖슜 諛⑹떇 -| 스킬 | 양식 로드 | 상속되는 요소 | +| ?ㅽ궗 | ?묒떇 濡쒕뱶 | ?곸냽?섎뒗 ?붿냼 | |------|----------|-------------| -| **docx-creator** | `Document('양식.docx')` | 스타일, 머리글/바닥글, 로고, 페이지 설정, 글꼴 | -| **pptx-creator** | `Presentation('양식.pptx')` | 마스터 슬라이드, 배경, 색 테마, 폰트, 레이아웃 | -| **xlsx-analyzer** | `load_workbook('양식.xlsx')` | 셀 서식, 병합, 테두리, 열 너비, 차트 영역 | +| **docx-creator** | `Document('?묒떇.docx')` | ?ㅽ??? 癒몃━湲€/諛붾떏湲€, 濡쒓퀬, ?섏씠吏€ ?ㅼ젙, 湲€瑗?| +| **pptx-creator** | `Presentation('?묒떇.pptx')` | 留덉뒪???щ씪?대뱶, 諛곌꼍, ???뚮쭏, ?고듃, ?덉씠?꾩썐 | +| **xlsx-analyzer** | `load_workbook('?묒떇.xlsx')` | ?€ ?쒖떇, 蹂묓빀, ?뚮몢由? ???덈퉬, 李⑦듃 ?곸뿭 | -### 구현 방식 +### 援ы쁽 諛⑹떇 -C# 코드 변경 없이 **스킬 프롬프트(`.skill.md`)만 확장**하여 구현: +C# 肄붾뱶 蹂€寃??놁씠 **?ㅽ궗 ?꾨\?꾪듃(`.skill.md`)留??뺤옣**?섏뿬 援ы쁽: -- `skills/docx-creator.skill.md` — `## 양식 활용 (템플릿 모드)` 섹션 추가 -- `skills/pptx-creator.skill.md` — `## 양식 활용 (마스터 슬라이드 템플릿)` 섹션 추가 -- `skills/xlsx-analyzer.skill.md` — `## 양식 활용 (Excel 보고서 템플릿)` 섹션 추가 +- `skills/docx-creator.skill.md` ??`## ?묒떇 ?쒖슜 (?쒗뵆由?紐⑤뱶)` ?뱀뀡 異붽? +- `skills/pptx-creator.skill.md` ??`## ?묒떇 ?쒖슜 (留덉뒪???щ씪?대뱶 ?쒗뵆由?` ?뱀뀡 異붽? +- `skills/xlsx-analyzer.skill.md` ??`## ?묒떇 ?쒖슜 (Excel 蹂닿퀬???쒗뵆由?` ?뱀뀡 異붽? -각 스킬의 Python 스크립트 템플릿에 양식 자동 감지 로직 포함: +媛??ㅽ궗??Python ?ㅽ겕由쏀듃 ?쒗뵆由우뿉 ?묒떇 ?먮룞 媛먯? 濡쒖쭅 ?ы븿: ```python -template_keywords = ['양식', 'template', '서식', '표준', '기본'] +template_keywords = ['?묒떇', 'template', '?쒖떇', '?쒖?', '湲곕낯'] template_file = None for f in os.listdir('.'): if f.endswith('.docx') and any(kw in f.lower() for kw in template_keywords): @@ -2718,576 +2722,576 @@ for f in os.listdir('.'): break if template_file: - doc = Document(template_file) # 양식 스타일 상속 + doc = Document(template_file) # ?묒떇 ?ㅽ????곸냽 else: - doc = Document() # 새 문서 + doc = Document() # ??臾몄꽌 ``` -### 사내 활용 시나리오 +### ?щ궡 ?쒖슜 ?쒕굹由ъ삤 -| 시나리오 | 양식 파일 | 결과 | +| ?쒕굹由ъ삤 | ?묒떇 ?뚯씪 | 寃곌낵 | |---------|----------|------| -| 월간 보고서 | `월간보고_양식.docx` (사내 표준 헤더·로고·페이지 설정) | 동일 규격의 보고서 자동 생성 | -| 팀 발표 | `팀발표_양식.pptx` (부서 마스터 슬라이드) | 부서 디자인 유지 + 새 내용 | -| 수율 분석 | `수율보고_양식.xlsx` (셀 서식·차트 영역 설정) | 양식에 데이터만 삽입 | -| 공문 작성 | `공문_서식.docx` (사내 공문 규격) | 규격 유지 + 내용 작성 | +| ?붽컙 蹂닿퀬??| `?붽컙蹂닿퀬_?묒떇.docx` (?щ궡 ?쒖? ?ㅻ뜑쨌濡쒓퀬쨌?섏씠吏€ ?ㅼ젙) | ?숈씪 洹쒓꺽??蹂닿퀬???먮룞 ?앹꽦 | +| ?€ 諛쒗몴 | `?€諛쒗몴_?묒떇.pptx` (遺€??留덉뒪???щ씪?대뱶) | 遺€???붿옄???좎? + ???댁슜 | +| ?섏쑉 遺꾩꽍 | `?섏쑉蹂닿퀬_?묒떇.xlsx` (?€ ?쒖떇쨌李⑦듃 ?곸뿭 ?ㅼ젙) | ?묒떇???곗씠?곕쭔 ?쎌엯 | +| 怨듬Ц ?묒꽦 | `怨듬Ц_?쒖떇.docx` (?щ궡 怨듬Ц 洹쒓꺽) | 洹쒓꺽 ?좎? + ?댁슜 ?묒꽦 | -### 향후 고도화 +### ?ν썑 怨좊룄?? -| 단계 | 내용 | 공수 | +| ?④퀎 | ?댁슜 | 怨듭닔 | |------|------|------| -| 현재 (v0.6.1) | 스킬 프롬프트에서 양식 자동 감지 안내 | 완료 | -| 다음 | 시스템 프롬프트에 양식 목록 자동 주입 (BuildCoworkSystemPrompt) | 낮음 | -| 장기 | `.ax/templates/` 공용 양식 폴더 + 프로젝트 규칙에서 기본 양식 지정 | 중간 | +| ?꾩옱 (v0.6.1) | ?ㅽ궗 ?꾨\?꾪듃?먯꽌 ?묒떇 ?먮룞 媛먯? ?덈궡 | ?꾨즺 | +| ?ㅼ쓬 | ?쒖뒪???꾨\?꾪듃???묒떇 紐⑸줉 ?먮룞 二쇱엯 (BuildCoworkSystemPrompt) | ??쓬 | +| ?κ린 | `.ax/templates/` 怨듭슜 ?묒떇 ?대뜑 + ?꾨줈?앺듃 洹쒖튃?먯꽌 湲곕낯 ?묒떇 吏€??| 以묎컙 | --- -## 2026-04-04 진행 기록 (AX Agent 명령/도구 보강) +## 2026-04-04 吏꾪뻾 湲곕줉 (AX Agent 紐낅졊/?꾧뎄 蹂닿컯) -### 1. 슬래시 명령 체계 보강 -- `/chrome`: 인자 미입력 시 MCP 런타임 진단, 인자 입력 시 브라우저 작업 실행 경로로 라우팅. -- `/mcp`: `status`, `enable|disable`, `reconnect` 동작 정리 및 상태 라벨 표준화. -- `/settings`: `model|permissions|mcp|theme` 하위 액션 지원. -- `/permissions`: `ask|auto|deny|status` 하위 액션 지원. -- `/verify`: Cowork/Code 탭 전용 검증 프롬프트 경로로 고정. -- `/commit`: 승인 기반 커밋 실행 + `files:path1,path2 :: message` 부분 커밋 지원. -- `/compact`: 수동 컨텍스트 압축 명령 유지 및 slash 팝업 힌트/도움말 반영. +### 1. ?щ옒??紐낅졊 泥닿퀎 蹂닿컯 +- `/chrome`: ?몄옄 誘몄엯????MCP ?고???吏꾨떒, ?몄옄 ?낅젰 ??釉뚮씪?곗? ?묒뾽 ?ㅽ뻾 寃쎈줈濡??쇱슦?? +- `/mcp`: `status`, `enable|disable`, `reconnect` ?숈옉 ?뺣━ 諛??곹깭 ?쇰꺼 ?쒖??? +- `/settings`: `model|permissions|mcp|theme` ?섏쐞 ?≪뀡 吏€?? +- `/permissions`: `ask|auto|deny|status` ?섏쐞 ?≪뀡 吏€?? +- `/verify`: Cowork/Code ???꾩슜 寃€利??꾨\?꾪듃 寃쎈줈濡?怨좎젙. +- `/commit`: ?뱀씤 湲곕컲 而ㅻ컠 ?ㅽ뻾 + `files:path1,path2 :: message` 遺€遺?而ㅻ컠 吏€?? +- `/compact`: ?섎룞 而⑦뀓?ㅽ듃 ?뺤텞 紐낅졊 ?좎? 諛?slash ?앹뾽 ?뚰듃/?꾩?留?諛섏쁺. -### 2. 도구/권한 정책 정렬 -- `GitTool`의 commit 경로에서 레거시 비활성 응답(`커밋 비활성`) 제거. -- 세션 단위 MCP 활성/비활성 오버라이드 적용(영구 설정 미오염). -- `/chrome` 진단 실패 시 `/mcp reconnect all` 자동 1회 재시도 후 상태 재평가. +### 2. ?꾧뎄/沅뚰븳 ?뺤콉 ?뺣젹 +- `GitTool`??commit 寃쎈줈?먯꽌 ?덇굅??鍮꾪솢???묐떟(`而ㅻ컠 鍮꾪솢??) ?쒓굅. +- ?몄뀡 ?⑥쐞 MCP ?쒖꽦/鍮꾪솢???ㅻ쾭?쇱씠???곸슜(?곴뎄 ?ㅼ젙 誘몄삤??. +- `/chrome` 吏꾨떒 ?ㅽ뙣 ??`/mcp reconnect all` ?먮룞 1???ъ떆?????곹깭 ?ы룊媛€. -### 3. 테스트 보강 +### 3. ?뚯뒪??蹂닿컯 - `ChatWindowSlashPolicyTests`: - - 슬래시 파서(`ParseGenericAction`, `ParseMcpAction`) 검증. - - `/verify` 시스템 프롬프트 필수 섹션 검증. - - MCP 상태 라벨 매핑 검증. - - `/commit` 입력 파서 검증. + - ?щ옒???뚯꽌(`ParseGenericAction`, `ParseMcpAction`) 寃€利? + - `/verify` ?쒖뒪???꾨\?꾪듃 ?꾩닔 ?뱀뀡 寃€利? + - MCP ?곹깭 ?쇰꺼 留ㅽ븨 寃€利? + - `/commit` ?낅젰 ?뚯꽌 寃€利? - `AgentParityToolsTests`: - - `git_tool commit` 레거시 비활성 메시지 회귀 방지 테스트 추가. + - `git_tool commit` ?덇굅??鍮꾪솢??硫붿떆吏€ ?뚭? 諛⑹? ?뚯뒪??異붽?. -### 4. 품질 게이트 결과 -- `dotnet build AxCopilot.sln` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` 통과. -- 기준 시점 전체 테스트: 403 passed, 0 failed. +### 4. ?덉쭏 寃뚯씠??寃곌낵 +- `dotnet build AxCopilot.sln` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` ?듦낵. +- 湲곗? ?쒖젏 ?꾩껜 ?뚯뒪?? 403 passed, 0 failed. -## 2026-04-04 추가 진행 기록 (연속 실행 2차) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 2李? -### A. /mcp 명령 확장 -- `/mcp add :: stdio [args...]` 지원. -- `/mcp add :: sse ` 지원. -- `/mcp remove ` 지원. -- `/mcp reset` 지원 (세션 오버라이드 초기화). -- 상태/도움말 문구를 확장 명령 기준으로 업데이트. +### A. /mcp 紐낅졊 ?뺤옣 +- `/mcp add :: stdio [args...]` 吏€?? +- `/mcp add :: sse ` 吏€?? +- `/mcp remove ` 吏€?? +- `/mcp reset` 吏€??(?몄뀡 ?ㅻ쾭?쇱씠??珥덇린??. +- ?곹깭/?꾩?留?臾멸뎄瑜??뺤옣 紐낅졊 湲곗??쇰줈 ?낅뜲?댄듃. -### B. Agentic loop 복구 가이드 강화 -- 미등록/비허용 도구 복구 프롬프트에 `tool_search` 우선 사용 지침 추가. -- 반복 실패 중단 응답에도 `tool_search` 기반 재시도 루트를 명시. +### B. Agentic loop 蹂듦뎄 媛€?대뱶 媛뺥솕 +- 誘몃벑濡?鍮꾪뿀???꾧뎄 蹂듦뎄 ?꾨\?꾪듃??`tool_search` ?곗꽑 ?ъ슜 吏€移?異붽?. +- 諛섎났 ?ㅽ뙣 以묐떒 ?묐떟?먮룄 `tool_search` 湲곕컲 ?ъ떆??猷⑦듃瑜?紐낆떆. -### C. UI/UX 단순화(슬래시 팝업 힌트) -- `agentUiExpressionLevel`(`rich|balanced|simple`)에 따라 슬래시 팝업 힌트 밀도 조정. -- simple: 최소 정보, rich: 추천 명령 포함, balanced: 기본 정보. +### C. UI/UX ?⑥닚???щ옒???앹뾽 ?뚰듃) +- `agentUiExpressionLevel`(`rich|balanced|simple`)???곕씪 ?щ옒???앹뾽 ?뚰듃 諛€??議곗젙. +- simple: 理쒖냼 ?뺣낫, rich: 異붿쿇 紐낅졊 ?ы븿, balanced: 湲곕낯 ?뺣낫. -### D. 설정값-실동작 점검(핵심) -- `MaxRetryOnError`, `EnableProactiveContextCompact`, `ContextCompactTriggerPercent`, `MaxContextTokens`, `AllowInsecureTls`, `AgentUiExpressionLevel` 항목의 - 모델/뷰모델/UI/런타임 참조 경로를 점검하여 동작 연결을 확인. +### D. ?ㅼ젙媛??ㅻ룞???먭?(?듭떖) +- `MaxRetryOnError`, `EnableProactiveContextCompact`, `ContextCompactTriggerPercent`, `MaxContextTokens`, `AllowInsecureTls`, `AgentUiExpressionLevel` ??ぉ?? + 紐⑤뜽/酉곕え??UI/?고???李몄“ 寃쎈줈瑜??먭??섏뿬 ?숈옉 ?곌껐???뺤씤. -### E. 검증 결과 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` 통과 (411 passed, 0 failed). +### E. 寃€利?寃곌낵 +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` ?듦낵 (411 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 3차) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 3李? -### /mcp 인증 명령 추가 -- `/mcp login <서버명> <토큰>`: 세션 인증 토큰 설정. -- `/mcp logout <서버명|all>`: 세션 인증 토큰 제거. -- `/mcp reset` 시 세션 MCP 활성/비활성 오버라이드와 인증 토큰을 함께 초기화. +### /mcp ?몄쬆 紐낅졊 異붽? +- `/mcp login `: ?몄뀡 ?몄쬆 ?좏겙 ?ㅼ젙. +- `/mcp logout `: ?몄뀡 ?몄쬆 ?좏겙 ?쒓굅. +- `/mcp reset` ???몄뀡 MCP ?쒖꽦/鍮꾪솢???ㅻ쾭?쇱씠?쒖? ?몄쬆 ?좏겙???④퍡 珥덇린?? -### 런타임 반영 범위 -- MCP 상태 점검(`/mcp status`)과 Chrome 진단(`/chrome`)에서 세션 토큰을 `MCP_AUTH_TOKEN` 환경변수로 합성 적용. -- 상태 출력에 `Auth(Session)` 표기 추가. +### ?고???諛섏쁺 踰붿쐞 +- MCP ?곹깭 ?먭?(`/mcp status`)怨?Chrome 吏꾨떒(`/chrome`)?먯꽌 ?몄뀡 ?좏겙??`MCP_AUTH_TOKEN` ?섍꼍蹂€?섎줈 ?⑹꽦 ?곸슜. +- ?곹깭 異쒕젰??`Auth(Session)` ?쒓린 異붽?. -### 테스트 보강 -- `ChatWindowSlashPolicyTests`에 `login/logout` 파서 및 로그인 입력 파서 테스트 추가. +### ?뚯뒪??蹂닿컯 +- `ChatWindowSlashPolicyTests`??`login/logout` ?뚯꽌 諛?濡쒓렇???낅젰 ?뚯꽌 ?뚯뒪??異붽?. -### 검증 결과 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` 통과 (415 passed, 0 failed). +### 寃€利?寃곌낵 +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` ?듦낵 (415 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 4차: 계획 1~4) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 4李? 怨꾪쉷 1~4) -### 1) 권한/도구 UX 통합 -- `/permissions`, `/allowed-tools`, `/settings permissions`가 동일한 권한 상태 모델을 사용하도록 정렬. -- 공통 처리 추가: - - 권한 모드 적용 헬퍼(`ask|auto|deny`) - - 권한 상태 요약 텍스트 생성 - - 권한 팝업 오픈 경로 통일 -- `/allowed-tools`에서도 `ask|auto|deny|status`를 동일하게 지원. +### 1) 沅뚰븳/?꾧뎄 UX ?듯빀 +- `/permissions`, `/allowed-tools`, `/settings permissions`媛€ ?숈씪??沅뚰븳 ?곹깭 紐⑤뜽???ъ슜?섎룄濡??뺣젹. +- 怨듯넻 泥섎━ 異붽?: + - 沅뚰븳 紐⑤뱶 ?곸슜 ?ы띁(`ask|auto|deny`) + - 沅뚰븳 ?곹깭 ?붿빟 ?띿뒪???앹꽦 + - 沅뚰븳 ?앹뾽 ?ㅽ뵂 寃쎈줈 ?듭씪 +- `/allowed-tools`?먯꽌??`ask|auto|deny|status`瑜??숈씪?섍쾶 吏€?? -### 2) 루프 복구 테스트 확대 -- `AgentLoopCodeQualityTests`에 unknown/disallowed/no-progress 혼합 관점 테스트 추가. -- unknown/disallowed 중단 응답에 `tool_search` 가이드가 유지되는지 회귀 검증. +### 2) 猷⑦봽 蹂듦뎄 ?뚯뒪???뺣? +- `AgentLoopCodeQualityTests`??unknown/disallowed/no-progress ?쇳빀 愿€???뚯뒪??異붽?. +- unknown/disallowed 以묐떒 ?묐떟??`tool_search` 媛€?대뱶媛€ ?좎??섎뒗吏€ ?뚭? 寃€利? -### 3) 좌측 패널 단순화 2차 -- 표현 레벨 기준 정리: - - `rich`: 실패 필터 노출 - - `balanced/simple`: 실패 필터 비노출 -- Quick strip 표시 조건도 위 정책과 연동해 실패 버튼이 숨겨진 모드에서 과밀 표시를 방지. +### 3) 醫뚯륫 ?⑤꼸 ?⑥닚??2李? +- ?쒗쁽 ?덈꺼 湲곗? ?뺣━: + - `rich`: ?ㅽ뙣 ?꾪꽣 ?몄텧 + - `balanced/simple`: ?ㅽ뙣 ?꾪꽣 鍮꾨끂異? +- Quick strip ?쒖떆 議곌굔?????뺤콉怨??곕룞???ㅽ뙣 踰꾪듉???④꺼吏?紐⑤뱶?먯꽌 怨쇰? ?쒖떆瑜?諛⑹?. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` 통과 (421 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` ?듦낵 (421 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 5차: 작업 요약 팝업 표시 정렬) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 5李? ?묒뾽 ?붿빟 ?앹뾽 ?쒖떆 ?뺣젹) -업데이트: 2026-04-04 10:55 (KST) +?낅뜲?댄듃: 2026-04-04 10:55 (KST) -### 1) 작업 요약 팝업 밀도/표시 방식 정리 -- 팝업 타이틀을 `작업 요약`으로 정리하고 보조 설명(`현재 실행/권한/작업 흐름`)을 추가. -- 필터 칩을 `전체·권한·대기·도구·서브·훅` 중심으로 재배치하고, 칩 패딩/폰트/마진을 축소해 스크롤 피로를 완화. -- 팝업 루트 배경을 테마 리소스(`LauncherBackground`) 기반으로 정리하고, 본문 텍스트는 `PrimaryText/SecondaryText`를 우선 사용하도록 정돈. +### 1) ?묒뾽 ?붿빟 ?앹뾽 諛€???쒖떆 諛⑹떇 ?뺣━ +- ?앹뾽 ?€?댄???`?묒뾽 ?붿빟`?쇰줈 ?뺣━?섍퀬 蹂댁“ ?ㅻ챸(`?꾩옱 ?ㅽ뻾/沅뚰븳/?묒뾽 ?먮쫫`)??異붽?. +- ?꾪꽣 移⑹쓣 `?꾩껜쨌沅뚰븳쨌?€湲걔룸룄援?룹꽌釉뙿룻썒` 以묒떖?쇰줈 ?щ같移섑븯怨? 移??⑤뵫/?고듃/留덉쭊??異뺤냼???ㅽ겕濡??쇰줈瑜??꾪솕. +- ?앹뾽 猷⑦듃 諛곌꼍???뚮쭏 由ъ냼??`LauncherBackground`) 湲곕컲?쇰줈 ?뺣━?섍퀬, 蹂몃Ц ?띿뒪?몃뒗 `PrimaryText/SecondaryText`瑜??곗꽑 ?ъ슜?섎룄濡??뺣룉. -### 2) 권한 카드/이력 구조 단순화 -- 권한 요약 카드를 `현재 권한·설명·기본 모드·예외 개수` 구조로 단순화. -- 모드별 시각 팔레트 함수를 도입해 `활용하지 않음/권한 요청/편집 자동 승인/계획 모드/권한 건너뛰기` 상태를 일관 색상으로 표시. -- 최근 권한 이력을 기존 단일 문장 포맷에서 `시간·도구·결과·요약` 포맷으로 재구성. +### 2) 沅뚰븳 移대뱶/?대젰 援ъ“ ?⑥닚?? +- 沅뚰븳 ?붿빟 移대뱶瑜?`?꾩옱 沅뚰븳쨌?ㅻ챸쨌湲곕낯 紐⑤뱶쨌?덉쇅 媛쒖닔` 援ъ“濡??⑥닚?? +- 紐⑤뱶蹂??쒓컖 ?붾젅???⑥닔瑜??꾩엯??`?쒖슜?섏? ?딆쓬/沅뚰븳 ?붿껌/?몄쭛 ?먮룞 ?뱀씤/怨꾪쉷 紐⑤뱶/沅뚰븳 嫄대꼫?곌린` ?곹깭瑜??쇨? ?됱긽?쇰줈 ?쒖떆. +- 理쒓렐 沅뚰븳 ?대젰??湲곗〈 ?⑥씪 臾몄옣 ?щ㎎?먯꽌 `?쒓컙쨌?꾧뎄쨌寃곌낵쨌?붿빟` ?щ㎎?쇰줈 ?ш뎄?? -### 3) 권한 액션 라벨 최신 체계 반영 -- Task Summary의 권한 액션 버튼을 아래 순서로 통일: - - `활용하지 않음` - - `권한 요청` - - `편집 자동 승인` - - `계획 모드` - - `권한 건너뛰기` - - `해제` +### 3) 沅뚰븳 ?≪뀡 ?쇰꺼 理쒖떊 泥닿퀎 諛섏쁺 +- Task Summary??沅뚰븳 ?≪뀡 踰꾪듉???꾨옒 ?쒖꽌濡??듭씪: + - `?쒖슜?섏? ?딆쓬` + - `沅뚰븳 ?붿껌` + - `?몄쭛 ?먮룞 ?뱀씤` + - `怨꾪쉷 紐⑤뱶` + - `沅뚰븳 嫄대꼫?곌린` + - `?댁젣` -### 4) 불필요 실패 중심 액션 축소 -- 작업 요약 팝업 하단 액션에서 `실패 대화만 보기` 버튼을 제거하고, 재시도/진행중 필터 중심으로 단순화. +### 4) 遺덊븘???ㅽ뙣 以묒떖 ?≪뀡 異뺤냼 +- ?묒뾽 ?붿빟 ?앹뾽 ?섎떒 ?≪뀡?먯꽌 `?ㅽ뙣 ?€?붾쭔 蹂닿린` 踰꾪듉???쒓굅?섍퀬, ?ъ떆??吏꾪뻾以??꾪꽣 以묒떖?쇰줈 ?⑥닚?? -### 5) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 5) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 6차: 최근 실행 카드 압축) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 6李? 理쒓렐 ?ㅽ뻾 移대뱶 ?뺤텞) -업데이트: 2026-04-04 11:00 (KST) +?낅뜲?댄듃: 2026-04-04 11:00 (KST) -### 1) 최근 에이전트 실행 카드 표시 간소화 -- 최근 실행 표시 개수를 4개에서 3개로 축소. -- 카드 본문 요약을 길이 제한(말줄임) 기반으로 정리해 긴 설명이 레이아웃을 깨지 않도록 조정. -- `관련 실행 로그/관련 파일` 상세 목록 나열을 제거하고 `실행 로그 n · 관련 파일 n` 한 줄 요약으로 압축. +### 1) 理쒓렐 ?먯씠?꾪듃 ?ㅽ뻾 移대뱶 ?쒖떆 媛꾩냼?? +- 理쒓렐 ?ㅽ뻾 ?쒖떆 媛쒖닔瑜?4媛쒖뿉??3媛쒕줈 異뺤냼. +- 移대뱶 蹂몃Ц ?붿빟??湲몄씠 ?쒗븳(留먯쨪?? 湲곕컲?쇰줈 ?뺣━??湲??ㅻ챸???덉씠?꾩썐??源⑥? ?딅룄濡?議곗젙. +- `愿€???ㅽ뻾 濡쒓렇/愿€???뚯씪` ?곸꽭 紐⑸줉 ?섏뿴???쒓굅?섍퀬 `?ㅽ뻾 濡쒓렇 n 쨌 愿€???뚯씪 n` ??以??붿빟?쇰줈 ?뺤텞. -### 2) 실행 카드 액션 정리 -- 실행 상세 이동은 `타임라인 보기` 단일 액션으로 통일. -- 완료 상태 카드에서 `새 분기에서 이어가기`를 제거하고 `후속 작업 큐에 넣기` 중심으로 단순화. +### 2) ?ㅽ뻾 移대뱶 ?≪뀡 ?뺣━ +- ?ㅽ뻾 ?곸꽭 ?대룞?€ `?€?꾨씪??蹂닿린` ?⑥씪 ?≪뀡?쇰줈 ?듭씪. +- ?꾨즺 ?곹깭 移대뱶?먯꽌 `??遺꾧린?먯꽌 ?댁뼱媛€湲?瑜??쒓굅?섍퀬 `?꾩냽 ?묒뾽 ?먯뿉 ?j린` 以묒떖?쇰줈 ?⑥닚?? -### 3) 시각 밀도 정리 -- 카드 패딩/간격을 축소해 동일 영역에서 더 빠르게 스캔 가능하도록 조정. +### 3) ?쒓컖 諛€???뺣━ +- 移대뱶 ?⑤뵫/媛꾧꺽??異뺤냼???숈씪 ?곸뿭?먯꽌 ??鍮좊Ⅴ寃??ㅼ틪 媛€?ν븯?꾨줉 議곗젙. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 7차: 작업 카드 버튼 스타일 통일) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 7李? ?묒뾽 移대뱶 踰꾪듉 ?ㅽ????듭씪) -업데이트: 2026-04-04 11:03 (KST) +?낅뜲?댄듃: 2026-04-04 11:03 (KST) -### 1) 공통 버튼 빌더 도입 -- `ChatWindow.xaml.cs`에 `CreateTaskSummaryActionButton(...)` 추가. -- 작업 요약 팝업 내 액션 버튼 공통 속성을 일원화: +### 1) 怨듯넻 踰꾪듉 鍮뚮뜑 ?꾩엯 +- `ChatWindow.xaml.cs`??`CreateTaskSummaryActionButton(...)` 異붽?. +- ?묒뾽 ?붿빟 ?앹뾽 ???≪뀡 踰꾪듉 怨듯넻 ?띿꽦???쇱썝?? - `FontSize 10.5`, `MinHeight 28`, `Padding 9x4`, `BorderThickness 1` - - 일관된 마진 규칙(기본 trailing 6px) + - ?쇨???留덉쭊 洹쒖튃(湲곕낯 trailing 6px) -### 2) 적용 범위 +### 2) ?곸슜 踰붿쐞 - `BuildTaskSummaryActionRow` (queue/permission) - `BuildHookSummaryCard` - `BuildActiveBackgroundSummaryCard` - `BuildRecentBackgroundJobCard` -- `ShowTaskSummaryPopup`의 최근 실행/재시도/진행중 필터 버튼 +- `ShowTaskSummaryPopup`??理쒓렐 ?ㅽ뻾/?ъ떆??吏꾪뻾以??꾪꽣 踰꾪듉 -### 3) 효과 -- 카드 영역마다 버튼 크기/두께/간격이 달라 보이던 문제를 해소. -- 색상 체계는 유지하면서 시각적 밀도와 클릭 영역 일관성을 확보. +### 3) ?④낵 +- 移대뱶 ?곸뿭留덈떎 踰꾪듉 ?ш린/?먭퍡/媛꾧꺽???щ씪 蹂댁씠??臾몄젣瑜??댁냼. +- ?됱긽 泥닿퀎???좎??섎㈃???쒓컖??諛€?꾩? ?대┃ ?곸뿭 ?쇨??깆쓣 ?뺣낫. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 8차: 카드 타이포 계층 통일) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 8李? 移대뱶 ?€?댄룷 怨꾩링 ?듭씪) -업데이트: 2026-04-04 11:06 (KST) +?낅뜲?댄듃: 2026-04-04 11:06 (KST) -### 1) 타이포 계층 정렬 -- `BuildTaskSummaryCard`의 핵심 라벨을 `11px + SemiBold`로 정리해 카드 헤더 위계를 고정. -- `BuildHookSummaryCard`, `BuildActiveBackgroundSummaryCard`, `BuildRecentBackgroundJobCard` 본문을 `10.5px` 기준으로 통일. +### 1) ?€?댄룷 怨꾩링 ?뺣젹 +- `BuildTaskSummaryCard`???듭떖 ?쇰꺼??`11px + SemiBold`濡??뺣━??移대뱶 ?ㅻ뜑 ?꾧퀎瑜?怨좎젙. +- `BuildHookSummaryCard`, `BuildActiveBackgroundSummaryCard`, `BuildRecentBackgroundJobCard` 蹂몃Ц??`10.5px` 湲곗??쇰줈 ?듭씪. -### 2) 테마 대비 일관화 -- 카드 본문/보조문구의 기본 색상을 `SecondaryText` 리소스 우선 사용으로 정리. -- 활성/강조 상태만 별도 강조색을 유지하여 정보 계층이 더 명확해지도록 조정. +### 2) ?뚮쭏 ?€鍮??쇨??? +- 移대뱶 蹂몃Ц/蹂댁“臾멸뎄??湲곕낯 ?됱긽??`SecondaryText` 由ъ냼???곗꽑 ?ъ슜?쇰줈 ?뺣━. +- ?쒖꽦/媛뺤“ ?곹깭留?蹂꾨룄 媛뺤“?됱쓣 ?좎??섏뿬 ?뺣낫 怨꾩링????紐낇솗?댁??꾨줉 議곗젙. -### 3) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 3) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 9차: 카드 아이콘/표시 규칙 통일) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 9李? 移대뱶 ?꾩씠肄??쒖떆 洹쒖튃 ?듭씪) -업데이트: 2026-04-04 11:08 (KST) +?낅뜲?댄듃: 2026-04-04 11:08 (KST) -### 1) 작업 카드 아이콘 헤더 도입 -- `BuildTaskSummaryCard`에 작업 종류별 아이콘을 헤더에 추가하고, 제목/요약을 2줄 구조로 분리. -- 작업 종류별 공통 매핑 함수 `GetTaskKindVisual(kind)` 추가: +### 1) ?묒뾽 移대뱶 ?꾩씠肄??ㅻ뜑 ?꾩엯 +- `BuildTaskSummaryCard`???묒뾽 醫낅쪟蹂??꾩씠肄섏쓣 ?ㅻ뜑??異붽??섍퀬, ?쒕ぉ/?붿빟??2以?援ъ“濡?遺꾨━. +- ?묒뾽 醫낅쪟蹂?怨듯넻 留ㅽ븨 ?⑥닔 `GetTaskKindVisual(kind)` 異붽?: - permission, queue, tool, hook, subagent, default -### 2) 훅/백그라운드 카드 아이콘 정렬 -- `BuildHookSummaryCard`에 `훅 이벤트` 아이콘 헤더 추가. -- `BuildActiveBackgroundSummaryCard`에 실행중 배경작업 아이콘 헤더 추가. -- `BuildRecentBackgroundJobCard`에 작업 상태 아이콘 헤더 추가. +### 2) ??諛깃렇?쇱슫??移대뱶 ?꾩씠肄??뺣젹 +- `BuildHookSummaryCard`??`???대깽?? ?꾩씠肄??ㅻ뜑 異붽?. +- `BuildActiveBackgroundSummaryCard`???ㅽ뻾以?諛곌꼍?묒뾽 ?꾩씠肄??ㅻ뜑 異붽?. +- `BuildRecentBackgroundJobCard`???묒뾽 ?곹깭 ?꾩씠肄??ㅻ뜑 異붽?. -### 3) 효과 -- 카드 타입을 텍스트 읽기 전에 아이콘/색으로 먼저 인지 가능. -- 동일 카드군에서 헤더 표시 방식이 통일되어 시각 흐름이 안정화됨. +### 3) ?④낵 +- 移대뱶 ?€?낆쓣 ?띿뒪???쎄린 ?꾩뿉 ?꾩씠肄??됱쑝濡?癒쇱? ?몄? 媛€?? +- ?숈씪 移대뱶援곗뿉???ㅻ뜑 ?쒖떆 諛⑹떇???듭씪?섏뼱 ?쒓컖 ?먮쫫???덉젙?붾맖. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 10차: 권한 팝업 표시/강조 정렬) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 10李? 沅뚰븳 ?앹뾽 ?쒖떆/媛뺤“ ?뺣젹) -업데이트: 2026-04-04 11:11 (KST) +?낅뜲?댄듃: 2026-04-04 11:11 (KST) -### 1) 권한 모드 리스트 선택 강조 -- 활성 항목에 `배경(#EEF2FF) + 테두리(#C7D2FE) + 체크 아이콘`을 적용해 선택 상태 인지를 강화. -- hover 시 비활성 항목은 연한 배경/테두리, 활성 항목은 강조색을 유지하도록 분리. +### 1) 沅뚰븳 紐⑤뱶 由ъ뒪???좏깮 媛뺤“ +- ?쒖꽦 ??ぉ??`諛곌꼍(#EEF2FF) + ?뚮몢由?#C7D2FE) + 泥댄겕 ?꾩씠肄????곸슜???좏깮 ?곹깭 ?몄?瑜?媛뺥솕. +- hover ??鍮꾪솢????ぉ?€ ?고븳 諛곌꼍/?뚮몢由? ?쒖꽦 ??ぉ?€ 媛뺤“?됱쓣 ?좎??섎룄濡?遺꾨━. -### 2) 설명 가독성 정리 -- 권한 요약 설명/모드 설명 텍스트에 줄간격(`LineHeight`)을 적용. -- 아이콘/텍스트 정렬과 패딩을 조정해 각 행의 시각 중심을 맞춤. +### 2) ?ㅻ챸 媛€?낆꽦 ?뺣━ +- 沅뚰븳 ?붿빟 ?ㅻ챸/紐⑤뱶 ?ㅻ챸 ?띿뒪?몄뿉 以꾧컙寃?`LineHeight`)???곸슜. +- ?꾩씠肄??띿뒪???뺣젹怨??⑤뵫??議곗젙??媛??됱쓽 ?쒓컖 以묒떖??留욎땄. -### 3) 라벨/색상 보정 -- 권한 요약에 기본 모드를 내부 값 대신 표시 라벨(`PermissionModeCatalog.ToDisplayLabel`)로 출력. -- `권한 건너뛰기` 색상을 경고형 붉은 계열에서 허용형 녹색 계열로 보정. +### 3) ?쇰꺼/?됱긽 蹂댁젙 +- 沅뚰븳 ?붿빟??湲곕낯 紐⑤뱶瑜??대? 媛??€???쒖떆 ?쇰꺼(`PermissionModeCatalog.ToDisplayLabel`)濡?異쒕젰. +- `沅뚰븳 嫄대꼫?곌린` ?됱긽??寃쎄퀬??遺됱? 怨꾩뿴?먯꽌 ?덉슜???뱀깋 怨꾩뿴濡?蹂댁젙. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 11차: 권한 예외/거부 블록 정리) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 11李? 沅뚰븳 ?덉쇅/嫄곕? 釉붾줉 ?뺣━) -업데이트: 2026-04-04 11:12 (KST) +?낅뜲?댄듃: 2026-04-04 11:12 (KST) -### 1) 도구별 예외 블록 정리 -- `도구별 override` 명칭을 `도구별 예외`로 변경. -- 각 예외 칩에 권한 아이콘을 추가하고, 모드 값은 내부 키 대신 표시 라벨로 출력. -- 칩 패딩/마진을 줄여 팝업 높이 사용량을 절감. +### 1) ?꾧뎄蹂??덉쇅 釉붾줉 ?뺣━ +- `?꾧뎄蹂?override` 紐낆묶??`?꾧뎄蹂??덉쇅`濡?蹂€寃? +- 媛??덉쇅 移⑹뿉 沅뚰븳 ?꾩씠肄섏쓣 異붽??섍퀬, 紐⑤뱶 媛믪? ?대? ???€???쒖떆 ?쇰꺼濡?異쒕젰. +- 移??⑤뵫/留덉쭊??以꾩뿬 ?앹뾽 ?믪씠 ?ъ슜?됱쓣 ?덇컧. -### 2) 최근 권한 거부 블록 정리 -- 블록 헤더를 아이콘+제목 구조로 정리하고, 이벤트 상세를 본문 줄로 분리. -- 본문 줄간격(LineHeight) 적용으로 긴 문장 가독성 개선. +### 2) 理쒓렐 沅뚰븳 嫄곕? 釉붾줉 ?뺣━ +- 釉붾줉 ?ㅻ뜑瑜??꾩씠肄??쒕ぉ 援ъ“濡??뺣━?섍퀬, ?대깽???곸꽭瑜?蹂몃Ц 以꾨줈 遺꾨━. +- 蹂몃Ц 以꾧컙寃?LineHeight) ?곸슜?쇰줈 湲?臾몄옣 媛€?낆꽦 媛쒖꽑. -### 3) 빠른 액션 용어 통일 -- `기본으로/적극 허용/차단 유지/override 해제`를 - - `권한 요청/편집 자동 승인/활용하지 않음/예외 해제` - 로 통일. -- 버튼 크기/마진을 축소해 같은 영역에 더 많은 액션을 안정적으로 배치. +### 3) 鍮좊Ⅸ ?≪뀡 ?⑹뼱 ?듭씪 +- `湲곕낯?쇰줈/?곴레 ?덉슜/李⑤떒 ?좎?/override ?댁젣`瑜? + - `沅뚰븳 ?붿껌/?몄쭛 ?먮룞 ?뱀씤/?쒖슜?섏? ?딆쓬/?덉쇅 ?댁젣` + 濡??듭씪. +- 踰꾪듉 ?ш린/留덉쭊??異뺤냼??媛숈? ?곸뿭????留롮? ?≪뀡???덉젙?곸쑝濡?諛곗튂. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 12차: 권한 팝업 섹션 접힘/펼침) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 12李? 沅뚰븳 ?앹뾽 ?뱀뀡 ?묓옒/?쇱묠) -업데이트: 2026-04-04 11:17 (KST) +?낅뜲?댄듃: 2026-04-04 11:17 (KST) -### 1) 기본 노출 구조 변경 -- 권한 팝업에서 기본 노출 영역을 `핵심 권한 모드`로 고정. -- `현재 권한 요약`, `도구별 예외`, `최근 권한 거부`, `고급 모드`는 접힘 섹션으로 재구성. +### 1) 湲곕낯 ?몄텧 援ъ“ 蹂€寃? +- 沅뚰븳 ?앹뾽?먯꽌 湲곕낯 ?몄텧 ?곸뿭??`?듭떖 沅뚰븳 紐⑤뱶`濡?怨좎젙. +- `?꾩옱 沅뚰븳 ?붿빟`, `?꾧뎄蹂??덉쇅`, `理쒓렐 沅뚰븳 嫄곕?`, `怨좉툒 紐⑤뱶`???묓옒 ?뱀뀡?쇰줈 ?ш뎄?? -### 2) 접힘 UI 구현 -- 섹션 헤더(아이콘/타이틀/캐럿) + 본문 토글 구조를 공통 빌더(`CreateCollapsibleSection`)로 구현. -- hover/클릭 반응과 펼침 상태 캐럿(▶/▼)을 동기화. +### 2) ?묓옒 UI 援ы쁽 +- ?뱀뀡 ?ㅻ뜑(?꾩씠肄??€?댄?/罹먮읉) + 蹂몃Ц ?좉? 援ъ“瑜?怨듯넻 鍮뚮뜑(`CreateCollapsibleSection`)濡?援ы쁽. +- hover/?대┃ 諛섏쓳怨??쇱묠 ?곹깭 罹먮읉(???????숆린?? -### 3) 기대 효과 -- 초기 팝업 높이가 줄어 입력/채팅 영역을 가리는 정도 완화. -- 필요한 정보만 단계적으로 열람 가능해 권한 메뉴 탐색 피로 감소. +### 3) 湲곕? ?④낵 +- 珥덇린 ?앹뾽 ?믪씠媛€ 以꾩뼱 ?낅젰/梨꾪똿 ?곸뿭??媛€由щ뒗 ?뺣룄 ?꾪솕. +- ?꾩슂???뺣낫留??④퀎?곸쑝濡??대엺 媛€?ν빐 沅뚰븳 硫붾돱 ?먯깋 ?쇰줈 媛먯냼. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 13차: 권한 팝업 섹션 상태 저장) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 13李? 沅뚰븳 ?앹뾽 ?뱀뀡 ?곹깭 ?€?? -업데이트: 2026-04-04 11:19 (KST) +?낅뜲?댄듃: 2026-04-04 11:19 (KST) -### 1) 설정 모델 확장 -- `LlmSettings`에 `permissionPopupSections` 딕셔너리 추가. -- 권한 팝업 섹션별 마지막 펼침 상태를 설정 파일(`settings.dat`)에 저장 가능하도록 확장. +### 1) ?ㅼ젙 紐⑤뜽 ?뺤옣 +- `LlmSettings`??`permissionPopupSections` ?뺤뀛?덈━ 異붽?. +- 沅뚰븳 ?앹뾽 ?뱀뀡蹂?留덉?留??쇱묠 ?곹깭瑜??ㅼ젙 ?뚯씪(`settings.dat`)???€??媛€?ν븯?꾨줉 ?뺤옣. -### 2) ChatWindow 상태 연동 -- `GetPermissionPopupSectionExpanded(sectionKey)` / `SetPermissionPopupSectionExpanded(sectionKey, expanded)` 헬퍼 추가. -- 접힘 헤더 클릭 시 상태를 즉시 저장하고, 팝업 재오픈 시 저장된 상태를 복원. +### 2) ChatWindow ?곹깭 ?곕룞 +- `GetPermissionPopupSectionExpanded(sectionKey)` / `SetPermissionPopupSectionExpanded(sectionKey, expanded)` ?ы띁 異붽?. +- ?묓옒 ?ㅻ뜑 ?대┃ ???곹깭瑜?利됱떆 ?€?ν븯怨? ?앹뾽 ?ъ삤?????€?λ맂 ?곹깭瑜?蹂듭썝. -### 3) 적용 섹션 키 +### 3) ?곸슜 ?뱀뀡 ?? - `permission_summary` - `permission_overrides` - `permission_denied` - `permission_advanced` -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 14차: 슬래시 팔레트 그룹 접힘/상태 저장) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 14李? ?щ옒???붾젅??洹몃9 ?묓옒/?곹깭 ?€?? -업데이트: 2026-04-04 11:23 (KST) +?낅뜲?댄듃: 2026-04-04 11:23 (KST) -### 1) 설정 모델 확장 -- `LlmSettings`에 `slashPaletteSections` 딕셔너리 추가. -- `/` 팔레트 그룹의 펼침 상태를 `settings.dat`에 저장 가능하게 확장. +### 1) ?ㅼ젙 紐⑤뜽 ?뺤옣 +- `LlmSettings`??`slashPaletteSections` ?뺤뀛?덈━ 異붽?. +- `/` ?붾젅??洹몃9???쇱묠 ?곹깭瑜?`settings.dat`???€??媛€?ν븯寃??뺤옣. -### 2) 슬래시 팔레트 그룹 UI -- `RenderSlashPage()`에 그룹 헤더 추가: - - `명령` - - `스킬` -- 각 헤더에서 접기/펼치기 토글 가능하며, 상태를 즉시 저장. +### 2) ?щ옒???붾젅??洹몃9 UI +- `RenderSlashPage()`??洹몃9 ?ㅻ뜑 異붽?: + - `紐낅졊` + - `?ㅽ궗` +- 媛??ㅻ뜑?먯꽌 ?묎린/?쇱튂湲??좉? 媛€?ν븯硫? ?곹깭瑜?利됱떆 ?€?? -### 3) 선택/이동 보정 -- 접힘 상태를 고려해 기본 선택 인덱스를 계산(`GetFirstVisibleSlashIndex`). -- Up/Down/휠 이동(`SlashPopup_ScrollByDelta`)이 펼쳐진 그룹 항목만 순회하도록 보정. +### 3) ?좏깮/?대룞 蹂댁젙 +- ?묓옒 ?곹깭瑜?怨좊젮??湲곕낯 ?좏깮 ?몃뜳?ㅻ? 怨꾩궛(`GetFirstVisibleSlashIndex`). +- Up/Down/???대룞(`SlashPopup_ScrollByDelta`)???쇱퀜吏?洹몃9 ??ぉ留??쒗쉶?섎룄濡?蹂댁젙. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 15차: 슬래시 최근 사용 상단 고정) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 15李? ?щ옒??理쒓렐 ?ъ슜 ?곷떒 怨좎젙) -업데이트: 2026-04-04 11:32 (KST) +?낅뜲?댄듃: 2026-04-04 11:32 (KST) -### 1) 설정 모델 확장 -- `LlmSettings`에 `recentSlashCommands`(MRU) 추가. -- 최근 실행한 슬래시 명령어를 최신 순으로 저장(최대 20개). +### 1) ?ㅼ젙 紐⑤뜽 ?뺤옣 +- `LlmSettings`??`recentSlashCommands`(MRU) 異붽?. +- 理쒓렐 ?ㅽ뻾???щ옒??紐낅졊?대? 理쒖떊 ?쒖쑝濡??€??理쒕? 20媛?. -### 2) 실행 시점 기록 -- `ExecuteSlashSelectedItem()`에서 실제 실행된 명령을 MRU에 기록. +### 2) ?ㅽ뻾 ?쒖젏 湲곕줉 +- `ExecuteSlashSelectedItem()`?먯꽌 ?ㅼ젣 ?ㅽ뻾??紐낅졊??MRU??湲곕줉. -### 3) 그룹 내부 정렬/표시 -- `RenderSlashPage()`에서 `명령`/`스킬` 그룹 각각을 최근 사용 순으로 정렬. -- 최근 사용 항목에 `최근` 배지를 표시해 시각적으로 구분. +### 3) 洹몃9 ?대? ?뺣젹/?쒖떆 +- `RenderSlashPage()`?먯꽌 `紐낅졊`/`?ㅽ궗` 洹몃9 媛곴컖??理쒓렐 ?ъ슜 ?쒖쑝濡??뺣젹. +- 理쒓렐 ?ъ슜 ??ぉ??`理쒓렐` 諛곗?瑜??쒖떆???쒓컖?곸쑝濡?援щ텇. -### 4) 선택 스크롤 정확도 보강 -- 섹션 헤더/접힘으로 인해 발생하던 인덱스 불일치를 제거: - - 렌더된 실제 아이템 맵(`_slashVisibleItemByAbsoluteIndex`)으로 가시 영역 스크롤 보정. +### 4) ?좏깮 ?ㅽ겕濡??뺥솗??蹂닿컯 +- ?뱀뀡 ?ㅻ뜑/?묓옒?쇰줈 ?명빐 諛쒖깮?섎뜕 ?몃뜳??遺덉씪移섎? ?쒓굅: + - ?뚮뜑???ㅼ젣 ?꾩씠??留?`_slashVisibleItemByAbsoluteIndex`)?쇰줈 媛€???곸뿭 ?ㅽ겕濡?蹂댁젙. -### 5) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 5) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 16차: 슬래시 핀 고정 결합) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 16李? ?щ옒???€ 怨좎젙 寃고빀) -업데이트: 2026-04-04 11:36 (KST) +?낅뜲?댄듃: 2026-04-04 11:36 (KST) -### 1) 수동 핀 고정 UI 추가 -- 슬래시 팔레트 항목 우측에 핀 토글(고정/해제) 추가. -- 핀 상태 항목에 `핀` 배지 표시. +### 1) ?섎룞 ?€ 怨좎젙 UI 異붽? +- ?щ옒???붾젅????ぉ ?곗륫???€ ?좉?(怨좎젙/?댁젣) 異붽?. +- ?€ ?곹깭 ??ぉ??`?€` 諛곗? ?쒖떆. -### 2) 정렬 우선순위 통합 -- 그룹 내부 정렬을 `핀(Favorite) > 최근(MRU) > 명령어 이름` 순으로 통합. -- 명령/스킬 그룹 모두 동일 우선순위 적용. +### 2) ?뺣젹 ?곗꽑?쒖쐞 ?듯빀 +- 洹몃9 ?대? ?뺣젹??`?€(Favorite) > 理쒓렐(MRU) > 紐낅졊???대쫫` ?쒖쑝濡??듯빀. +- 紐낅졊/?ㅽ궗 洹몃9 紐⑤몢 ?숈씪 ?곗꽑?쒖쐞 ?곸슜. -### 3) 상호작용 보정 -- 핀 토글 클릭 시 명령 실행 이벤트로 전파되지 않도록 처리(`Handled=true`). -- 팝업 오픈 상태에서는 TextChanged 트리거 없이 즉시 재렌더링하도록 `ToggleSlashFavorite()` 보강. +### 3) ?곹샇?묒슜 蹂댁젙 +- ?€ ?좉? ?대┃ ??紐낅졊 ?ㅽ뻾 ?대깽?몃줈 ?꾪뙆?섏? ?딅룄濡?泥섎━(`Handled=true`). +- ?앹뾽 ?ㅽ뵂 ?곹깭?먯꽌??TextChanged ?몃━嫄??놁씠 利됱떆 ?щ젋?붾쭅?섎룄濡?`ToggleSlashFavorite()` 蹂닿컯. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 17차: AX Agent 기본 활성 + 업데이트 팝업 제거) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 17李? AX Agent 湲곕낯 ?쒖꽦 + ?낅뜲?댄듃 ?앹뾽 ?쒓굅) -업데이트: 2026-04-04 11:39 (KST) +?낅뜲?댄듃: 2026-04-04 11:39 (KST) -### 1) AX Agent 기본 활성화 -- `AppSettings.AiEnabled` 기본값을 `true`로 변경. -- 설정 로드 정규화(`SettingsService.NormalizeRuntimeSettings`)에서 `AiEnabled=false`인 기존 값도 자동으로 `true`로 보정. +### 1) AX Agent 湲곕낯 ?쒖꽦?? +- `AppSettings.AiEnabled` 湲곕낯媛믪쓣 `true`濡?蹂€寃? +- ?ㅼ젙 濡쒕뱶 ?뺢퇋??`SettingsService.NormalizeRuntimeSettings`)?먯꽌 `AiEnabled=false`??湲곗〈 媛믩룄 ?먮룞?쇰줈 `true`濡?蹂댁젙. -### 2) 업데이트 설치 후 메시지박스 제거 -- `App.xaml.cs` 시작 로직에서 `MigrationSummary`를 `CustomMessageBox`로 표시하던 블록 제거. -- 결과적으로 업데이트/마이그레이션 직후 표시되던 안내 팝업이 더 이상 노출되지 않음. +### 2) ?낅뜲?댄듃 ?ㅼ튂 ??硫붿떆吏€諛뺤뒪 ?쒓굅 +- `App.xaml.cs` ?쒖옉 濡쒖쭅?먯꽌 `MigrationSummary`瑜?`CustomMessageBox`濡??쒖떆?섎뜕 釉붾줉 ?쒓굅. +- 寃곌낵?곸쑝濡??낅뜲?댄듃/留덉씠洹몃젅?댁뀡 吏곹썑 ?쒖떆?섎뜕 ?덈궡 ?앹뾽?????댁긽 ?몄텧?섏? ?딆쓬. -### 3) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 3) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 18차: 슬래시 핀/최근 최대 개수 설정창 연동) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 18李? ?щ옒???€/理쒓렐 理쒕? 媛쒖닔 ?ㅼ젙李??곕룞) -업데이트: 2026-04-04 11:41 (KST) +?낅뜲?댄듃: 2026-04-04 11:41 (KST) -### 1) 설정 모델 확장 -- `LlmSettings`에 아래 항목 추가: - - `maxFavoriteSlashCommands` (기본 10) - - `maxRecentSlashCommands` (기본 20) +### 1) ?ㅼ젙 紐⑤뜽 ?뺤옣 +- `LlmSettings`???꾨옒 ??ぉ 異붽?: + - `maxFavoriteSlashCommands` (湲곕낯 10) + - `maxRecentSlashCommands` (湲곕낯 20) -### 2) 설정창(UI) 연동 -- AX Agent > 스킬 섹션에 슬라이더 2종 추가: - - `슬래시 핀 최대 개수` (1~30) - - `슬래시 최근 최대 개수` (5~50) -- `SettingsViewModel`에 바인딩 속성/Load/Save 매핑 추가. +### 2) ?ㅼ젙李?UI) ?곕룞 +- AX Agent > ?ㅽ궗 ?뱀뀡???щ씪?대뜑 2醫?異붽?: + - `?щ옒???€ 理쒕? 媛쒖닔` (1~30) + - `?щ옒??理쒓렐 理쒕? 媛쒖닔` (5~50) +- `SettingsViewModel`??諛붿씤???띿꽦/Load/Save 留ㅽ븨 異붽?. -### 3) 런타임 제한 반영 -- `ToggleSlashFavorite()`에서 핀 개수 상한을 설정값으로 적용. -- `RegisterRecentSlashCommand()`에서 최근(MRU) 상한을 설정값으로 적용. -- `BuildFavoriteSlashRankMap()`은 최대 핀 개수까지만 정렬 우선순위에 반영. +### 3) ?고????쒗븳 諛섏쁺 +- `ToggleSlashFavorite()`?먯꽌 ?€ 媛쒖닔 ?곹븳???ㅼ젙媛믪쑝濡??곸슜. +- `RegisterRecentSlashCommand()`?먯꽌 理쒓렐(MRU) ?곹븳???ㅼ젙媛믪쑝濡??곸슜. +- `BuildFavoriteSlashRankMap()`?€ 理쒕? ?€ 媛쒖닔源뚯?留??뺣젹 ?곗꽑?쒖쐞??諛섏쁺. -### 4) 정규화 보강 -- `SettingsService.NormalizeRuntimeSettings()`에서 핀/최근 최대값 범위 보정 및 기존 리스트 길이 자동 정리. +### 4) ?뺢퇋??蹂닿컯 +- `SettingsService.NormalizeRuntimeSettings()`?먯꽌 ?€/理쒓렐 理쒕?媛?踰붿쐞 蹂댁젙 諛?湲곗〈 由ъ뒪??湲몄씠 ?먮룞 ?뺣━. -### 5) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). +### 5) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 19차: 슬래시 개수 설정 회귀 점검) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 19李? ?щ옒??媛쒖닔 ?ㅼ젙 ?뚭? ?먭?) -업데이트: 2026-04-04 11:46 (KST) +?낅뜲?댄듃: 2026-04-04 11:46 (KST) -### 1) 슬래시 설정 연동 검증 -- `maxFavoriteSlashCommands`, `maxRecentSlashCommands` 설정값이 - - 핀 토글 상한 - - 최근(MRU) 누적 상한 - - 그룹 정렬 우선순위 - 에 반영되는 경로를 점검. +### 1) ?щ옒???ㅼ젙 ?곕룞 寃€利? +- `maxFavoriteSlashCommands`, `maxRecentSlashCommands` ?ㅼ젙媛믪씠 + - ?€ ?좉? ?곹븳 + - 理쒓렐(MRU) ?꾩쟻 ?곹븳 + - 洹몃9 ?뺣젹 ?곗꽑?쒖쐞 + ??諛섏쁺?섎뒗 寃쎈줈瑜??먭?. -### 2) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~ChatWindowSlashPolicyTests"` 통과 (39 passed, 0 failed). +### 2) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~ChatWindowSlashPolicyTests"` ?듦낵 (39 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 20차: 슬래시/권한 UX 마무리 + 전체 회귀) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 20李? ?щ옒??沅뚰븳 UX 留덈Т由?+ ?꾩껜 ?뚭?) -업데이트: 2026-04-04 12:05 (KST) +?낅뜲?댄듃: 2026-04-04 12:05 (KST) -### 1) 슬래시 팔레트 퀵관리 마무리 -- `/` 팝업 헤더에 `정리`, `전체 접기/펼치기` 버튼을 추가. -- 모든 섹션이 접힌 경우 하단 안내 문구를 노출해 빈 화면 오인 방지. -- 섹션 상태 라벨(`전체 접기`/`전체 펼치기`)을 현재 상태에 맞춰 즉시 갱신. +### 1) ?щ옒???붾젅???듦?由?留덈Т由? +- `/` ?앹뾽 ?ㅻ뜑??`?뺣━`, `?꾩껜 ?묎린/?쇱튂湲? 踰꾪듉??異붽?. +- 紐⑤뱺 ?뱀뀡???묓엺 寃쎌슦 ?섎떒 ?덈궡 臾멸뎄瑜??몄텧??鍮??붾㈃ ?ㅼ씤 諛⑹?. +- ?뱀뀡 ?곹깭 ?쇰꺼(`?꾩껜 ?묎린`/`?꾩껜 ?쇱튂湲?)???꾩옱 ?곹깭??留욎떠 利됱떆 媛깆떊. -### 2) 권한 팝업 키보드 접근성 보강 -- 섹션 헤더를 키보드 포커스 가능 상태로 변경하고 `Enter/Space` 토글 지원. -- 권한 모드 행을 키보드 포커스 가능 상태로 변경하고 `Enter/Space` 즉시 적용 지원. -- 팝업 오픈 시 첫 포커스 자동 이동, `Esc` 닫기 지원으로 키보드 완결성 확보. +### 2) 沅뚰븳 ?앹뾽 ?ㅻ낫???묎렐??蹂닿컯 +- ?뱀뀡 ?ㅻ뜑瑜??ㅻ낫???ъ빱??媛€???곹깭濡?蹂€寃쏀븯怨?`Enter/Space` ?좉? 吏€?? +- 沅뚰븳 紐⑤뱶 ?됱쓣 ?ㅻ낫???ъ빱??媛€???곹깭濡?蹂€寃쏀븯怨?`Enter/Space` 利됱떆 ?곸슜 吏€?? +- ?앹뾽 ?ㅽ뵂 ??泥??ъ빱???먮룞 ?대룞, `Esc` ?リ린 吏€?먯쑝濡??ㅻ낫???꾧껐???뺣낫. -### 3) 설정 연동 가시성 개선 -- AX Agent 설정의 슬래시 핀/최근 상한 슬라이더에 `저장 후 즉시 반영` 힌트를 추가해 반영 시점을 명확화. +### 3) ?ㅼ젙 ?곕룞 媛€?쒖꽦 媛쒖꽑 +- AX Agent ?ㅼ젙???щ옒???€/理쒓렐 ?곹븳 ?щ씪?대뜑??`?€????利됱떆 諛섏쁺` ?뚰듃瑜?異붽???諛섏쁺 ?쒖젏??紐낇솗?? -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` 통과 (436 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` ?듦낵 (436 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 21차: Codex/Claude형 입력 UX 보강 + 체크리스트 정비) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 21李? Codex/Claude???낅젰 UX 蹂닿컯 + 泥댄겕由ъ뒪???뺣퉬) -업데이트: 2026-04-04 12:11 (KST) +?낅뜲?댄듃: 2026-04-04 12:11 (KST) -### 1) 슬래시 입력 탐색 보강 -- `/` 팝업 `ScrollViewer`에 직접 휠 이벤트를 연결해 스크롤 누락을 줄임. -- 키보드 탐색을 `Up/Down`에서 `PageUp/PageDown/Home/End`까지 확장. -- 고해상도 휠 델타를 단계 이동으로 환산해 과도한 점프/미동작을 방지. +### 1) ?щ옒???낅젰 ?먯깋 蹂닿컯 +- `/` ?앹뾽 `ScrollViewer`??吏곸젒 ???대깽?몃? ?곌껐???ㅽ겕濡??꾨씫??以꾩엫. +- ?ㅻ낫???먯깋??`Up/Down`?먯꽌 `PageUp/PageDown/Home/End`源뚯? ?뺤옣. +- 怨좏빐?곷룄 ???명?瑜??④퀎 ?대룞?쇰줈 ?섏궛??怨쇰룄???먰봽/誘몃룞?묒쓣 諛⑹?. -### 2) 권한 팝업 포커스 안정화 -- 권한 팝업 오픈 시 최상위 자식만 확인하던 포커스 로직을 재귀 탐색으로 교체. -- 실질적으로 포커스 가능한 첫 항목(행/섹션 헤더)에 안정적으로 진입하도록 보강. +### 2) 沅뚰븳 ?앹뾽 ?ъ빱???덉젙?? +- 沅뚰븳 ?앹뾽 ?ㅽ뵂 ??理쒖긽???먯떇留??뺤씤?섎뜕 ?ъ빱??濡쒖쭅???ш? ?먯깋?쇰줈 援먯껜. +- ?ㅼ쭏?곸쑝濡??ъ빱??媛€?ν븳 泥???ぉ(???뱀뀡 ?ㅻ뜑)???덉젙?곸쑝濡?吏꾩엯?섎룄濡?蹂닿컯. -### 3) 모델 선택 UX 단순화 -- 입력창 상단 모델 버튼 클릭 동작을 AX Agent 내부 `빠른 설정 패널` 토글로 변경. -- 모델/프리셋 버튼 높이/패딩을 줄여 단일 라인 컴포저 밀도를 정돈. +### 3) 紐⑤뜽 ?좏깮 UX ?⑥닚?? +- ?낅젰李??곷떒 紐⑤뜽 踰꾪듉 ?대┃ ?숈옉??AX Agent ?대? `鍮좊Ⅸ ?ㅼ젙 ?⑤꼸` ?좉?濡?蹂€寃? +- 紐⑤뜽/?꾨━??踰꾪듉 ?믪씠/?⑤뵫??以꾩뿬 ?⑥씪 ?쇱씤 而댄룷?€ 諛€?꾨? ?뺣룉. -### 4) UI 회귀 문서화 -- `docs/UI_UX_CHECKLIST.md` 신규 추가. -- 공통 품질, 슬래시, 권한, 설정, 내부/사외 운영 모드, 빌드/테스트까지 시나리오 점검 기준을 문서화. +### 4) UI ?뚭? 臾몄꽌?? +- `docs/UI_UX_CHECKLIST.md` ?좉퇋 異붽?. +- 怨듯넻 ?덉쭏, ?щ옒?? 沅뚰븳, ?ㅼ젙, ?대?/?ъ쇅 ?댁쁺 紐⑤뱶, 鍮뚮뱶/?뚯뒪?멸퉴吏€ ?쒕굹由ъ삤 ?먭? 湲곗???臾몄꽌?? -## 2026-04-04 추가 진행 기록 (연속 실행 22차: 권한 체계 표면 통일 + 운영 모드 점검) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 22李? 沅뚰븳 泥닿퀎 ?쒕㈃ ?듭씪 + ?댁쁺 紐⑤뱶 ?먭?) -업데이트: 2026-04-04 12:22 (KST) +?낅뜲?댄듃: 2026-04-04 12:22 (KST) -### 1) 권한 표면 명칭/순서 통일 -- `PermissionModeCatalog` 표시 라벨을 아래 체계로 통일: - - `Deny` → `활용하지 않음` - - `Default` → `소극 활용` - - `AcceptEdits` → `적극 활용` - - `Plan` → `계획 중심` - - `BypassPermissions` → `완전 자동` - - `DontAsk` → `질문 없이 진행` -- 권한 팝업 선택 순서를 동일 체계로 재정렬하고, 기존 고급 섹션 분리를 줄여 단일 흐름 탐색으로 정리. +### 1) 沅뚰븳 ?쒕㈃ 紐낆묶/?쒖꽌 ?듭씪 +- `PermissionModeCatalog` ?쒖떆 ?쇰꺼???꾨옒 泥닿퀎濡??듭씪: + - `Deny` ??`?쒖슜?섏? ?딆쓬` + - `Default` ??`?뚭레 ?쒖슜` + - `AcceptEdits` ??`?곴레 ?쒖슜` + - `Plan` ??`怨꾪쉷 以묒떖` + - `BypassPermissions` ??`?꾩쟾 ?먮룞` + - `DontAsk` ??`吏덈Ц ?놁씠 吏꾪뻾` +- 沅뚰븳 ?앹뾽 ?좏깮 ?쒖꽌瑜??숈씪 泥닿퀎濡??ъ젙?ы븯怨? 湲곗〈 怨좉툒 ?뱀뀡 遺꾨━瑜?以꾩뿬 ?⑥씪 ?먮쫫 ?먯깋?쇰줈 ?뺣━. -### 2) 권한 UI/동작 연결 정비 -- 하단/배너/팝업에서 권한 라벨과 색상 체계를 일치시킴. -- `Chat` 탭 기본 권한 적용 경로를 `활용하지 않음`으로 조정. -- `/sandbox-toggle`와 `AgentSettingsWindow` 권한 순환 순서를 동일 체계로 통일. -- 작업 요약 카드의 권한 액션 버튼 라벨도 새 체계로 맞춤. +### 2) 沅뚰븳 UI/?숈옉 ?곌껐 ?뺣퉬 +- ?섎떒/諛곕꼫/?앹뾽?먯꽌 沅뚰븳 ?쇰꺼怨??됱긽 泥닿퀎瑜??쇱튂?쒗궡. +- `Chat` ??湲곕낯 沅뚰븳 ?곸슜 寃쎈줈瑜?`?쒖슜?섏? ?딆쓬`?쇰줈 議곗젙. +- `/sandbox-toggle`?€ `AgentSettingsWindow` 沅뚰븳 ?쒗솚 ?쒖꽌瑜??숈씪 泥닿퀎濡??듭씪. +- ?묒뾽 ?붿빟 移대뱶??沅뚰븳 ?≪뀡 踰꾪듉 ?쇰꺼????泥닿퀎濡?留욎땄. -### 3) 좌측 패널 단순화 보강 -- 좌측 패널의 모드 배지 헤더를 숨겨 시각 복잡도를 낮추고, 탭별 핵심 선택(주제/작업) 중심으로 정리. +### 3) 醫뚯륫 ?⑤꼸 ?⑥닚??蹂닿컯 +- 醫뚯륫 ?⑤꼸??紐⑤뱶 諛곗? ?ㅻ뜑瑜??④꺼 ?쒓컖 蹂듭옟?꾨? ??텛怨? ??퀎 ?듭떖 ?좏깮(二쇱젣/?묒뾽) 以묒떖?쇰줈 ?뺣━. -### 4) 운영 모드(사내/사외) 회귀 점검 -- 코드 경로 확인: - - `HttpTool`, `OpenExternalTool`, `OperationModePolicy` 기반 차단 로직 유지 확인. -- 테스트 필터 실행: +### 4) ?댁쁺 紐⑤뱶(?щ궡/?ъ쇅) ?뚭? ?먭? +- 肄붾뱶 寃쎈줈 ?뺤씤: + - `HttpTool`, `OpenExternalTool`, `OperationModePolicy` 湲곕컲 李⑤떒 濡쒖쭅 ?좎? ?뺤씤. +- ?뚯뒪???꾪꽣 ?ㅽ뻾: - `OperationModePolicyTests` - `OperationModeReadinessTests` - `LlmOperationModeTests` -- 결과: 18/18 통과. +- 寃곌낵: 18/18 ?듦낵. -### 5) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` 통과 (436 passed, 0 failed). +### 5) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` ?듦낵 (436 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 23차: UI 마감 튜닝 + 체크리스트 실행 기록) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 23李? UI 留덇컧 ?쒕떇 + 泥댄겕由ъ뒪???ㅽ뻾 湲곕줉) -업데이트: 2026-04-04 12:33 (KST) +?낅뜲?댄듃: 2026-04-04 12:33 (KST) -### 1) 권한 팝업 가독성 마감 -- 권한 섹션 헤더/요약 카드/권한 행의 폰트·패딩·줄간격을 조정해 밀도 균형을 개선. -- 권한 설명 문장의 줄바꿈을 정돈해 항목 간 스캔 속도를 개선. +### 1) 沅뚰븳 ?앹뾽 媛€?낆꽦 留덇컧 +- 沅뚰븳 ?뱀뀡 ?ㅻ뜑/?붿빟 移대뱶/沅뚰븳 ?됱쓽 ?고듃쨌?⑤뵫쨌以꾧컙寃⑹쓣 議곗젙??諛€??洹좏삎??媛쒖꽑. +- 沅뚰븳 ?ㅻ챸 臾몄옣??以꾨컮轅덉쓣 ?뺣룉????ぉ 媛??ㅼ틪 ?띾룄瑜?媛쒖꽑. -### 2) 좌측 패널/카테고리 라벨 정리 -- 탭별 기본 카테고리 라벨을 - - Chat: `주제 선택` - - Cowork/Code: `작업 선택` - 로 통일해 좌측 목적성을 명확화. +### 2) 醫뚯륫 ?⑤꼸/移댄뀒怨좊━ ?쇰꺼 ?뺣━ +- ??퀎 湲곕낯 移댄뀒怨좊━ ?쇰꺼?? + - Chat: `二쇱젣 ?좏깮` + - Cowork/Code: `?묒뾽 ?좏깮` + 濡??듭씪??醫뚯륫 紐⑹쟻?깆쓣 紐낇솗?? -### 3) 컴포저 미세 튜닝 -- 입력 컨테이너 패딩, 모델/프리셋 바 상단 간격, 인라인 설정 패널 간격을 조정해 단일 라인 구성을 더 컴팩트하게 정돈. -- `/` 팔레트 하단 안내 문구에 `PgUp/PgDn/Home/End` 키 이동 정보를 반영. +### 3) 而댄룷?€ 誘몄꽭 ?쒕떇 +- ?낅젰 而⑦뀒?대꼫 ?⑤뵫, 紐⑤뜽/?꾨━??諛??곷떒 媛꾧꺽, ?몃씪???ㅼ젙 ?⑤꼸 媛꾧꺽??議곗젙???⑥씪 ?쇱씤 援ъ꽦????而댄뙥?명븯寃??뺣룉. +- `/` ?붾젅???섎떒 ?덈궡 臾멸뎄??`PgUp/PgDn/Home/End` ???대룞 ?뺣낫瑜?諛섏쁺. -### 4) 체크리스트 및 운영 모드 점검 기록 -- `docs/UI_UX_CHECKLIST.md`에 최근 점검 결과 섹션 추가. -- 운영 모드 관련 테스트 필터 18건 통과: +### 4) 泥댄겕由ъ뒪??諛??댁쁺 紐⑤뱶 ?먭? 湲곕줉 +- `docs/UI_UX_CHECKLIST.md`??理쒓렐 ?먭? 寃곌낵 ?뱀뀡 異붽?. +- ?댁쁺 紐⑤뱶 愿€???뚯뒪???꾪꽣 18嫄??듦낵: - `OperationModePolicyTests` - `OperationModeReadinessTests` - `LlmOperationModeTests` -### 5) 빌드 이슈 대응 -- WPF 임시 생성물(`wpftmp`) 꼬임으로 발생한 빌드 실패를 확인. -- `src/AxCopilot/obj`, `src/AxCopilot/bin` 정리 후 재빌드/재테스트로 정상 복구. +### 5) 鍮뚮뱶 ?댁뒋 ?€?? +- WPF ?꾩떆 ?앹꽦臾?`wpftmp`) 瑗ъ엫?쇰줈 諛쒖깮??鍮뚮뱶 ?ㅽ뙣瑜??뺤씤. +- `src/AxCopilot/obj`, `src/AxCopilot/bin` ?뺣━ ???щ퉴???ы뀒?ㅽ듃濡??뺤긽 蹂듦뎄. -### 6) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` 통과 (436 passed, 0 failed). +### 6) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj` ?듦낵 (436 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 24차: 권한/설정 안정화 보강 + 시나리오 점검) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 24李? 沅뚰븳/?ㅼ젙 ?덉젙??蹂닿컯 + ?쒕굹由ъ삤 ?먭?) -업데이트: 2026-04-04 12:41 (KST) +?낅뜲?댄듃: 2026-04-04 12:41 (KST) -### 1) 권한 상태 표시 간소화 -- `/permissions`, `/allowed-tools` 상태 텍스트를 축약형으로 재정리: - - 현재 권한 모드 - - 운영 모드 - - 기본값/예외 개수 - - 예외 미리보기(최대 3개) -- 하단 권한 버튼 툴팁에도 동일한 운영 모드/기본값/예외 정보를 반영. +### 1) 沅뚰븳 ?곹깭 ?쒖떆 媛꾩냼?? +- `/permissions`, `/allowed-tools` ?곹깭 ?띿뒪?몃? 異뺤빟?뺤쑝濡??ъ젙由? + - ?꾩옱 沅뚰븳 紐⑤뱶 + - ?댁쁺 紐⑤뱶 + - 湲곕낯媛??덉쇅 媛쒖닔 + - ?덉쇅 誘몃━蹂닿린(理쒕? 3媛? +- ?섎떒 沅뚰븳 踰꾪듉 ?댄똻?먮룄 ?숈씪???댁쁺 紐⑤뱶/湲곕낯媛??덉쇅 ?뺣낫瑜?諛섏쁺. -### 2) 좌측 패널 전환 안정화 -- `UpdateSidebarModeMenu()`에서 탭별 메뉴 표시를 동일 값 재할당하지 않도록 보강해 전환 시 불필요한 렌더 흔들림을 완화. +### 2) 醫뚯륫 ?⑤꼸 ?꾪솚 ?덉젙?? +- `UpdateSidebarModeMenu()`?먯꽌 ??퀎 硫붾돱 ?쒖떆瑜??숈씪 媛??ы븷?뱁븯吏€ ?딅룄濡?蹂닿컯???꾪솚 ??遺덊븘?뷀븳 ?뚮뜑 ?붾뱾由쇱쓣 ?꾪솕. -### 3) 컴포저 반응형 보강 -- 상단 모델 라벨에 `MaxWidth=280`, `TextTrimming=CharacterEllipsis` 적용. -- 긴 모델명 선택 시 컴포저 레이아웃 깨짐을 방지. +### 3) 而댄룷?€ 諛섏쓳??蹂닿컯 +- ?곷떒 紐⑤뜽 ?쇰꺼??`MaxWidth=280`, `TextTrimming=CharacterEllipsis` ?곸슜. +- 湲?紐⑤뜽紐??좏깮 ??而댄룷?€ ?덉씠?꾩썐 源⑥쭚??諛⑹?. -### 4) AX Agent 설정창 오픈 안정성 보강 -- 설정창 리소스 병합 실패 시에도 창 오픈이 유지되도록 예외 방어 추가. -- `OpenAgentSettingsFromExternal()`를 Dispatcher 경유로 변경해 트레이/외부 진입 시 타이밍 이슈를 완화. +### 4) AX Agent ?ㅼ젙李??ㅽ뵂 ?덉젙??蹂닿컯 +- ?ㅼ젙李?由ъ냼??蹂묓빀 ?ㅽ뙣 ?쒖뿉??李??ㅽ뵂???좎??섎룄濡??덉쇅 諛⑹뼱 異붽?. +- `OpenAgentSettingsFromExternal()`瑜?Dispatcher 寃쎌쑀濡?蹂€寃쏀빐 ?몃젅???몃? 吏꾩엯 ???€?대컢 ?댁뒋瑜??꾪솕. -### 5) 시나리오/회귀 점검 -- 운영 모드 필터 테스트(18건) 재통과: +### 5) ?쒕굹由ъ삤/?뚭? ?먭? +- ?댁쁺 紐⑤뱶 ?꾪꽣 ?뚯뒪??18嫄? ?ы넻怨? - `OperationModePolicyTests` - `OperationModeReadinessTests` - `LlmOperationModeTests` -- 전체 테스트 436건 재통과. -- `dotnet build` 경고 0 / 오류 0 유지. +- ?꾩껜 ?뚯뒪??436嫄??ы넻怨? +- `dotnet build` 寃쎄퀬 0 / ?ㅻ쪟 0 ?좎?. @@ -3301,592 +3305,592 @@ else: -## 2026-04-04 추가 진행 기록 (연속 실행 25차: 슬래시 탐색 정합화 + 권한 요청창 문구 복구) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 25李? ?щ옒???먯깋 ?뺥빀??+ 沅뚰븳 ?붿껌李?臾멸뎄 蹂듦뎄) -업데이트: 2026-04-04 13:07 (KST) +?낅뜲?댄듃: 2026-04-04 13:07 (KST) -### 1) slash palette 탐색 정합화 -- ChatWindow에 렌더 순서 전용 인덱스(_slashVisibleAbsoluteOrder)를 추가. -- / 팝업 렌더 시 실제 표시 순서를 기록하고, 방향키/휠 이동이 원본 목록 인덱스가 아닌 렌더 순서를 기준으로 동작하도록 보정. -- Home/End 키도 동일 기준(현재 화면에 표시된 첫/마지막 항목)으로 이동하도록 통일. +### 1) slash palette ?먯깋 ?뺥빀?? +- ChatWindow???뚮뜑 ?쒖꽌 ?꾩슜 ?몃뜳??_slashVisibleAbsoluteOrder)瑜?異붽?. +- / ?앹뾽 ?뚮뜑 ???ㅼ젣 ?쒖떆 ?쒖꽌瑜?湲곕줉?섍퀬, 諛⑺뼢?????대룞???먮낯 紐⑸줉 ?몃뜳?ㅺ? ?꾨땶 ?뚮뜑 ?쒖꽌瑜?湲곗??쇰줈 ?숈옉?섎룄濡?蹂댁젙. +- Home/End ?ㅻ룄 ?숈씪 湲곗?(?꾩옱 ?붾㈃???쒖떆??泥?留덉?留???ぉ)?쇰줈 ?대룞?섎룄濡??듭씪. -### 2) 권한 액션/표기 일관성 보강 -- 최근 권한 거부 카드의 빠른 액션 순서를 활용하지 않음 → 소극 활용 → 적극 활용 → 예외 해제로 정렬. -- /permissions, /allowed-tools 사용법 표기를 동일 순서(deny|default|acceptedits|plan|bypass|dontask|status)로 정리. +### 2) 沅뚰븳 ?≪뀡/?쒓린 ?쇨???蹂닿컯 +- 理쒓렐 沅뚰븳 嫄곕? 移대뱶??鍮좊Ⅸ ?≪뀡 ?쒖꽌瑜??쒖슜?섏? ?딆쓬 ???뚭레 ?쒖슜 ???곴레 ?쒖슜 ???덉쇅 ?댁젣濡??뺣젹. +- /permissions, /allowed-tools ?ъ슜踰??쒓린瑜??숈씪 ?쒖꽌(deny|default|acceptedits|plan|bypass|dontask|status)濡??뺣━. -### 3) 권한 요청 다이얼로그 한국어/인코딩 복구 -- PermissionRequestWindow의 옵션/도움말/헤더/위험도/미리보기 문구를 한국어 기준으로 통일. -- 깨진 문자열(권한 확인/작업 허용/위험도 라벨) 복구. -- 파일 요약 문구에서 인코딩 손상 텍스트를 정리(존재함 · 용량 · 수정 시각). -- 명령 위험도 분류 문구를 한국어로 변환. +### 3) 沅뚰븳 ?붿껌 ?ㅼ씠?쇰줈洹??쒓뎅???몄퐫??蹂듦뎄 +- PermissionRequestWindow???듭뀡/?꾩?留??ㅻ뜑/?꾪뿕??誘몃━蹂닿린 臾멸뎄瑜??쒓뎅??湲곗??쇰줈 ?듭씪. +- 源⑥쭊 臾몄옄??沅뚰븳 ?뺤씤/?묒뾽 ?덉슜/?꾪뿕???쇰꺼) 蹂듦뎄. +- ?뚯씪 ?붿빟 臾멸뎄?먯꽌 ?몄퐫???먯긽 ?띿뒪?몃? ?뺣━(議댁옱??쨌 ?⑸웾 쨌 ?섏젙 ?쒓컖). +- 紐낅졊 ?꾪뿕??遺꾨쪟 臾멸뎄瑜??쒓뎅?대줈 蹂€?? -### 4) 품질 게이트 -- dotnet build src/AxCopilot/AxCopilot.csproj 통과 (경고 0, 오류 0). -- dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModeReadinessTests" 통과 (43 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 26차: slash 입력 계층 모듈화 1단계) +### 4) ?덉쭏 寃뚯씠?? +- dotnet build src/AxCopilot/AxCopilot.csproj ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModeReadinessTests" ?듦낵 (43 passed, 0 failed). +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 26李? slash ?낅젰 怨꾩링 紐⑤뱢??1?④퀎) -업데이트: 2026-04-04 13:24 (KST) +?낅뜲?댄듃: 2026-04-04 13:24 (KST) -### 1) slash 명령 카탈로그 분리 -- ChatWindow 내부에 있던 대형 슬래시 명령 정의를 Views/SlashCommandCatalog.cs로 분리. -- 카탈로그에 다음 API를 추가: +### 1) slash 紐낅졊 移댄깉濡쒓렇 遺꾨━ +- ChatWindow ?대????덈뜕 ?€???щ옒??紐낅졊 ?뺤쓽瑜?Views/SlashCommandCatalog.cs濡?遺꾨━. +- 移댄깉濡쒓렇???ㅼ쓬 API瑜?異붽?: - MatchBuiltinCommands(input, isDevTab) - TryGetEntry(commandToken, out entry) -- ChatWindow는 카탈로그 API를 호출하는 방식으로 전환해 입력 계층 결합도를 낮춤. +- ChatWindow??移댄깉濡쒓렇 API瑜??몄텧?섎뒗 諛⑹떇?쇰줈 ?꾪솚???낅젰 怨꾩링 寃고빀?꾨? ??땄. -### 2) slash 탐색 회귀 검증 -- dotnet build src/AxCopilot/AxCopilot.csproj 통과 (경고 0, 오류 0). -- dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests" 통과 (39 passed, 0 failed). +### 2) slash ?먯깋 ?뚭? 寃€利? +- dotnet build src/AxCopilot/AxCopilot.csproj ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests" ?듦낵 (39 passed, 0 failed). -### 3) 참고 -- 테스트 재빌드 시점에 AxCopilot.dll 파일 잠금(CS2012)이 간헐 발생하여, - 빌드 산출물 기준 --no-build 실행으로 테스트를 검증함. -## 2026-04-04 추가 진행 기록 (연속 실행 27차: 권한 표시 카탈로그 단일화) +### 3) 李멸퀬 +- ?뚯뒪???щ퉴???쒖젏??AxCopilot.dll ?뚯씪 ?좉툑(CS2012)??媛꾪뿉 諛쒖깮?섏뿬, + 鍮뚮뱶 ?곗텧臾?湲곗? --no-build ?ㅽ뻾?쇰줈 ?뚯뒪?몃? 寃€利앺븿. +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 27李? 沅뚰븳 ?쒖떆 移댄깉濡쒓렇 ?⑥씪?? -업데이트: 2026-04-04 13:25 (KST) +?낅뜲?댄듃: 2026-04-04 13:25 (KST) -### 1) 권한 표시 카탈로그 분리 -- 신규 파일 PermissionModePresentationCatalog를 추가. -- 권한 모드별 라벨/설명/아이콘/색상 정보를 단일 소스로 관리: - - 활용하지 않음 - - 소극 활용 - - 적극 활용 - - 계획 중심 - - 완전 자동 - - 질문 없이 진행 +### 1) 沅뚰븳 ?쒖떆 移댄깉濡쒓렇 遺꾨━ +- ?좉퇋 ?뚯씪 PermissionModePresentationCatalog瑜?異붽?. +- 沅뚰븳 紐⑤뱶蹂??쇰꺼/?ㅻ챸/?꾩씠肄??됱긽 ?뺣낫瑜??⑥씪 ?뚯뒪濡?愿€由? + - ?쒖슜?섏? ?딆쓬 + - ?뚭레 ?쒖슜 + - ?곴레 ?쒖슜 + - 怨꾪쉷 以묒떖 + - ?꾩쟾 ?먮룞 + - 吏덈Ц ?놁씠 吏꾪뻾 -### 2) ChatWindow 연동 -- 권한 팝업의 핵심 모드 리스트 생성 시 하드코딩 튜플을 제거하고 카탈로그를 사용하도록 전환. -- 결과: 권한 표면 기준(순서/문구/아이콘/색상)의 유지보수 포인트를 1곳으로 축소. +### 2) ChatWindow ?곕룞 +- 沅뚰븳 ?앹뾽???듭떖 紐⑤뱶 由ъ뒪???앹꽦 ???섎뱶肄붾뵫 ?쒗뵆???쒓굅?섍퀬 移댄깉濡쒓렇瑜??ъ슜?섎룄濡??꾪솚. +- 寃곌낵: 沅뚰븳 ?쒕㈃ 湲곗?(?쒖꽌/臾멸뎄/?꾩씠肄??됱긽)???좎?蹂댁닔 ?ъ씤?몃? 1怨녹쑝濡?異뺤냼. -### 3) 품질 게이트 -- dotnet build src/AxCopilot/AxCopilot.csproj 통과 (경고 0, 오류 0). -- dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModeReadinessTests" 통과 (43 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 28차: 탭별 설정 해석기 도입) +### 3) ?덉쭏 寃뚯씠?? +- dotnet build src/AxCopilot/AxCopilot.csproj ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModeReadinessTests" ?듦낵 (43 passed, 0 failed). +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 28李? ??퀎 ?ㅼ젙 ?댁꽍湲??꾩엯) -업데이트: 2026-04-04 13:32 (KST) +?낅뜲?댄듃: 2026-04-04 13:32 (KST) -### 1) 탭별 설정 해석 단일화 -- 신규 파일 AgentTabSettingsResolver 추가. -- ActiveTab 기준 공통 분기 제공: +### 1) ??퀎 ?ㅼ젙 ?댁꽍 ?⑥씪?? +- ?좉퇋 ?뚯씪 AgentTabSettingsResolver 異붽?. +- ActiveTab 湲곗? 怨듯넻 遺꾧린 ?쒓났: - IsCodeTab, IsCoworkTab - IsPostToolVerificationEnabled(activeTab, llm) - EnumerateCodeTabDisabledTools(codeSettings) -### 2) Agent loop 연동 -- AgentLoopService.MergeDisabledTools()에서 Code 탭 전용 도구 비활성 목록을 resolver로 계산하도록 전환. -- AgentLoopTransitions.Execution의 post-tool verification 판단에서 resolver 결과를 사용하도록 정리. +### 2) Agent loop ?곕룞 +- AgentLoopService.MergeDisabledTools()?먯꽌 Code ???꾩슜 ?꾧뎄 鍮꾪솢??紐⑸줉??resolver濡?怨꾩궛?섎룄濡??꾪솚. +- AgentLoopTransitions.Execution??post-tool verification ?먮떒?먯꽌 resolver 寃곌낵瑜??ъ슜?섎룄濡??뺣━. -### 3) 테스트 보강 -- AgentTabSettingsResolverTests 신규 추가: - - 탭 판별 - - Cowork/Code 검증 플래그 분기 - - Code 전용 비활성 도구 목록 계산 +### 3) ?뚯뒪??蹂닿컯 +- AgentTabSettingsResolverTests ?좉퇋 異붽?: + - ???먮퀎 + - Cowork/Code 寃€利??뚮옒洹?遺꾧린 + - Code ?꾩슜 鍮꾪솢???꾧뎄 紐⑸줉 怨꾩궛 -### 4) 품질 게이트 -- dotnet build src/AxCopilot/AxCopilot.csproj -p:UseSharedCompilation=false -nodeReuse:false 통과 (경고 0, 오류 0). -- dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~AgentTabSettingsResolverTests|FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModeReadinessTests" 통과 (49 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- dotnet build src/AxCopilot/AxCopilot.csproj -p:UseSharedCompilation=false -nodeReuse:false ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~AgentTabSettingsResolverTests|FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModeReadinessTests" ?듦낵 (49 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 29차: 권한/슬래시 L4 통합 회귀 보강) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 29李? 沅뚰븳/?щ옒??L4 ?듯빀 ?뚭? 蹂닿컯) -업데이트: 2026-04-04 13:40 (KST) +?낅뜲?댄듃: 2026-04-04 13:40 (KST) -### 1) 권한 모드 카탈로그 테스트 추가 -- 신규 `PermissionModeCatalogTests`: - - 글로벌/도구 권한 정규화 매핑 검증 - - 사용자 승인 필요 여부 정책 검증 - - 권한 모드 표시 라벨(활용하지 않음/소극 활용/적극 활용/계획 중심/완전 자동/질문 없이 진행) 검증 -- 신규 `PermissionModePresentationCatalogTests`: - - 권한 표면 순서(Deny→Default→AcceptEdits→Plan→BypassPermissions→DontAsk) 검증 - - 미정의 모드 fallback이 `Default`로 수렴하는지 검증 +### 1) 沅뚰븳 紐⑤뱶 移댄깉濡쒓렇 ?뚯뒪??異붽? +- ?좉퇋 `PermissionModeCatalogTests`: + - 湲€濡쒕쾶/?꾧뎄 沅뚰븳 ?뺢퇋??留ㅽ븨 寃€利? + - ?ъ슜???뱀씤 ?꾩슂 ?щ? ?뺤콉 寃€利? + - 沅뚰븳 紐⑤뱶 ?쒖떆 ?쇰꺼(?쒖슜?섏? ?딆쓬/?뚭레 ?쒖슜/?곴레 ?쒖슜/怨꾪쉷 以묒떖/?꾩쟾 ?먮룞/吏덈Ц ?놁씠 吏꾪뻾) 寃€利? +- ?좉퇋 `PermissionModePresentationCatalogTests`: + - 沅뚰븳 ?쒕㈃ ?쒖꽌(Deny?묭efault?묨cceptEdits?뭁lan?묪ypassPermissions?묭ontAsk) 寃€利? + - 誘몄젙??紐⑤뱶 fallback??`Default`濡??섎졃?섎뒗吏€ 寃€利? -### 2) 권한 규칙 우선순위 회귀 보강 -- `OperationModePolicyTests`에 deny/allow 패턴 충돌 케이스 추가: - - `process@git push * = deny`가 `process@git * = acceptedits`보다 우선 적용되는지 검증 +### 2) 沅뚰븳 洹쒖튃 ?곗꽑?쒖쐞 ?뚭? 蹂닿컯 +- `OperationModePolicyTests`??deny/allow ?⑦꽩 異⑸룎 耳€?댁뒪 異붽?: + - `process@git push * = deny`媛€ `process@git * = acceptedits`蹂대떎 ?곗꽑 ?곸슜?섎뒗吏€ 寃€利? -### 3) slash 카탈로그 회귀 보강 -- 신규 `SlashCommandCatalogTests`: - - Chat 탭에서 dev 전용 명령(`/review`)이 숨겨지는지 검증 - - 핵심 parity 명령(`/compact`, `/permissions`, `/mcp`)의 카탈로그 등록 검증 +### 3) slash 移댄깉濡쒓렇 ?뚭? 蹂닿컯 +- ?좉퇋 `SlashCommandCatalogTests`: + - Chat ??뿉??dev ?꾩슜 紐낅졊(`/review`)???④꺼吏€?붿? 寃€利? + - ?듭떖 parity 紐낅졊(`/compact`, `/permissions`, `/mcp`)??移댄깉濡쒓렇 ?깅줉 寃€利? -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests|FullyQualifiedName~SlashCommandCatalogTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~OperationModeReadinessTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` 통과 (88 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests|FullyQualifiedName~SlashCommandCatalogTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~OperationModeReadinessTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` ?듦낵 (88 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 30차: 권한 팝업 핵심 4모드 정렬) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 30李? 沅뚰븳 ?앹뾽 ?듭떖 4紐⑤뱶 ?뺣젹) -업데이트: 2026-04-04 13:55 (KST) +?낅뜲?댄듃: 2026-04-04 13:55 (KST) -### 1) 권한 팝업 구조 단순화 (claw-code 흐름 반영) -- 권한 팝업 최상단 노출 모드를 핵심 4개로 정리: - - 소극 활용 - - 적극 활용 - - 계획 중심 - - 완전 자동 -- `활용하지 않음`, `질문 없이 진행`은 `고급 모드` 접힘 섹션으로 분리. +### 1) 沅뚰븳 ?앹뾽 援ъ“ ?⑥닚??(claw-code ?먮쫫 諛섏쁺) +- 沅뚰븳 ?앹뾽 理쒖긽???몄텧 紐⑤뱶瑜??듭떖 4媛쒕줈 ?뺣━: + - ?뚭레 ?쒖슜 + - ?곴레 ?쒖슜 + - 怨꾪쉷 以묒떖 + - ?꾩쟾 ?먮룞 +- `?쒖슜?섏? ?딆쓬`, `吏덈Ц ?놁씠 吏꾪뻾`?€ `怨좉툒 紐⑤뱶` ?묓옒 ?뱀뀡?쇰줈 遺꾨━. -### 2) 고급 모드 접힘 상태 저장 -- `permission_advanced_modes` 키를 사용해 고급 모드 섹션의 펼침/접힘 상태를 설정에 저장하고 재오픈 시 복원. +### 2) 怨좉툒 紐⑤뱶 ?묓옒 ?곹깭 ?€?? +- `permission_advanced_modes` ?ㅻ? ?ъ슜??怨좉툒 紐⑤뱶 ?뱀뀡???쇱묠/?묓옒 ?곹깭瑜??ㅼ젙???€?ν븯怨??ъ삤????蹂듭썝. -### 3) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- 테스트 재빌드 시 WPF 임시 생성물 누락(CS2001, `AxCopilot_*_wpftmp.csproj`)이 간헐 발생하여 다음으로 회귀 확인: - - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests|FullyQualifiedName~OperationModeReadinessTests"` 통과 (86 passed, 0 failed). +### 3) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- ?뚯뒪???щ퉴????WPF ?꾩떆 ?앹꽦臾??꾨씫(CS2001, `AxCopilot_*_wpftmp.csproj`)??媛꾪뿉 諛쒖깮?섏뿬 ?ㅼ쓬?쇰줈 ?뚭? ?뺤씤: + - `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests|FullyQualifiedName~OperationModeReadinessTests"` ?듦낵 (86 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 31차: slash 팝업 스크롤/선택 체감 개선) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 31李? slash ?앹뾽 ?ㅽ겕濡??좏깮 泥닿컧 媛쒖꽑) -업데이트: 2026-04-04 14:01 (KST) +?낅뜲?댄듃: 2026-04-04 14:01 (KST) -### 1) slash 이동 시 재렌더링 제거 -- 기존: 휠/방향키 이동마다 `RenderSlashPage()`를 호출해 전체 항목을 다시 그림. -- 변경: 이동 시 `UpdateSlashSelectionVisualState()` + `EnsureSlashSelectionVisible()`만 호출하도록 전환. -- 효과: 스크롤 시 깜빡임/점프를 줄이고 선택 이동 체감이 더 부드러워짐. +### 1) slash ?대룞 ???щ젋?붾쭅 ?쒓굅 +- 湲곗〈: ??諛⑺뼢???대룞留덈떎 `RenderSlashPage()`瑜??몄텧???꾩껜 ??ぉ???ㅼ떆 洹몃┝. +- 蹂€寃? ?대룞 ??`UpdateSlashSelectionVisualState()` + `EnsureSlashSelectionVisible()`留??몄텧?섎룄濡??꾪솚. +- ?④낵: ?ㅽ겕濡???源쒕묀???먰봽瑜?以꾩씠怨??좏깮 ?대룞 泥닿컧????遺€?쒕윭?뚯쭚. -### 2) 선택 하이라이트 동기화 경로 정리 -- 항목 Hover/Home/End 이동에서 동일한 하이라이트 갱신 경로를 사용하도록 통일. -- 목록 재렌더가 필요한 경우(그룹 접힘/펼침, 검색 결과 변경)만 `RenderSlashPage()` 유지. +### 2) ?좏깮 ?섏씠?쇱씠???숆린??寃쎈줈 ?뺣━ +- ??ぉ Hover/Home/End ?대룞?먯꽌 ?숈씪???섏씠?쇱씠??媛깆떊 寃쎈줈瑜??ъ슜?섎룄濡??듭씪. +- 紐⑸줉 ?щ젋?붽? ?꾩슂??寃쎌슦(洹몃9 ?묓옒/?쇱묠, 寃€??寃곌낵 蹂€寃?留?`RenderSlashPage()` ?좎?. -### 3) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~SlashCommandCatalogTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests"` 통과 (84 passed, 0 failed). +### 3) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~SlashCommandCatalogTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests"` ?듦낵 (84 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 32차: slash 팝업 밀도 압축 2단계) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 32李? slash ?앹뾽 諛€???뺤텞 2?④퀎) -업데이트: 2026-04-04 14:09 (KST) +?낅뜲?댄듃: 2026-04-04 14:09 (KST) -### 1) slash 팝업 프레임 밀도 조정 -- `ChatWindow.xaml`의 slash 팝업 폭/높이와 내부 여백을 축소: - - `MinWidth 620 → 580`, `MaxWidth 780 → 740` - - `ScrollViewer MaxHeight 420 → 380` - - 헤더/리스트/푸터 패딩 및 마진 축소 -- 목적: 더 컴팩트한 정보 밀도와 빠른 스캔 흐름 확보. +### 1) slash ?앹뾽 ?꾨젅??諛€??議곗젙 +- `ChatWindow.xaml`??slash ?앹뾽 ???믪씠?€ ?대? ?щ갚??異뺤냼: + - `MinWidth 620 ??580`, `MaxWidth 780 ??740` + - `ScrollViewer MaxHeight 420 ??380` + - ?ㅻ뜑/由ъ뒪???명꽣 ?⑤뵫 諛?留덉쭊 異뺤냼 +- 紐⑹쟻: ??而댄뙥?명븳 ?뺣낫 諛€?꾩? 鍮좊Ⅸ ?ㅼ틪 ?먮쫫 ?뺣낫. -### 2) 항목/섹션 타이포 밀도 조정 -- `ChatWindow.xaml.cs`의 렌더링 항목 크기를 축소: - - 섹션 헤더 패딩/폰트(`10.5/10 → 10/9.5`) - - 명령 항목 패딩/마진 축소 - - 명령 라벨/설명 폰트(`13/11.5 → 12.5/11`) -- 목적: 한 화면에 더 많은 명령이 보이도록 개선. +### 2) ??ぉ/?뱀뀡 ?€?댄룷 諛€??議곗젙 +- `ChatWindow.xaml.cs`???뚮뜑留???ぉ ?ш린瑜?異뺤냼: + - ?뱀뀡 ?ㅻ뜑 ?⑤뵫/?고듃(`10.5/10 ??10/9.5`) + - 紐낅졊 ??ぉ ?⑤뵫/留덉쭊 異뺤냼 + - 紐낅졊 ?쇰꺼/?ㅻ챸 ?고듃(`13/11.5 ??12.5/11`) +- 紐⑹쟻: ???붾㈃????留롮? 紐낅졊??蹂댁씠?꾨줉 媛쒖꽑. -### 3) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~SlashCommandCatalogTests"` 통과 (41 passed, 0 failed). +### 3) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~SlashCommandCatalogTests"` ?듦낵 (41 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 33차: 권한 팝업 밀도 압축 2단계) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 33李? 沅뚰븳 ?앹뾽 諛€???뺤텞 2?④퀎) -업데이트: 2026-04-04 14:16 (KST) +?낅뜲?댄듃: 2026-04-04 14:16 (KST) -### 1) 권한 팝업 카드/섹션 밀도 조정 -- `CreateCollapsibleSection`의 헤더/본문 간격과 폰트를 축소. -- 섹션 컨테이너 마진을 줄여 카드 간 여백을 압축. +### 1) 沅뚰븳 ?앹뾽 移대뱶/?뱀뀡 諛€??議곗젙 +- `CreateCollapsibleSection`???ㅻ뜑/蹂몃Ц 媛꾧꺽怨??고듃瑜?異뺤냼. +- ?뱀뀡 而⑦뀒?대꼫 留덉쭊??以꾩뿬 移대뱶 媛??щ갚???뺤텞. -### 2) 권한 요약/예외/거부 카드 타이포 압축 -- 요약 카드와 예외 칩, 최근 거부 카드의 패딩·마진·폰트·라인높이를 축소. -- 최근 거부 빠른 액션 버튼 크기(패딩/폰트/최소너비)를 낮춰 한 행 밀도를 개선. +### 2) 沅뚰븳 ?붿빟/?덉쇅/嫄곕? 移대뱶 ?€?댄룷 ?뺤텞 +- ?붿빟 移대뱶?€ ?덉쇅 移? 理쒓렐 嫄곕? 移대뱶???⑤뵫쨌留덉쭊쨌?고듃쨌?쇱씤?믪씠瑜?異뺤냼. +- 理쒓렐 嫄곕? 鍮좊Ⅸ ?≪뀡 踰꾪듉 ?ш린(?⑤뵫/?고듃/理쒖냼?덈퉬)瑜???떠 ????諛€?꾨? 媛쒖꽑. -### 3) 핵심 권한 모드 리스트 밀도 조정 -- 권한 행(아이콘/제목/설명/체크)의 패딩·폰트·행간을 축소. -- 목적: 슬래시 팝업과 유사한 컴팩트 스캔 리듬으로 통일. +### 3) ?듭떖 沅뚰븳 紐⑤뱶 由ъ뒪??諛€??議곗젙 +- 沅뚰븳 ???꾩씠肄??쒕ぉ/?ㅻ챸/泥댄겕)???⑤뵫쨌?고듃쨌?됯컙??異뺤냼. +- 紐⑹쟻: ?щ옒???앹뾽怨??좎궗??而댄뙥???ㅼ틪 由щ벉?쇰줈 ?듭씪. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` 통과 (82 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` ?듦낵 (82 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 34차: 입력 하단/모델 선택 컴팩트 정렬) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 34李? ?낅젰 ?섎떒/紐⑤뜽 ?좏깮 而댄뙥???뺣젹) -업데이트: 2026-04-04 14:35 (KST) +?낅뜲?댄듃: 2026-04-04 14:35 (KST) -### 1) 입력 하단 프레임 밀도 조정 -- `InputBorder` 코너/패딩을 축소(`CornerRadius 24→22`, `Padding 7→6`). -- 입력 상단 모델/프리셋 라인의 버튼 높이/패딩을 축소해 한 줄 밀도를 강화. +### 1) ?낅젰 ?섎떒 ?꾨젅??諛€??議곗젙 +- `InputBorder` 肄붾꼫/?⑤뵫??異뺤냼(`CornerRadius 24??2`, `Padding 7??`). +- ?낅젰 ?곷떒 紐⑤뜽/?꾨━???쇱씤??踰꾪듉 ?믪씠/?⑤뵫??異뺤냼????以?諛€?꾨? 媛뺥솕. -### 2) 모델 선택/인라인 설정 타이포 정리 -- `ModelLabel` 폰트와 최대 폭을 축소해 모델명 길이에 따른 흔들림을 완화. -- 인라인 설정 패널(서비스/모델/퀵액션)의 폰트, 콤보 높이, 버튼 패딩을 한 단계 축소. +### 2) 紐⑤뜽 ?좏깮/?몃씪???ㅼ젙 ?€?댄룷 ?뺣━ +- `ModelLabel` ?고듃?€ 理쒕? ??쓣 異뺤냼??紐⑤뜽紐?湲몄씠???곕Ⅸ ?붾뱾由쇱쓣 ?꾪솕. +- ?몃씪???ㅼ젙 ?⑤꼸(?쒕퉬??紐⑤뜽/?듭븸?????고듃, 肄ㅻ낫 ?믪씠, 踰꾪듉 ?⑤뵫?????④퀎 異뺤냼. -### 3) 입력 본문/액션 버튼 밀도 조정 -- `InputBox`/워터마크 폰트·패딩·최소 높이를 소폭 축소해 입력 시야를 확보. -- 첨부/내보내기/전송/중지 버튼 크기를 줄여 Codex형 하단 컴팩트 톤으로 정렬. +### 3) ?낅젰 蹂몃Ц/?≪뀡 踰꾪듉 諛€??議곗젙 +- `InputBox`/?뚰꽣留덊겕 ?고듃쨌?⑤뵫쨌理쒖냼 ?믪씠瑜??뚰룺 異뺤냼???낅젰 ?쒖빞瑜??뺣낫. +- 泥⑤?/?대낫?닿린/?꾩넚/以묒? 踰꾪듉 ?ш린瑜?以꾩뿬 Codex???섎떒 而댄뙥???ㅼ쑝濡??뺣젹. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests"` 통과 (82 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --no-build --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests"` ?듦낵 (82 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 35차: 로직 안정화 회귀 보강) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 35李? 濡쒖쭅 ?덉젙???뚭? 蹂닿컯) -업데이트: 2026-04-04 14:47 (KST) +?낅뜲?댄듃: 2026-04-04 14:47 (KST) -### 1) ContextCondenser 실동작 테스트 추가 -- 신규 `ContextCondenserTests`: - - proactive compact 비활성 시 메시지 무변경 검증 - - 대용량 `tool_result`가 오래된 구간에 있을 때 축약(`[축약됨]`)되는지 검증 +### 1) ContextCondenser ?ㅻ룞???뚯뒪??異붽? +- ?좉퇋 `ContextCondenserTests`: + - proactive compact 鍮꾪솢????硫붿떆吏€ 臾대?寃?寃€利? + - ?€?⑸웾 `tool_result`媛€ ?ㅻ옒??援ш컙???덉쓣 ??異뺤빟(`[異뺤빟??`)?섎뒗吏€ 寃€利? -### 2) vLLM 연결 해석 회귀 보강 -- `LlmRuntimeOverrideTests` 추가: - - 암호화된 `VllmApiKey`가 런타임에서 복호화되는지 검증 - - 등록모델 `AllowInsecureTls=false` + 전역 `VllmAllowInsecureTls=true` 조합에서 최종값이 true로 유지되는지 검증 +### 2) vLLM ?곌껐 ?댁꽍 ?뚭? 蹂닿컯 +- `LlmRuntimeOverrideTests` 異붽?: + - ?뷀샇?붾맂 `VllmApiKey`媛€ ?고??꾩뿉??蹂듯샇?붾릺?붿? 寃€利? + - ?깅줉紐⑤뜽 `AllowInsecureTls=false` + ?꾩뿭 `VllmAllowInsecureTls=true` 議고빀?먯꽌 理쒖쥌媛믪씠 true濡??좎??섎뒗吏€ 寃€利? -### 3) 중기 실행 프레임 문서화 -- `docs/NEXT_ROADMAP.md`에 3축 고정 운영(로직 안정화 → 기능 동등성 → UX 정렬)과 완료 조건(빌드/회귀/문서)을 추가. +### 3) 以묎린 ?ㅽ뻾 ?꾨젅??臾몄꽌?? +- `docs/NEXT_ROADMAP.md`??3異?怨좎젙 ?댁쁺(濡쒖쭅 ?덉젙????湲곕뒫 ?숇벑????UX ?뺣젹)怨??꾨즺 議곌굔(鍮뚮뱶/?뚭?/臾몄꽌)??異붽?. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~ContextCondenserTests|FullyQualifiedName~LlmRuntimeOverrideTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~OperationModeReadinessTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` 통과 (65 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~ContextCondenserTests|FullyQualifiedName~LlmRuntimeOverrideTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~OperationModeReadinessTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` ?듦낵 (65 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 36차: 권한 규칙 구문 호환성 확장) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 36李? 沅뚰븳 洹쒖튃 援щЦ ?명솚???뺤옣) -업데이트: 2026-04-04 14:55 (KST) +?낅뜲?댄듃: 2026-04-04 14:55 (KST) -### 1) 권한 패턴 파서 호환성 확장 -- `AgentContext`의 패턴 규칙 파서를 확장해 기존 `tool@pattern`과 함께 `tool|pattern`, `tool(pattern)` 표기도 허용. -- 기존 deny 우선 평가 흐름은 유지하면서, claw-code 계열 표기 차이로 인한 규칙 미적용 케이스를 줄임. +### 1) 沅뚰븳 ?⑦꽩 ?뚯꽌 ?명솚???뺤옣 +- `AgentContext`???⑦꽩 洹쒖튃 ?뚯꽌瑜??뺤옣??湲곗〈 `tool@pattern`怨??④퍡 `tool|pattern`, `tool(pattern)` ?쒓린???덉슜. +- 湲곗〈 deny ?곗꽑 ?됯? ?먮쫫?€ ?좎??섎㈃?? claw-code 怨꾩뿴 ?쒓린 李⑥씠濡??명븳 洹쒖튃 誘몄쟻??耳€?댁뒪瑜?以꾩엫. -### 2) 권한 체인 회귀 테스트 보강 -- `OperationModePolicyTests`에 케이스 추가: - - `process|git *`, `process|git push *` 조합에서 allow/deny 우선순위 검증 - - `process(git *)`, `process(git push *)` 조합에서 dontask/deny 해석 검증 +### 2) 沅뚰븳 泥댁씤 ?뚭? ?뚯뒪??蹂닿컯 +- `OperationModePolicyTests`??耳€?댁뒪 異붽?: + - `process|git *`, `process|git push *` 議고빀?먯꽌 allow/deny ?곗꽑?쒖쐞 寃€利? + - `process(git *)`, `process(git push *)` 議고빀?먯꽌 dontask/deny ?댁꽍 寃€利? -### 3) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests"` 통과 (45 passed, 0 failed). +### 3) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~PermissionModePresentationCatalogTests"` ?듦낵 (45 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 37차: 권한 모드 별칭 정합 보강) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 37李? 沅뚰븳 紐⑤뱶 蹂꾩묶 ?뺥빀 蹂닿컯) -업데이트: 2026-04-04 14:57 (KST) +?낅뜲?댄듃: 2026-04-04 14:57 (KST) -### 1) 권한 모드 정규화 별칭 확장 -- `PermissionModeCatalog.NormalizeGlobalMode`에 별칭 추가: - - `none`, `disabled` → `Deny` - - `passive` → `Default` - - `active` → `AcceptEdits` - - `planning` → `Plan` - - `fullauto` → `BypassPermissions` - - `silent` → `DontAsk` +### 1) 沅뚰븳 紐⑤뱶 ?뺢퇋??蹂꾩묶 ?뺤옣 +- `PermissionModeCatalog.NormalizeGlobalMode`??蹂꾩묶 異붽?: + - `none`, `disabled` ??`Deny` + - `passive` ??`Default` + - `active` ??`AcceptEdits` + - `planning` ??`Plan` + - `fullauto` ??`BypassPermissions` + - `silent` ??`DontAsk` -### 2) Slash 권한 명령 별칭 동기화 -- `ChatWindow.TryApplyPermissionModeFromAction`에도 동일 별칭을 반영해 `/permissions`, `/allowed-tools` 입력과 내부 정규화 규칙을 일치시킴. +### 2) Slash 沅뚰븳 紐낅졊 蹂꾩묶 ?숆린?? +- `ChatWindow.TryApplyPermissionModeFromAction`?먮룄 ?숈씪 蹂꾩묶??諛섏쁺??`/permissions`, `/allowed-tools` ?낅젰怨??대? ?뺢퇋??洹쒖튃???쇱튂?쒗궡. -### 3) 회귀 테스트 보강 -- `PermissionModeCatalogTests`에 신규 별칭 입력 케이스를 추가해 정규화 회귀 검증 강화. +### 3) ?뚭? ?뚯뒪??蹂닿컯 +- `PermissionModeCatalogTests`???좉퇋 蹂꾩묶 ?낅젰 耳€?댁뒪瑜?異붽????뺢퇋???뚭? 寃€利?媛뺥솕. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` 통과 (88 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` ?듦낵 (88 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 38차: 권한 기본값 정책 정렬) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 38李? 沅뚰븳 湲곕낯媛??뺤콉 ?뺣젹) -업데이트: 2026-04-04 15:02 (KST) +?낅뜲?댄듃: 2026-04-04 15:02 (KST) -### 1) 권한 기본값을 Deny로 정렬 -- `AppSettings.LlmSettings`의 기본값을 변경: - - `FilePermission`: `Default` → `Deny` - - `DefaultAgentPermission`: `Default` → `Deny` -- 목적: 신규 설치/초기 상태에서 요청하신 기본 정책(활용하지 않음)으로 시작. +### 1) 沅뚰븳 湲곕낯媛믪쓣 Deny濡??뺣젹 +- `AppSettings.LlmSettings`??湲곕낯媛믪쓣 蹂€寃? + - `FilePermission`: `Default` ??`Deny` + - `DefaultAgentPermission`: `Default` ??`Deny` +- 紐⑹쟻: ?좉퇋 ?ㅼ튂/珥덇린 ?곹깭?먯꽌 ?붿껌?섏떊 湲곕낯 ?뺤콉(?쒖슜?섏? ?딆쓬)?쇰줈 ?쒖옉. -### 2) 앱 상태 기본값 동기화 -- `AppStateService.PermissionPolicyState.FilePermission` 기본값을 `Deny`로 변경. -- `AppStateService.PermissionSummaryState` 기본값(`EffectiveMode`, `DefaultMode`)도 `Deny`로 변경. +### 2) ???곹깭 湲곕낯媛??숆린?? +- `AppStateService.PermissionPolicyState.FilePermission` 湲곕낯媛믪쓣 `Deny`濡?蹂€寃? +- `AppStateService.PermissionSummaryState` 湲곕낯媛?`EffectiveMode`, `DefaultMode`)??`Deny`濡?蹂€寃? -### 3) Slash 권한 사용 가이드 문구 정렬 -- `/permissions`, `/allowed-tools`의 사용법 문구를 실사용 별칭 기준으로 정리: +### 3) Slash 沅뚰븳 ?ъ슜 媛€?대뱶 臾멸뎄 ?뺣젹 +- `/permissions`, `/allowed-tools`???ъ슜踰?臾멸뎄瑜??ㅼ궗??蹂꾩묶 湲곗??쇰줈 ?뺣━: - `none|passive|active|plan|fullauto|silent|status` -### 4) 회귀 테스트 보강 -- `AppStateServiceTests`에 신규 테스트 추가: +### 4) ?뚭? ?뚯뒪??蹂닿컯 +- `AppStateServiceTests`???좉퇋 ?뚯뒪??異붽?: - `LoadFromSettings_DefaultPermission_ShouldBeDeny` -- 검증 범위: +- 寃€利?踰붿쐞: - `AppStateServiceTests` - `PermissionModeCatalogTests` - `ChatWindowSlashPolicyTests` - `OperationModePolicyTests` -### 5) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~AppStateServiceTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModePolicyTests"` 통과 (132 passed, 0 failed). +### 5) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~AppStateServiceTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~OperationModePolicyTests"` ?듦낵 (132 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 39차: 탭 전환 빈 대화 누적 방지) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 39李? ???꾪솚 鍮??€???꾩쟻 諛⑹?) -업데이트: 2026-04-04 15:48 (KST) +?낅뜲?댄듃: 2026-04-04 15:48 (KST) -### 1) 세션 저장 정책 보강 -- `ChatSessionStateService.SaveCurrentConversation`에서 대화 저장 전 `HasPersistableContent` 검사를 추가. -- 메시지/실행이력/런기록/드래프트/핀/폴더/시스템명령/권한/카테고리 등 실질 상태가 없는 "빈 새 대화"는 디스크 저장 및 탭 기억 대상에서 제외. +### 1) ?몄뀡 ?€???뺤콉 蹂닿컯 +- `ChatSessionStateService.SaveCurrentConversation`?먯꽌 ?€???€????`HasPersistableContent` 寃€?щ? 異붽?. +- 硫붿떆吏€/?ㅽ뻾?대젰/?곌린濡??쒕옒?꾪듃/?€/?대뜑/?쒖뒪?쒕챸??沅뚰븳/移댄뀒怨좊━ ???ㅼ쭏 ?곹깭媛€ ?녿뒗 "鍮????€?????붿뒪???€??諛???湲곗뼲 ?€?곸뿉???쒖쇅. -### 2) 대화 목록 노이즈 필터 -- `ChatWindow.RefreshConversationList`에서 탭 전환 중 생성된 무의미한 빈 항목(제목=새 대화, 미리보기 없음, 실행 이력 없음 등)을 렌더링 대상에서 제외. -- 효과: 탭 이동만으로 좌측 이력에 새 대화가 누적되는 체감 문제 완화. +### 2) ?€??紐⑸줉 ?몄씠利??꾪꽣 +- `ChatWindow.RefreshConversationList`?먯꽌 ???꾪솚 以??앹꽦??臾댁쓽誘명븳 鍮???ぉ(?쒕ぉ=???€?? 誘몃━蹂닿린 ?놁쓬, ?ㅽ뻾 ?대젰 ?놁쓬 ?????뚮뜑留??€?곸뿉???쒖쇅. +- ?④낵: ???대룞留뚯쑝濡?醫뚯륫 ?대젰?????€?붽? ?꾩쟻?섎뒗 泥닿컧 臾몄젣 ?꾪솕. -### 3) 회귀 테스트 추가 -- `ChatSessionStateServiceTests.SaveCurrentConversation_DoesNotPersistEmptyFreshConversation` 추가. - - 빈 초기 대화 저장 호출 시 `RememberConversation`이 null로 유지되는지 검증. - - 저장소 재조회(`storage.Load(conv.Id)`)에서 null인지 검증. +### 3) ?뚭? ?뚯뒪??異붽? +- `ChatSessionStateServiceTests.SaveCurrentConversation_DoesNotPersistEmptyFreshConversation` 異붽?. + - 鍮?珥덇린 ?€???€???몄텧 ??`RememberConversation`??null濡??좎??섎뒗吏€ 寃€利? + - ?€?μ냼 ?ъ“??`storage.Load(conv.Id)`)?먯꽌 null?몄? 寃€利? -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~ChatSessionStateServiceTests|FullyQualifiedName~AppStateServiceTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` 통과 (132 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~ChatSessionStateServiceTests|FullyQualifiedName~AppStateServiceTests|FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~ChatWindowSlashPolicyTests"` ?듦낵 (132 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 40차: 권한 팝업 순서/즉시반영 정렬) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 40李? 沅뚰븳 ?앹뾽 ?쒖꽌/利됱떆諛섏쁺 ?뺣젹) -업데이트: 2026-04-04 15:52 (KST) +?낅뜲?댄듃: 2026-04-04 15:52 (KST) -### 1) 권한 팝업 표시 순서 정렬 -- `ChatWindow` 권한 팝업의 핵심 모드 목록에 `활용하지 않음(Deny)`을 포함해 맨 위에서 선택 가능하도록 조정. -- 고급 모드는 `질문 없이 진행(DontAsk)`만 유지해 핵심/고급 구분을 단순화. +### 1) 沅뚰븳 ?앹뾽 ?쒖떆 ?쒖꽌 ?뺣젹 +- `ChatWindow` 沅뚰븳 ?앹뾽???듭떖 紐⑤뱶 紐⑸줉??`?쒖슜?섏? ?딆쓬(Deny)`???ы븿??留??꾩뿉???좏깮 媛€?ν븯?꾨줉 議곗젙. +- 怨좉툒 紐⑤뱶??`吏덈Ц ?놁씠 吏꾪뻾(DontAsk)`留??좎????듭떖/怨좉툒 援щ텇???⑥닚?? -### 2) 탭/대화 전환 시 권한 즉시반영 보강 -- `LoadConversationSettings`에서 대화 권한이 비어 있는 경우에도 명시적으로 탭 기본값을 적용: - - `Chat` 탭: `Deny` - - `Cowork/Code` 탭: `DefaultAgentPermission` -- 효과: 이전 대화의 권한 값이 남아 2번 눌러야 반영되는 현상 완화. +### 2) ???€???꾪솚 ??沅뚰븳 利됱떆諛섏쁺 蹂닿컯 +- `LoadConversationSettings`?먯꽌 ?€??沅뚰븳??鍮꾩뼱 ?덈뒗 寃쎌슦?먮룄 紐낆떆?곸쑝濡???湲곕낯媛믪쓣 ?곸슜: + - `Chat` ?? `Deny` + - `Cowork/Code` ?? `DefaultAgentPermission` +- ?④낵: ?댁쟾 ?€?붿쓽 沅뚰븳 媛믪씠 ?⑥븘 2踰??뚮윭??諛섏쁺?섎뒗 ?꾩긽 ?꾪솕. -### 3) 권한 프리젠테이션 카탈로그 문자열 정리 -- `PermissionModePresentationCatalog`의 권한 라벨/설명 문자열을 정상 한글 문구로 정리(깨짐 문자열 제거). -- 표시 문구와 실제 권한 의미를 일치시켜 UX 혼선을 줄임. +### 3) 沅뚰븳 ?꾨━?좏뀒?댁뀡 移댄깉濡쒓렇 臾몄옄???뺣━ +- `PermissionModePresentationCatalog`??沅뚰븳 ?쇰꺼/?ㅻ챸 臾몄옄?댁쓣 ?뺤긽 ?쒓? 臾멸뎄濡??뺣━(源⑥쭚 臾몄옄???쒓굅). +- ?쒖떆 臾멸뎄?€ ?ㅼ젣 沅뚰븳 ?섎?瑜??쇱튂?쒖폒 UX ?쇱꽑??以꾩엫. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~PermissionModePresentationCatalogTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~ChatSessionStateServiceTests"` 통과 (111 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~PermissionModePresentationCatalogTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~ChatSessionStateServiceTests"` ?듦낵 (111 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 41차: 권한 색상 체계 통일) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 41李? 沅뚰븳 ?됱긽 泥닿퀎 ?듭씪) -업데이트: 2026-04-04 16:12 (KST) +?낅뜲?댄듃: 2026-04-04 16:12 (KST) -### 1) 권한 요약 카드 색상 매핑 정렬 -- `GetPermissionModePalette`의 모드별 색상을 팝업/배너 기준과 통일: - - Deny: 녹색 - - Default: 중립/파랑 계열(기존 유지) - - AcceptEdits: 녹색 - - Plan: 보라 - - BypassPermissions: 주황 - - DontAsk: 빨강 +### 1) 沅뚰븳 ?붿빟 移대뱶 ?됱긽 留ㅽ븨 ?뺣젹 +- `GetPermissionModePalette`??紐⑤뱶蹂??됱긽???앹뾽/諛곕꼫 湲곗?怨??듭씪: + - Deny: ?뱀깋 + - Default: 以묐┰/?뚮옉 怨꾩뿴(湲곗〈 ?좎?) + - AcceptEdits: ?뱀깋 + - Plan: 蹂대씪 + - BypassPermissions: 二쇳솴 + - DontAsk: 鍮④컯 -### 2) 상단 권한 배너 시각 통일 -- `BypassPermissions`와 `DontAsk`를 분리 렌더링: - - 완전 자동: 주황 배너 + 주황 아이콘 - - 질문 없이 진행: 빨강 배너 + 빨강 아이콘 -- 기존처럼 두 모드를 동일 위험색으로 처리하던 혼선을 제거. +### 2) ?곷떒 沅뚰븳 諛곕꼫 ?쒓컖 ?듭씪 +- `BypassPermissions`?€ `DontAsk`瑜?遺꾨━ ?뚮뜑留? + - ?꾩쟾 ?먮룞: 二쇳솴 諛곕꼫 + 二쇳솴 ?꾩씠肄? + - 吏덈Ц ?놁씠 吏꾪뻾: 鍮④컯 諛곕꼫 + 鍮④컯 ?꾩씠肄? +- 湲곗〈泥섎읆 ??紐⑤뱶瑜??숈씪 ?꾪뿕?됱쑝濡?泥섎━?섎뜕 ?쇱꽑???쒓굅. -### 3) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~PermissionModePresentationCatalogTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~ChatSessionStateServiceTests"` 통과 (72 passed, 0 failed). +### 3) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj --filter "FullyQualifiedName~PermissionModePresentationCatalogTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~ChatSessionStateServiceTests"` ?듦낵 (72 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 42차: 슬래시 네비게이션 입력 보강) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 42李? ?щ옒???ㅻ퉬寃뚯씠???낅젰 蹂닿컯) -업데이트: 2026-04-04 16:18 (KST) +?낅뜲?댄듃: 2026-04-04 16:18 (KST) -### 1) InputBox 포커스 상태 네비게이션 보강 -- `InputBox_PreviewKeyDown` 초입에서 슬래시 전용 네비게이션 핸들러를 우선 호출하도록 변경. -- 기존에는 창 수준 `KeyDown`에 의존해 환경/포커스 상황에서 방향키가 텍스트 커서 이동으로 소비되는 케이스가 있었음. +### 1) InputBox ?ъ빱???곹깭 ?ㅻ퉬寃뚯씠??蹂닿컯 +- `InputBox_PreviewKeyDown` 珥덉엯?먯꽌 ?щ옒???꾩슜 ?ㅻ퉬寃뚯씠???몃뱾?щ? ?곗꽑 ?몄텧?섎룄濡?蹂€寃? +- 湲곗〈?먮뒗 李??섏? `KeyDown`???섏〈???섍꼍/?ъ빱???곹솴?먯꽌 諛⑺뼢?ㅺ? ?띿뒪??而ㅼ꽌 ?대룞?쇰줈 ?뚮퉬?섎뒗 耳€?댁뒪媛€ ?덉뿀?? -### 2) 슬래시 키 처리 경로 통합 -- `TryHandleSlashNavigationKey`를 신설해 `InputBox`와 창 전체 `KeyDown` 모두 같은 경로로 처리: +### 2) ?щ옒????泥섎━ 寃쎈줈 ?듯빀 +- `TryHandleSlashNavigationKey`瑜??좎꽕??`InputBox`?€ 李??꾩껜 `KeyDown` 紐⑤몢 媛숈? 寃쎈줈濡?泥섎━: - `Up/Down`, `PageUp/PageDown`, `Home/End`, `Esc`, `Enter`, `Tab` -- 효과: 키보드 탐색 동작 일관성 개선. +- ?④낵: ?ㅻ낫???먯깋 ?숈옉 ?쇨???媛쒖꽑. -### 3) 휠 스크롤 fallback 추가 -- `SlashPopup_ScrollByDelta`에서 모든 그룹이 접힌 상태(가시 항목 0)일 때 `SlashScrollViewer` 오프셋을 직접 이동하도록 fallback 추가. -- 효과: 항목 선택 인덱스가 없는 상태에서도 휠 입력이 무반응처럼 보이는 현상 완화. +### 3) ???ㅽ겕濡?fallback 異붽? +- `SlashPopup_ScrollByDelta`?먯꽌 紐⑤뱺 洹몃9???묓엺 ?곹깭(媛€????ぉ 0)????`SlashScrollViewer` ?ㅽ봽?뗭쓣 吏곸젒 ?대룞?섎룄濡?fallback 異붽?. +- ?④낵: ??ぉ ?좏깮 ?몃뜳?ㅺ? ?녿뒗 ?곹깭?먯꽌?????낅젰??臾대컲?묒쿂??蹂댁씠???꾩긽 ?꾪솕. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -p:UseSharedCompilation=false -nodeReuse:false --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~ChatSessionStateServiceTests"` 통과 (109 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -p:UseSharedCompilation=false -nodeReuse:false --filter "FullyQualifiedName~ChatWindowSlashPolicyTests|FullyQualifiedName~PermissionModeCatalogTests|FullyQualifiedName~ChatSessionStateServiceTests"` ?듦낵 (109 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 43차: 사내/사외 모드 회귀 보강) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 43李? ?щ궡/?ъ쇅 紐⑤뱶 ?뚭? 蹂닿컯) -업데이트: 2026-04-04 16:24 (KST) +?낅뜲?댄듃: 2026-04-04 16:24 (KST) -### 1) 정책 경계 테스트 보강 -- `OperationModePolicyTests`에 `IsExternalUrl_DetectsOnlyHttpSchemes` 추가. -- 검증 범위: - - `http/https`는 외부 URL로 판정 - - 로컬 파일 경로, `mailto`, 일반 문자열은 외부 URL이 아님 +### 1) ?뺤콉 寃쎄퀎 ?뚯뒪??蹂닿컯 +- `OperationModePolicyTests`??`IsExternalUrl_DetectsOnlyHttpSchemes` 異붽?. +- 寃€利?踰붿쐞: + - `http/https`???몃? URL濡??먯젙 + - 濡쒖뺄 ?뚯씪 寃쎈줈, `mailto`, ?쇰컲 臾몄옄?댁? ?몃? URL???꾨떂 -### 2) 모드 전환 즉시 반영 테스트 추가 -- `OperationModeReadinessTests`를 정리/보강: - - `WebSearch_ModeSwitch_InternalToExternal_ShouldReflectImmediately` 추가 - - 같은 핸들러 인스턴스에서 설정값 전환 후 결과가 즉시 `차단`→`검색`으로 반영되는지 검증 -- 기존 readiness 테스트의 문자열 비교도 정상 한글 기준으로 정비. +### 2) 紐⑤뱶 ?꾪솚 利됱떆 諛섏쁺 ?뚯뒪??異붽? +- `OperationModeReadinessTests`瑜??뺣━/蹂닿컯: + - `WebSearch_ModeSwitch_InternalToExternal_ShouldReflectImmediately` 異붽? + - 媛숈? ?몃뱾???몄뒪?댁뒪?먯꽌 ?ㅼ젙媛??꾪솚 ??寃곌낵媛€ 利됱떆 `李⑤떒`??寃€???쇰줈 諛섏쁺?섎뒗吏€ 寃€利? +- 湲곗〈 readiness ?뚯뒪?몄쓽 臾몄옄??鍮꾧탳???뺤긽 ?쒓? 湲곗??쇰줈 ?뺣퉬. -### 3) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -p:UseSharedCompilation=false -nodeReuse:false --filter "FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~OperationModeReadinessTests"` 통과 (20 passed, 0 failed). +### 3) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -p:UseSharedCompilation=false -nodeReuse:false --filter "FullyQualifiedName~OperationModePolicyTests|FullyQualifiedName~OperationModeReadinessTests"` ?듦낵 (20 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 44차: AX Agent 설정창 오픈 안정화) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 44李? AX Agent ?ㅼ젙李??ㅽ뵂 ?덉젙?? -업데이트: 2026-04-04 17:12 (KST) +?낅뜲?댄듃: 2026-04-04 17:12 (KST) -### 1) 전역 토글 리소스 보강 -- `App.xaml`에 `ToggleSwitch` 스타일을 전역 리소스로 추가. -- 효과: - - 창별 리소스 병합 순서와 무관하게 `ToggleSwitch` 키를 항상 해석 가능. - - AX Agent 창(`ChatWindow`) 초기화 중 `StaticResource ToggleSwitch` 누락 예외 재발 방지. +### 1) ?꾩뿭 ?좉? 由ъ냼??蹂닿컯 +- `App.xaml`??`ToggleSwitch` ?ㅽ??쇱쓣 ?꾩뿭 由ъ냼?ㅻ줈 異붽?. +- ?④낵: + - 李쎈퀎 由ъ냼??蹂묓빀 ?쒖꽌?€ 臾닿??섍쾶 `ToggleSwitch` ?ㅻ? ??긽 ?댁꽍 媛€?? + - AX Agent 李?`ChatWindow`) 珥덇린??以?`StaticResource ToggleSwitch` ?꾨씫 ?덉쇅 ?щ컻 諛⑹?. -### 2) AX Agent 설정창 리소스 주입 경로 개선 -- `ChatWindow.OpenAgentSettingsWindow()`에서 창 전체 리소스 사전을 직접 병합하던 경로를 제거. -- 대신 AX Agent 전용 테마 사전(`Themes/AgentLight|AgentDark.xaml`)만 안전하게 주입하도록 변경. -- 효과: - - 설정창 오픈 시 리소스 충돌 위험 감소. - - 테마 일관성 유지 + 설정창 오픈 실패 가능성 완화. +### 2) AX Agent ?ㅼ젙李?由ъ냼??二쇱엯 寃쎈줈 媛쒖꽑 +- `ChatWindow.OpenAgentSettingsWindow()`?먯꽌 李??꾩껜 由ъ냼???ъ쟾??吏곸젒 蹂묓빀?섎뜕 寃쎈줈瑜??쒓굅. +- ?€??AX Agent ?꾩슜 ?뚮쭏 ?ъ쟾(`Themes/AgentLight|AgentDark.xaml`)留??덉쟾?섍쾶 二쇱엯?섎룄濡?蹂€寃? +- ?④낵: + - ?ㅼ젙李??ㅽ뵂 ??由ъ냼??異⑸룎 ?꾪뿕 媛먯냼. + - ?뚮쭏 ?쇨????좎? + ?ㅼ젙李??ㅽ뵂 ?ㅽ뙣 媛€?μ꽦 ?꾪솕. -### 3) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Debug --filter "ChatWindowSlashPolicyTests|OperationModePolicyTests|OperationModeReadinessTests"` 통과 (59 passed, 0 failed). +### 3) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Debug --filter "ChatWindowSlashPolicyTests|OperationModePolicyTests|OperationModeReadinessTests"` ?듦낵 (59 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 45차: 권한 순환/슬래시 스크롤 체감 보강) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 45李? 沅뚰븳 ?쒗솚/?щ옒???ㅽ겕濡?泥닿컧 蹂닿컯) -업데이트: 2026-04-04 17:27 (KST) +?낅뜲?댄듃: 2026-04-04 17:27 (KST) -### 1) 권한 모드 기본 순환 정렬 -- `claw-code`의 코어 모드 순환 기준에 맞춰 기본 순환을 `Deny → Default → AcceptEdits → Plan → BypassPermissions → Deny`로 고정. -- `DontAsk`는 고위험 모드로 분리해 기본 순환(인라인/슬래시/설정창 버튼)에서 제외하고 명시 선택으로만 진입하도록 조정. -- 반영 위치: +### 1) 沅뚰븳 紐⑤뱶 湲곕낯 ?쒗솚 ?뺣젹 +- `claw-code`??肄붿뼱 紐⑤뱶 ?쒗솚 湲곗???留욎떠 湲곕낯 ?쒗솚??`Deny ??Default ??AcceptEdits ??Plan ??BypassPermissions ??Deny`濡?怨좎젙. +- `DontAsk`??怨좎쐞??紐⑤뱶濡?遺꾨━??湲곕낯 ?쒗솚(?몃씪???щ옒???ㅼ젙李?踰꾪듉)?먯꽌 ?쒖쇅?섍퀬 紐낆떆 ?좏깮?쇰줈留?吏꾩엯?섎룄濡?議곗젙. +- 諛섏쁺 ?꾩튂: - `ChatWindow.NextPermission(...)` - `AgentSettingsWindow.BtnPermissionMode_Click(...)` -### 2) 슬래시 팝업 휠 스크롤 반응 보강 -- `/` 팝업 휠 입력 시: - 1. `ScrollViewer` 오프셋을 실제로 이동 - 2. 뷰포트 상단에 가장 가까운 항목으로 선택 인덱스를 동기화 - 3. 선택 강조/가시화 갱신 -- 효과: - - 터치패드/마우스에서 스크롤 체감이 더 자연스러워지고, 선택 하이라이트와 실제 스크롤 위치 불일치가 완화됨. +### 2) ?щ옒???앹뾽 ???ㅽ겕濡?諛섏쓳 蹂닿컯 +- `/` ?앹뾽 ???낅젰 ?? + 1. `ScrollViewer` ?ㅽ봽?뗭쓣 ?ㅼ젣濡??대룞 + 2. 酉고룷???곷떒??媛€??媛€源뚯슫 ??ぉ?쇰줈 ?좏깮 ?몃뜳?ㅻ? ?숆린?? + 3. ?좏깮 媛뺤“/媛€?쒗솕 媛깆떊 +- ?④낵: + - ?곗튂?⑤뱶/留덉슦?ㅼ뿉???ㅽ겕濡?泥닿컧?????먯뿰?ㅻ윭?뚯?怨? ?좏깮 ?섏씠?쇱씠?몄? ?ㅼ젣 ?ㅽ겕濡??꾩튂 遺덉씪移섍? ?꾪솕?? -### 3) 회귀 테스트 추가 -- `ChatWindowSlashPolicyTests.NextPermission_ShouldCycleCoreModesAndReturnToDeny` 추가. -- 검증 케이스: +### 3) ?뚭? ?뚯뒪??異붽? +- `ChatWindowSlashPolicyTests.NextPermission_ShouldCycleCoreModesAndReturnToDeny` 異붽?. +- 寃€利?耳€?댁뒪: - `BypassPermissions -> Deny` - `DontAsk -> Deny` - - 코어 순환 전 구간. + - 肄붿뼱 ?쒗솚 ??援ш컙. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false --filter "ChatWindowSlashPolicyTests|OperationModePolicyTests|OperationModeReadinessTests"` 통과 (65 passed, 0 failed). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false --filter "ChatWindowSlashPolicyTests|OperationModePolicyTests|OperationModeReadinessTests"` ?듦낵 (65 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 46차: 권한 팝업 상세영역 단순화) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 46李? 沅뚰븳 ?앹뾽 ?곸꽭?곸뿭 ?⑥닚?? -업데이트: 2026-04-04 16:45 (KST) +?낅뜲?댄듃: 2026-04-04 16:45 (KST) -### 1) 권한 팝업 구조 단순화 -- 기존 `현재 권한 요약`, `도구별 예외`, `최근 권한 거부` 3개 개별 접힘 섹션을 단일 `상세 정보` 섹션으로 통합. -- 기본 화면은 `핵심 권한 모드`(+`고급 모드`) 중심으로 유지하고, 부가 정보는 1회 추가 확장으로 확인하도록 정리. +### 1) 沅뚰븳 ?앹뾽 援ъ“ ?⑥닚?? +- 湲곗〈 `?꾩옱 沅뚰븳 ?붿빟`, `?꾧뎄蹂??덉쇅`, `理쒓렐 沅뚰븳 嫄곕?` 3媛?媛쒕퀎 ?묓옒 ?뱀뀡???⑥씪 `?곸꽭 ?뺣낫` ?뱀뀡?쇰줈 ?듯빀. +- 湲곕낯 ?붾㈃?€ `?듭떖 沅뚰븳 紐⑤뱶`(+`怨좉툒 紐⑤뱶`) 以묒떖?쇰줈 ?좎??섍퀬, 遺€媛€ ?뺣낫??1??異붽? ?뺤옣?쇰줈 ?뺤씤?섎룄濡??뺣━. -### 2) 요약 카드 텍스트 밀도 보정 -- 요약 카드 본문을 줄바꿈 기반에서 말줄임 기반으로 조정해 팝업 기본 높이와 시야 밀도를 안정화. -- 효과: 모드 선택 리스트가 첫 화면에서 더 많이 보이고, 스캔 동선이 단순화됨. +### 2) ?붿빟 移대뱶 ?띿뒪??諛€??蹂댁젙 +- ?붿빟 移대뱶 蹂몃Ц??以꾨컮轅?湲곕컲?먯꽌 留먯쨪??湲곕컲?쇰줈 議곗젙???앹뾽 湲곕낯 ?믪씠?€ ?쒖빞 諛€?꾨? ?덉젙?? +- ?④낵: 紐⑤뱶 ?좏깮 由ъ뒪?멸? 泥??붾㈃?먯꽌 ??留롮씠 蹂댁씠怨? ?ㅼ틪 ?숈꽑???⑥닚?붾맖. -### 3) 품질 게이트 -- 초기 빌드에서 WPF 임시 산출물(`wpftmp/.g.cs`) 누락 이슈를 확인했고, `dotnet clean` 후 재빌드로 정상 복구. -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false --filter "ChatWindowSlashPolicyTests|OperationModePolicyTests|OperationModeReadinessTests"` 통과 (65 passed, 0 failed). +### 3) ?덉쭏 寃뚯씠?? +- 珥덇린 鍮뚮뱶?먯꽌 WPF ?꾩떆 ?곗텧臾?`wpftmp/.g.cs`) ?꾨씫 ?댁뒋瑜??뺤씤?덇퀬, `dotnet clean` ???щ퉴?쒕줈 ?뺤긽 蹂듦뎄. +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false --filter "ChatWindowSlashPolicyTests|OperationModePolicyTests|OperationModeReadinessTests"` ?듦낵 (65 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 47차: 권한 팝업 밀도/정렬 미세조정) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 47李? 沅뚰븳 ?앹뾽 諛€???뺣젹 誘몄꽭議곗젙) -업데이트: 2026-04-04 16:58 (KST) +?낅뜲?댄듃: 2026-04-04 16:58 (KST) -### 1) 권한 행 컴팩트 정렬 -- 권한 모드 행의 레이아웃 값을 미세 조정: - - 행 패딩/마진 축소 - - 아이콘 크기/좌우 간격 축소 - - 체크마크 간격 축소 - - 제목/설명 폰트와 줄간격 축소 -- 목표: 한 화면에서 더 많은 권한 항목을 안정적으로 스캔 가능하도록 밀도 개선. +### 1) 沅뚰븳 ??而댄뙥???뺣젹 +- 沅뚰븳 紐⑤뱶 ?됱쓽 ?덉씠?꾩썐 媛믪쓣 誘몄꽭 議곗젙: + - ???⑤뵫/留덉쭊 異뺤냼 + - ?꾩씠肄??ш린/醫뚯슦 媛꾧꺽 異뺤냼 + - 泥댄겕留덊겕 媛꾧꺽 異뺤냼 + - ?쒕ぉ/?ㅻ챸 ?고듃?€ 以꾧컙寃?異뺤냼 +- 紐⑺몴: ???붾㈃?먯꽌 ??留롮? 沅뚰븳 ??ぉ???덉젙?곸쑝濡??ㅼ틪 媛€?ν븯?꾨줉 諛€??媛쒖꽑. -### 2) 요약 카드 타이포 균형 조정 -- 상단 요약 카드의 제목/본문 폰트와 여백을 한 단계 축소해 본문 과점유를 줄임. -- 효과: 권한 팝업 첫 진입 시 핵심 모드 리스트 가시성 향상. +### 2) ?붿빟 移대뱶 ?€?댄룷 洹좏삎 議곗젙 +- ?곷떒 ?붿빟 移대뱶???쒕ぉ/蹂몃Ц ?고듃?€ ?щ갚?????④퀎 異뺤냼??蹂몃Ц 怨쇱젏?좊? 以꾩엫. +- ?④낵: 沅뚰븳 ?앹뾽 泥?吏꾩엯 ???듭떖 紐⑤뱶 由ъ뒪??媛€?쒖꽦 ?μ긽. -### 3) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` 통과 (경고 0, 오류 0). -- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false --filter "ChatWindowSlashPolicyTests|OperationModePolicyTests|OperationModeReadinessTests"` 통과 (65 passed, 0 failed). +### 3) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Debug -p:UseSharedCompilation=false -nodeReuse:false --filter "ChatWindowSlashPolicyTests|OperationModePolicyTests|OperationModeReadinessTests"` ?듦낵 (65 passed, 0 failed). -## 2026-04-04 추가 진행 기록 (연속 실행 48차: AX Agent 패널/메시지/composer 시각 규칙 통일 1차) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 48李? AX Agent ?⑤꼸/硫붿떆吏€/composer ?쒓컖 洹쒖튃 ?듭씪 1李? -업데이트: 2026-04-04 19:07 (KST) +?낅뜲?댄듃: 2026-04-04 19:07 (KST) -### 1) 팝업 패널 row 언어 통일 -- 권한 팝업의 `도구별 예외`를 칩 나열에서 row 기반 목록으로 바꿔, Git/프리셋/슬래시와 같은 스캔 방식으로 맞춤. -- 권한 상세 접힘 섹션 카드 외곽을 무거운 박스형에서 경계선 중심 구조로 정리해 `claw-code` 기준의 가벼운 패널 밀도에 가깝게 조정. -- Git 브랜치 팝업의 변경 통계를 텍스트 나열 대신 pill 배지로 정리하고, 섹션 라벨과 액션 row를 같은 규칙으로 통일. -- 공통 `CreateFlatPopupRow()`에 키보드 포커스/Enter·Space 실행/chevron 표시를 넣어 클릭 가능한 항목이 더 명확하게 보이도록 보강. +### 1) ?앹뾽 ?⑤꼸 row ?몄뼱 ?듭씪 +- 沅뚰븳 ?앹뾽??`?꾧뎄蹂??덉쇅`瑜?移??섏뿴?먯꽌 row 湲곕컲 紐⑸줉?쇰줈 諛붽퓭, Git/?꾨━???щ옒?쒖? 媛숈? ?ㅼ틪 諛⑹떇?쇰줈 留욎땄. +- 沅뚰븳 ?곸꽭 ?묓옒 ?뱀뀡 移대뱶 ?멸낸??臾닿굅??諛뺤뒪?뺤뿉??寃쎄퀎??以묒떖 援ъ“濡??뺣━??`claw-code` 湲곗???媛€踰쇱슫 ?⑤꼸 諛€?꾩뿉 媛€源앷쾶 議곗젙. +- Git 釉뚮옖移??앹뾽??蹂€寃??듦퀎瑜??띿뒪???섏뿴 ?€??pill 諛곗?濡??뺣━?섍퀬, ?뱀뀡 ?쇰꺼怨??≪뀡 row瑜?媛숈? 洹쒖튃?쇰줈 ?듭씪. +- 怨듯넻 `CreateFlatPopupRow()`???ㅻ낫???ъ빱??Enter쨌Space ?ㅽ뻾/chevron ?쒖떆瑜??l뼱 ?대┃ 媛€?ν븳 ??ぉ????紐낇솗?섍쾶 蹂댁씠?꾨줉 蹂닿컯. -### 2) 메시지 액션 바와 선택 상태 정리 -- 메시지 액션 버튼을 아이콘만 있는 상태에서 `아이콘 + 라벨` pill형 버튼으로 바꿔, hover/선택 시에도 기능을 더 빠르게 읽을 수 있도록 조정. -- 커스텀 액션 버튼 템플릿이 BorderBrush/BorderThickness를 반영하도록 수정해 메시지 액션 바가 실제 커스텀 컨트롤처럼 보이도록 정리. -- 메시지 선택 시 카드 외곽선과 그림자 강조가 안정적으로 유지되도록 정렬. +### 2) 硫붿떆吏€ ?≪뀡 諛붿? ?좏깮 ?곹깭 ?뺣━ +- 硫붿떆吏€ ?≪뀡 踰꾪듉???꾩씠肄섎쭔 ?덈뒗 ?곹깭?먯꽌 `?꾩씠肄?+ ?쇰꺼` pill??踰꾪듉?쇰줈 諛붽퓭, hover/?좏깮 ?쒖뿉??湲곕뒫????鍮좊Ⅴ寃??쎌쓣 ???덈룄濡?議곗젙. +- 而ㅼ뒪?€ ?≪뀡 踰꾪듉 ?쒗뵆由우씠 BorderBrush/BorderThickness瑜?諛섏쁺?섎룄濡??섏젙??硫붿떆吏€ ?≪뀡 諛붽? ?ㅼ젣 而ㅼ뒪?€ 而⑦듃濡ㅼ쿂??蹂댁씠?꾨줉 ?뺣━. +- 硫붿떆吏€ ?좏깮 ??移대뱶 ?멸낸?좉낵 洹몃┝??媛뺤“媛€ ?덉젙?곸쑝濡??좎??섎룄濡??뺣젹. -### 3) composer 하단 바 밀도 보정 -- 입력 카드 패딩, 모델 선택 버튼, 프리셋 버튼, 토큰 사용 카드의 높이/곡률을 재정리해 상단 control strip이 같은 계열의 composer 요소처럼 보이도록 조정. -- Cowork/Code 하단 `FolderBar`를 독립 카드형 영역으로 올리고, 데이터 활용/권한/Git 버튼 패딩과 카드 밀도를 동일 기준으로 정렬. +### 3) composer ?섎떒 諛?諛€??蹂댁젙 +- ?낅젰 移대뱶 ?⑤뵫, 紐⑤뜽 ?좏깮 踰꾪듉, ?꾨━??踰꾪듉, ?좏겙 ?ъ슜 移대뱶???믪씠/怨〓쪧???ъ젙由ы빐 ?곷떒 control strip??媛숈? 怨꾩뿴??composer ?붿냼泥섎읆 蹂댁씠?꾨줉 議곗젙. +- Cowork/Code ?섎떒 `FolderBar`瑜??낅┰ 移대뱶???곸뿭?쇰줈 ?щ━怨? ?곗씠???쒖슜/沅뚰븳/Git 踰꾪듉 ?⑤뵫怨?移대뱶 諛€?꾨? ?숈씪 湲곗??쇰줈 ?뺣젹. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal` 통과 (경고 0, 오류 0). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 49차: AX Agent 타임라인을 Codex형 본문 로그 구조로 재정렬) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 49李? AX Agent ?€?꾨씪?몄쓣 Codex??蹂몃Ц 濡쒓렇 援ъ“濡??ъ젙?? -업데이트: 2026-04-04 19:11 (KST) +?낅뜲?댄듃: 2026-04-04 19:11 (KST) -### 1) 실행 로그 배너를 얇은 본문 로그로 재구성 -- `AddAgentEventBanner()`를 무거운 컬러 배너 카드에서 `얇은 실행 줄 + 우측 메타` 구조로 전환. -- 로그 라벨, 실행 시간, 토큰 배지는 유지하되 색/곡률/마진을 낮춰 본문을 방해하지 않는 방향으로 정리. -- detailed/debug 요약, tool input, file path 보조 정보도 동일 기준의 얕은 블록으로 맞춤. +### 1) ?ㅽ뻾 濡쒓렇 諛곕꼫瑜??뉗? 蹂몃Ц 濡쒓렇濡??ш뎄?? +- `AddAgentEventBanner()`瑜?臾닿굅??而щ윭 諛곕꼫 移대뱶?먯꽌 `?뉗? ?ㅽ뻾 以?+ ?곗륫 硫뷀?` 援ъ“濡??꾪솚. +- 濡쒓렇 ?쇰꺼, ?ㅽ뻾 ?쒓컙, ?좏겙 諛곗????좎??섎릺 ??怨〓쪧/留덉쭊????떠 蹂몃Ц??諛⑺빐?섏? ?딅뒗 諛⑺뼢?쇰줈 ?뺣━. +- detailed/debug ?붿빟, tool input, file path 蹂댁“ ?뺣낫???숈씪 湲곗????뺤? 釉붾줉?쇰줈 留욎땄. -### 2) 계획 카드를 대화 흐름형 카드로 보정 -- `AddPlanningCard()`를 별도 강조 박스보다 `메시지 카드와 같은 폭/곡률`에 가깝게 재정렬. -- 헤더 문구를 `N개의 작업 완료 중 0` 구조로 바꿔 Codex 스타일의 진행형 계획 카드 리듬에 맞춤. -- 진행률 바/단계 목록의 텍스트 색과 폭도 현재 메시지 본문 폭 기준으로 맞춤. +### 2) 怨꾪쉷 移대뱶瑜??€???먮쫫??移대뱶濡?蹂댁젙 +- `AddPlanningCard()`瑜?蹂꾨룄 媛뺤“ 諛뺤뒪蹂대떎 `硫붿떆吏€ 移대뱶?€ 媛숈? ??怨〓쪧`??媛€源앷쾶 ?ъ젙?? +- ?ㅻ뜑 臾멸뎄瑜?`N媛쒖쓽 ?묒뾽 ?꾨즺 以?0` 援ъ“濡?諛붽퓭 Codex ?ㅽ??쇱쓽 吏꾪뻾??怨꾪쉷 移대뱶 由щ벉??留욎땄. +- 吏꾪뻾瑜?諛??④퀎 紐⑸줉???띿뒪???됯낵 ??룄 ?꾩옱 硫붿떆吏€ 蹂몃Ц ??湲곗??쇰줈 留욎땄. -### 3) 이전 대화 로드 카드 톤 다운 -- `CreateTimelineLoadMoreCard()`를 카드형 박스에서 얇은 outline pill형 버튼으로 전환해 타임라인 상단 밀도를 낮춤. +### 3) ?댁쟾 ?€??濡쒕뱶 移대뱶 ???ㅼ슫 +- `CreateTimelineLoadMoreCard()`瑜?移대뱶??諛뺤뒪?먯꽌 ?뉗? outline pill??踰꾪듉?쇰줈 ?꾪솚???€?꾨씪???곷떒 諛€?꾨? ??땄. -### 4) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal` 통과 (경고 0, 오류 0). +### 4) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). -## 2026-04-04 추가 진행 기록 (연속 실행 50차: 메시지/스트리밍/composer/설정 표현을 같은 UX 규칙으로 재정렬) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 50李? 硫붿떆吏€/?ㅽ듃由щ컢/composer/?ㅼ젙 ?쒗쁽??媛숈? UX 洹쒖튃?쇰줈 ?ъ젙?? -업데이트: 2026-04-04 19:25 (KST) +?낅뜲?댄듃: 2026-04-04 19:25 (KST) -### 1) 메시지 카드와 스트리밍 카드 규칙 통일 -- 사용자/AI 메시지 카드의 세로 마진, 코너 반경, 본문 패딩, 타임스탬프 크기를 한 단계 더 줄여 Codex형 촘촘한 본문 밀도로 재정렬. -- 스트리밍 카드 헤더의 아이콘/이름/경과 시간 타이포를 일반 AI 메시지와 같은 기준으로 맞추고, 카드 반경/패딩/메타 줄 간격도 동일 규칙으로 통일. -- 액션 바의 세로 간격과 메타 정보 크기를 낮춰 본문과 자연스럽게 이어지도록 정리. +### 1) 硫붿떆吏€ 移대뱶?€ ?ㅽ듃由щ컢 移대뱶 洹쒖튃 ?듭씪 +- ?ъ슜??AI 硫붿떆吏€ 移대뱶???몃줈 留덉쭊, 肄붾꼫 諛섍꼍, 蹂몃Ц ?⑤뵫, ?€?꾩뒪?ы봽 ?ш린瑜????④퀎 ??以꾩뿬 Codex??珥섏킌??蹂몃Ц 諛€?꾨줈 ?ъ젙?? +- ?ㅽ듃由щ컢 移대뱶 ?ㅻ뜑???꾩씠肄??대쫫/寃쎄낵 ?쒓컙 ?€?댄룷瑜??쇰컲 AI 硫붿떆吏€?€ 媛숈? 湲곗??쇰줈 留욎텛怨? 移대뱶 諛섍꼍/?⑤뵫/硫뷀? 以?媛꾧꺽???숈씪 洹쒖튃?쇰줈 ?듭씪. +- ?≪뀡 諛붿쓽 ?몃줈 媛꾧꺽怨?硫뷀? ?뺣낫 ?ш린瑜???떠 蹂몃Ц怨??먯뿰?ㅻ읇寃??댁뼱吏€?꾨줉 ?뺣━. -### 2) composer 상단 strip / 하단 상태줄 압축 -- 입력 카드, 모델 버튼, 프리셋 버튼, 토큰 링 카드의 높이와 패딩을 더 낮고 평평하게 조정해 `claw-code` 계열의 얇은 composer 리듬에 가깝게 정렬. -- 입력 박스 최소 높이와 패딩, 첨부/내보내기/중지/전송 버튼 크기를 함께 줄여 하단부 전체가 한 덩어리의 얇은 작업줄처럼 보이도록 보정. -- Cowork/Code `FolderBar`도 높이/곡률/패딩을 다시 낮춰 하단 상태줄이 본문보다 과하게 튀지 않도록 정리. +### 2) composer ?곷떒 strip / ?섎떒 ?곹깭以??뺤텞 +- ?낅젰 移대뱶, 紐⑤뜽 踰꾪듉, ?꾨━??踰꾪듉, ?좏겙 留?移대뱶???믪씠?€ ?⑤뵫??????퀬 ?됲룊?섍쾶 議곗젙??`claw-code` 怨꾩뿴???뉗? composer 由щ벉??媛€源앷쾶 ?뺣젹. +- ?낅젰 諛뺤뒪 理쒖냼 ?믪씠?€ ?⑤뵫, 泥⑤?/?대낫?닿린/以묒?/?꾩넚 踰꾪듉 ?ш린瑜??④퍡 以꾩뿬 ?섎떒遺€ ?꾩껜媛€ ???⑹뼱由ъ쓽 ?뉗? ?묒뾽以꾩쿂??蹂댁씠?꾨줉 蹂댁젙. +- Cowork/Code `FolderBar`???믪씠/怨〓쪧/?⑤뵫???ㅼ떆 ??떠 ?섎떒 ?곹깭以꾩씠 蹂몃Ц蹂대떎 怨쇳븯寃??€吏€ ?딅룄濡??뺣━. -### 3) AX Agent 설정 페이지와 인라인 빠른 설정 표현 일치 -- 인라인 빠른 설정의 상태 라벨을 `제목 · 현재값` 구조로 통일하고, 전체 설정의 빠른 설정 버튼도 같은 표기 규칙으로 동기화. -- 전체 설정의 `빠른 제어` 영역을 `빠른 설정`으로 재정의하고, 인라인 빠른 설정과 같은 항목명/강조 방식으로 맞춤. -- 전체 설정 설명 문구도 `AX Agent 설정을 이 화면 하나에서 정리`하는 방향으로 다시 정리해 트레이 기반 표현의 잔재를 제거. +### 3) AX Agent ?ㅼ젙 ?섏씠吏€?€ ?몃씪??鍮좊Ⅸ ?ㅼ젙 ?쒗쁽 ?쇱튂 +- ?몃씪??鍮좊Ⅸ ?ㅼ젙???곹깭 ?쇰꺼??`?쒕ぉ 쨌 ?꾩옱媛? 援ъ“濡??듭씪?섍퀬, ?꾩껜 ?ㅼ젙??鍮좊Ⅸ ?ㅼ젙 踰꾪듉??媛숈? ?쒓린 洹쒖튃?쇰줈 ?숆린?? +- ?꾩껜 ?ㅼ젙??`鍮좊Ⅸ ?쒖뼱` ?곸뿭??`鍮좊Ⅸ ?ㅼ젙`?쇰줈 ?ъ젙?섑븯怨? ?몃씪??鍮좊Ⅸ ?ㅼ젙怨?媛숈? ??ぉ紐?媛뺤“ 諛⑹떇?쇰줈 留욎땄. +- ?꾩껜 ?ㅼ젙 ?ㅻ챸 臾멸뎄??`AX Agent ?ㅼ젙?????붾㈃ ?섎굹?먯꽌 ?뺣━`?섎뒗 諛⑺뼢?쇰줈 ?ㅼ떆 ?뺣━???몃젅??湲곕컲 ?쒗쁽???붿옱瑜??쒓굅. -## 2026-04-04 추가 진행 기록 (연속 실행 51차: AX Agent 실사용 버그와 폭/테마 정비) +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 51李? AX Agent ?ㅼ궗??踰꾧렇?€ ???뚮쭏 ?뺣퉬) -업데이트: 2026-04-04 19:48 (KST) +?낅뜲?댄듃: 2026-04-04 19:48 (KST) -### 1) Chat 좌측 주제 클릭과 프리셋 반영 흐름 보정 -- Chat 좌측 `주제 탐색` 클릭 시 단순 필터 초기화만 하던 흐름을 수정해, 프리셋 카드와 EmptyState가 즉시 다시 보이도록 정리. -- 프리셋 선택 시 카테고리 라벨, 대화 메타, 워터마크, 대화 목록 저장 흐름을 함께 갱신해 `눌러도 아무 일 없는 것처럼 보이는` 상태를 줄임. +### 1) Chat 醫뚯륫 二쇱젣 ?대┃怨??꾨━??諛섏쁺 ?먮쫫 蹂댁젙 +- Chat 醫뚯륫 `二쇱젣 ?먯깋` ?대┃ ???⑥닚 ?꾪꽣 珥덇린?붾쭔 ?섎뜕 ?먮쫫???섏젙?? ?꾨━??移대뱶?€ EmptyState媛€ 利됱떆 ?ㅼ떆 蹂댁씠?꾨줉 ?뺣━. +- ?꾨━???좏깮 ??移댄뀒怨좊━ ?쇰꺼, ?€??硫뷀?, ?뚰꽣留덊겕, ?€??紐⑸줉 ?€???먮쫫???④퍡 媛깆떊??`?뚮윭???꾨Т ???녿뒗 寃껋쿂??蹂댁씠?? ?곹깭瑜?以꾩엫. -### 2) 권한/데이터 활용 상태 반영 지연 보정 -- 대화 설정 저장 전에 현재 대화 객체의 권한/데이터 활용/무드 값을 먼저 동기화하도록 조정해 하단 상태가 한 단계 늦게 반영되는 문제를 줄임. -- 권한 팝업과 데이터 활용 팝업의 row 클릭을 `MouseLeftButtonDown` 기준으로 바꿔 즉시 반영감이 나도록 보정. -- 권한/데이터 활용 변경 후 오버레이의 빠른 설정 라벨도 즉시 다시 계산하도록 연결. +### 2) 沅뚰븳/?곗씠???쒖슜 ?곹깭 諛섏쁺 吏€??蹂댁젙 +- ?€???ㅼ젙 ?€???꾩뿉 ?꾩옱 ?€??媛앹껜??沅뚰븳/?곗씠???쒖슜/臾대뱶 媛믪쓣 癒쇱? ?숆린?뷀븯?꾨줉 議곗젙???섎떒 ?곹깭媛€ ???④퀎 ??쾶 諛섏쁺?섎뒗 臾몄젣瑜?以꾩엫. +- 沅뚰븳 ?앹뾽怨??곗씠???쒖슜 ?앹뾽??row ?대┃??`MouseLeftButtonDown` 湲곗??쇰줈 諛붽퓭 利됱떆 諛섏쁺媛먯씠 ?섎룄濡?蹂댁젙. +- 沅뚰븳/?곗씠???쒖슜 蹂€寃????ㅻ쾭?덉씠??鍮좊Ⅸ ?ㅼ젙 ?쇰꺼??利됱떆 ?ㅼ떆 怨꾩궛?섎룄濡??곌껐. -### 3) 채팅 폭/설정 레이아웃/테마 조정 -- 메시지 최대 폭 계산과 좌우 마진을 줄여 Chat 본문과 composer가 더 넓게 보이도록 조정. -- AX Agent 설정 오버레이의 좌측 컬럼 폭과 헤더 타이포를 조정하고, 설명 문구에 줄바꿈을 허용해 제목이 잘려 보이던 현상을 완화. -- `Claw` 스타일 표시는 `Claude`로 보이도록 정리하고, 전용 테마의 밝은/시스템/다크 팔레트를 더 중성적인 베이지·회색 계열로 다듬어 노란 톤을 완화. +### 3) 梨꾪똿 ???ㅼ젙 ?덉씠?꾩썐/?뚮쭏 議곗젙 +- 硫붿떆吏€ 理쒕? ??怨꾩궛怨?醫뚯슦 留덉쭊??以꾩뿬 Chat 蹂몃Ц怨?composer媛€ ???볤쾶 蹂댁씠?꾨줉 議곗젙. +- AX Agent ?ㅼ젙 ?ㅻ쾭?덉씠??醫뚯륫 而щ읆 ??낵 ?ㅻ뜑 ?€?댄룷瑜?議곗젙?섍퀬, ?ㅻ챸 臾멸뎄??以꾨컮轅덉쓣 ?덉슜???쒕ぉ???섎젮 蹂댁씠???꾩긽???꾪솕. +- `Claw` ?ㅽ????쒖떆??`Claude`濡?蹂댁씠?꾨줉 ?뺣━?섍퀬, ?꾩슜 ?뚮쭏??諛앹?/?쒖뒪???ㅽ겕 ?붾젅?몃? ??以묒꽦?곸씤 踰좎씠吏€쨌?뚯깋 怨꾩뿴濡??ㅻ벉???몃? ?ㅼ쓣 ?꾪솕. -### 4) 하단 바 시각 정렬과 트레이 진입점 정리 -- 폴더 데이터 활용 버튼을 기본 선택형 카드처럼 보이지 않도록 투명 배경 + 경계선 기준으로 다시 정리해 권한 버튼과 더 비슷한 밀도로 맞춤. -- 트레이의 `설정` 항목은 AI 활성화 시 `AX Agent 설정`으로 직접 진입하도록 바꾸고, AI 비활성 상태에서는 기존 앱 설정으로 폴백하도록 연결. +### 4) ?섎떒 諛??쒓컖 ?뺣젹怨??몃젅??吏꾩엯???뺣━ +- ?대뜑 ?곗씠???쒖슜 踰꾪듉??湲곕낯 ?좏깮??移대뱶泥섎읆 蹂댁씠吏€ ?딅룄濡??щ챸 諛곌꼍 + 寃쎄퀎??湲곗??쇰줈 ?ㅼ떆 ?뺣━??沅뚰븳 踰꾪듉怨???鍮꾩듂??諛€?꾨줈 留욎땄. +- ?몃젅?댁쓽 `?ㅼ젙` ??ぉ?€ AI ?쒖꽦????`AX Agent ?ㅼ젙`?쇰줈 吏곸젒 吏꾩엯?섎룄濡?諛붽씀怨? AI 鍮꾪솢???곹깭?먯꽌??湲곗〈 ???ㅼ젙?쇰줈 ?대갚?섎룄濡??곌껐. -### 5) 품질 게이트 -- `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal` 통과 (경고 0, 오류 0). -- 2026-04-04 20:41 (KST): Reduced AX Agent permission surface to the four claw-code-aligned public modes (`권한 요청`, `편집 자동 승인`, `계획 모드`, `권한 건너뛰기`), removed legacy `질문 없이 진행` exposure from popups/slash guidance, and normalized old aliases onto the four-mode flow. +### 5) ?덉쭏 寃뚯씠?? +- `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal` ?듦낵 (寃쎄퀬 0, ?ㅻ쪟 0). +- 2026-04-04 20:41 (KST): Reduced AX Agent permission surface to the four claw-code-aligned public modes (`沅뚰븳 ?붿껌`, `?몄쭛 ?먮룞 ?뱀씤`, `怨꾪쉷 紐⑤뱶`, `沅뚰븳 嫄대꼫?곌린`), removed legacy `吏덈Ц ?놁씠 吏꾪뻾` exposure from popups/slash guidance, and normalized old aliases onto the four-mode flow. - 2026-04-04 20:41 (KST): Simplified the in-chat AX Agent settings page by shortening navigation/section copy, tightening the settings information hierarchy, and making the overlay read more like a single integrated settings page instead of separate mini panels. -- 2026-04-04 20:41 (KST): Trimmed Chat/Cowork/Code sidebar information labels to a smaller shared structure (`주제`, `작업`, `코드 작업`) so the left rail reads closer to the simpler Claude/Codex-style navigation density. +- 2026-04-04 20:41 (KST): Trimmed Chat/Cowork/Code sidebar information labels to a smaller shared structure (`二쇱젣`, `?묒뾽`, `肄붾뱶 ?묒뾽`) so the left rail reads closer to the simpler Claude/Codex-style navigation density. ## 2026-04-04 ?? ?? ?? (?? ?? 52?: AX Agent ?? ???? ??? ??/row ???) ????: 2026-04-04 20:10 (KST) ### 1) ??? ??? ?? ?? ?? @@ -3901,193 +3905,193 @@ else: ### 4) ?? ??? - dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal ?? (?? 0, ?? 0). -## 2026-04-04 추가 진행 기록 (연속 실행 53차: AX Agent 고급 설정 설명형 On/Off 개편) -- 업데이트: 2026-04-04 22:05 (KST) -- AX Agent 채팅 내부 설정 오버레이의 고급 옵션 묶음을 한 줄 체크박스 목록에서 설명형 행(row) 구조로 재구성했다. -- 옵션 문구를 사용자 기준으로 정리했다. 예: 자동 컨텍스트 압축→자동 대화 압축, 스킬 시스템→확장 스킬 사용, 병렬 도구 실행→도구 병렬 실행. -- 각 옵션 아래에 상세 설명을 붙이고, 켜기 / 끄기 커스텀 선택 버튼으로 상태를 바꾸도록 변경했다. -- 내부 저장 로직은 기존 체크박스 기반 상태를 유지해 호환성을 지키고, 표시 UI만 커스텀 컨트롤로 교체했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal → 경고 0 / 오류 0 +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 53李? AX Agent 怨좉툒 ?ㅼ젙 ?ㅻ챸??On/Off 媛쒗렪) +- ?낅뜲?댄듃: 2026-04-04 22:05 (KST) +- AX Agent 梨꾪똿 ?대? ?ㅼ젙 ?ㅻ쾭?덉씠??怨좉툒 ?듭뀡 臾띠쓬????以?泥댄겕諛뺤뒪 紐⑸줉?먯꽌 ?ㅻ챸????row) 援ъ“濡??ш뎄?깊뻽?? +- ?듭뀡 臾멸뎄瑜??ъ슜??湲곗??쇰줈 ?뺣━?덈떎. ?? ?먮룞 而⑦뀓?ㅽ듃 ?뺤텞?믪옄???€???뺤텞, ?ㅽ궗 ?쒖뒪?쒋넂?뺤옣 ?ㅽ궗 ?ъ슜, 蹂묐젹 ?꾧뎄 ?ㅽ뻾?믩룄援?蹂묐젹 ?ㅽ뻾. +- 媛??듭뀡 ?꾨옒???곸꽭 ?ㅻ챸??遺숈씠怨? 耳쒓린 / ?꾧린 而ㅼ뒪?€ ?좏깮 踰꾪듉?쇰줈 ?곹깭瑜?諛붽씀?꾨줉 蹂€寃쏀뻽?? +- ?대? ?€??濡쒖쭅?€ 湲곗〈 泥댄겕諛뺤뒪 湲곕컲 ?곹깭瑜??좎????명솚?깆쓣 吏€?ㅺ퀬, ?쒖떆 UI留?而ㅼ뒪?€ 而⑦듃濡ㅻ줈 援먯껜?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal ??寃쎄퀬 0 / ?ㅻ쪟 0 -## 2026-04-04 추가 진행 기록 (연속 실행 54차: AX Agent 모델 선택/SSL 흐름 정리) -- 업데이트: 2026-04-04 20:58 (KST) -- AX Agent 메인 설정의 내부 서비스(Ollama, vLLM)는 `등록 모델` 목록과 `사용할 모델` 칩 선택만 남기고, 별도 모델명 텍스트 입력 흐름을 제거하는 방향으로 정리했다. -- 채팅 내부 AX Agent 설정 오버레이는 등록 모델 칩 선택을 기준 경로로 고정하고, 숨겨진 모델 입력칸과 전역 vLLM SSL 토글이 저장 경로에 영향을 주지 않도록 보정했다. -- 구형 `AgentSettingsWindow`에서도 모델 선택을 내부 `_selectedModel` + 칩 선택 흐름으로 바꾸고, 전역 vLLM SSL 우회 토글은 노출/저장 대상에서 제외했다. -- `ModelRegistrationDialog`는 vLLM일 때만 SSL 인증서 검증 생략 옵션을 표시하도록 정리해, SSL 우회는 모델 등록/편집 단계에서만 관리하도록 맞췄다. -- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` → 경고 0 / 오류 0 +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 54李? AX Agent 紐⑤뜽 ?좏깮/SSL ?먮쫫 ?뺣━) +- ?낅뜲?댄듃: 2026-04-04 20:58 (KST) +- AX Agent 硫붿씤 ?ㅼ젙???대? ?쒕퉬??Ollama, vLLM)??`?깅줉 紐⑤뜽` 紐⑸줉怨?`?ъ슜??紐⑤뜽` 移??좏깮留??④린怨? 蹂꾨룄 紐⑤뜽紐??띿뒪???낅젰 ?먮쫫???쒓굅?섎뒗 諛⑺뼢?쇰줈 ?뺣━?덈떎. +- 梨꾪똿 ?대? AX Agent ?ㅼ젙 ?ㅻ쾭?덉씠???깅줉 紐⑤뜽 移??좏깮??湲곗? 寃쎈줈濡?怨좎젙?섍퀬, ?④꺼吏?紐⑤뜽 ?낅젰移멸낵 ?꾩뿭 vLLM SSL ?좉????€??寃쎈줈???곹뼢??二쇱? ?딅룄濡?蹂댁젙?덈떎. +- 援ы삎 `AgentSettingsWindow`?먯꽌??紐⑤뜽 ?좏깮???대? `_selectedModel` + 移??좏깮 ?먮쫫?쇰줈 諛붽씀怨? ?꾩뿭 vLLM SSL ?고쉶 ?좉??€ ?몄텧/?€???€?곸뿉???쒖쇅?덈떎. +- `ModelRegistrationDialog`??vLLM???뚮쭔 SSL ?몄쬆??寃€利??앸왂 ?듭뀡???쒖떆?섎룄濡??뺣━?? SSL ?고쉶??紐⑤뜽 ?깅줉/?몄쭛 ?④퀎?먯꽌留?愿€由ы븯?꾨줉 留욎톬?? +- 寃€利? `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` ??寃쎄퀬 0 / ?ㅻ쪟 0 -## 2026-04-04 추가 진행 기록 (연속 실행 55차: 컨텍스트 표시 단순화와 1M 상한 정리) -- 업데이트: 2026-04-04 21:02 (KST) -- 하단 composer의 컨텍스트 카드를 `컨텍스트 32%` + `83K / 258K`처럼 더 짧게 읽히는 구조로 정리하고, 상세 정보는 hover 툴팁에서 보이도록 바꿨다. -- hover 툴팁에는 상태, 실제 토큰 수, 압축 시작 임계치, 현재 입력 초안 포함 여부를 함께 표시하도록 정리했다. -- 토큰 표기 단위는 `k` 대신 `K`, `M` 기준으로 통일해 큰 컨텍스트 창에서 더 빠르게 읽히도록 보정했다. -- 설정의 `최대 컨텍스트 토큰` 선택 범위를 `32K / 64K / 128K / 256K / 512K / 1M`까지 확장하고, ViewModel/오버레이 입력 경로에서도 최대값을 `1,000,000`으로 제한했다. -- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` → 경고 0 / 오류 0 +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 55李? 而⑦뀓?ㅽ듃 ?쒖떆 ?⑥닚?붿? 1M ?곹븳 ?뺣━) +- ?낅뜲?댄듃: 2026-04-04 21:02 (KST) +- ?섎떒 composer??而⑦뀓?ㅽ듃 移대뱶瑜?`而⑦뀓?ㅽ듃 32%` + `83K / 258K`泥섎읆 ??吏㏐쾶 ?쏀엳??援ъ“濡??뺣━?섍퀬, ?곸꽭 ?뺣낫??hover ?댄똻?먯꽌 蹂댁씠?꾨줉 諛붽엥?? +- hover ?댄똻?먮뒗 ?곹깭, ?ㅼ젣 ?좏겙 ?? ?뺤텞 ?쒖옉 ?꾧퀎移? ?꾩옱 ?낅젰 珥덉븞 ?ы븿 ?щ?瑜??④퍡 ?쒖떆?섎룄濡??뺣━?덈떎. +- ?좏겙 ?쒓린 ?⑥쐞??`k` ?€??`K`, `M` 湲곗??쇰줈 ?듭씪????而⑦뀓?ㅽ듃 李쎌뿉????鍮좊Ⅴ寃??쏀엳?꾨줉 蹂댁젙?덈떎. +- ?ㅼ젙??`理쒕? 而⑦뀓?ㅽ듃 ?좏겙` ?좏깮 踰붿쐞瑜?`32K / 64K / 128K / 256K / 512K / 1M`源뚯? ?뺤옣?섍퀬, ViewModel/?ㅻ쾭?덉씠 ?낅젰 寃쎈줈?먯꽌??理쒕?媛믪쓣 `1,000,000`?쇰줈 ?쒗븳?덈떎. +- 寃€利? `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` ??寃쎄퀬 0 / ?ㅻ쪟 0 -## 2026-04-04 추가 진행 기록 (연속 실행 56차: 서비스 선택 UI 통일과 composer 표기 정리) -- 업데이트: 2026-04-04 21:02 (KST) -- AX Agent 설정의 서비스 서브탭 스타일을 더 얇고 정돈된 카드형 라디오 버튼으로 조정하고, 선택 상태는 AccentColor 경계선 + 배경 강조로 다시 정리했다. -- `Gemini`, `Claude` 서비스 패널도 기존 ComboBox 대신 버튼형 모델 칩 목록으로 교체해 `Ollama`, `vLLM`과 같은 선택 문법으로 맞췄다. -- 메인 설정의 서비스 패널은 내부 서비스/외부 서비스 모두 `사용할 모델` + `모델 선택` + `API 키` 구조로 통일했다. -- 채팅 하단 composer의 모델 버튼 문구를 `서비스 {서비스명} · 모델 {모델명}` 구조로 바꿔 설정 화면과 같은 언어로 읽히도록 정리했다. -- `claw-code` 소스와의 격차는 실제 코드 구조 기준으로 다시 점검했다. 현재 UI/권한/모델 선택 흐름은 근접했지만, `claw-code`에는 여전히 더 깊은 상태 계층(설정 소스 우선순위, 세션별 bypass 상태, per-model usage/turn budget 집계, settings change fan-out)이 존재해 이 부분이 주된 남은 격차로 확인됐다. -- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` → 경고 0 / 오류 0 +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 56李? ?쒕퉬???좏깮 UI ?듭씪怨?composer ?쒓린 ?뺣━) +- ?낅뜲?댄듃: 2026-04-04 21:02 (KST) +- AX Agent ?ㅼ젙???쒕퉬???쒕툕???ㅽ??쇱쓣 ???뉕퀬 ?뺣룉??移대뱶???쇰뵒??踰꾪듉?쇰줈 議곗젙?섍퀬, ?좏깮 ?곹깭??AccentColor 寃쎄퀎??+ 諛곌꼍 媛뺤“濡??ㅼ떆 ?뺣━?덈떎. +- `Gemini`, `Claude` ?쒕퉬???⑤꼸??湲곗〈 ComboBox ?€??踰꾪듉??紐⑤뜽 移?紐⑸줉?쇰줈 援먯껜??`Ollama`, `vLLM`怨?媛숈? ?좏깮 臾몃쾿?쇰줈 留욎톬?? +- 硫붿씤 ?ㅼ젙???쒕퉬???⑤꼸?€ ?대? ?쒕퉬???몃? ?쒕퉬??紐⑤몢 `?ъ슜??紐⑤뜽` + `紐⑤뜽 ?좏깮` + `API ?? 援ъ“濡??듭씪?덈떎. +- 梨꾪똿 ?섎떒 composer??紐⑤뜽 踰꾪듉 臾멸뎄瑜?`?쒕퉬??{?쒕퉬?ㅻ챸} 쨌 紐⑤뜽 {紐⑤뜽紐?` 援ъ“濡?諛붽퓭 ?ㅼ젙 ?붾㈃怨?媛숈? ?몄뼱濡??쏀엳?꾨줉 ?뺣━?덈떎. +- `claw-code` ?뚯뒪?€??寃⑹감???ㅼ젣 肄붾뱶 援ъ“ 湲곗??쇰줈 ?ㅼ떆 ?먭??덈떎. ?꾩옱 UI/沅뚰븳/紐⑤뜽 ?좏깮 ?먮쫫?€ 洹쇱젒?덉?留? `claw-code`?먮뒗 ?ъ쟾????源딆? ?곹깭 怨꾩링(?ㅼ젙 ?뚯뒪 ?곗꽑?쒖쐞, ?몄뀡蹂?bypass ?곹깭, per-model usage/turn budget 吏묎퀎, settings change fan-out)??議댁옱????遺€遺꾩씠 二쇰맂 ?⑥? 寃⑹감濡??뺤씤?먮떎. +- 寃€利? `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` ??寃쎄퀬 0 / ?ㅻ쪟 0 -## 2026-04-04 추가 진행 기록 (연속 실행 57차: 설정 서브탭 외곽선 제거와 정렬 보정) -- 업데이트: 2026-04-04 21:20 (KST) -- `SettingsWindow`의 서브탭 공통 스타일(`AgentSubTabStyle`)에서 버튼 외곽선과 선택 시 테두리 강조를 제거하고, 배경 강조 중심의 더 가벼운 탭 표현으로 정리했다. -- `일반`, `테마`, `기능`, `AX Agent`, `서비스` 서브탭 묶음 컨테이너의 배경 박스를 걷어내고, 탭 줄의 상하 여백과 세로 정렬을 보정해 제목 아래에서 더 중앙에 오도록 맞췄다. -- 설정 화면 전체가 기본 컨트롤 느낌보다 Claude/Codex 계열처럼 더 얇고 단정한 탭 밀도로 읽히도록 정리했다. -- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` → 경고 0 / 오류 0 +## 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 57李? ?ㅼ젙 ?쒕툕???멸낸???쒓굅?€ ?뺣젹 蹂댁젙) +- ?낅뜲?댄듃: 2026-04-04 21:20 (KST) +- `SettingsWindow`???쒕툕??怨듯넻 ?ㅽ???`AgentSubTabStyle`)?먯꽌 踰꾪듉 ?멸낸?좉낵 ?좏깮 ???뚮몢由?媛뺤“瑜??쒓굅?섍퀬, 諛곌꼍 媛뺤“ 以묒떖????媛€踰쇱슫 ???쒗쁽?쇰줈 ?뺣━?덈떎. +- `?쇰컲`, `?뚮쭏`, `湲곕뒫`, `AX Agent`, `?쒕퉬?? ?쒕툕??臾띠쓬 而⑦뀒?대꼫??諛곌꼍 諛뺤뒪瑜?嫄룹뼱?닿퀬, ??以꾩쓽 ?곹븯 ?щ갚怨??몃줈 ?뺣젹??蹂댁젙???쒕ぉ ?꾨옒?먯꽌 ??以묒븰???ㅻ룄濡?留욎톬?? +- ?ㅼ젙 ?붾㈃ ?꾩껜媛€ 湲곕낯 而⑦듃濡??먮굦蹂대떎 Claude/Codex 怨꾩뿴泥섎읆 ???뉕퀬 ?⑥젙????諛€?꾨줈 ?쏀엳?꾨줉 ?뺣━?덈떎. +- 寃€利? `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\` ??寃쎄퀬 0 / ?ㅻ쪟 0 -### 2026-04-04 추가 진행 기록 (연속 실행 58차: Cowork/Code 워크스페이스 필터 전환) -- 업데이트: 2026-04-04 21:55 (KST) -- ChatWindow 상단 필터와 좌측 메뉴에서 Cowork/Code의 주제/작업 유형 선택을 워크스페이스 필터로 전환했다. -- 드롭다운은 현재 탭 대화 메타의 WorkFolder를 기준으로 프로젝트 목록을 만들고, 선택 시 해당 워크스페이스 대화만 표시한다. -- Chat 탭은 기존 주제 필터를 유지해 프리셋/카테고리 흐름을 보존했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 58李? Cowork/Code ?뚰겕?ㅽ럹?댁뒪 ?꾪꽣 ?꾪솚) +- ?낅뜲?댄듃: 2026-04-04 21:55 (KST) +- ChatWindow ?곷떒 ?꾪꽣?€ 醫뚯륫 硫붾돱?먯꽌 Cowork/Code??二쇱젣/?묒뾽 ?좏삎 ?좏깮???뚰겕?ㅽ럹?댁뒪 ?꾪꽣濡??꾪솚?덈떎. +- ?쒕∼?ㅼ슫?€ ?꾩옱 ???€??硫뷀???WorkFolder瑜?湲곗??쇰줈 ?꾨줈?앺듃 紐⑸줉??留뚮뱾怨? ?좏깮 ???대떦 ?뚰겕?ㅽ럹?댁뒪 ?€?붾쭔 ?쒖떆?쒕떎. +- Chat ??? 湲곗〈 二쇱젣 ?꾪꽣瑜??좎????꾨━??移댄뀒怨좊━ ?먮쫫??蹂댁〈?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 59차: 사이드바 검색 액션화와 경계선 정리) -- 업데이트: 2026-04-04 22:08 (KST) -- AX Agent 좌측 사이드바 검색 박스를 평시에는 평평한 액션 행으로 보이게 바꾸고, 클릭 시 좌측에서 우측으로 펼쳐지는 인라인 검색 입력으로 전환했다. -- 검색 행은 hover 시 Ctrl+K 단축키를 표시하고, Ctrl+K 입력으로도 즉시 열리도록 연결했다. -- 좌측 메뉴 컨테이너의 불필요한 카드형 경계선을 제거해 claw-code 계열의 더 평평한 리스트형 느낌으로 정리했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 59李? ?ъ씠?쒕컮 寃€???≪뀡?붿? 寃쎄퀎???뺣━) +- ?낅뜲?댄듃: 2026-04-04 22:08 (KST) +- AX Agent 醫뚯륫 ?ъ씠?쒕컮 寃€??諛뺤뒪瑜??됱떆?먮뒗 ?됲룊???≪뀡 ?됱쑝濡?蹂댁씠寃?諛붽씀怨? ?대┃ ??醫뚯륫?먯꽌 ?곗륫?쇰줈 ?쇱퀜吏€???몃씪??寃€???낅젰?쇰줈 ?꾪솚?덈떎. +- 寃€???됱? hover ??Ctrl+K ?⑥텞?ㅻ? ?쒖떆?섍퀬, Ctrl+K ?낅젰?쇰줈??利됱떆 ?대━?꾨줉 ?곌껐?덈떎. +- 醫뚯륫 硫붾돱 而⑦뀒?대꼫??遺덊븘?뷀븳 移대뱶??寃쎄퀎?좎쓣 ?쒓굅??claw-code 怨꾩뿴?????됲룊??由ъ뒪?명삎 ?먮굦?쇰줈 ?뺣━?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 60차: 대화 목록 날짜 그룹 정리) -- 업데이트: 2026-04-04 22:14 (KST) -- 좌측 대화 목록을 오늘 / 어제 / 이전 3단계 그룹으로 재구성했다. -- 첫 페이지 렌더링과 더 보기 확장 렌더링 모두 같은 날짜 그룹 규칙을 사용하도록 정리했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 60李? ?€??紐⑸줉 ?좎쭨 洹몃9 ?뺣━) +- ?낅뜲?댄듃: 2026-04-04 22:14 (KST) +- 醫뚯륫 ?€??紐⑸줉???ㅻ뒛 / ?댁젣 / ?댁쟾 3?④퀎 洹몃9?쇰줈 ?ш뎄?깊뻽?? +- 泥??섏씠吏€ ?뚮뜑留곴낵 ??蹂닿린 ?뺤옣 ?뚮뜑留?紐⑤몢 媛숈? ?좎쭨 洹몃9 洹쒖튃???ъ슜?섎룄濡??뺣━?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 61차: AX Agent 고급 설정 토글 스위치화) -- 업데이트: 2026-04-04 22:22 (KST) -- AX Agent 고급 설정의 켜기/끄기 이중 버튼을 제거하고 각 항목을 단일 ToggleSwitch로 교체했다. -- 고급 설정 행은 유지하되 조작부를 더 단순한 스위치형으로 바꿔 가독성과 상태 인지성을 개선했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 61李? AX Agent 怨좉툒 ?ㅼ젙 ?좉? ?ㅼ쐞移섑솕) +- ?낅뜲?댄듃: 2026-04-04 22:22 (KST) +- AX Agent 怨좉툒 ?ㅼ젙??耳쒓린/?꾧린 ?댁쨷 踰꾪듉???쒓굅?섍퀬 媛???ぉ???⑥씪 ToggleSwitch濡?援먯껜?덈떎. +- 怨좉툒 ?ㅼ젙 ?됱? ?좎??섎릺 議곗옉遺€瑜????⑥닚???ㅼ쐞移섑삎?쇰줈 諛붽퓭 媛€?낆꽦怨??곹깭 ?몄??깆쓣 媛쒖꽑?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 62차: 상단 액션 줄 단순화와 Code 워크트리 UI 추가) -- 업데이트: 2026-04-04 22:47 (KST) -- AX Agent 좌측 상단 액션을 새 대화 / 검색의 같은 리스트형 행으로 통일하고, 검색은 유지하되 예약됨/Dispatch 성격의 항목은 노출하지 않도록 정리했다. -- 워크스페이스 선택 팝업에 검색 입력을 추가해 대화 메타와 최근 폴더를 함께 검색 가능한 패널형으로 재구성했다. -- Code 탭 하단 바에서 언어 선택을 제거하고 로컬 / 워크트리 중심 버튼을 추가했으며, Git 저장소에서는 현재 브랜치 기준 git worktree add로 분리 작업 폴더를 만들고, 일반 폴더는 복사본 워크스페이스로 전환하도록 연결했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 62李? ?곷떒 ?≪뀡 以??⑥닚?붿? Code ?뚰겕?몃━ UI 異붽?) +- ?낅뜲?댄듃: 2026-04-04 22:47 (KST) +- AX Agent 醫뚯륫 ?곷떒 ?≪뀡?????€??/ 寃€?됱쓽 媛숈? 由ъ뒪?명삎 ?됱쑝濡??듭씪?섍퀬, 寃€?됱? ?좎??섎릺 ?덉빟??Dispatch ?깃꺽????ぉ?€ ?몄텧?섏? ?딅룄濡??뺣━?덈떎. +- ?뚰겕?ㅽ럹?댁뒪 ?좏깮 ?앹뾽??寃€???낅젰??異붽????€??硫뷀??€ 理쒓렐 ?대뜑瑜??④퍡 寃€??媛€?ν븳 ?⑤꼸?뺤쑝濡??ш뎄?깊뻽?? +- Code ???섎떒 諛붿뿉???몄뼱 ?좏깮???쒓굅?섍퀬 濡쒖뺄 / ?뚰겕?몃━ 以묒떖 踰꾪듉??異붽??덉쑝硫? Git ?€?μ냼?먯꽌???꾩옱 釉뚮옖移?湲곗? git worktree add濡?遺꾨━ ?묒뾽 ?대뜑瑜?留뚮뱾怨? ?쇰컲 ?대뜑??蹂듭궗蹂??뚰겕?ㅽ럹?댁뒪濡??꾪솚?섎룄濡??곌껐?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 63차: AX Agent 설정 통합 정리) -- 업데이트: 2026-04-04 22:55 (KST) -- 메인 설정의 일반 탭에 남아 있던 `AI 기능 활성화`, `운영 모드` 노출을 숨기고, AX Agent 공통 탭 상단의 `기본 상태` 섹션으로 이동해 AX Agent 관련 제어를 한곳에서 하도록 정리했다. -- AX Agent 공통 탭에는 `AX Agent 사용` 토글과 `운영 모드` 선택을 추가하고, 기존 저장 경로와 같은 이벤트 핸들러를 공유하도록 동기화했다. -- 기능 탭에 남아 있던 `자동 모델 라우팅` 준비 중 UI는 숨기고, AX Agent 개발자 탭 안의 표시형 섹션으로 옮겨 AX Agent 전용 실험/개발 항목 위치를 일관되게 맞췄다. -- `ApplyAiEnabledState`, `ApplyOperationModeState`를 보강해 일반 탭/AX Agent 탭의 중복 컨트롤이 있어도 동일 상태를 유지하도록 정리했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 63李? AX Agent ?ㅼ젙 ?듯빀 ?뺣━) +- ?낅뜲?댄듃: 2026-04-04 22:55 (KST) +- 硫붿씤 ?ㅼ젙???쇰컲 ??뿉 ?⑥븘 ?덈뜕 `AI 湲곕뒫 ?쒖꽦??, `?댁쁺 紐⑤뱶` ?몄텧???④린怨? AX Agent 怨듯넻 ???곷떒??`湲곕낯 ?곹깭` ?뱀뀡?쇰줈 ?대룞??AX Agent 愿€???쒖뼱瑜??쒓납?먯꽌 ?섎룄濡??뺣━?덈떎. +- AX Agent 怨듯넻 ??뿉??`AX Agent ?ъ슜` ?좉?怨?`?댁쁺 紐⑤뱶` ?좏깮??異붽??섍퀬, 湲곗〈 ?€??寃쎈줈?€ 媛숈? ?대깽???몃뱾?щ? 怨듭쑀?섎룄濡??숆린?뷀뻽?? +- 湲곕뒫 ??뿉 ?⑥븘 ?덈뜕 `?먮룞 紐⑤뜽 ?쇱슦?? 以€鍮?以?UI???④린怨? AX Agent 媛쒕컻?????덉쓽 ?쒖떆???뱀뀡?쇰줈 ??꺼 AX Agent ?꾩슜 ?ㅽ뿕/媛쒕컻 ??ぉ ?꾩튂瑜??쇨??섍쾶 留욎톬?? +- `ApplyAiEnabledState`, `ApplyOperationModeState`瑜?蹂닿컯???쇰컲 ??AX Agent ??쓽 以묐났 而⑦듃濡ㅼ씠 ?덉뼱???숈씪 ?곹깭瑜??좎??섎룄濡??뺣━?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 64차: AX Agent 서브탭 단순화와 설정 밀도 정리) -- 업데이트: 2026-04-04 23:02 (KST) -- AX Agent 상단 서브탭을 `공통 / 서비스 / 권한 / 고급` 4개 중심으로 단순화하고, 기존 `코워크/코드/도구/스킬/차단` 세부 탭은 표면에서 숨겼다. -- AX Agent 공통 패널 내부를 `기본 상태`, `서비스 설정`, `공통 런타임 설정` 묶음으로 나눌 수 있도록 `AgentCommonOverviewSection`, `AgentServiceSection`, `AgentCommonRuntimeSection` 래퍼를 추가하고, 선택된 서브탭에 따라 같은 패널 안에서 필요한 섹션만 보이도록 재구성했다. -- `공통` 탭은 기본 상태와 공통 런타임 설정, `서비스` 탭은 활성 서비스/서비스별 모델 설정, `권한` 탭은 Cowork/Code 공통 권한과 실행 제어, `고급` 탭은 개발자 성격의 상세 설정 중심으로 보이게 매핑했다. -- AX Agent 설정 행 간격과 서브탭 패딩을 늘려 가독성을 높였고, 기능 탭의 `AI 기능` 서브탭 표기를 `텍스트/파일`로 바꾸는 등 일반 설정에 남아 있던 과한 AI 표현을 줄였다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 64李? AX Agent ?쒕툕???⑥닚?붿? ?ㅼ젙 諛€???뺣━) +- ?낅뜲?댄듃: 2026-04-04 23:02 (KST) +- AX Agent ?곷떒 ?쒕툕??쓣 `怨듯넻 / ?쒕퉬??/ 沅뚰븳 / 怨좉툒` 4媛?以묒떖?쇰줈 ?⑥닚?뷀븯怨? 湲곗〈 `肄붿썙??肄붾뱶/?꾧뎄/?ㅽ궗/李⑤떒` ?몃? ??? ?쒕㈃?먯꽌 ?④꼈?? +- AX Agent 怨듯넻 ?⑤꼸 ?대?瑜?`湲곕낯 ?곹깭`, `?쒕퉬???ㅼ젙`, `怨듯넻 ?고????ㅼ젙` 臾띠쓬?쇰줈 ?섎닃 ???덈룄濡?`AgentCommonOverviewSection`, `AgentServiceSection`, `AgentCommonRuntimeSection` ?섑띁瑜?異붽??섍퀬, ?좏깮???쒕툕??뿉 ?곕씪 媛숈? ?⑤꼸 ?덉뿉???꾩슂???뱀뀡留?蹂댁씠?꾨줉 ?ш뎄?깊뻽?? +- `怨듯넻` ??? 湲곕낯 ?곹깭?€ 怨듯넻 ?고????ㅼ젙, `?쒕퉬?? ??? ?쒖꽦 ?쒕퉬???쒕퉬?ㅻ퀎 紐⑤뜽 ?ㅼ젙, `沅뚰븳` ??? Cowork/Code 怨듯넻 沅뚰븳怨??ㅽ뻾 ?쒖뼱, `怨좉툒` ??? 媛쒕컻???깃꺽???곸꽭 ?ㅼ젙 以묒떖?쇰줈 蹂댁씠寃?留ㅽ븨?덈떎. +- AX Agent ?ㅼ젙 ??媛꾧꺽怨??쒕툕???⑤뵫???섎젮 媛€?낆꽦???믪?怨? 湲곕뒫 ??쓽 `AI 湲곕뒫` ?쒕툕???쒓린瑜?`?띿뒪???뚯씪`濡?諛붽씀?????쇰컲 ?ㅼ젙???⑥븘 ?덈뜕 怨쇳븳 AI ?쒗쁽??以꾩??? +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 65차: 워크스페이스/브랜치 패널 언어 통일) -- 업데이트: 2026-04-04 23:08 (KST) -- 워크스페이스 선택 팝업을 `최근 워크스페이스 / 전체 워크스페이스` 섹션형으로 재구성해 `claw-code` 계열처럼 최근 사용과 전체 후보를 나눠 스캔할 수 있도록 정리했다. -- 워크스페이스 패널은 최근 목록과 전체 목록을 분리하되, 현재 활성 폴더는 동일한 체크/아이콘 문법으로 표시하고 검색 필터는 두 섹션에 공통 적용되도록 맞췄다. -- Code 탭 하단의 Git 브랜치 팝업은 기존 flat row 중심 렌더에서 worktree 패널과 같은 `섹션 라벨 + 설명형 row` 언어로 재구성했다. -- 브랜치 패널은 `현재 브랜치 / 저장소 / 업스트림 / 빠른 작업 / 브랜치 전환 / 브랜치 작업` 섹션으로 나누고, 각 항목을 worktree 메뉴와 같은 선택/체크 문법으로 표시하도록 통일했다. -- `CreatePopupMenuRow` nullable 경로를 정리해 브랜치 패널 리팩터링 후에도 빌드 경고가 남지 않도록 보정했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 65李? ?뚰겕?ㅽ럹?댁뒪/釉뚮옖移??⑤꼸 ?몄뼱 ?듭씪) +- ?낅뜲?댄듃: 2026-04-04 23:08 (KST) +- ?뚰겕?ㅽ럹?댁뒪 ?좏깮 ?앹뾽??`理쒓렐 ?뚰겕?ㅽ럹?댁뒪 / ?꾩껜 ?뚰겕?ㅽ럹?댁뒪` ?뱀뀡?뺤쑝濡??ш뎄?깊빐 `claw-code` 怨꾩뿴泥섎읆 理쒓렐 ?ъ슜怨??꾩껜 ?꾨낫瑜??섎닠 ?ㅼ틪?????덈룄濡??뺣━?덈떎. +- ?뚰겕?ㅽ럹?댁뒪 ?⑤꼸?€ 理쒓렐 紐⑸줉怨??꾩껜 紐⑸줉??遺꾨━?섎릺, ?꾩옱 ?쒖꽦 ?대뜑???숈씪??泥댄겕/?꾩씠肄?臾몃쾿?쇰줈 ?쒖떆?섍퀬 寃€???꾪꽣?????뱀뀡??怨듯넻 ?곸슜?섎룄濡?留욎톬?? +- Code ???섎떒??Git 釉뚮옖移??앹뾽?€ 湲곗〈 flat row 以묒떖 ?뚮뜑?먯꽌 worktree ?⑤꼸怨?媛숈? `?뱀뀡 ?쇰꺼 + ?ㅻ챸??row` ?몄뼱濡??ш뎄?깊뻽?? +- 釉뚮옖移??⑤꼸?€ `?꾩옱 釉뚮옖移?/ ?€?μ냼 / ?낆뒪?몃┝ / 鍮좊Ⅸ ?묒뾽 / 釉뚮옖移??꾪솚 / 釉뚮옖移??묒뾽` ?뱀뀡?쇰줈 ?섎늻怨? 媛???ぉ??worktree 硫붾돱?€ 媛숈? ?좏깮/泥댄겕 臾몃쾿?쇰줈 ?쒖떆?섎룄濡??듭씪?덈떎. +- `CreatePopupMenuRow` nullable 寃쎈줈瑜??뺣━??釉뚮옖移??⑤꼸 由ы뙥?곕쭅 ?꾩뿉??鍮뚮뱶 寃쎄퀬媛€ ?⑥? ?딅룄濡?蹂댁젙?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 66차: AX Agent 설정 행 밀도/워크스페이스 패널 정리) -- 업데이트: 2026-04-04 23:20 (KST) -- AX Agent 설정의 AgentSettingsRow 패딩과 간격을 한 단계 더 넓히고, 서비스 탭과 권한 탭의 주요 설정 행을 같은 -ow + toggle 시각 언어로 다시 정렬했다. -- 서비스 탭의 Ollama/vLLM/Gemini/Claude 설정 행과 권한 탭의 권한/에이전트 동작/프로젝트 규칙/메모리 관련 행을 AgentSettingsRow 기준으로 통일해, 설정 밀도와 토글 리듬이 섞여 보이던 문제를 줄였다. -- 워크스페이스 선택 팝업은 제목, 검색 입력, 내부 스크롤 영역을 가진 검색 가능한 프로젝트 선택 패널로 재구성해 claw-code 계열처럼 최근/전체 워크스페이스를 더 안정적으로 탐색할 수 있게 했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 66李? AX Agent ?ㅼ젙 ??諛€???뚰겕?ㅽ럹?댁뒪 ?⑤꼸 ?뺣━) +- ?낅뜲?댄듃: 2026-04-04 23:20 (KST) +- AX Agent ?ㅼ젙??AgentSettingsRow ?⑤뵫怨?媛꾧꺽?????④퀎 ???볧엳怨? ?쒕퉬????낵 沅뚰븳 ??쓽 二쇱슂 ?ㅼ젙 ?됱쓣 媛숈? +ow + toggle ?쒓컖 ?몄뼱濡??ㅼ떆 ?뺣젹?덈떎. +- ?쒕퉬????쓽 Ollama/vLLM/Gemini/Claude ?ㅼ젙 ?됯낵 沅뚰븳 ??쓽 沅뚰븳/?먯씠?꾪듃 ?숈옉/?꾨줈?앺듃 洹쒖튃/硫붾え由?愿€???됱쓣 AgentSettingsRow 湲곗??쇰줈 ?듭씪?? ?ㅼ젙 諛€?꾩? ?좉? 由щ벉???욎뿬 蹂댁씠??臾몄젣瑜?以꾩??? +- ?뚰겕?ㅽ럹?댁뒪 ?좏깮 ?앹뾽?€ ?쒕ぉ, 寃€???낅젰, ?대? ?ㅽ겕濡??곸뿭??媛€吏?寃€??媛€?ν븳 ?꾨줈?앺듃 ?좏깮 ?⑤꼸濡??ш뎄?깊빐 claw-code 怨꾩뿴泥섎읆 理쒓렐/?꾩껜 ?뚰겕?ㅽ럹?댁뒪瑜????덉젙?곸쑝濡??먯깋?????덇쾶 ?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 67차: AX Agent 표현 수준 이관과 Code 하단 구조 정리) -- 업데이트: 2026-04-04 23:33 (KST) -- AX Agent 공통 설정에 표현 수준 행을 추가하고, 기존 숨김 영역에 남아 있던 표현 수준 라디오와 새 AX Agent 라디오를 같은 저장 경로로 동기화하도록 정리했다. -- 표현 수준 초기화는 저장된 값을 우선 사용하도록 수정해, 설정 창을 열 때마다 -`rich`로 덮어쓰이던 문제를 방지했다. -- Code 탭 하단 바는 로컬 / 브랜치 / 워크트리 흐름을 우선으로 보이도록 재정리하고, Code 전용 하단 액션에서 파일 버튼과 실행 이력 상세도 버튼을 제거해 claw-code 계열처럼 더 단순한 작업 전환 구조로 맞췄다. -- 로컬 버튼은 원본 워크스페이스로 복귀, 워크트리 버튼은 분리 작업 복사본 생성/전환 팝업을 열도록 연결했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 67李? AX Agent ?쒗쁽 ?섏? ?닿?怨?Code ?섎떒 援ъ“ ?뺣━) +- ?낅뜲?댄듃: 2026-04-04 23:33 (KST) +- AX Agent 怨듯넻 ?ㅼ젙???쒗쁽 ?섏? ?됱쓣 異붽??섍퀬, 湲곗〈 ?④? ?곸뿭???⑥븘 ?덈뜕 ?쒗쁽 ?섏? ?쇰뵒?ㅼ? ??AX Agent ?쇰뵒?ㅻ? 媛숈? ?€??寃쎈줈濡??숆린?뷀븯?꾨줉 ?뺣━?덈떎. +- ?쒗쁽 ?섏? 珥덇린?붾뒗 ?€?λ맂 媛믪쓣 ?곗꽑 ?ъ슜?섎룄濡??섏젙?? ?ㅼ젙 李쎌쓣 ???뚮쭏?? +`rich`濡???뼱?곗씠??臾몄젣瑜?諛⑹??덈떎. +- Code ???섎떒 諛붾뒗 濡쒖뺄 / 釉뚮옖移?/ ?뚰겕?몃━ ?먮쫫???곗꽑?쇰줈 蹂댁씠?꾨줉 ?ъ젙由ы븯怨? Code ?꾩슜 ?섎떒 ?≪뀡?먯꽌 ?뚯씪 踰꾪듉怨??ㅽ뻾 ?대젰 ?곸꽭??踰꾪듉???쒓굅??claw-code 怨꾩뿴泥섎읆 ???⑥닚???묒뾽 ?꾪솚 援ъ“濡?留욎톬?? +- 濡쒖뺄 踰꾪듉?€ ?먮낯 ?뚰겕?ㅽ럹?댁뒪濡?蹂듦?, ?뚰겕?몃━ 踰꾪듉?€ 遺꾨━ ?묒뾽 蹂듭궗蹂??앹꽦/?꾪솚 ?앹뾽???대룄濡??곌껐?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 68차: 빈 화면 중앙 정렬과 프리셋 간격 보정) -- 업데이트: 2026-04-04 23:41 (KST) -- Chat/Cowork/Code가 공유하는 EmptyState의 최대 폭, 상하 여백, 제목/설명 블록 간격을 조정해 세 탭의 빈 화면 세로 위치가 같은 기준선에 맞도록 보정했다. -- EmptyState 설명 텍스트는 고정 폭과 중앙 정렬을 적용해 탭별 문구 길이가 달라도 프리셋 카드 영역 시작점이 흔들리지 않도록 정리했다. -- 프리셋 카드/기타/프리셋 추가 카드의 폭, 높이, 외곽 마진, 내부 패딩, 아이콘 하단 간격을 통일해 중앙 정렬 기준에서도 행 간격이 더 균일하게 보이도록 다듬었다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 68李? 鍮??붾㈃ 以묒븰 ?뺣젹怨??꾨━??媛꾧꺽 蹂댁젙) +- ?낅뜲?댄듃: 2026-04-04 23:41 (KST) +- Chat/Cowork/Code媛€ 怨듭쑀?섎뒗 EmptyState??理쒕? ?? ?곹븯 ?щ갚, ?쒕ぉ/?ㅻ챸 釉붾줉 媛꾧꺽??議곗젙??????쓽 鍮??붾㈃ ?몃줈 ?꾩튂媛€ 媛숈? 湲곗??좎뿉 留욌룄濡?蹂댁젙?덈떎. +- EmptyState ?ㅻ챸 ?띿뒪?몃뒗 怨좎젙 ??낵 以묒븰 ?뺣젹???곸슜????퀎 臾멸뎄 湲몄씠媛€ ?щ씪???꾨━??移대뱶 ?곸뿭 ?쒖옉?먯씠 ?붾뱾由ъ? ?딅룄濡??뺣━?덈떎. +- ?꾨━??移대뱶/湲고?/?꾨━??異붽? 移대뱶???? ?믪씠, ?멸낸 留덉쭊, ?대? ?⑤뵫, ?꾩씠肄??섎떒 媛꾧꺽???듭씪??以묒븰 ?뺣젹 湲곗??먯꽌????媛꾧꺽????洹좎씪?섍쾶 蹂댁씠?꾨줉 ?ㅻ벉?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 69차: 서비스/권한 카드 선택과 워크스페이스 강조 보강) -- 업데이트: 2026-04-04 23:49 (KST) -- AX Agent 서비스 탭의 사용할 서비스 선택을 기본 ComboBox 대신 Ollama / vLLM / Gemini / Claude 카드형 라디오 선택으로 교체하고, 선택 시 서비스 서브탭/모델 패널이 함께 동기화되도록 정리했다. -- AX Agent 권한 탭의 기본 파일 접근 권한, 의사결정 수준, 플랜 모드도 카드형 라디오 선택으로 전환해 서비스 탭과 같은 선택 언어로 통일했다. -- 워크스페이스 선택 패널은 최근 워크스페이스 · N, 전체 워크스페이스 · N처럼 개수를 표시하도록 바꾸고, 현재 선택된 워크스페이스는 강조 배경/테두리와 현재 선택 설명으로 더 명확히 보이도록 보강했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 69李? ?쒕퉬??沅뚰븳 移대뱶 ?좏깮怨??뚰겕?ㅽ럹?댁뒪 媛뺤“ 蹂닿컯) +- ?낅뜲?댄듃: 2026-04-04 23:49 (KST) +- AX Agent ?쒕퉬????쓽 ?ъ슜???쒕퉬???좏깮??湲곕낯 ComboBox ?€??Ollama / vLLM / Gemini / Claude 移대뱶???쇰뵒???좏깮?쇰줈 援먯껜?섍퀬, ?좏깮 ???쒕퉬???쒕툕??紐⑤뜽 ?⑤꼸???④퍡 ?숆린?붾릺?꾨줉 ?뺣━?덈떎. +- AX Agent 沅뚰븳 ??쓽 湲곕낯 ?뚯씪 ?묎렐 沅뚰븳, ?섏궗寃곗젙 ?섏?, ?뚮옖 紐⑤뱶??移대뱶???쇰뵒???좏깮?쇰줈 ?꾪솚???쒕퉬????낵 媛숈? ?좏깮 ?몄뼱濡??듭씪?덈떎. +- ?뚰겕?ㅽ럹?댁뒪 ?좏깮 ?⑤꼸?€ 理쒓렐 ?뚰겕?ㅽ럹?댁뒪 쨌 N, ?꾩껜 ?뚰겕?ㅽ럹?댁뒪 쨌 N泥섎읆 媛쒖닔瑜??쒖떆?섎룄濡?諛붽씀怨? ?꾩옱 ?좏깮???뚰겕?ㅽ럹?댁뒪??媛뺤“ 諛곌꼍/?뚮몢由ъ? ?꾩옱 ?좏깮 ?ㅻ챸?쇰줈 ??紐낇솗??蹂댁씠?꾨줉 蹂닿컯?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 70차: 브랜치 검색 패널 보강) -- 업데이트: 2026-04-04 23:57 (KST) -- Git 브랜치 패널 상단에 검색 입력을 추가해 브랜치 수가 많은 저장소에서도 전환 대상을 바로 필터링할 수 있게 했다. -- 브랜치 팝업을 열면 검색어를 초기화하고 검색 입력에 포커스를 주도록 정리했으며, 검색 중에는 브랜치 전환 · 표시수/전체수 형식으로 결과 개수를 함께 보여주도록 보강했다. -- 서비스/권한 탭의 주요 선택은 이미 카드형 라디오 선택으로 전환된 상태를 유지하고, 브랜치 패널도 같은 검색-선택 흐름의 커스텀 패널 언어로 확장했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 70李? 釉뚮옖移?寃€???⑤꼸 蹂닿컯) +- ?낅뜲?댄듃: 2026-04-04 23:57 (KST) +- Git 釉뚮옖移??⑤꼸 ?곷떒??寃€???낅젰??異붽???釉뚮옖移??섍? 留롮? ?€?μ냼?먯꽌???꾪솚 ?€?곸쓣 諛붾줈 ?꾪꽣留곹븷 ???덇쾶 ?덈떎. +- 釉뚮옖移??앹뾽???대㈃ 寃€?됱뼱瑜?珥덇린?뷀븯怨?寃€???낅젰???ъ빱?ㅻ? 二쇰룄濡??뺣━?덉쑝硫? 寃€??以묒뿉??釉뚮옖移??꾪솚 쨌 ?쒖떆???꾩껜???뺤떇?쇰줈 寃곌낵 媛쒖닔瑜??④퍡 蹂댁뿬二쇰룄濡?蹂닿컯?덈떎. +- ?쒕퉬??沅뚰븳 ??쓽 二쇱슂 ?좏깮?€ ?대? 移대뱶???쇰뵒???좏깮?쇰줈 ?꾪솚???곹깭瑜??좎??섍퀬, 釉뚮옖移??⑤꼸??媛숈? 寃€???좏깮 ?먮쫫??而ㅼ뒪?€ ?⑤꼸 ?몄뼱濡??뺤옣?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 71차: AX Agent 공통 카드 선택과 최근 브랜치 흐름 보강) -- 업데이트: 2026-04-04 23:59 (KST) -- AX Agent 공통 탭의 운영 모드 선택을 기본 ComboBox에서 사내/사외 카드형 선택으로 교체하고, 비밀번호 확인 뒤 즉시 저장과 화면 동기화가 되도록 경로를 정리했다. -- AX Agent 공통 런타임의 최대 컨텍스트 토큰과 대화 보관 기간을 카드형/칩형 선택으로 바꿔 서비스/권한/고급 탭과 같은 선택 UI 언어로 통일했다. -- AX Agent 고급 탭의 실행 이력 상세도도 간략/상세/디버그 카드형 선택으로 전환해 남아 있던 기본 ComboBox 흔적을 줄였다. -- Git 브랜치 패널에는 최근 전환 브랜치 섹션을 추가해 자주 오가는 브랜치를 검색 전에 우선 노출하도록 보강했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 71李? AX Agent 怨듯넻 移대뱶 ?좏깮怨?理쒓렐 釉뚮옖移??먮쫫 蹂닿컯) +- ?낅뜲?댄듃: 2026-04-04 23:59 (KST) +- AX Agent 怨듯넻 ??쓽 ?댁쁺 紐⑤뱶 ?좏깮??湲곕낯 ComboBox?먯꽌 ?щ궡/?ъ쇅 移대뱶???좏깮?쇰줈 援먯껜?섍퀬, 鍮꾨?踰덊샇 ?뺤씤 ??利됱떆 ?€?κ낵 ?붾㈃ ?숆린?붽? ?섎룄濡?寃쎈줈瑜??뺣━?덈떎. +- AX Agent 怨듯넻 ?고??꾩쓽 理쒕? 而⑦뀓?ㅽ듃 ?좏겙怨??€??蹂닿? 湲곌컙??移대뱶??移⑺삎 ?좏깮?쇰줈 諛붽퓭 ?쒕퉬??沅뚰븳/怨좉툒 ??낵 媛숈? ?좏깮 UI ?몄뼱濡??듭씪?덈떎. +- AX Agent 怨좉툒 ??쓽 ?ㅽ뻾 ?대젰 ?곸꽭?꾨룄 媛꾨왂/?곸꽭/?붾쾭洹?移대뱶???좏깮?쇰줈 ?꾪솚???⑥븘 ?덈뜕 湲곕낯 ComboBox ?붿쟻??以꾩??? +- Git 釉뚮옖移??⑤꼸?먮뒗 理쒓렐 ?꾪솚 釉뚮옖移??뱀뀡??異붽????먯< ?ㅺ???釉뚮옖移섎? 寃€???꾩뿉 ?곗꽑 ?몄텧?섎룄濡?蹂닿컯?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-05 추가 진행 기록 (연속 실행 72차: DraftQueue 기본 전송 승격과 작업 위치 패널 정리) -- 업데이트: 2026-04-05 00:10 (KST) -- Enter 입력은 기본적으로 DraftQueue에 추가되고, Ctrl+Enter와 전송 버튼도 같은 대기열 경로를 타도록 정리해 전송 흐름이 즉시 실행과 대기열 실행으로 갈라지지 않게 맞췄다. -- 초기 메시지 전송, 재실행, 드래그드롭 자동 전송, 후속 작업 생성도 같은 큐 경로를 사용하도록 정리해 대화 실행 진입점이 하나의 구조로 모이게 했다. -- DraftQueueItem에 kind(message/command/direct/followup/steering)를 추가하고, 카드 헤더에 상태·우선순위·종류가 함께 보이도록 보강했다. -- Code 탭 작업 위치 패널은 현재 작업 위치 / 워크트리·복사본 / 새 작업 위치 섹션으로 재구성해 브랜치/워크스페이스 패널과 같은 설명형 row 언어로 통일했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-05 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 72李? DraftQueue 湲곕낯 ?꾩넚 ?밴꺽怨??묒뾽 ?꾩튂 ?⑤꼸 ?뺣━) +- ?낅뜲?댄듃: 2026-04-05 00:10 (KST) +- Enter ?낅젰?€ 湲곕낯?곸쑝濡?DraftQueue??異붽??섍퀬, Ctrl+Enter?€ ?꾩넚 踰꾪듉??媛숈? ?€湲곗뿴 寃쎈줈瑜??€?꾨줉 ?뺣━???꾩넚 ?먮쫫??利됱떆 ?ㅽ뻾怨??€湲곗뿴 ?ㅽ뻾?쇰줈 媛덈씪吏€吏€ ?딄쾶 留욎톬?? +- 珥덇린 硫붿떆吏€ ?꾩넚, ?ъ떎?? ?쒕옒洹몃뱶濡??먮룞 ?꾩넚, ?꾩냽 ?묒뾽 ?앹꽦??媛숈? ??寃쎈줈瑜??ъ슜?섎룄濡??뺣━???€???ㅽ뻾 吏꾩엯?먯씠 ?섎굹??援ъ“濡?紐⑥씠寃??덈떎. +- DraftQueueItem??kind(message/command/direct/followup/steering)瑜?異붽??섍퀬, 移대뱶 ?ㅻ뜑???곹깭쨌?곗꽑?쒖쐞쨌醫낅쪟媛€ ?④퍡 蹂댁씠?꾨줉 蹂닿컯?덈떎. +- Code ???묒뾽 ?꾩튂 ?⑤꼸?€ ?꾩옱 ?묒뾽 ?꾩튂 / ?뚰겕?몃━쨌蹂듭궗蹂?/ ???묒뾽 ?꾩튂 ?뱀뀡?쇰줈 ?ш뎄?깊빐 釉뚮옖移??뚰겕?ㅽ럹?댁뒪 ?⑤꼸怨?媛숈? ?ㅻ챸??row ?몄뼱濡??듭씪?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-05 추가 진행 기록 (연속 실행 73차: 큐 카드·composer·작업 위치 패널 시각 언어 정리) -- 업데이트: 2026-04-05 00:28 (KST) -- DraftQueue 패널을 실행 대기 / 최근 결과 섹션형으로 다시 묶고, 각 카드 헤더에 종류·상태·우선순위 배지를 넣어 큐 상태를 더 빠르게 읽을 수 있게 정리했다. -- 워크스페이스 선택 패널은 기존 독립 카드형 행을 공통 Popup row 생성 규칙으로 맞춰 브랜치/워크트리/워크스페이스가 같은 리스트 문법으로 보이도록 통일했다. -- composer 영역은 최대 폭을 넓히고, 하단 FolderBar 외곽 박스를 제거한 뒤 로컬/워크트리/데이터/권한/Git 버튼을 칩형 리듬으로 정리해 claw-code 계열처럼 더 가볍게 보이도록 조정했다. -- 모델 표시 문구는 `서비스 ... · 모델 ...` 형식에서 `서비스 · 모델명` 형식으로 줄여 하단 빠른 선택 라벨이 더 짧고 읽기 쉽게 보이도록 맞췄다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-05 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 73李? ??移대뱶쨌composer쨌?묒뾽 ?꾩튂 ?⑤꼸 ?쒓컖 ?몄뼱 ?뺣━) +- ?낅뜲?댄듃: 2026-04-05 00:28 (KST) +- DraftQueue ?⑤꼸???ㅽ뻾 ?€湲?/ 理쒓렐 寃곌낵 ?뱀뀡?뺤쑝濡??ㅼ떆 臾띔퀬, 媛?移대뱶 ?ㅻ뜑??醫낅쪟쨌?곹깭쨌?곗꽑?쒖쐞 諛곗?瑜??l뼱 ???곹깭瑜???鍮좊Ⅴ寃??쎌쓣 ???덇쾶 ?뺣━?덈떎. +- ?뚰겕?ㅽ럹?댁뒪 ?좏깮 ?⑤꼸?€ 湲곗〈 ?낅┰ 移대뱶???됱쓣 怨듯넻 Popup row ?앹꽦 洹쒖튃?쇰줈 留욎떠 釉뚮옖移??뚰겕?몃━/?뚰겕?ㅽ럹?댁뒪媛€ 媛숈? 由ъ뒪??臾몃쾿?쇰줈 蹂댁씠?꾨줉 ?듭씪?덈떎. +- composer ?곸뿭?€ 理쒕? ??쓣 ?볧엳怨? ?섎떒 FolderBar ?멸낸 諛뺤뒪瑜??쒓굅????濡쒖뺄/?뚰겕?몃━/?곗씠??沅뚰븳/Git 踰꾪듉??移⑺삎 由щ벉?쇰줈 ?뺣━??claw-code 怨꾩뿴泥섎읆 ??媛€蹂띻쾶 蹂댁씠?꾨줉 議곗젙?덈떎. +- 紐⑤뜽 ?쒖떆 臾멸뎄??`?쒕퉬??... 쨌 紐⑤뜽 ...` ?뺤떇?먯꽌 `?쒕퉬??쨌 紐⑤뜽紐? ?뺤떇?쇰줈 以꾩뿬 ?섎떒 鍮좊Ⅸ ?좏깮 ?쇰꺼????吏㏐퀬 ?쎄린 ?쎄쾶 蹂댁씠?꾨줉 留욎톬?? +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-05 추가 진행 기록 (연속 실행 74차: 큐 상태 요약 강화와 gitignore 정리) -- 업데이트: 2026-04-05 00:38 (KST) -- DraftQueue 패널 상단에 실행 중 / 다음 / 보류 / 완료 / 실패 상태 요약 pill을 추가해 현재 대기열 상태를 카드 목록을 읽기 전에 먼저 파악할 수 있게 했다. -- composer 상단의 모델/컨텍스트/프리셋 줄은 버튼 높이와 패딩을 더 낮추고 토큰 카드 밀도도 줄여 Codex·claude-code 계열처럼 더 평평한 리듬으로 정리했다. -- 브랜치/워크트리 패널에는 공통 요약 strip을 추가해 현재 브랜치, 파일 상태, 최근 브랜치 수, 로컬/워크트리 모드, 변형 개수를 같은 시각 언어로 보여주도록 맞췄다. -- 저장소 루트 `.gitignore`에는 빌드 산출물(bin/obj/publish), IDE 파일(.vs, *.user, *.suo), 운영체제 잡파일(Thumbs.db, Desktop.ini, .DS_Store), 비밀정보 패턴(*.env, credentials.json)을 추가해 불필요한 추적을 줄였다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-05 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 74李? ???곹깭 ?붿빟 媛뺥솕?€ gitignore ?뺣━) +- ?낅뜲?댄듃: 2026-04-05 00:38 (KST) +- DraftQueue ?⑤꼸 ?곷떒???ㅽ뻾 以?/ ?ㅼ쓬 / 蹂대쪟 / ?꾨즺 / ?ㅽ뙣 ?곹깭 ?붿빟 pill??異붽????꾩옱 ?€湲곗뿴 ?곹깭瑜?移대뱶 紐⑸줉???쎄린 ?꾩뿉 癒쇱? ?뚯븙?????덇쾶 ?덈떎. +- composer ?곷떒??紐⑤뜽/而⑦뀓?ㅽ듃/?꾨━??以꾩? 踰꾪듉 ?믪씠?€ ?⑤뵫??????텛怨??좏겙 移대뱶 諛€?꾨룄 以꾩뿬 Codex쨌claude-code 怨꾩뿴泥섎읆 ???됲룊??由щ벉?쇰줈 ?뺣━?덈떎. +- 釉뚮옖移??뚰겕?몃━ ?⑤꼸?먮뒗 怨듯넻 ?붿빟 strip??異붽????꾩옱 釉뚮옖移? ?뚯씪 ?곹깭, 理쒓렐 釉뚮옖移??? 濡쒖뺄/?뚰겕?몃━ 紐⑤뱶, 蹂€??媛쒖닔瑜?媛숈? ?쒓컖 ?몄뼱濡?蹂댁뿬二쇰룄濡?留욎톬?? +- ?€?μ냼 猷⑦듃 `.gitignore`?먮뒗 鍮뚮뱶 ?곗텧臾?bin/obj/publish), IDE ?뚯씪(.vs, *.user, *.suo), ?댁쁺泥댁젣 ?≫뙆??Thumbs.db, Desktop.ini, .DS_Store), 鍮꾨??뺣낫 ?⑦꽩(*.env, credentials.json)??異붽???遺덊븘?뷀븳 異붿쟻??以꾩??? +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 75차: 트레이 진입 흐름과 설정 fan-out 보강) -- 업데이트: 2026-04-04 23:14 (KST) -- 트레이 메뉴 상단에 현재 앱 버전을 `AX Copilot v.0.7.3` 형식의 헤더로 표기해 우클릭 시 제품 버전을 바로 확인할 수 있게 했다. -- 트레이 아이콘 좌클릭 동작은 AI 기능 활성화 시 AX Agent 창을 우선 열고, AI 기능이 비활성화된 경우에만 AX Commander를 열도록 바꿔 사용 흐름을 AX Agent 중심으로 정리했다. -- 메인 설정 저장 완료 시 열려 있는 AX Agent 창이 즉시 테마, 모델, 권한, 데이터 활용, overlay/inline 빠른 설정, 하단 composer 라벨을 다시 읽어오도록 `RefreshFromSavedSettings()` fan-out 경로를 추가했다. -- DraftQueue kind 판정은 일반 입력(message), 슬래시 명령(command), 조정 입력(steering), 직접 실행 요청(direct), 후속 작업(followup)이 실제 입력 형태와 더 일치하도록 보강했고, 전송 버튼은 일반 메시지 전송 경로를 사용하도록 정리했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 75李? ?몃젅??吏꾩엯 ?먮쫫怨??ㅼ젙 fan-out 蹂닿컯) +- ?낅뜲?댄듃: 2026-04-04 23:14 (KST) +- ?몃젅??硫붾돱 ?곷떒???꾩옱 ??踰꾩쟾??`AX Copilot v.0.7.3` ?뺤떇???ㅻ뜑濡??쒓린???고겢由????쒗뭹 踰꾩쟾??諛붾줈 ?뺤씤?????덇쾶 ?덈떎. +- ?몃젅???꾩씠肄?醫뚰겢由??숈옉?€ AI 湲곕뒫 ?쒖꽦????AX Agent 李쎌쓣 ?곗꽑 ?닿퀬, AI 湲곕뒫??鍮꾪솢?깊솕??寃쎌슦?먮쭔 AX Commander瑜??대룄濡?諛붽퓭 ?ъ슜 ?먮쫫??AX Agent 以묒떖?쇰줈 ?뺣━?덈떎. +- 硫붿씤 ?ㅼ젙 ?€???꾨즺 ???대젮 ?덈뒗 AX Agent 李쎌씠 利됱떆 ?뚮쭏, 紐⑤뜽, 沅뚰븳, ?곗씠???쒖슜, overlay/inline 鍮좊Ⅸ ?ㅼ젙, ?섎떒 composer ?쇰꺼???ㅼ떆 ?쎌뼱?ㅻ룄濡?`RefreshFromSavedSettings()` fan-out 寃쎈줈瑜?異붽??덈떎. +- DraftQueue kind ?먯젙?€ ?쇰컲 ?낅젰(message), ?щ옒??紐낅졊(command), 議곗젙 ?낅젰(steering), 吏곸젒 ?ㅽ뻾 ?붿껌(direct), ?꾩냽 ?묒뾽(followup)???ㅼ젣 ?낅젰 ?뺥깭?€ ???쇱튂?섎룄濡?蹂닿컯?덇퀬, ?꾩넚 踰꾪듉?€ ?쇰컲 硫붿떆吏€ ?꾩넚 寃쎈줈瑜??ъ슜?섎룄濡??뺣━?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 76차: 설정 이벤트 fan-out 통합과 큐 상태 섹션 재구성) -- 업데이트: 2026-04-04 23:23 (KST) -- AX Agent 창이 `SettingsService.SettingsChanged`를 직접 구독하도록 연결해 메인 설정, AX Agent 설정, 저장 방식이 달라도 테마/권한/데이터 활용/모델 라벨/하단 composer/대기열 UI가 즉시 같은 상태를 반영하도록 fan-out 경로를 통합했다. -- `RefreshFromSavedSettings()`는 기존 시각 요소 갱신 외에도 대기열 패널과 대화 목록까지 다시 읽어오도록 확장해 저장 후 AX Agent 화면과 실제 실행 상태가 더 빠르게 맞춰지도록 보강했다. -- AX Agent 설정 저장 경로와 구형 Agent 설정창에서 표현 수준을 무조건 `rich`로 덮어쓰던 코드를 제거해, 사용자가 선택한 `풍부하게 / 적절하게 / 간단하게` 값이 다른 설정 흐름에서도 유지되도록 수정했다. -- DraftQueue 패널은 기존 `실행 대기 / 최근 결과` 묶음에서 `실행 중 / 다음 작업 / 보류 / 완료 / 실패` 개별 섹션 구조로 재편해 queue state가 많은 경우에도 현재 진행, 다음 실행, 재시도 대기, 완료/실패 이력을 더 빠르게 구분할 수 있게 했다. -- 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (경고 0 / 오류 0) +### 2026-04-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 76李? ?ㅼ젙 ?대깽??fan-out ?듯빀怨????곹깭 ?뱀뀡 ?ш뎄?? +- ?낅뜲?댄듃: 2026-04-04 23:23 (KST) +- AX Agent 李쎌씠 `SettingsService.SettingsChanged`瑜?吏곸젒 援щ룆?섎룄濡??곌껐??硫붿씤 ?ㅼ젙, AX Agent ?ㅼ젙, ?€??諛⑹떇???щ씪???뚮쭏/沅뚰븳/?곗씠???쒖슜/紐⑤뜽 ?쇰꺼/?섎떒 composer/?€湲곗뿴 UI媛€ 利됱떆 媛숈? ?곹깭瑜?諛섏쁺?섎룄濡?fan-out 寃쎈줈瑜??듯빀?덈떎. +- `RefreshFromSavedSettings()`??湲곗〈 ?쒓컖 ?붿냼 媛깆떊 ?몄뿉???€湲곗뿴 ?⑤꼸怨??€??紐⑸줉源뚯? ?ㅼ떆 ?쎌뼱?ㅻ룄濡??뺤옣???€????AX Agent ?붾㈃怨??ㅼ젣 ?ㅽ뻾 ?곹깭媛€ ??鍮좊Ⅴ寃?留욎떠吏€?꾨줉 蹂닿컯?덈떎. +- AX Agent ?ㅼ젙 ?€??寃쎈줈?€ 援ы삎 Agent ?ㅼ젙李쎌뿉???쒗쁽 ?섏???臾댁“嫄?`rich`濡???뼱?곕뜕 肄붾뱶瑜??쒓굅?? ?ъ슜?먭? ?좏깮??`?띾??섍쾶 / ?곸젅?섍쾶 / 媛꾨떒?섍쾶` 媛믪씠 ?ㅻⅨ ?ㅼ젙 ?먮쫫?먯꽌???좎??섎룄濡??섏젙?덈떎. +- DraftQueue ?⑤꼸?€ 湲곗〈 `?ㅽ뻾 ?€湲?/ 理쒓렐 寃곌낵` 臾띠쓬?먯꽌 `?ㅽ뻾 以?/ ?ㅼ쓬 ?묒뾽 / 蹂대쪟 / ?꾨즺 / ?ㅽ뙣` 媛쒕퀎 ?뱀뀡 援ъ“濡??ы렪??queue state媛€ 留롮? 寃쎌슦?먮룄 ?꾩옱 吏꾪뻾, ?ㅼ쓬 ?ㅽ뻾, ?ъ떆???€湲? ?꾨즺/?ㅽ뙣 ?대젰????鍮좊Ⅴ寃?援щ텇?????덇쾶 ?덈떎. +- 寃€利? dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\ (寃쎄퀬 0 / ?ㅻ쪟 0) -### 2026-04-04 추가 진행 기록 (연속 실행 77차: compact 결과 재노출과 압축 비교 준비) -- 업데이트: 2026-04-04 23:28 (KST) -- AX Agent 하단 컨텍스트 카드의 툴팁에 최근 compact 이력을 추가해 마지막 자동/수동 압축 시각, 압축 전후 토큰 수, 절감량을 이후에도 다시 확인할 수 있게 보강했다. -- 수동 `/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-04 異붽? 吏꾪뻾 湲곕줉 (?곗냽 ?ㅽ뻾 77李? compact 寃곌낵 ?щ끂異쒓낵 ?뺤텞 鍮꾧탳 以€鍮? +- ?낅뜲?댄듃: 2026-04-04 23:28 (KST) +- AX Agent ?섎떒 而⑦뀓?ㅽ듃 移대뱶???댄똻??理쒓렐 compact ?대젰??異붽???留덉?留??먮룞/?섎룞 ?뺤텞 ?쒓컖, ?뺤텞 ?꾪썑 ?좏겙 ?? ?덇컧?됱쓣 ?댄썑?먮룄 ?ㅼ떆 ?뺤씤?????덇쾶 蹂닿컯?덈떎. +- ?섎룞 `/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) diff --git a/src/AxCopilot/Services/Agent/AgentLoopService.cs b/src/AxCopilot/Services/Agent/AgentLoopService.cs index 8f668a4..119f32a 100644 --- a/src/AxCopilot/Services/Agent/AgentLoopService.cs +++ b/src/AxCopilot/Services/Agent/AgentLoopService.cs @@ -51,6 +51,11 @@ public partial class AgentLoopService /// 문서 생성 폴백 재시도 여부 (루프당 1회만). private bool _docFallbackAttempted; private string _currentRunId = ""; + private bool _runPendingPostCompactionTurn; + private int _runPostCompactionTurnCounter; + private int _runPostCompactionSuppressedThinkingCount; + private string _runLastCompactionStageSummary = ""; + private int _runLastCompactionSavedTokens; /// 일시정지 제어용 세마포어. 1이면 진행, 0이면 대기. private readonly SemaphoreSlim _pauseSemaphore = new(1, 1); @@ -437,7 +442,7 @@ public partial class AgentLoopService // Context Condenser: 토큰 초과 시 이전 대화 자동 압축 // 첫 반복에서도 실행 (이전 대화 복원으로 이미 긴 경우 대비) { - var condensed = await ContextCondenser.CondenseIfNeededAsync( + var compactionResult = await ContextCondenser.CondenseWithStatsAsync( messages, _llm, llm.MaxContextTokens, @@ -445,8 +450,17 @@ public partial class AgentLoopService llm.ContextCompactTriggerPercent, false, ct); - if (condensed) - EmitEvent(AgentEventType.Thinking, "", "컨텍스트 압축 완료 — 입력 토큰을 절감했습니다"); + if (compactionResult.Changed) + { + MarkRunPostCompaction(compactionResult, runState); + var compactSummary = !string.IsNullOrWhiteSpace(compactionResult.StageSummary) + ? compactionResult.StageSummary + : "기본"; + EmitEvent( + AgentEventType.Thinking, + "", + $"컨텍스트 압축 완료 — {compactSummary} · {Services.TokenEstimator.Format(compactionResult.SavedTokens)} tokens 절감"); + } } EmitEvent(AgentEventType.Thinking, "", $"LLM에 요청 중... (반복 {iteration}/{maxIterations})"); @@ -497,6 +511,7 @@ public partial class AgentLoopService runState); runState.ContextRecoveryAttempts = 0; runState.TransientLlmErrorRetries = 0; + NotifyPostCompactionTurnIfNeeded(runState); } catch (NotSupportedException) { @@ -1439,6 +1454,11 @@ public partial class AgentLoopService IsRunning = false; _currentRunId = ""; + _runPendingPostCompactionTurn = false; + _runPostCompactionTurnCounter = 0; + _runPostCompactionSuppressedThinkingCount = 0; + _runLastCompactionStageSummary = ""; + _runLastCompactionSavedTokens = 0; // 일시정지 상태 리셋 if (IsPaused) @@ -1480,10 +1500,13 @@ public partial class AgentLoopService var retryQuality = retryTotal > 0 ? $"{(statsRecoveredAfterFailure * 100.0 / retryTotal):F0}%" : "100%"; + var compactNoiseSummary = _runPostCompactionSuppressedThinkingCount > 0 + ? $" | compact 로그 축약 {_runPostCompactionSuppressedThinkingCount}건" + : ""; var topFailed = BuildTopFailureSummary(failedToolHistogram); var summary = $"📊 전체 통계: LLM {iteration}회 호출 | 도구 {totalToolCalls}회 (성공 {statsSuccessCount}, 실패 {statsFailCount}) | " + $"토큰 {statsInputTokens:N0}→{statsOutputTokens:N0} (합계 {totalTokens:N0}) | " + - $"소요 {durationSec:F1}초 | 재시도 품질 {retryQuality} (복구 {statsRecoveredAfterFailure}, 차단 {statsRepeatedFailureBlocks}) | " + + $"소요 {durationSec:F1}초 | 재시도 품질 {retryQuality} (복구 {statsRecoveredAfterFailure}, 차단 {statsRepeatedFailureBlocks}){compactNoiseSummary} | " + $"실패 상위: {topFailed} | 사용 도구: {toolList}"; EmitEvent(AgentEventType.StepDone, "total_stats", summary); } @@ -4339,6 +4362,12 @@ public partial class AgentLoopService long elapsedMs = 0, int inputTokens = 0, int outputTokens = 0, string? toolInput = null, int iteration = 0, bool? successOverride = null) { + if (type == AgentEventType.Thinking && ShouldSuppressPostCompactionThinking(summary)) + { + _runPostCompactionSuppressedThinkingCount++; + return; + } + // AgentLogLevel에 따라 이벤트 필터링 var logLevel = _settings.Settings.Llm.AgentLogLevel; @@ -4381,6 +4410,62 @@ public partial class AgentLoopService } } + private void MarkRunPostCompaction(ContextCompactionResult result, RunState runState) + { + runState.PendingPostCompactionTurn = true; + runState.PostCompactionTurnCounter = 0; + runState.LastCompactionStageSummary = result.StageSummary; + runState.LastCompactionSavedTokens = result.SavedTokens; + SyncRunPostCompactionState(runState); + } + + private void NotifyPostCompactionTurnIfNeeded(RunState runState) + { + if (!runState.PendingPostCompactionTurn) + return; + + runState.PendingPostCompactionTurn = false; + runState.PostCompactionTurnCounter++; + SyncRunPostCompactionState(runState); + + var stage = string.IsNullOrWhiteSpace(runState.LastCompactionStageSummary) + ? "기본" + : runState.LastCompactionStageSummary; + var saved = runState.LastCompactionSavedTokens > 0 + ? $" · {Services.TokenEstimator.Format(runState.LastCompactionSavedTokens)} tokens 절감" + : ""; + EmitEvent( + AgentEventType.Thinking, + "", + $"compact 이후 {runState.PostCompactionTurnCounter}번째 턴 · {stage}{saved}"); + } + + private void SyncRunPostCompactionState(RunState runState) + { + _runPendingPostCompactionTurn = runState.PendingPostCompactionTurn; + _runPostCompactionTurnCounter = runState.PostCompactionTurnCounter; + _runLastCompactionStageSummary = runState.LastCompactionStageSummary ?? ""; + _runLastCompactionSavedTokens = runState.LastCompactionSavedTokens; + } + + private bool ShouldSuppressPostCompactionThinking(string summary) + { + if (string.IsNullOrWhiteSpace(summary)) + return false; + + var postCompactActive = _runPendingPostCompactionTurn || _runPostCompactionTurnCounter > 0; + if (!postCompactActive) + return false; + + if (_runPostCompactionTurnCounter > 1) + return false; + + return summary.StartsWith("LLM에 요청 중", StringComparison.Ordinal) + || summary.StartsWith("사용자 프롬프트 제출", StringComparison.Ordinal) + || summary.StartsWith("무료 티어 모드", StringComparison.Ordinal) + || summary.StartsWith("컨텍스트 압축 완료", StringComparison.Ordinal); + } + /// 영향 범위 기반 의사결정 체크. 확인이 필요하면 메시지를 반환, 불필요하면 null. private string? CheckDecisionRequired(LlmService.ContentBlock call, AgentContext context) { diff --git a/src/AxCopilot/Services/Agent/AgentLoopTransitions.Execution.cs b/src/AxCopilot/Services/Agent/AgentLoopTransitions.Execution.cs index 1c73443..e52f428 100644 --- a/src/AxCopilot/Services/Agent/AgentLoopTransitions.Execution.cs +++ b/src/AxCopilot/Services/Agent/AgentLoopTransitions.Execution.cs @@ -1507,6 +1507,10 @@ public partial class AgentLoopService public int DocumentVerificationGateRetry; public int NoProgressRecoveryRetry; public int TerminalEvidenceGateRetry; + public bool PendingPostCompactionTurn; + public int PostCompactionTurnCounter; + public string LastCompactionStageSummary = ""; + public int LastCompactionSavedTokens; } }