Compare commits

..

92 Commits

Author SHA1 Message Date
2b972ac4e9 [Fix] 설정창 XamlParseException 수정 — ModernComboBox 스타일 누락
SettingsWindow.xaml (라인 2875):
- Style="{StaticResource ModernComboBox}" 참조 제거
- 이유: ModernComboBox 스타일이 정의되지 않아 XamlParseException 발생
- 기본 ComboBox 스타일(라인 224, TargetType 전체 적용)이 이미 존재

SettingsWindow.xaml.cs (OnClosed):
- _revertCallback() → _revertCallback?.Invoke()
- XAML 파싱 실패 시 null 역참조 방지

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 08:32:42 +09:00
b018d54e9b [정리] 빌드 산출물 4,720개 git 추적 제거 + .gitignore 강화
.gitignore 업데이트:
- bin/, obj/ → **/bin/, **/obj/ (하위 폴더 재귀 적용)
- dist/ 폴더 추가 (배포 산출물)
- src/AxCopilot.Installer/payload.zip 추가

git 추적 제거 (파일은 로컬 유지, git에서만 삭제):
- dist/ (540개): 배포 바이너리 전체 (DLL, EXE, 런타임)
- src/AxCopilot/bin,obj/ (3,800+개): 메인 앱 빌드 산출물
- src/AxCopilot.SDK/bin,obj/ (30+개): SDK 빌드 산출물
- src/AxCopilot.Installer/bin,obj/ (20+개): 인스톨러 빌드 산출물
- src/AxCopilot.Tests/bin,obj/ (230+개): 테스트 빌드 산출물
- src/AxKeyEncryptor/bin,obj/ (20+개): 암호화 도구 빌드 산출물
- tools/IconGenerator/bin,obj/ (24개): 아이콘 생성 도구 빌드 산출물
- publish/ (8개): 레거시 AxCommander 퍼블리시 폴더

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 23:02:51 +09:00
7837c696cc [Phase L29] AX 차별화 심화 — 한국어·사내 독점 기능 4종 구현
DictHandler.cs (신규, 300줄+):
- prefix=dict, 오프라인 국어·영한 사전
- 국어: 혼동어·업무용어·한자어 48개 (가르치다/가리키다, 품의/결재/결제 등)
- 영한: 업무 영어 25개 (agenda, align, approve, deploy 등) + 예문
- dict {단어} → 뜻풀이·유의어·반의어·주의사항
- dict en {word} → 영한 검색, Enter: 클립보드 복사

FlowHandler.cs (신규, 237줄):
- prefix=flow, 명령 체인 워크플로우
- flow add {이름} {cmd1} > {cmd2} > ... 텍스트 기반 워크플로우 저장
- %APPDATA%\AxCopilot\flows.json 로컬 JSON 저장
- flow {이름} → 명령 목록 클립보드 복사, flow del 삭제
- Alfred 워크플로우 경량 대응

SpellHandler.cs (수정, +144줄):
- spell add {틀린} {올바른} [설명] 사용자 항목 추가
- spell del {틀린} 삭제, spell custom 사용자 항목만 보기
- %APPDATA%\AxCopilot\spell_custom.json 저장
- AllEntries() 제너레이터로 내장+사용자 통합 검색

BookmarkHandler.cs (수정, +2줄):
- 검색 결과에 Group="📑 북마크" 카테고리 헤더 설정

App.xaml.cs: DictHandler, FlowHandler 등록 (L29 블록)
LauncherWindow.ShortcutHelp.cs: F3 빠른 미리보기 도움말 추가
LAUNCHER_ROADMAP.md: L29  완료, 123개 핸들러
- 빌드: 경고 0, 오류 0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 20:13:34 +09:00
b5c60b5398 [Phase L28] Windows 생태계 통합 + 콘텐츠 UX 강화 4종 구현
PkgHandler.cs (신규, prefix=pkg):
- winget search subprocess 결과 Regex 파싱 (PkgResult 레코드)
- pkg install {id} → cmd 터미널으로 실행 (사용자 확인 가능)
- pkg list / pkg upgrade 서브명령
- winget 미설치 감지 → 안내 메시지 (캐시 체크)
- PowerToys Command Palette winget 기능 대응

ApHandler.cs (신규, prefix=ap):
- 클립보드 텍스트 즉시 변환 15종 내장
- upper/lower/trim/sort/rsort/unique/number/reverse
- blank/single/count/json/slug/base64/decode64
- replace {A} {B} 텍스트 치환 명령
- PowerToys Advanced Paste 대응

SnippetHandler.cs (수정, L28-2):
- ExpandVariables 5개 플레이스홀더 추가:
  · {clipboard} → 현재 클립보드 텍스트
  · {user} → Windows 사용자명
  · {computer} → PC명
  · {weekday} → 한국어 요일 (월요일~일요일)
  · {app} → 이전 포커스 앱 프로세스명
- GetWindowThreadProcessId P/Invoke 추가
- Raycast 스니펫 동적 플레이스홀더 대응

LauncherViewModel.cs (수정, L28-3):
- UpdatePreviewAsync 미리보기 확장:
  · 이미지 10종 (.jpg/.png/.gif 등): BitmapDecoder 해상도 + 파일 크기
  · PDF: PdfPig 페이지 수 + 첫 페이지 텍스트 200자 추출
  · 오디오/동영상 12종: 파일 크기 + 수정일 메타
- IsImageFile(), IsMediaFile(), GetImageMeta(), GetPdfMeta(),
  GetFileSizeMeta(), FormatFileSize() 헬퍼 메서드 추가

App.xaml.cs: L28 핸들러 2개 등록 (PkgHandler, ApHandler)
LAUNCHER_ROADMAP.md: Phase L28  완료 + 벤치마킹 공백 3개 해소
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 20:05:14 +09:00
a67cdf574d [Phase L27] 경쟁 공백 즉시 해소 — Windows 일상 제어 도구 5종 구현
VolHandler.cs (신규, prefix=vol):
- Windows Core Audio API COM 직접 호출 (IAudioEndpointVolume)
- vol 50 설정, vol up/down ±10%, vol mute 토글
- AudioEndpoint 래퍼 클래스 + IDisposable 해제
- 볼륨 바 시각화 (20칸 블록), NuGet 불필요

QrHandler.cs (신규, prefix=qr):
- QRCoder 1.6.0 NuGet 추가 (순수 C#, ~150KB)
- qr {텍스트} → PNG 클립보드 복사
- qr save {텍스트} → TEMP 저장 후 탐색기 열기
- 바이트 길이·URL 자동 감지 표시

MeetHandler.cs (신규, prefix=meet):
- %APPDATA%\AxCopilot\meet.json 로컬 저장
- meet add/del CRUD, 이름·URL·서비스 검색
- 서비스 자동 감지 (Zoom/Teams/Google Meet/Webex/Discord/Slack)
- Enter → UseShellExecute URI 열기

BrightHandler.cs (신규, prefix=bright):
- WMI PowerShell subprocess (Get-CimInstance WmiMonitorBrightness)
- bright 70 설정, bright up/down ±10%
- 노트북 내장 디스플레이 전용, 외장 모니터 미지원 안내
- 밝기 바 시각화 (20칸 블록)

PasteHandler.cs (신규, prefix=paste):
- ClipboardHistoryService 의존성 주입
- paste 3 1 5 → 3번→1번→5번 순서대로 Ctrl+V
- paste all → 최근 20개 항목 전체 순차 붙여넣기
- SendInput P/Invoke + AttachThreadInput 포커스 전환
- Raycast "Paste Sequentially" 대응

App.xaml.cs: L27 핸들러 5개 등록 (Vol/Qr/Meet/Bright/Paste)
AxCopilot.csproj: QRCoder 1.6.0 패키지 참조 추가
LAUNCHER_ROADMAP.md: Phase L27  완료 + 벤치마킹 공백 해소 표시
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 19:37:52 +09:00
837cc0692b [Roadmap] L27~L29 신규 계획 수립 + 벤치마킹 전면 갱신
경쟁 서비스 벤치마킹 섹션 갱신 (2026년 4월):
- Raycast v1.104+ Windows 베타 출시 반영
- PowerToys Command Palette 0.98 신규 추가
- 기능 매트릭스 30개 항목으로 확장 (기존 21개)
- 공백 분석 3단계 우선순위로 재편 (🔴🟠🟡)
- AX 경쟁 우위 표 신규 추가

Phase L27 — 경쟁 공백 즉시 해소 (v2.3.0):
- L27-1: bm — Edge/Chrome 북마크 검색
- L27-2: vol — 시스템 볼륨 제어 (Core Audio API)
- L27-3: qr — QR 코드 생성 (QRCoder NuGet)
- L27-4: meet — 회의 링크 전용 관리
- L27-5: bright — 화면 밝기 제어 (WMI)
- L27-6: paste — 클립보드 순차 붙여넣기

Phase L28 — Windows 생태계 통합 (v2.3.0):
- L28-1: pkg — winget 앱 검색·설치
- L28-2: snip 확장 — 동적 플레이스홀더 ({date}/{clipboard}/{app})
- L28-3: 파일 미리보기 강화 (이미지·PDF·음악)
- L28-4: ap — AI 붙여넣기 변환 (PowerToys Advanced Paste 대응)

Phase L29 — AX 차별화 심화 (v2.4.0):
- L29-1: dict — 오프라인 국어사전 + 영한사전
- L29-2: flow — 명령 체인 텍스트 워크플로우
- L29-3: spell 확장 — 사내 용어 사전 사용자 추가
- L29-4: 검색 결과 카테고리 분류 (Alfred 5 방향)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 19:21:17 +09:00
f14e863f0b [Phase L26] 로드맵 업데이트 — 개인 생산성 강화 도구 4종 완료 기록
docs/LAUNCHER_ROADMAP.md:
- 헤더 핵심 기능: "110개 핸들러" → "114개 핸들러, L26 완료"
- Phase L26 섹션 신규 추가 (v2.2.0  완료):
  · L26-1: contact — 로컬 연락처 관리
  · L26-2: remind — 특정 시각 알림
  · L26-3: phrase — 업무 문구 모음 62종
  · L26-4: today — 오늘 업무 통합 뷰

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 19:03:48 +09:00
f1bc592507 [Phase L25] 개인 생산성 강화 도구 4종 구현
ContactHandler (신규):
- prefix=contact, 로컬 연락처 관리
- Contact { Name, Dept, Phone, Email, Memo }
- 저장: %APPDATA%\AxCopilot\contacts.json
- 서브명령: add, del, 이름/부서/메모 검색
- 복사 우선순위: 이메일 > 전화 > 이름

RemindHandler (신규):
- prefix=remind, 특정 시각 알림
- RemindEntry { Id, Time, Message, Fired, Cts }
- 한국어 시각 파싱: 오전/오후N시M분, HH:mm
- 시각 경과 시 자동 내일로 설정
- GetTodayReminders(): TodayHandler 연동용
- 서브명령: HH:mm 메시지, del N, clear

PhraseHandler (신규):
- prefix=phrase, 업무 문구 모음 62종
- 7개 카테고리: 인사/보고/요청/마무리/승인결재/회의/사과지연
- PhraseEntry(Text, Category, Tags)
- 카테고리 키워드 매칭 + 텍스트 검색 폴백

TodayHandler (신규):
- prefix=today, 오늘 업무 통합 뷰
- 5개 항목: 날짜/공휴일, 미완료 할일, 오늘 알림, 다음 공휴일 D-day, 이번달 잔여 업무일
- todos.json JsonDocument 파싱
- RemindHandler.GetTodayReminders() 연동
- 자체 공휴일 사전 (2025–2027) 내장

App.xaml.cs:
- 핸들러 4개 등록 (ContactHandler, RemindHandler, PhraseHandler, TodayHandler)
- 빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 19:03:05 +09:00
98d63509f9 [Roadmap] L24 완료 반영
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 18:42:11 +09:00
1542d5124a [Fix] info uptime 부팅·로그인 시간 측정 알고리즘 정교화
기존 문제:
- Environment.TickCount64 사용 → 절전·최대절전 복귀 시 오차 발생
- 로그인 시간 미표시

개선 내용:
- 부팅 시간: System 프로세스(PID 4) StartTime 사용
  → Windows가 실제 부팅한 시각을 정확히 반영
  → PID 4 접근 불가 시 TickCount64로 폴백
- 로그인 시간: 현재 세션(SessionId 일치)의 explorer.exe 최초 StartTime
  → 멀티 세션 환경에서도 현재 사용자 세션만 선별
- 부팅→로그인 소요 시간(초) 추가 표시
- 시각 표시 HH:mm → HH:mm:ss 정밀도 향상

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 18:41:46 +09:00
afedd826c8 [Phase L24] 양식 6종·단축키 4앱·맞춤법 핸들러·약어 커스텀 추가
FormHandler.cs (양식 6종 추가, 카테고리 2개 신설):
- 업무 인수인계서 (handover): 인계 목록·시스템·연락처 포함
- 업무 지시서 (handover): 우선순위·산출물·보고 방법 포함
- 품의서 (handover): 결재란·예산·기대효과 포함
- 업무 일지 (daily): 일별 업무·미완료·협의사항 포함
- 일일 업무 보고 (daily): 완료·진행·예정·이슈 포함
- 주요 업무 계획표 (daily): 월간 목표·주차별·세부 계획 포함
- Categories에 handover/daily 2개 신설, 안내 문자열 갱신

KeyHandler.cs (단축키 4개 앱 추가):
- Word 단축키 25개 (서식·맞춤법·스타일·이동 포함)
- PowerPoint 단축키 18개 (슬라이드 쇼·그룹화·정렬 포함)
- Teams 단축키 18개 (회의·탭 전환·채널 이동 포함)
- Outlook 단축키 21개 (메일·일정·플래그·정크 포함)
- catKeys·catName switch·AddAppOverview·안내 문자열 모두 갱신

SpellHandler.cs (신규 생성, 63개 항목):
- 되/돼·안/않·혼동어·맞춤법·띄어쓰기·외래어 6개 카테고리
- 빈 쿼리 시 클립보드 자동 맞춤법 검사
- list/카테고리/키워드 검색 지원
- Enter: 올바른 표현 클립보드 복사

AbbrHandler.cs (사용자 정의 약어 기능 추가):
- abbr_custom.json 로컬 저장 (CustomAbbr 모델)
- abbr add <약어> <풀이> [설명] → 커스텀 약어 등록
- abbr del <약어> → 커스텀 약어 삭제
- abbr custom → 사용자 정의 목록 보기
- 검색 시 내장+커스텀 통합 검색

App.xaml.cs: SpellHandler 등록 (L24-3)
빌드: 경고 0, 오류 0
2026-04-04 18:37:58 +09:00
ad3335a63e [Roadmap] L23 완료 반영 + L24 신규 계획 수립
L23 (한국 사무 환경 특화):
- L23-1~L23-4 전체  완료 표시
- 기존 볼륨·북마크·QR·회의링크 계획 전면 대체

L24 신규 계획 (문서·Office 생산성):
- form 양식 확장 6종 (인수인계·품의·업무지시·업무일지 등)
- key 단축키 확장 (Word·PPT·Teams·Outlook)
- spell: 자주 틀리는 맞춤법 (내장 목록 300개+)
- abbr 확장: 사용자 정의 약어 등록

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 18:19:37 +09:00
babe593482 [Phase L23] 한국 사무 환경 특화 도구 4종 구현
CalHandler (cal 프리픽스, 205줄):
- 2024~2027 한국 공휴일 딕셔너리 (DateOnly → string, 66개 날짜)
- cal: 이번달 달력·공휴일 / cal next: 다음 공휴일 5개 D-N일
- cal workdays: 이번달 업무일·잔여 / cal today: 오늘 공휴일 여부
- cal yyyy-MM: 특정 월 / cal yyyy-MM-dd: 특정 날짜 조회

LeaveHandler (leave 프리픽스, 185줄):
- %APPDATA%\AxCopilot\leave.json 로컬 저장 (LeaveData/LeaveRecord 모델)
- set/use/del/remaining/list/clear 서브커맨드
- 반차(0.5일) 지원, 잔여 연차 실시간 계산

WorkTimeHandler (work 프리픽스, 160줄):
- work 09:00 18:30: 근무시간·초과근무 (점심 1시간 자동 제외)
- work 09:00 18:30 -30: 점심 N분 지정 / -0: 미적용
- work 09:00 18:30 pay 15000: 시급 기준 급여 산출 (초과 1.5배)
- work week N: 주간 40h 기준 초과 계산 / _lastWorkedHours 캐시

FixHandler (fix 프리픽스, 220줄):
- 두벌식 영→자모 매핑 (소문자+Shift 된소리/쌍모음)
- HangulComposer 상태 기계: 초성19·중성21·종성28 + 복합모음7·복합종성11
- 빈 쿼리 시 클립보드 자동 교정
- 예: fix gksrmf → 안녕

App.xaml.cs: 4개 핸들러 등록 추가
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 18:18:30 +09:00
406a2fc2e5 [Roadmap] Phase UX 6종 완료 반영 — LAUNCHER_ROADMAP.md 갱신
현재 상태 헤더 (v2.1.0) 업데이트:
- 퍼지 검색 랭킹 개선 (30일 decay) 추가
- 글로벌 핫키 12개 조합 설정 가능 반영
- Shell32 파일 아이콘 표시 반영
- 클립보드 이미지 썸네일 미리보기 반영
- 텍스트 파일 미리보기 패널 반영
- 창 위치 기억 반영

Phase L24 (🔄 예정 → 🔄 진행 중):
- L24-2 파일 아이콘 표시  완료 (IconCacheService, Shell32 P/Invoke, 13개 확장자 WarmUp)
- L24-3 퍼지 검색 랭킹 개선  완료 (UsageRankingService decay, 마이그레이션)

Phase L25 (🔄 예정 →  완료, v2.1.0):
- L25-1 미리보기 패널  (80ms 디바운스, 텍스트 6줄, 클립보드 400자)
- L25-2 클립보드 이미지 지원  (L2-1 기구현 확인)
- L25-3 창 위치 기억  (RememberPosition/LastLeft/LastTop, Clamp, 비동기 저장)
- L25-4 핫키 확장  (12개 프리셋 ComboBox, L5-1 기구현 확인)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 17:43:43 +09:00
e33f8ac620 [Phase UX] 창 위치 기억·파일 아이콘·퍼지 랭킹·미리보기 패널 4종 UX 개선
창 위치 기억 (Feature 1):
- AppSettings.cs: LauncherSettings에 RememberPosition, LastLeft, LastTop 프로퍼티 추가
- SettingsViewModel.cs/.Properties.cs/.Methods.cs: RememberPosition 바인딩 프로퍼티 연동
- LauncherWindow.Animations.cs: CenterOnScreen() — RememberPosition ON 시 저장 좌표 복원
- LauncherWindow.Shell.cs: Window_Deactivated — 비활성화 시 현재 위치 비동기 저장
- SettingsWindow.xaml: 런처 탭 › "마지막 위치 기억" 토글 추가

파일 아이콘 표시 (Feature 2):
- Services/IconCacheService.cs (신규, 192줄): Shell32 SHGetFileInfo로 아이콘 추출,
  %LOCALAPPDATA%\AxCopilot\IconCache\에 PNG 캐시, WarmUp()으로 앱 시작 시 미리 준비
- Core/CommandResolver.cs: 퍼지 검색 결과에 IconCacheService.GetIconPath() 연결
- Handlers/FileBrowserHandler.cs: 상위폴더·폴더·파일 항목에 IconCacheService 연결
- App.xaml.cs: SystemIdle 시점에 IconCacheService.WarmUp() 호출

퍼지 검색 랭킹 개선 (Feature 3):
- Services/UsageRankingService.cs 전면 개선: 기존 int 횟수 → UsageRecord{Count, LastUsedMs}
- GetScore() 반환형 int → double, 30일 반감기 지수 감쇠(decay=exp(-days/43.3)) 적용
- 구형 usage.json 자동 마이그레이션 (count만 있는 형식 → 신규 형식)
- GetTopItems() / SortByUsage() 점수 기준 정렬로 업데이트

미리보기 패널 (Feature 4):
- ViewModels/LauncherViewModel.cs: PreviewText, HasPreview 프로퍼티 + UpdatePreviewAsync()
  클립보드 텍스트(최대 400자) 및 텍스트 파일(최초 6줄) 미리보기, 80ms 디바운스
- Views/LauncherWindow.xaml: RowDefinitions 7→8개, Row5에 PreviewPanel Border 삽입,
  IndexStatusText Row5→6, WidgetBar Row6→7, ToastOverlay RowSpan 3→4

빌드: 경고 0, 오류 0
2026-04-04 17:38:12 +09:00
a53eecbc77 [Roadmap] 런처 고도화 계획 재수립 — 경쟁 서비스 벤치마킹 기반
문제 인식:
- 예약어가 110개 이상으로 증가하면서 특정 도구(pip/conda/k8s/cargo) 의존
  핸들러가 추가되어 보편적 실용성 저하

벤치마킹 추가 (Raycast·Alfred·Flow·Listary·PowerToys):
- 6×6 기능 매트릭스 — 플랫폼·AI·클립보드·북마크·볼륨·QR 등 비교
- 핵심 공백 분석 — "매일 50회 이상 사용" 기준 우선순위 도출
  1위: 브라우저 북마크 검색 (Raycast·Alfred·Flow 공통)
  2위: 시스템 볼륨 제어 (Raycast·Alfred 공통)
  3위: QR 코드 생성
  4위: 회의 링크 빠른 열기

Phase L23 전면 교체:
- 기존: k8s·gh·choco·cmp (DevOps 한정, 수요층 좁음) → 취소
- 신규: vol·bmark·qr·meet (모든 사용자 대상, 인터넷 불필요)

Phase L24 신설: bright·파일아이콘·퍼지검색 개선·focus
Phase L25 신설: 미리보기 패널·클립보드 이미지·창 위치 기억·핫키 확장

핸들러 추가 기준(체크리스트) 추가:
- 설치 의존성 없음·인터넷 불필요·매일 사용·경쟁사 공통·기존 미중복
  5개 기준 중 3개+ 충족 시에만 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 17:05:26 +09:00
684e1abf5e [Phase L22] proc·xl·pip·form 핸들러 4종 추가
예약어 실용성 검토 결과: 사무 환경과 무관한 geo(좌표계산)·cargo(Rust)
→ xl(Excel 함수)·form(업무 양식)으로 교체.

ProcHandler.cs (170줄):
- proc 프리픽스. 프로세스 상세 조회·정리
- proc top/mem: CPU·메모리 상위 15개 정렬
- proc <이름>: 부분 이름 검색
- proc kill <이름>: 프로세스 종료
- proc stats: 전체 통계 (수·메모리 합)
- Enter → 프로세스명 복사

XlHandler.cs (190줄):
- xl 프리픽스. Excel 함수 레퍼런스
- 8개 카테고리(lookup·if·sum·count·text·date·math·stat), 80개+ 함수
- 함수명·문법·설명 내장. 카테고리 조회·키워드 검색
- Enter → 함수명 복사

PipHandler.cs (175줄):
- pip 프리픽스. Python pip 명령 생성기
- install·uninstall·list·venv·conda 5개 카테고리, 35개+ 명령
- pip2/pip3 동시 표시. conda 환경 관리 포함
- Enter → pip3 명령 복사

FormHandler.cs (395줄):
- form 프리픽스. 업무 양식·문서 구조 템플릿
- meeting·report·email·project·review·onboard 6개 카테고리, 13개 양식
- 회의록·주간보고·이메일(요청/사과/공지)·프로젝트계획서·자기평가서·코드리뷰·온보딩
- 오늘 날짜 자동 삽입. Enter → 양식 전체 클립보드 복사

App.xaml.cs: L22 핸들러 4종 등록
LAUNCHER_ROADMAP.md: L22 계획 →  완료, 변경 사유 기록
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 16:56:37 +09:00
d6c7f65d6c [Phase L21] TOML·Log·PS·Key 핸들러 4종 추가 + L21~L23 로드맵 계획 수립
TomlHandler (prefix=toml, 290줄, partial class):
- 외부 라이브러리 없는 경량 TOML 파서
- [section]/[[array-of-tables]] 파싱, 스칼라(bool/int/float/string)/배열/인라인 테이블
- toml validate·keys·sections·get <key.path>·stats·flat 서브커맨드
- 점 표기법 경로 조회(GetByPath), 재귀 평탄화(FlattenTable)
- CS8602 null 경고 수정(table![s] 명시)

LogHandler (prefix=log, 290줄, partial class):
- ERROR/WARN/INFO/DEBUG 레벨 자동 감지(키워드 기반)
- 클립보드 자동 읽기 또는 log <파일경로> 직접 입력
- error·warn·info·debug·last <n>·head <n>·grep <키워드>·stats·exceptions·today 서브커맨드
- 날짜별 분포 통계(yyyy-MM-dd 패턴), 스택트레이스 블록 추출
- [GeneratedRegex] DatePattern, using System.Text 누락 수정

PsHandler (prefix=ps, 200줄):
- 68개 PowerShell 명령 내장(file/process/service/network/registry/string/date/pipe 8개 카테고리)
- ps <카테고리> 전체 목록, ps <키워드> 전체 검색
- ps run <명령> → Windows Terminal / PowerShell 터미널 직접 실행
- Enter 클립보드 복사, 카테고리 오버뷰 표시

KeyHandler (prefix=key, 190줄):
- Windows(26개)·VS Code(29개)·Chrome/Edge(22개)·Vim(23개)·Excel(20개)·Windows Terminal(13개)
- 총 133개 단축키 내장
- key <앱> 카테고리 조회, key <키워드> 전체 앱 통합 검색
- Enter → 단축키 클립보드 복사

LAUNCHER_ROADMAP.md:
- Phase L21~L23 계획 추가(L22: proc·geo·cargo·pip, L23: k8s·gh·choco·cmp)
- L21 모든 항목  완료 표시

- 빌드: 경고 0, 오류 0
2026-04-04 16:46:14 +09:00
5c6a1b645d [Phase L20] Hex·Rand·Str·Perm 핸들러 4종 추가
HexHandler (prefix=hex, 235줄):
- 텍스트→hex 변환(공백·소문자·0x접두사·Base64)
- 순수 hex 문자열→UTF-8/ASCII 자동 디코딩·정수 해석(big-endian)
- hex dump: 오프셋+hex+ASCII 16바이트 단위 덤프
- 0xFF 단일 값→10진/8진/이진/ASCII/NOT 변환
- add/xor/and/or/not 비트 연산
- bytes <n> KB/KiB/MB/MiB/GB/GiB 크기 단위 변환
- CS1631 catch-yield 패턴(parseError 변수 분리) 적용

RandHandler (prefix=rand, 220줄):
- rand / rand <max> / rand <min> <max> 숫자 생성
- rand str [len] [charset]: alpha/num/alnum/hex/special 문자셋
- rand color: HEX+RGB+HSL 랜덤 색상 5개
- rand dice [NdS]: 다면체 주사위, 합계·상세·최솟값·최댓값
- rand coin: 동전 던지기 + 연속 5회
- rand pick/shuffle: 항목 선택·피셔-예이츠 셔플
- rand uuid: Guid.NewGuid() UUID v4
- rand token: RandomNumberGenerator 보안 토큰(hex+Base64)
- rand pin [len]: PIN 번호 생성

StrHandler (prefix=str, 295줄, partial class):
- escape/unescape: HTML·URL·JSON·Regex 이스케이프 변환
- repeat <n> [sep]: 텍스트 반복
- pad <w> [side] [char]: 좌/우/양쪽 패딩
- wrap <cols>: 단어 단위 줄바꿈
- sort [desc]: 줄 정렬
- unique: 중복 줄 제거
- join/split: 구분자 변환
- replace <from> <to>: 텍스트 치환
- extract email/url/number/ip: [GeneratedRegex] 패턴 추출
- lines: 줄·단어·문자·바이트 통계

PermHandler (prefix=perm, 265줄):
- 8진수(755)→기호(rwxr-xr-x)·상세 설명·용도·관련 권한
- 기호→8진수 역변환
- +x/-x/+w/-w/+r/-r 비트 수정 연산
- umask 022 → 파일/디렉토리 기본 권한 계산
- common: 14가지 자주 쓰는 권한 전체 목록
- CS8361 삼항연산자 보간 괄호 수정

- 빌드: 경고 0, 오류 0
2026-04-04 16:34:06 +09:00
498ae50785 [Phase L19] Calc·Timer·IP·NPM 핸들러 4종 추가
CalcHandler (prefix=calc, 170줄):
- 삼각함수: sin·cos·tan·asin·acos·atan (도/라디안 변환 포함)
- 지수·로그: sqrt·cbrt·log·log2·ln·exp·pow
- 정수 연산: factorial(0~20)·GCD·LCM·mod
- 기타: abs·ceil·floor·round·sign·deg·rad·상수(π·e·φ)
- 결과에 과학적 표기법·log₁₀ 부가정보 동시 표시

TimerHandler (prefix=timer, 215줄):
- 파싱 형식: 30(초)·5m(분)·1h30m(복합) 지원
- 정적 레지스트리로 복수 타이머 동시 운영 (ID 기반 취소)
- Task.Delay 백그라운드 + NotificationService.Notify 완료 알림
- timer stop / timer stop <id> 취소 명령
- Lock→object 수정 (.NET 8 호환)

IpInfoHandler (prefix=ip, 260줄):
- ip my: NetworkInterface 전 어댑터 IPv4·마스크·게이트웨이
- ip <addr>: 분류(사설/공인/루프백/APIPA/멀티캐스트)·클래스 A~E·이진·16진·정수
- ip <addr>/prefix: CIDR 네트워크·브로드캐스트·와일드카드·호스트 범위·수
- ip range <s> <e>: IP 범위 계산
- ip bin/hex/int/from 변환 서브커맨드

NpmHandler (prefix=npm, 285줄):
- init·install·uninstall·run·build·test·update·list·audit·publish
- scripts·global·clean·ci·lock 서브커맨드
- npm/yarn/pnpm 3종 동등 명령 동시 표시
- devDependencies·전역 설치 옵션 분리 표시

- 빌드: 경고 0, 오류 0
2026-04-04 16:24:36 +09:00
e0548c52a9 [Phase L18] SQL포맷·TextCase·Aspect·Abbr 핸들러 4종 추가
SqlHandler.cs (신규, ~280줄, prefix=sql, partial class):
- Keywords[]: 50+ SQL 키워드 + NewlineKeywords HashSet
- Format(): Tokenize() 기반 키워드·괄호·쉼표 들여쓰기 포맷
- Minify(): 공백·괄호 주변 최소화
- TransformKeywords(): 키워드 대소문자 일괄 변환
- BuildStatsItems(): DML유형·테이블·JOIN·WHERE·서브쿼리 분석
- ExtractTables(): FROM/JOIN 테이블 추출 (TableRegex)
- sql select <table>: SELECT 쿼리 템플릿 생성
- [GeneratedRegex]: Whitespace/SpaceAroundParens/Table/SelectCols

TextCaseHandler.cs (신규, ~220줄, prefix=text, partial class):
- CaseItem record: Name/Key/Func<string,string> 13가지 케이스
- Tokenize(): CamelBoundaryRegex + SeparatorRegex 단어 분리
- ToCamel/ToPascal/ToSnake/ToConst/ToKebab/ToDot 구현
- ToSlug(): NormalizationForm.FormD → ASCII 변환 + NonSlugRegex
- 인라인 입력: text camel hello world → helloWorld
- 특정 케이스 선택 시 다른 케이스도 함께 표시

AspectHandler.cs (신규, ~260줄, prefix=aspect):
- AspectPreset record: Ratio/Name/(W,H)[] 9개 프리셋
- BuildFromResolution(): GCD 약분 비율 + 배율별 해상도
- BuildFromRatio(): 프리셋 매칭 또는 기준 너비 5개 계산
- BuildFromRatioAndDim(): 너비/높이 단방향 계산
- BuildCropItems(): 크롭 방향 판별 + FFmpeg crop 파라미터
- TryParseRatio(): :·/ 구분자 + 소수 비율 지원
- Gcd(): 재귀 최대공약수

AbbrHandler.cs (신규, ~260줄, prefix=abbr):
- AbbrEntry record: Short/Full/Description/Category
- 150+개 내장 약어 (웹/개발/DB/보안/클라우드/AI/데이터형식/협업)
- 정확 일치 1개: 약어·원문·설명·카테고리 상세 표시
- 부분 일치: 목록 표시 (Short·Full·Description 검색)
- 카테고리명 직접 입력 → 해당 카테고리 전체 목록

App.xaml.cs (수정): Phase L18 핸들러 4종 RegisterHandler 추가
docs/LAUNCHER_ROADMAP.md (수정): Phase L18 섹션 추가 ( 완료)
빌드: 경고 0, 오류 0
2026-04-04 16:15:13 +09:00
7f897d6851 [Phase L17] 단위변환·숫자읽기·YAML·Gitignore 핸들러 4종 추가
UnitHandler.cs (신규, ~230줄, prefix=unit):
- 길이/무게/온도/넓이/속도/데이터/압력/부피 8개 카테고리 50+ UnitDef
- UnitDef record: Names[]/ToBase/Cat/Display 구조
- Convert(): 선형 변환 (value × from.ToBase / to.ToBase)
- ConvertTemp(): 비선형 온도 변환 (°C 경유 중간 변환)
- FindUnit(): Names[] 배열에서 대소문자 무시 검색
- 대상 단위 생략 시 같은 Cat 전체 일괄 변환
- FormatNum(): 과학표기/정수/소수 자동 포맷

NumHandler.cs (신규, ~200줄, prefix=num):
- TryParseNumber(): 0x/0b/0o 접두사 + double 자동 파싱
- ToKorean() + KoNumber(): 조·억·만 재귀 분해 한국어 읽기
- ToKoreanUnit(): 만·억·조 단위 숫자 축약
- ToEnglish() + EnNumber(): 영어 읽기 (billion/million/thousand)
- ToRoman(): 1~3999 로마 숫자 변환
- Convert.ToString(lv, 2/8): 2·8진수 변환

YamlHandler.cs (신규, ~290줄, prefix=yaml, partial class):
- ParseYaml() + ParseBlock(): 외부 라이브러리 없이 경량 YAML 파서
- ParseScalar(): true/false/null/숫자/문자열 타입 자동 감지
- GetByPath(): 점 표기법 재귀 경로 조회
- Flatten(): 중첩 객체/배열 → key.sub[0]: value 평탄화
- CountKeys(): 재귀 키 수 집계
- [GeneratedRegex] KeyLineRegex 소스 생성기 사용

GitignoreHandler.cs (신규, ~280줄, prefix=gitignore):
- 14개 내장 템플릿: node/python/csharp/java/go/rust/react/flutter
  /android/ios/unity/windows/macos/linux
- 별칭 배열: nodejs, dotnet, net, maven, cargo, nextjs, swift 등
- 여러 키워드 입력 시 병합 (# ===== 섹션 구분)
- FindTemplate(): 직접키 → 별칭 → 부분일치 순서 탐색
- 미리보기 12줄 표시 + 전체 복사

App.xaml.cs (수정): Phase L17 핸들러 4종 RegisterHandler 추가
docs/LAUNCHER_ROADMAP.md (수정): Phase L17 섹션 추가 ( 완료)
빌드: 경고 0, 오류 0
2026-04-04 15:56:40 +09:00
59c70058c5 [Phase L16] ping·Docker·Todo·Table 핸들러 4종 추가
PingHandler.cs (신규, ~230줄, prefix=ping):
- 입력 즉시 Ping 클래스로 1회 ping 시도 → 응답 ms 즉시 표시
- ping trace/tracert: Windows Terminal 우선 실행
- ping local: NetworkInterface.GetAllNetworkInterfaces() 어댑터 정보
- ping scan <대역>: PowerShell 1..254 스캔 스크립트 실행
- CheckInternalMode(): 사내 모드에서 외부 도메인 차단
- FindExe(): PATH에서 wt.exe 검색

DockerHandler.cs (신규, ~290줄, prefix=docker):
- IsDockerAvailable(): docker version 종료 코드로 설치 여부 확인
- GetContainers(): docker ps --format 탭 구분 파싱
- GetImages(): docker images --format 파싱
- docker stop/start: 터미널 없이 RunDockerSilent() 실행
- docker logs: -f (follow) 모드로 터미널 실행
- docker shell: exec -it sh 접속
- 이름 키워드 검색 지원

TodoHandler.cs (신규, ~220줄, prefix=todo):
- TodoItem record: JsonPropertyName 직렬화 (id/text/done/at)
- LoadTodos/SaveTodos: %APPDATA%\AxCopilot\todos.json
- done/toggle: with 표현식으로 불변 record 업데이트
- clear_done / clear_all 별도 처리
- 번호만 입력 시 빠른 완료 토글 단축
- 검색 + 새 항목 추가 동시 표시

TableHandler.cs (신규, ~280줄, prefix=table):
- ParseTable(): 탭·쉼표·공백 구분자 자동 감지
- ParseCsvLine(): RFC 4180 따옴표 처리
- ToMarkdown(): 열별 PadRight 정렬 마크다운 표
- ToCsv(): 특수문자 포함 셀 따옴표 처리
- ToHtml(): thead/tbody/th/td HTML 테이블 생성
- Transpose(): 행·열 전치
- SortByColumn(): double.TryParse 숫자/문자 자동 감지 정렬
- CS0136 수정: rows → previewRows (바깥 스코프 변수명 충돌 해결)

App.xaml.cs (수정): Phase L16 핸들러 4종 RegisterHandler 추가
docs/LAUNCHER_ROADMAP.md (수정): Phase L16 섹션 추가 ( 완료)
빌드: 경고 0, 오류 0
2026-04-04 15:49:37 +09:00
bf0a1dce74 [Phase L15] WSL·환율·BMI·Markdown 핸들러 4종 추가
WslHandler.cs (신규, ~275줄, prefix=wsl):
- wsl --list --verbose 서브프로세스 기반 distro 목록 (Encoding.Unicode)
- 상태별 아이콘: Running=\uE768, Stopped=\uE756
- 서브커맨드: stop [all/distro] · default <distro> · 이름 검색 실행
- wt.exe(Windows Terminal) 우선 실행, 없으면 UseShellExecute 폴백
- Data 튜플: launch / shutdown / terminate / set_default

CurrencyHandler.cs (신규, ~185줄, prefix=currency):
- KRW/USD/EUR/JPY/CNY/GBP/HKD/TWD/SGD/AUD/CAD/CHF/MYR/THB/VND 15개 통화 내장
- currency 100 usd → KRW 환산, currency 100 usd eur → 크로스 환산
- 한글 별칭(달러/엔/위안/유로 등) 지원
- currency rates → 전체 환율표
- JPY/KRW/VND 소수점 0자리, 기타 2자리 포맷

BmiHandler.cs (신규, ~210줄, prefix=bmi):
- bmi 170 65 → BMI 지수 + WHO 아시아태평양 기준 판정 + 적정 체중
- bmi 170 65 30 m → Harris-Benedict 기초대사량 + 5단계 활동 칼로리
- bmi ideal 170 → 키 기준 정상/과체중/비만 체중 범위 계산
- GetGrade(): 저체중/정상/과체중/비만1단계/비만2단계 switch expression

MdHandler.cs (신규, ~280줄, prefix=md, partial class):
- 클립보드 Markdown 자동 읽기 (ContainsText/GetText)
- md toc: 앵커 생성 포함 TOC 목차 생성
- md strip: Regex 기반 마크다운 기호 완전 제거 → 순수 텍스트
- md count: 줄/단어/문자/제목/코드블록/목록/링크/이미지/볼드 통계
- md links / md images: URL 목록 추출
- [GeneratedRegex] 소스 생성기 활용 (partial class 필수)

App.xaml.cs (수정): Phase L15 핸들러 4종 RegisterHandler 추가
docs/LAUNCHER_ROADMAP.md (수정): Phase L15 섹션 추가 ( 완료)
빌드: 경고 0, 오류 0
2026-04-04 15:05:45 +09:00
f9c4bc0122 [Phase L14] 네트워크·계산·시스템 도구 핸들러 4종 추가
WolHandler.cs (신규, ~200줄, prefix=wol):
- MAC 파싱: :/- 구분자 제거 후 12자리 hex → byte[6]
- 매직 패킷: 0xFF×6 + MAC×16 = 102바이트 UDP 브로드캐스트
- 포트 9 + 7 동시 전송, UdpClient.EnableBroadcast=true
- wol_hosts.json 영속 스토리지: save/delete 서브커맨드
- 저장된 호스트 목록 Enter → 즉시 전송

RegHandler.cs (신규, ~185줄, prefix=reg):
- HKCU/HKLM/HKCR/HKU/HKCC 5개 하이브 지원
- RegistryKey.OpenSubKey 오류를 변수로 분리 (CS1631 회피)
- 값 타입별 포맷: string/int/long/byte[]/string[] 각각 처리
- 9개 즐겨찾기(Run/Uninstall/Environment/Explorer) 빠른 접근
- 조회 전용 — OpenSubKey(writable: false)

TipHandler.cs (신규, ~200줄, prefix=tip):
- decimal 타입으로 금액 계산 (부동소수점 오차 없음)
- 기본 모드: 10/15/18/20/25% 5종 팁 동시 표시
- off: 할인가 + 5~50% 비교, vat: 포함/역산 동시 계산
- 100원 단위 올림: Math.Ceiling(perPerson / 100) * 100
- 쉼표/원 제거 파싱으로 "50,000원" 형식 지원

FontHandler.cs (신규, ~100줄, prefix=font):
- Fonts.SystemFontFamilies WPF API (PresentationCore)
- static List<string>? _fontCache + lock 객체로 스레드 안전 캐시
- 전체 폰트 알파벳 정렬 후 최초 1회 로드
- 그룹 힌트: 한글/나눔/mono/Arial/Times/Consolas

App.xaml.cs: 4개 핸들러 Phase L14 블록 등록
docs/LAUNCHER_ROADMAP.md: Phase L14 완료 섹션 추가
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 14:55:42 +09:00
e4e5bf7a7a [Phase L13] 시스템 정보·계산 도구 핸들러 4종 추가
DnsQueryHandler.cs (신규, ~200줄, prefix=dns):
- A/AAAA: .NET Dns.GetHostAddressesAsync() 직접 호출
- MX/TXT/NS/CNAME: nslookup 서브프로세스 + 출력 파싱
- PTR: Dns.GetHostEntryAsync()로 역방향 조회
- 사내 모드: 내부 IP(192.168/10/172.16-31) 허용, 외부 차단
- Enter → 비동기 실행, 결과 클립보드 복사 + 알림

PathHandler.cs (신규, ~180줄, prefix=path):
- Environment.GetEnvironmentVariable("PATH", Process/User/Machine)
- Directory.Exists 기반 경로 존재 여부 아이콘 구분
- which: .exe/.cmd/.bat/.ps1/.com 확장자 순서 탐색
- DistinctBy로 중복 경로 제거 (대소문자 무시)

DriveHandler.cs (신규, ~170줄, prefix=drive):
- DriveInfo.GetDrives() + IsReady 체크 + try/catch 방어
- █░ 시각적 사용량 바 (MakeBar 12~20칸 가변)
- TB/GB/MB/KB 자동 단위 포맷
- large 서브커맨드: UsedSpace 내림차순 정렬

AgeHandler.cs (신규, ~230줄, prefix=age):
- YYYYMMDD / YYYY-MM-DD / YYYY.MM.DD 형식 파싱
- 만 나이(생일 미경과 시 -1) + 한국식(연도 차이 +1)
- NextBirthday: 올해 생일 지났으면 내년으로 계산
- christmas/newyear 특수 키워드 Dictionary<string, Func>
- "next monday" 형식 다음 요일 D-day 파싱

App.xaml.cs: 4개 핸들러 Phase L13 블록 등록
docs/LAUNCHER_ROADMAP.md: Phase L13 완료 섹션 추가
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 14:50:39 +09:00
315848f9bc [Phase L12] 시스템·네트워크·텍스트 도구 핸들러 4종 추가
HttpTesterHandler.cs (신규, ~170줄, prefix=http):
- GET/HEAD/POST 등 HttpClient 기반 직접 요청
- http:// 스키마 자동 추가, 3회 리다이렉트, 10초 타임아웃
- 상태 코드·응답 시간·Content-Type·Server 등 주요 헤더 표시
- InternalModeEnabled: 외부 URL 차단, 내부 IP 허용 패턴 정규식
- Enter → 비동기 요청 실행 + 결과 클립보드 복사

HostsHandler.cs (신규, ~220줄, prefix=hosts):
- System32\drivers\etc\hosts RFC 파서 (인라인 주석 처리)
- 활성 항목 / 주석 처리된 IP 항목(비활성) 자동 분류
- search 키워드 필터, open 메모장 실행, copy 전체 내용
- IPAddress.TryParse 기반 유효 IP 항목 판별

MorseHandler.cs (신규, ~200줄, prefix=morse):
- 56자(영문자·숫자·구두점) TextToMorse 정적 딕셔너리
- 역방향 MorseToText 딕셔너리 static 생성자로 자동 구축
- .-/공백 패턴으로 모스 입력 자동 감지
- / 단어 구분자, SOS/AR/AS/BT/KN/SK 프로사인 키워드 지원
- 클립보드 자동 감지 (비어 있으면 도움말 표시)

StartupHandler.cs (신규, ~220줄, prefix=startup):
- HKCU + HKLM Run/RunOnce 6개 레지스트리 키 조회
- 시작 폴더(.lnk) 현재 사용자 + 모든 사용자 통합 수집
- 범위별(현재 사용자/모든 사용자) 그룹화 표시
- search 키워드 필터, folder 폴더 열기 서브커맨드

App.xaml.cs: 4개 핸들러 Phase L12 블록 등록
docs/LAUNCHER_ROADMAP.md: Phase L12 완료 섹션 추가
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 14:45:42 +09:00
2df841be0c [Phase L11] 개발자 데이터 파싱 도구 핸들러 4종 추가
CsvHandler.cs (신규, ~260줄, prefix=csv):
- 클립보드 CSV/TSV 자동 감지 파싱 (쉼표·탭 구분자)
- 행수·열수·헤더 개요 + 첫 번째 행 미리보기
- col N: 지정 컬럼 추출, row N: 지정 행 조회
- stats: 숫자 컬럼 합계·평균·최대·최소 자동 집계
- tsv: CSV → TSV 형식 변환, 따옴표 처리 파서 구현

JwtHandler.cs (신규, ~220줄, prefix=jwt):
- eyJ로 시작하는 JWT 클립보드/인라인 자동 감지
- Base64Url 디코딩으로 헤더·페이로드 JSON 추출
- exp/iat/nbf Unix 타임스탬프 → 날짜 변환 + D-day
- 만료 상태(유효/만료임박/만료됨) 실시간 계산
- header/payload/claims 부분 조회 지원 (서명 검증 미지원)

CronHandler.cs (신규, ~240줄, prefix=cron):
- 5필드 표준 cron: 분·시·일·월·요일 파싱 검증
- *, */N, N-M, N,M,K 패턴 완전 지원
- 한국어 설명 자동 생성 (예: "평일 오전 9시 실행")
- DateTime 반복 매칭으로 다음 5회 실행 시간 계산
- @daily/@weekly/@monthly/@hourly 특수 키워드 확장

UnicodeHandler.cs (신규, ~270줄, prefix=unicode):
- 문자/U+XXXX/0xXXXX/10진수 4가지 입력 방식
- UTF-8·UTF-16 LE 바이트, HTML 엔티티(십진/16진)
- UnicodeCategory 분류 한국어 레이블 매핑
- 25개 유니코드 블록 범위 테이블
- 한글 음절(AC00~D7A3) 초·중·종성 자동 분해
- 인라인 보간 삼항연산자 괄호 필수 (CS8361 수정)

App.xaml.cs: 4개 핸들러 Phase L11 블록 등록
docs/LAUNCHER_ROADMAP.md: Phase L11 완료 섹션 추가
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 14:40:06 +09:00
678feaadc9 [Phase L10] 텍스트·데이터·개발 유틸리티 핸들러 4종 추가
XmlHandler.cs (신규, ~290줄, prefix=xml):
- 클립보드/인라인 XML 자동 포맷(들여쓰기 2칸)
- compact/minify: 공백 제거 압축, validate: 줄·열 오류 표시
- xpath //path: XPathDocument 기반 최대 20건 쿼리
- attr: XmlDocument 전체 속성 추출
- yield return → 리스트 방식으로 수정 (CS1631/CS1626 해결)

UuidHandler.cs (신규, ~210줄, prefix=uuid):
- Guid.NewGuid() v4 기본 + N개 일괄 생성
- seq: UUIDv7 스타일(상위 48비트=Unix ms 타임스탬프, 하위=랜덤)
- short: RandomNumberGenerator 4바이트 hex 짧은 ID
- upper: 대문자 UUID, nil: 00000000-… Nil UUID
- parse: 버전·변형·v1 타임스탬프 복원 분석

CertHandler.cs (신규, ~200줄, prefix=cert):
- TcpClient + SslStream으로 TLS 인증서 직접 조회
- 만료일·D-day·발급 대상·발급 기관·SANs·지문(SHA1) 표시
- 사내 모드: 내부 호스트(192.168/10/172.16-31)만 허용
- https:// URL 형식, 포트 지정(cert domain.com 8443) 지원

LoremHandler.cs (신규, ~230줄, prefix=lorem):
- 113단어 Lorem Ipsum 풀 + 82단어 한국어 더미 풀
- lorem N: N단락, words N: 단어, sentences N: 문장 모드
- ko: 한국어 문장 구조(시작어+본문+결말) 조합
- email N: 더미 이메일, name N: 한국어 성+이름 조합

App.xaml.cs: 4개 핸들러 Phase L10 블록 등록
docs/LAUNCHER_ROADMAP.md: Phase L10 완료 섹션 추가
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 14:28:52 +09:00
f977037ca6 [Phase L9] 보안·네트워크·시스템 유틸리티 핸들러 4종 추가
PasswordGenHandler.cs (신규, ~220줄, prefix=pwd):
- 암호학적 난수(RandomNumberGenerator.GetInt32) 기반 비밀번호 생성
- 강도별 옵션: 대소문자+숫자+특수문자 강제 포함 (strong 기본)
- 패스프레이즈 모드: 48단어 사전 + 구분자 + 4자리 숫자
- 엔트로피 추정(log2) + 강도 레이블(보통/강함/매우강함/최강)

SubnetHandler.cs (신규, ~260줄, prefix=subnet):
- CIDR 형식(IP/prefix) 및 공백 구분(IP prefix) 파싱
- 서브넷 마스크 → CIDR 역변환, 이진 표현 표시
- range 서브커맨드: 192.168.1.10-50 형식 IP 범위 계산
- uint 비트 연산으로 네트워크·브로드캐스트·호스트 범위 계산

CleanHandler.cs (신규, ~260줄, prefix=clean):
- SHEmptyRecycleBin P/Invoke (shell32.dll, flags 0x07)
- temp/recycle/downloads/logs/all 서브커맨드
- 정리 전 용량 예상 표시, 개별 파일 삭제 오류 무시

BaseConvertHandler.cs (신규, ~230줄, prefix=base):
- 0x/0b/0o 프리픽스 자동 감지 파싱
- 2/8/10/16진수 동시 변환 + 4비트 그룹 이진 표시
- ASCII 모드: 숫자→문자, 문자→코드 양방향 변환
- base N to hex/bin/oct/dec 타겟 지정 변환

App.xaml.cs: 4개 핸들러 RegisterHandler 등록
docs/LAUNCHER_ROADMAP.md: Phase L9 완료 섹션 추가
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 14:14:41 +09:00
212ed9519e [Phase L8] 파일·시스템 유틸리티 핸들러 4종 추가
FileHashHandler.cs (200줄, prefix=hash):
- MD5/SHA1/SHA256/SHA512 비동기 해시 계산
- 클립보드 파일 경로 자동 감지
- hash check <기대값>으로 클립보드 해시 비교

ZipHandler.cs (260줄, prefix=zip):
- System.IO.Compression 기반 목록·추출·압축
- zip list: 파일 목록 미리보기 (최대 20개)
- zip extract: 동일/지정 폴더 압축 해제
- zip folder: 폴더→zip 압축

EventLogHandler.cs (165줄, prefix=evt):
- System+Application 로그 최근 24시간 조회
- evt error/warn/app/sys/<키워드> 필터
- InstanceId 기반 (EventID deprecated 경고 수정)
- 이벤트 상세 클립보드 복사

SshHandler.cs (270줄, prefix=ssh):
- SshHostEntry 모델 + AppSettings.SshHosts 영속화
- ssh add user@host[:port], ssh del <이름>
- Windows Terminal/PuTTY/PowerShell 순 폴백 연결
- 직접 user@host 입력 즉시 연결 지원

AppSettings.Models.cs: SshHostEntry 클래스 추가
AppSettings.cs: SshHosts 프로퍼티 추가
App.xaml.cs: Phase L8 핸들러 4종 등록
docs/LAUNCHER_ROADMAP.md: Phase L8 섹션 추가 

빌드: 경고 0, 오류 0
2026-04-04 14:06:24 +09:00
7ca34d2ef4 [Phase L7] 런처 개발자·글로벌 도구 4종 추가
GitHandler.cs (210줄, prefix=git):
- git status/log/branch/stash/diff/pull 서브커맨드
- 작업 폴더에서 .git 루트 자동 탐색 (상위 디렉토리 재귀)
- 비동기 Process 실행 + 출력 클립보드 복사
- pull은 별도 PowerShell 터미널로 실행

RegexHandler.cs (310줄, prefix=re):
- 클립보드 텍스트에 패턴 적용, 매치 목록 LauncherItem 표시
- /old/new/ 치환 모드, flags:im 플래그 지정
- re patterns: 이메일/URL/전화/날짜/IP/UUID 등 14종 라이브러리

TimeZoneHandler.cs (220줄, prefix=tz):
- 15개 주요 도시 현재 시각 실시간 표시
- tz <도시>, tz HH:mm to <도시>, tz meeting HH:mm 모드
- TimeZoneInfo 기반 UTC 오프셋 계산

NetDiagHandler.cs (260줄, prefix=net):
- 로컬 어댑터 IP/MAC 즉시 표시
- net ping (4회, 사내 모드 내부 호스트 제한)
- net dns A 레코드 조회 (사외 모드에서 외부 도메인)
- InternalModeEnabled 사내/사외 모드 연동

App.xaml.cs: Phase L7 핸들러 4종 등록
docs/LAUNCHER_ROADMAP.md: Phase L7 섹션 추가 

빌드: 경고 0, 오류 0
2026-04-04 13:48:53 +09:00
7671e01a9e [Docs] Phase L6·17-C 완료 이력 반영 및 문서 갱신
AGENT_ROADMAP.md:
- Group C에 17-C5  항목 추가: PreSkillExecute/PostSkillExecute/CwdChanged 훅, AgentSettingsPanel 훅 UI

DEVELOPMENT.md (v2.0.0):
- Phase 17-C 설명에 누락 이벤트 완성 내용 추가
- 신규 파일 목록에 Phase L6-2/L6-3/L6-4 파일 추가
2026-04-04 13:35:49 +09:00
d6f1e85cec [Phase 17-C] 훅 이벤트 시스템 확장 및 AgentSettingsPanel 훅 UI
AgentLoopService.Skills.cs:
- RunSkillInForkAsync에 PreSkillExecute 훅 발화 추가 (LLM 호출 직전)
- RunSkillInForkAsync에 PostSkillExecute 훅 발화 추가 (응답 수신 후, fire-and-forget)

ChatWindow.WorkFolder.cs:
- SetWorkFolder()에 CwdChanged 훅 발화 추가 (작업 폴더 변경 시, fire-and-forget)
- toolInput=path로 변경된 경로 훅 컨텍스트에 전달

ChatWindow.SlashCommands.cs:
- InjectSlashCommand() 수정: 잘못된 ResolveSlashCommand/SendUserMessageAsync 호출 제거
- ShowSlashChip + SendMessageAsync 올바른 패턴으로 교체 (빌드 오류 4개 수정)

AgentSettingsPanel.xaml / .xaml.cs:
- 훅 이벤트 섹션 추가: ChkExtendedHooks 토글, HookSummaryText, BtnViewHooks, BtnOpenHookSettings
- RefreshHookSummary(): 이벤트 종류별 활성 훅 수 집계 표시
- BtnViewHooks_Click → InjectSlashCommand("/hooks") 연동
- BtnOpenHookSettings_Click → settings.dat 기본 편집기로 열기

빌드: 경고 0, 오류 0
2026-04-04 13:34:36 +09:00
dab633edd5 [Phase L6] 런처 워크플로우 자동화 확장 완료
MacroEntry/MacroStep 모델 (AppSettings.Models.cs):
- MacroEntry: Id, Name, Description, Steps, CreatedAt
- MacroStep: Type(app/url/folder/notification/cmd), Target, Args, Label, DelayMs
- AppSettings.Macros List<MacroEntry> 추가

Handlers/MacroHandler.cs (170줄 신규):
- prefix=macro, 서브커맨드: new/edit/del/play
- 목록: 단계 미리보기(최대 3단계) 표시
- 재생: Process.Start + 알림 + PowerShell 순서 실행

Views/MacroEditorWindow.xaml (135줄 신규):
- 이름/설명 입력, 열 헤더(유형/대상/표시이름/딜레이)
- 동적 행 ScrollViewer + 하단 단계 추가/저장 버튼

Views/MacroEditorWindow.xaml.cs (230줄 신규):
- StepRowUi 내부 클래스: Grid+TypeButton+TargetBox+LabelBox+DelayBox
- 공유 Popup 타입 선택기(5종): PlacementTarget 동적 설정
- BtnSave: 빈 Target 행 필터링 후 MacroEntry 저장

Handlers/ContextHandler.cs (185줄 신규):
- prefix=ctx, GetForegroundWindow P/Invoke 프로세스 감지
- 5개 컨텍스트 규칙(웹/코드/오피스/탐색기/커뮤니케이션) → 상황별 제안
- Enter 시 Views.LauncherWindow.SetInputText(prefix) 호출

ScheduleEntry 조건 필드 (AppSettings.Models.cs):
- ConditionProcess: 프로세스 이름 (비어있으면 조건 없음)
- ConditionProcessMustRun: true=실행중, false=비실행중

Services/SchedulerService.cs:
- ShouldFire() 확장: Process.GetProcessesByName() 조건 체크

Views/ScheduleEditorWindow.xaml / .cs:
- 조건 섹션 UI: 프로세스명 TextBox + 실행중/비실행중 세그먼트
- LoadFromEntry/BtnSave_Click 조건 필드 연동

App.xaml.cs:
- Phase L6-2 MacroHandler(settings) 등록
- Phase L6-3 ContextHandler() 등록

docs/LAUNCHER_ROADMAP.md:
- Phase L6 섹션 추가 (L6-1~4 전체 )

빌드: 경고 0, 오류 0
2026-04-04 13:24:41 +09:00
e92800165d [Phase L5-6] 자동화 스케줄러 구현 완료
ScheduleEntry 모델 (AppSettings.Models.cs):
- Id(8자 GUID), Name, Enabled, TriggerType(daily/weekdays/weekly/once)
- TriggerTime(HH:mm), WeekDays(List<int>), TriggerDate(nullable), LastRun(nullable)
- ActionType(app/notification), ActionTarget, ActionArgs

AppSettings.cs:
- [JsonPropertyName("schedules")] public List<ScheduleEntry> Schedules 추가

Services/SchedulerService.cs (197줄 신규):
- System.Threading.Timer 30초 간격 백그라운드 체크
- ShouldFire(): ±1분 윈도우, LastRun.Date == today 중복 방지, once 자동 비활성화
- ExecuteAction(): 앱 실행(ProcessStartInfo) / 알림(NotificationService.Notify)
- ComputeNextRun(): 다음 실행 예정 시각 계산 (핸들러·편집기 공유)
- TriggerLabel(): 트리거 유형 표시명 반환

Handlers/ScheduleHandler.cs (171줄 신규):
- prefix="sched", 서브커맨드: new / edit 이름 / del 이름
- 목록: 트리거 라벨·시각·액션 아이콘·다음 실행 시각 표시
- Enter: 활성/비활성 토글 + 저장

Views/ScheduleEditorWindow.xaml (307줄 신규):
- 트리거 유형 4-세그먼트(매일/주중/매주/한번), 요일 7버튼, 날짜 입력
- 액션 2-세그먼트(앱 실행/알림), 앱 경로+찾아보기+인자, 알림 메시지
- 활성화 ToggleSwitch, 저장/취소 하단바

Views/ScheduleEditorWindow.xaml.cs (230줄 신규):
- OnLoaded에서 기존 항목 로드 (편집) 또는 기본값 초기화
- SetTriggerUi(): 세그먼트 색상·WeekDaysPanel/DatePanel 표시 전환
- WeekDay_Click/SetDaySelected(): 요일 다중 토글
- SetActionUi(): 앱경로 패널 / 알림 패널 전환
- BtnSave_Click(): HH:mm 파싱 + 날짜 검증 + ScheduleEntry 생성·수정 저장

App.xaml.cs:
- _schedulerService 필드 + Phase L5-6 등록 블록 추가
- schedulerService.Start() 호출

docs/LAUNCHER_ROADMAP.md:
- L5-6  완료 표시 + 구현 내용 상세 기록

빌드: 경고 0, 오류 0
2026-04-04 13:07:12 +09:00
2d3e5f6a72 [Phase L5-4] 앱 세션 스냅 (session) 구현
AppSettings.Models.cs (수정):
- AppSession 클래스 신규: Name/Description/Apps/CreatedAt
- SessionApp 클래스 신규: Path/Arguments/Label/SnapPosition/DelayMs
- 스냅 위치 14종: full/left/right/tl~br/center/third-l/c/r/two3-l/r/none

AppSettings.cs (수정):
- [JsonPropertyName("appSessions")] AppSessions 리스트 추가

SessionHandler.cs (신규, ~160줄):
- prefix="session", GetItemsAsync: 목록+필터, new/edit/del 서브커맨드
- ExecuteAsync: 편집기 열기 또는 LaunchSessionAsync 실행
- LaunchSessionAsync: Process.Start → 창 핸들 대기(최대 6초 폴링) → ApplySnapToWindow
- ApplySnapToWindow: P/Invoke(SetWindowPos, ShowWindow, MonitorFromWindow, GetMonitorInfo) + 14종 스냅 좌표 계산

SessionEditorWindow.xaml (신규, ~200줄):
- 타이틀바 + 세션명·설명 TextBox + 앱 목록 영역 + 하단 버튼 바
- SnapPickerPopup: PlacementTarget 코드에서 동적 지정, ContentControl에 StackPanel 14개 옵션

SessionEditorWindow.xaml.cs (신규, ~240줄):
- AppRowUi 내부 모델: Path/Label/SnapPosition/Args/DelayMs + SnapLabelRef 갱신
- BuildRowGrid(): 경로TextBox + 라벨TextBox + 스냅Border(팝업) + 삭제Border
- BtnAddApp: OpenFileDialog → 자동 라벨(파일명)
- BtnSave: 유효 행 필터 → AppSession 구성 → 기존 교체 또는 신규 추가 → Save()

App.xaml.cs (수정):
- Phase L5-4 섹션에 SessionHandler 등록

docs/LAUNCHER_ROADMAP.md (수정):
- L5-4 항목  완료 표시 + 구현 상세 기록

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 12:54:24 +09:00
375ea0566d [Phase L5-5] 배치 파일 이름변경 (batchren) 구현
BatchRenameHandler.cs (신규, ~55줄):
- prefix="batchren" 핸들러, batchren [glob패턴] 으로 파일 미리 로드
- ExecuteAsync: BatchRenameWindow 열기 + 초기 경로 패턴 지정 지원

BatchRenameWindow.xaml (신규, ~380줄):
- 타이틀바(파일 수 배지) + 패턴 입력 영역 + DataGrid 미리보기 + 하단 버튼 바
- 변수 힌트 팝업: {name}/{n}/{n:3}/{date}/{date:format}/{ext}/정규식 설명
- 빈 상태 안내 패널, 드래그 앤 드롭 오버레이
- DataGrid 3열: 원본 파일명 / 새 파일명 / 상태(✓·⚠ 충돌·─)
- 충돌 행: 붉은 배경(#18EF5350) 강조

BatchRenameWindow.xaml.cs (신규, ~280줄):
- RenameEntry (INotifyPropertyChanged): OriginalPath/Name/NewName/HasConflict/StatusText
- ApplyPattern(): {n:자릿수} 패딩, {date:format}, {name}/{ext} 치환, 정규식 /rx/repl/ 모드
- UpdatePreviews(): 전체 패턴 재계산 + 충돌 감지(중복 새 이름 & 기존 파일 존재)
- AddFiles(), BtnAddFolder/Files/RemoveSelected/ClearAll 이벤트
- ExtToggle: 확장자 유지 슬라이드 토글
- BtnModeVar/Regex: 변수 ↔ 정규식 모드 전환 (UI 색상 갱신)
- StartNumberBox: 시작 번호 지정
- 드래그 앤 드롭: 파일/폴더 모두 처리
- BtnApply: File.Move 적용 후 엔트리 경로 갱신, 성공/실패 알림

App.xaml.cs (수정):
- Phase L5 섹션에 BatchRenameHandler 등록

docs/LAUNCHER_ROADMAP.md (수정):
- L5-5 항목  완료 표시 + 구현 상세 기록

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 12:42:24 +09:00
3bfa82c06d [Phase L5-3] QuickLook 인라인 편집 기능 구현
QuickLookWindow.xaml:
- 타이틀바 우측에 ✏ 편집 버튼(BtnEdit) 추가 (텍스트 파일일 때만 Visible)
  - 닫기 버튼과 StackPanel으로 묶음, 호버 시 #28FFFFFF 배경
- TextEditBox (TextBox) 추가 — TextScrollViewer와 동일 위치(Grid.Row=1)
  - Cascadia Code 12px, Border 없음, AcceptsReturn/Tab, 기본 Collapsed
  - TextChanged → TextEditBox_TextChanged 이벤트 연결

QuickLookWindow.xaml.cs:
- 편집 상태 필드: _currentFilePath, _currentFileExt, _isEditMode, _isModified, _suppressTextChanged
- LoadPreview() 수정:
  - _currentFilePath/_currentFileExt 저장
  - TextExts 파일일 때만 BtnEdit.Visibility=Visible
- BtnEdit_Click / BtnEdit_Click → ToggleEditMode()
- TextEditBox_TextChanged → _isModified=true, 파일명에 "● " 마커 추가
- OnKeyDown 확장:
  - 편집 모드: Ctrl+S(저장), Ctrl+E(토글), Esc(미저장 확인)
  - 미리보기 모드: Ctrl+E(편집 모드 진입)
  - BtnClose_Click: 미저장 확인 후 닫기
- EnterEditMode(): 파일 전체 읽기(300줄 제한 없음), TextEditBox 표시, 아이콘→👁, 상태바 힌트
- ExitEditMode(): TextScrollViewer 복원, 아이콘→✏, ReloadPreview() 호출
- SaveEditedFile(): File.WriteAllText(UTF8), ● 마커 제거, 상태바 갱신, 완료 알림
- ReloadPreview(): 저장 후 PreviewText 새로고침 (편집 내용 반영)

HelpDetailWindow.Shortcuts.cs:
- "기타 창" 카테고리에 "Ctrl+E (QuickLook)" 및 "Ctrl+S (QuickLook 편집 중)" 단축키 추가

docs/LAUNCHER_ROADMAP.md:
- L5-3  완료 표시

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 12:25:25 +09:00
ce02343624 [Phase L5-2] OCR 화면 텍스트 추출 기능 구현
OcrHandler.cs 신규 생성 (Handlers/, 220줄):
- prefix="ocr" — "화면 영역 텍스트 추출" / "클립보드 이미지 텍스트 추출" 2가지 옵션
- ExecuteRegionOcrAsync(): 180ms 대기 → 전체 화면 캡처 → RegionSelectWindow 오버레이 → 영역 크롭
- ExecuteClipboardOcrAsync(): 클립보드 BitmapSource → System.Drawing.Bitmap 변환 → OCR
- RunOcrOnBitmapAsync(): Bitmap → 임시 PNG → WinStorageFile → WinBitmapDecoder → WinOcrEngine.RecognizeAsync()
  (기존 ClipboardHistoryService.ImageCache.cs 패턴 재사용, 5,000자 상한)
- HandleOcrResult(): 클립보드 복사 + 런처 입력창 자동 채움 + 완료 알림

App.xaml.cs:
- OcrHandler 등록 (Phase L5-2 주석)

LauncherWindow.Keyboard.cs:
- F4 키: 런처 Hide → OcrHandler.__ocr_region__ 즉시 실행 (백그라운드 Task)

HelpDetailWindow.Shortcuts.cs:
- F4 단축키 항목 추가 (F3 바로 다음, 아이콘 \uE8D2, 색상 #0F766E)

HelpDetailWindow.xaml.cs:
- "런처 탐색" 카테고리에 F4/OCR 항목 추가

Services/L10n.cs:
- Phase L5 신기능 팁 5종 추가 (OCR F4, ocr 예약어, 전용 핫키 설정, hotkey 예약어, OCR 입력창 채움)

docs/LAUNCHER_ROADMAP.md:
- L5-2  완료 표시

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 12:19:13 +09:00
c12e863e3a [Phase L5-1] 항목별 전용 핫키 기능 구현
HotkeyAssignment 모델 추가 (AppSettings.Models.cs):
- Hotkey, Target, Label, Type 필드 (app/url/folder/command)
- AppSettings.CustomHotkeys (List<HotkeyAssignment>) 추가

InputListener.cs 확장 (Core/):
- _customHotkeys 목록 (스레드 안전 lock)
- UpdateCustomHotkeys() 메서드 — 설정 저장 후 즉시 갱신
- CustomHotkeyTriggered 이벤트 (CustomHotkeyEventArgs: Target, Type)
- WH_KEYBOARD_LL 콜백에 전용 핫키 감지 분기 추가

HotkeyHandler.cs 신규 생성 (Handlers/, 140줄):
- prefix="hotkey" — 등록 목록 표시 / 설정 열기
- ExecuteHotkeyTarget() — app/url/folder/command 타입별 실행

App.xaml.cs + App.Settings.cs:
- HotkeyHandler 등록 (Phase L5 주석)
- OnCustomHotkeyTriggered 이벤트 핸들러 연결
- 설정 저장 시 UpdateCustomHotkeys() 호출

SettingsViewModel 3파일 업데이트:
- HotkeyRowModel (Properties.cs): Hotkey/Target/Label/Type + TypeSymbol
- CustomHotkeys ObservableCollection + New* 필드 (Properties.cs)
- AddCustomHotkey() / RemoveCustomHotkey() 메서드 (Methods.cs)
  - HotkeyParser 형식 검증, 중복 핫키 방지
- Load/Save에 CustomHotkeys 매핑 (SettingsViewModel.cs, Methods.cs)

SettingsWindow.xaml + .xaml.cs:
- "전용 핫키" 탭 신규 추가 (배치 명령 탭 다음)
  - 안내 배너, 입력 폼 (핫키 레코더 + 표시이름 + 타입 + 대상)
  - 핫키 목록 (배지 + 타입아이콘 + 이름/경로 + 삭제 버튼)
- HotkeyRecord_Click: 클릭 후 키 입력 → 자동 핫키 감지 (PreviewKeyDown)
- AddHotkey_Click, RemoveHotkey_Click, BrowseHotkeyTarget_Click 핸들러

docs/LAUNCHER_ROADMAP.md:
- L5-1  완료 표시, 구현 내용 업데이트

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 12:12:32 +09:00
e103a3a65a [Phase L4 문서] 헬프·가이드·팁 문구 L4 신기능 반영
HelpDetailWindow.xaml.cs (+47줄):
- 런처 탐색 카테고리 신설: 인라인 파일 탐색기, F3 QuickLook, 검색 히스토리, 고급 필터, 단위 변환 5항목 추가

HelpDetailWindow.Shortcuts.cs (+12줄):
- → 단축키: 파일 탐색기 폴더 진입 기능 추가 설명
- ← 단축키 신규: 파일 탐색기 상위 폴더 이동
- F3 단축키 신규: QuickLook 미리보기 토글

L10n.cs (+13줄):
- Phase L4 신기능 홍보 팁 12종 추가 (파일탐색기, F3, 검색히스토리, 필터문법, 단위변환)

개발자가이드.htm:
- 단축키 테이블에 F3 QuickLook 행 추가
- = 예약어에 단위 변환 자동 제안·날짜 계산 예시 추가
- 팁 섹션에 4개 박스 추가: 인라인 파일탐색기, 고급 검색 필터, 검색 히스토리, F3 QuickLook
- 버전 이력 v1.7.3 추가 (L4 전 기능 기록)

사용가이드.htm: 개발자 가이드에서 버전 이력 제거 후 재생성
가이드 암호화: guide_dev.enc, guide_user.enc 재암호화 완료
빌드: 경고 0, 오류 0
2026-04-04 11:49:07 +09:00
e088a73925 [Phase L5] 런처 고도화 5단계 계획 수립 및 L4 완료 마킹
LAUNCHER_ROADMAP.md 업데이트:
- Phase L4 전체  완료 표시 (L4-1~L4-6 구현 내용 기록)
- Phase L5 신규 추가: 전용 핫키·OCR·QuickLook편집·세션 스냅·배치 이름변경·스케줄러
- 각 L5 항목에 C# 인터페이스·클래스 시그니처 수준 설계 명세 추가
- 구현 순서: L5-1 → L5-2 → L5-3 → L5-5 → L5-4 → L5-6
2026-04-04 11:39:47 +09:00
d70e6357d0 [Phase L4-5] 고급 검색 필터 문법 구현 (ext/type/in/size/modified)
Core/SearchFilterParser.cs (285줄) — 신규:
- Parse(): 쿼리에서 필터 토큰 추출 후 순수 텍스트 쿼리 반환
- 지원 필터: ext:.pdf,.docx / type:file|folder|app / in:경로조각
  size:>1mb|<500kb / modified:today|week|month|year|>날짜
- Matches(): 8가지 조건(ext,type,in,size,modified) 순차 검사
  size/modified는 파일시스템 접근이 필요해 마지막에 체크
- Describe(): UI 힌트용 필터 요약 텍스트 생성
- ParsedFilters 클래스: 파싱된 필터 상태 컨테이너

Core/FuzzyEngine.cs (+23줄):
- SearchWithFilter(query, predicate, max): 텍스트 없으면 전체, 있으면 ×15 후보→필터

Core/CommandResolver.cs (+91줄):
- ResolveAsync(): 경로 쿼리 감지 다음에 필터 감지 단계 추가
- BuildFilteredResults(): 필터 힌트 항목(상단) + 필터 적용 결과 목록
  파일 항목에 size/수정일 부가 정보 subtitle 표시
- FormatBytes(): 파일 크기 포맷 (B/KB/MB/GB)
- 빌드: 경고 0, 오류 0
2026-04-04 11:34:37 +09:00
d4a1532d81 [Phase L4] 파일탐색기·QuickLook·단위변환 단축 3종 완료
FileBrowserHandler (185줄) — L4-1 인라인 파일 탐색기:
- Handlers/FileBrowserHandler.cs: Prefix=null, 경로 패턴 감지(C:\, D:\, \, ~\)
- 폴더/파일 나열: 상위폴더(..) + 하위폴더 40개 + 파일 30개
- 확장자별 MDL2 아이콘, 파일 크기 포맷(B/KB/MB/GB), 필터링 지원
- FileBrowserEntry(Path, IsFolder) record 정의
- App.xaml.cs: Phase L4 섹션에 FileBrowserHandler 등록

CommandResolver (18줄 추가) — 경로 쿼리 우선 처리:
- 퍼지 검색 전 IsPathQuery() 감지 → 파일탐색기 단독 결과 반환(항목 수 제한 없음)
- FileBrowserEntry 실행 라우팅 → ExecuteNullPrefixAsync 위임

LauncherWindow.Keyboard.cs (41줄 추가) — 키보드 탐색:
- Key.Right: FileBrowserEntry {IsFolder:true} 선택 시 해당 경로로 InputText 업데이트
- Key.Left: 경로 쿼리 상태에서 상위 폴더로 이동(Path.GetDirectoryName)
- 기존 → 키 액션모드 진입 로직 유지

QuickLookWindow (L4-2 F3 미리보기 강화):
- XAML: 줄번호 열(LineNumBg+LineNumbers), PDF 패널(빨강 배지), Office 패널(파랑 배지) 추가
- Code-behind: PDF(PdfPig), Word(OpenXml), Excel(OpenXml) 미리보기 구현
- ApplyCodeStyle(): 언어별 배경 색조(C#=파랑, Python=녹색, JS=앰버 등)
- 빌드: 경고 0, 오류 0
2026-04-04 11:23:18 +09:00
75cb4ba6e9 [Phase L4-4/L4-6] 검색 히스토리 + 계산기 단위변환 단축 문법
L4-4 검색 히스토리 (↑/↓ 키 탐색):
- Services/SearchHistoryService.cs (신규 100줄): 50개 FIFO JSON 저장
  Add() · GetAll() · Clear(). 2자 미만/중복 최상단 무시
- ViewModels/LauncherViewModel.cs:
  _historyIndex·_isHistoryNavigation 필드 추가
  NavigateHistoryPrev() / NavigateHistoryNext() / SetInputFromHistory()
  InputText setter: 직접 입력 시 _historyIndex 초기화
  ExecuteSelectedAsync: 실행 전 히스토리 저장 (2자 이상)
  OnShown: _historyIndex = -1 초기화
- Views/LauncherWindow.Keyboard.cs:
  Key.Up/Down — Results.Count==0 분기: 히스토리 탐색 / 목록 탐색 분기

L4-3 클립보드 핀/카테고리: 기존 완전 구현 확인 (IsPinned, Category,
  TogglePin, Ctrl+P, #pin/#url/#코드/#경로 필터)

L4-6 계산기 단위 변환 단축 문법:
- Handlers/UnitConverter.cs:
  AutoSuggest(): "20km", "100f", "5lb" 등 목표 없이 주요 단위 자동 제안
  _suggestions 테이블: 길이/무게/속도/데이터/온도 40개 단위 매핑
  DateShortcut: "today+30d", "today-7w" → = 접두어에서 날짜 계산
- Handlers/CalculatorHandler.cs:
  DateShortcut.TryMatch 분기 추가 (통화 감지 전)
  UnitConverter.AutoSuggest 분기 추가 (명시 변환 후)
- 힌트 텍스트: "20km · 100°F · today+30d" 추가

docs/LAUNCHER_ROADMAP.md: Phase L4 계획 테이블 추가

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 11:15:11 +09:00
fc881124b9 [Phase L2-8] DockBar 위젯 확장 — 날씨·일정·배터리 추가
Services/WeatherWidgetService.cs (신규 58줄):
- wttr.in API 호출, 30분 캐시
- 사내 모드(InternalModeEnabled=true)에서는 "--" 즉시 반환
- Invalidate()로 강제 캐시 초기화 지원

ViewModels/LauncherViewModel.Widgets.cs:
- Widget_WeatherText (setter: 코드비하인드에서 직접 갱신)
- Widget_CalText: DateTime.Now → "M/d (ddd)" 형식 (ko-KR)
- Widget_BatteryText / Widget_BatteryIcon / Widget_BatteryVisible

Views/LauncherWindow.Widgets.cs:
- StartWidgetUpdates(): 배터리 즉시 갱신 + 날씨 비동기 갱신 호출
- 1초 타이머: 배터리 30초마다, 날씨 캐시체크 2분마다
- UpdateBatteryWidget(): PowerStatus 읽기, 잔량별 MDL2 아이콘 선택
- RefreshWeatherAsync(): WeatherWidgetService 호출 → VM 프로퍼티 갱신
- WgtWeather_Click: 사외 모드=wttr.in 열기, 사내 모드=캐시 초기화
- WgtCal_Click: ms-clock: 또는 outlookcal: 열기
- WgtBattery_Click: ms-settings:powersleep 열기

Views/LauncherWindow.xaml:
- WidgetBar 내부: Grid → StackPanel + 2행 구조로 변환
- Row A: 기존 4개 위젯 (시스템·포모·메모·서버, 변경 없음)
- Row B: E(날씨 파랑) · F(일정 핑크) · G(배터리 녹색) 신규 추가
- 배터리: BoolToVisibilityConverter로 데스크톱에서 자동 숨김

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 10:50:57 +09:00
f557f53449 [Phase L2-7] 퀵 액션 바 — 최근 실행 항목 칩 표시
Models/QuickActionChip.cs (신규 12줄):
- Title, Symbol, Path, Background 레코드

Services/UsageRankingService.cs:
- GetTopItems(int n) 메서드 추가: 실행 횟수 상위 N개 (경로, 횟수) 반환

ViewModels/LauncherViewModel.cs:
- QuickActionItems (ObservableCollection<QuickActionChip>) 프로퍼티 추가
- ShowQuickActions: 입력 비었을 때 칩 표시 조건
- LoadQuickActions(): 상위 8개 경로 → 파일 존재 확인 → 타입별 아이콘/색상 칩 생성
- OnShown()에서 LoadQuickActions() 호출
- InputText 변경 시 ShowQuickActions 알림

Views/LauncherWindow.xaml:
- 입력 Grid를 2행 구조로 변환 (RowDefinitions 추가)
- Row 1: ItemsControl + WrapPanel + DataTemplate 칩 UI
  - CornerRadius=10 Border, 아이콘+제목 StackPanel
  - 호버 시 AccentColor 테두리, 최대 너비 100px 말줄임

Views/LauncherWindow.Shell.cs:
- QuickActionChip_Click 핸들러: 창 숨김 → 경로 실행 → 사용 통계 기록

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 10:44:02 +09:00
679de30f68 [Phase L2-6] 검색 결과 그룹핑 (앱/폴더/파일/단축키)
AxCopilot.SDK/IActionHandler.cs:
- LauncherItem 레코드에 Group? 선택 매개변수 추가 (기존 호출 코드 무변경)

Core/CommandResolver.cs:
- Fuzzy 검색 결과에 Group 태깅: 앱/폴더/단축키/파일

ViewModels/LauncherViewModel.cs:
- ICollectionView GroupedResults 프로퍼티 추가
- CollectionViewSource + PropertyGroupDescription(nameof(LauncherItem.Group)) 초기화

Views/LauncherWindow.xaml:
- ItemsSource: Results → GroupedResults 변경
- ListView.GroupStyle 추가: 그룹 이름 헤더(10px, SemiBold, 흐린 보조 텍스트)
- GroupItem ContainerStyle로 헤더+아이템 수직 배치
- Group=null 항목은 NullToCollapsedConverter로 헤더 숨김

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 10:36:26 +09:00
d6d5f518d0 [Phase L2-4/L2-5] 클립보드 OCR 이미지 검색 + Ctrl+Click 다중 선택
Phase L2-4: 클립보드 이미지 OCR 텍스트 추출 및 검색
- AxCopilot.csproj: TFM net8.0-windows → net8.0-windows10.0.17763.0 (Windows OCR API 활성화)
- ClipboardEntry: OcrText 프로퍼티 추가 (set), Preview → OCR 텍스트 우선 표시 (72자 상한)
- SavedClipEntry: OcrText 직렬화 필드 추가, BuildSnapshot/LoadHistory 연동
- ClipboardHistoryService.OnClipboardUpdate: 이미지 저장 후 백그라운드 OCR 트리거
  (EnableOcrSearch 설정 체크, capturedEntry.OcrText 비동기 갱신)
- ClipboardHistoryService.ImageCache.cs: ExtractOcrTextAsync() 추가
  (WinRT BitmapDecoder → SoftwareBitmap → OcrEngine.RecognizeAsync, 5,000자 상한)
  WinRT 별칭(WinBitmapDecoder, WinSoftwareBitmap 등) 으로 WPF 네임스페이스 충돌 방지
- AppSettings.Models.cs: ClipboardHistorySettings.EnableOcrSearch (default=true)
- ClipboardHistoryHandler.GetItemsAsync: OcrText 포함 검색, 'OCR ·' 표시 배지

Phase L2-5: Ctrl+Click 클립보드 항목 다중 선택
- LauncherWindow.Shell.cs: ResultList_PreviewMouseLeftButtonUp에 Ctrl+Click 분기 추가
  (IsClipboardMode + Ctrl 조합 시 ToggleMergeItem 호출, 기존 단일 선택 흐름 유지)
- LauncherWindow.ShortcutHelp.cs: Ctrl+Click / Shift+↑↓ / 병합 단축키 도움말 추가

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 10:18:45 +09:00
e78da8eb81 [Phase L2-3] LAUNCHER_ROADMAP 완료 표시 갱신
L2-3 클립보드 이미지 미리보기 창 구현 완료 기록:
- ClipboardImagePreviewWindow (신규): 원본 해상도 표시, 줌, 저장, 복사
- Shift+Enter로 # 이미지 항목에서 미리보기 창 열기
- 빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 09:56:19 +09:00
ff048a6198 [Phase L2-3] 클립보드 이미지 미리보기 창 구현
신규 파일:
- ClipboardImagePreviewWindow.xaml (신규, 140줄):
  WindowStyle=None, 커스텀 타이틀바, 이미지 ScaleTransform 줌,
  하단 툴바(축소/줌레이블/확대 / 1:1 / 창맞춤 / 저장 / 복사)
- ClipboardImagePreviewWindow.xaml.cs (신규, 173줄):
  원본 해상도 이미지 로드(OriginalImagePath → 썸네일 폴백),
  FitToWindow() 초기 자동 맞춤, ApplyZoom(ScaleTransform),
  Ctrl+휠 줌, 키보드 단축키(+/-/0/F/Esc/Ctrl+C/Ctrl+S),
  PNG·JPEG·BMP 저장(SaveFileDialog), NotificationCenterService 피드백

변경 파일:
- LauncherWindow.Keyboard.cs: Shift+Enter 시 ClipboardEntry 이미지 항목 → 미리보기 창 열기(기존 폴더열기 분기 전에 추가)
- LauncherWindow.ShortcutHelp.cs: "Shift+Enter — 대형 텍스트 / 이미지 미리보기 (#)" 안내 갱신

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 09:55:59 +09:00
cc14de8da3 [Phase 17-E/F/G] NEXT_ROADMAP 완료 기록 추가
Phase 17-E 계층 메모리/컨텍스트 고도화 완료 기록:
- AxMdIncludeResolver.cs (@include 재귀 해석, 최대 5단계)
- PathScopedRuleInjector.cs (paths: 프론트매터 경로 규칙 주입)
- HierarchicalMemoryService.cs (4-layer 계층 메모리)
- AgentLoopService.Memory.cs (105줄, 세션 시작 시 주입)

Phase 17-F 권한 시스템 고도화 완료 기록:
- AgentLoopService.Permissions.cs (97줄, acceptEdits 모드)
- PermissionSystem.cs (패턴 기반 Allow/Deny 규칙)
- CompoundCommandParser.cs (&&·||·; 복합 명령 분해)

Phase 17-G 멀티파일 Diff + 자동 컨텍스트 수집 완료 기록:
- AgentLoopService.DiffTracker.cs (99줄, 원본 캡처→Diff 기록)
- AutoContextCollector.cs (@멘션·경로 자동 컨텍스트 수집)
- 최종 업데이트 라인: "17-A~D" → "17-A~G"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 09:49:44 +09:00
8997d3b330 [Phase L3-9] LAUNCHER_ROADMAP 완료 표시 갱신
L3-9 런처 미니 위젯 구현 완료 기록:
- 시스템 모니터(CPU/RAM/디스크), 뽀모도로, 메모 건수, 서버 상태 4종 위젯
- PerformanceMonitorService, PomodoroService, ServerStatusService 싱글턴
- pomo 프리픽스 핸들러 (집중/휴식/중지/리셋/상태 조회)
- 빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 09:42:08 +09:00
72b92b905c [Phase L3-9 + 버그] AX Agent 오류 수정 + 런처 미니 위젯 4종 구현
AX Agent 오류 수정:
- AgentSettingsPanel.xaml에 <UserControl.Resources> 추가
- ToggleSwitch 스타일 자체 정의 (SettingsWindow 리소스 미접근 문제 해결)
- 원인: XamlParseException — 'ToggleSwitch' 리소스 찾을 수 없음 (CS 로그 확인)

PerformanceMonitorService.cs (신규, 138줄):
- GetSystemTimes P/Invoke → CPU% (이전/현재 샘플 델타 계산)
- GlobalMemoryStatusEx P/Invoke → RAM% + "6.1/16GB" 형식 텍스트
- DriveInfo → C: 드라이브 사용률/용량 텍스트
- 2초 폴링, StartPolling/StopPolling 제어

PomodoroService.cs (신규, 179줄):
- 집중(25분)/휴식(5분) 타이머, 상태: Idle/Focus/Break
- pomodoro.json 영속성 (경과 시간 자동 보정)
- StateChanged 이벤트 → 위젯 실시간 갱신

ServerStatusService.cs (신규, 124줄):
- Ollama(/api/version), LLM API, 첫 번째 MCP 서버 15초 주기 핑
- HttpClient 1.5초 타임아웃, StatusChanged 이벤트

PomoHandler.cs (신규, 130줄):
- pomo prefix: 상태보기/start/break/stop/reset
- PomodoroService 직접 연동

LauncherViewModel.Widgets.cs (신규, 81줄):
- Widget_PerfText, Widget_PomoText, Widget_PomoRunning
- Widget_NoteText, Widget_OllamaOnline, Widget_LlmOnline, Widget_McpOnline
- UpdateWidgets() — 5틱마다 메모 건수 갱신 (파일 I/O 최소화)

LauncherWindow.Widgets.cs (신규, 143줄):
- IsVisibleChanged 이벤트로 위젯 자동 시작/중지
- DispatcherTimer 1초마다 UpdateWidgets + 서버 상태 dot 색상 직접 갱신
- 위젯 클릭 → 해당 prefix 자동 입력 (perf→info, pomo→pomo, note→note, server→port)

LauncherWindow.xaml:
- RowDefinition 6개 → 7개
- Row 6: 위젯 바 (시스템모니터/뽀모도로/메모/서버 4열)

빌드: 경고 0, 오류 0
2026-04-04 09:28:07 +09:00
bfa8e8c548 [Phase L3-8] 알림 센터 핸들러(notif) 구현 완료
NotifHandler.cs (신규, 120줄):
- notif 프리픽스: 최근 알림 이력 목록 표시 (최대 12건)
- notif [검색어]: 제목·내용 기반 필터링
- notif clear: 전체 이력 초기화 (건수 표시 후 확인)
- Enter: 선택 알림 내용 클립보드 복사
- NotificationType(Error/Warning/Success/Info)별 심볼 자동 적용
- TimeAgo() 헬퍼: 방금 전/N분 전/N시간 전/N일 전

NotificationService.cs (정리, 24줄):
- 중복 정의된 NotificationEntry 레코드 제거 (CS0101 오류 해결)
- 이력 관리는 NotificationCenterService에 위임
- LogOnly(): NotificationCenterService.Show() 호출로 대체

App.xaml.cs:
- commandResolver.RegisterHandler(new NotifHandler()) 추가

LauncherViewModel.cs:
- PrefixMap에 notif 배지 추가 (알림, ReminderBell, #F59E0B)

docs/LAUNCHER_ROADMAP.md:
- L3-8 알림 센터 통합  완료 표시

빌드: 경고 0, 오류 0
2026-04-04 09:10:12 +09:00
1b215579d2 [v2.0.0] Phase L3-7 다중 디스플레이 지원
LauncherWindow.Animations.cs:
- CenterOnScreen(): SystemParameters.WorkArea(주 모니터 고정) → 마우스 커서 위치 모니터 기반으로 변경
- GetCurrentMonitorWorkArea() 신규: Screen.FromPoint(Cursor.Position)으로 현재 모니터 탐색
  · PresentationSource.TransformFromDevice로 물리 픽셀 → WPF DIP 정확 변환
  · PresentationSource 미사용 가능 시 SystemParameters.WorkArea 폴백
- using AxCopilot.Services 추가

AppSettings.cs:
- LauncherSettings에 MonitorDockPositions 딕셔너리 추가
  · key=모니터 디바이스 이름 (\.\DISPLAY1 등), value=[Left, Top]
  · JSON 직렬화 지원

App.Settings.cs:
- ToggleDockBar(): 독 바 위치 변경 시 per-monitor 위치 저장 (GetMonitorDeviceNameAt)
- 독 바 복원 시 IsDockPositionOnAnyMonitor로 유효성 검사
  · 연결 끊긴 모니터 위치면 중앙 하단(-1,-1)으로 자동 초기화
- GetMonitorDeviceNameAt(): WPF DIP → 물리 픽셀 변환 후 모니터 디바이스명 반환
- IsDockPositionOnAnyMonitor(): Screen.AllScreens 범위 검사

docs/LAUNCHER_ROADMAP.md: L3-7  완료 표시

효과:
- 듀얼 모니터에서 핫키 → 마우스가 있는 모니터에 런처 표시
- 독 바 드래그 시 해당 모니터 이름으로 위치 기억
- 모니터 분리 후 재실행 시 독 바 위치 자동 복원

빌드: 경고 0, 오류 0
2026-04-04 09:00:15 +09:00
cb9d197969 [v2.0.0] Phase L3-5 파일 태그 시스템 구현
FileTagService.cs (140줄) — 신규:
- 파일·폴더에 사용자 태그 부여 서비스 (싱글턴)
- AddTag / RemoveTag / ClearTags / GetTags / GetFilesByTag / GetAllTags / HasTags
- %APPDATA%\AxCopilot\file_tags.json 로컬 저장 (key=경로, value=태그목록)
- 태그 정규화: 소문자 + 공백→하이픈 변환

TagHandler.cs (190줄) — 신규:
- "tag" 프리픽스 핸들러 (IActionHandler 구현)
- tag              → 전체 태그 목록 (파일 수 내림차순)
- tag work         → "work" 태그 파일 목록 (prefix match + contains)
- tag add [태그] [경로] → 파일에 태그 추가 (Enter로 확정)
- tag del [태그] [경로] → 파일에서 태그 제거 (Enter로 확정)
- tag clear [경로]       → 파일의 모든 태그 삭제 (Enter로 확정)
- 파일 열기: Process.Start UseShellExecute

Symbols.cs (+1줄):
- Tag = "\uEAB4" 심볼 상수 추가

LauncherViewModel.cs (+2줄):
- PrefixMap에 "tag" → ("태그", Symbols.Tag, "#6366F1") 추가

App.xaml.cs (+2줄):
- Phase L3 핸들러 섹션에 TagHandler 등록

docs/LAUNCHER_ROADMAP.md:
- L3-1~L3-5 완료 표시 ()

빌드: 경고 0, 오류 0
2026-04-04 08:51:04 +09:00
d67c378389 [v2.0.0] AgentSettingsPanel 프리셋 섹션 추가
AgentSettingsPanel.xaml (+46줄):
- 프리셋 섹션 신규 추가 (MCP 서버 ↔ 고급 사이)
- "새 프리셋 저장" 버튼 (BtnPresetSave, 보라 아이콘)
- "프리셋 관리 →" 버튼 (BtnPresetManage, 화살표 아이콘)
- 호버 스타일 DynamicResource 적용

AgentSettingsPanel.xaml.cs (+10줄):
- PresetSaveRequested / PresetManageRequested Action 콜백 프로퍼티 추가
- BtnPresetSave_Click / BtnPresetManage_Click 핸들러 추가

ChatWindow.CustomPresets.cs (+110줄):
- ShowPresetManagePopup() 메서드 신규 구현
  · 현재 탭의 커스텀 프리셋 목록을 Popup으로 표시
  · 각 항목에 편집(✏)·삭제(🗑) 아이콘 인라인 배치
  · "새 프리셋 추가" 단축 버튼 하단 고정
  · PlacementMode.Left로 설정 패널 왼쪽에 앵커

ChatWindow.MoodMenu.cs (+2줄):
- ToggleSettingsPanel() 내 PresetSaveRequested·PresetManageRequested 콜백 연결

빌드: 경고 0, 오류 0
2026-04-04 08:44:50 +09:00
23d1534536 [v2.0.0] AgentSettingsPanel 기능 완성 — 서비스·모델·작업폴더·MCP
AgentSettingsPanel.xaml.cs:
- BtnServiceSelector_Click: ServiceSelectorRequested 콜백 실행 (ChatWindow 위임)
- BtnModelSelector_Click: ModelSelectorRequested 콜백 실행 (ChatWindow 위임)
- ServiceSelectorRequested / ModelSelectorRequested / WorkFolderBrowseRequested Action 추가
- LoadFromSettings: UpdateWorkFolder() + BuildMcpServerList() 호출 추가
- LoadFromSettings: PanelWorkFolder 가시성 제어 추가
- UpdateActiveTab: PanelWorkFolder 가시성 제어 추가
- BtnWorkFolderBrowse_Click, UpdateWorkFolder, BuildMcpServerList, McpToggle_Changed 추가
- using System.Linq / using AxCopilot.Models 추가

AgentSettingsPanel.xaml:
- PanelWorkFolder 섹션 추가 (Code 탭 전용 — 폴더 표시 + 탐색 버튼)
- PanelMcpServers 섹션 추가 (도구 관리 뒤, 고급 앞)

ChatWindow.MoodMenu.cs:
- ToggleSettingsPanel(): 패널 열 때 ServiceSelector/ModelSelector/WorkFolder 콜백 연결

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 08:38:51 +09:00
0e8d58d3aa [v2.0.0] SettingsWindow AX Agent 탭 제거 + 고급 에이전트 탭 분리
CLAUDE.md 절대 원칙: AX Agent 설정을 ChatWindow 내 AgentSettingsPanel로 이관.

SettingsWindow.xaml:
- AgentTabItem Visibility="Collapsed" 추가 (기존 AX Agent 탭 완전 숨김)
- AdvancedAgentTabItem 신규 추가 (line 3255 앞에 삽입):
  · 안내 배너: "기본 에이전트 설정은 채팅 화면에서" + ⚙ 아이콘 안내
  · MCP 서버 등록 안내 섹션
  · 훅·권한 규칙 편집 안내 섹션
  · 태그: &#xE8EF; (Segoe MDL2 Assets)

SettingsWindow.AiToggle.cs (ApplyAiEnabledState):
- AgentTabItem: 항상 Collapsed (AiEnabled 상관없이)
- AdvancedAgentTabItem: AiEnabled=true → Visible, false → Collapsed

빌드: 경고 0, 오류 0
2026-04-04 02:14:42 +09:00
05539b0d83 [v2.0.0] Phase 17/18 완료 — 멀티에이전트·Reflexion·훅·스킬 고도화 릴리즈
Phase 17 완료 표시 (AGENT_ROADMAP.md 갱신):
- 17-A1/A2: Reflexion 자기성찰 메모리 + 검증 강제 확대
- 17-B1/B2: TaskState Working Memory + AgentEventLog .jsonl 영속화
- 17-C1/C2/C3: 훅 11개 이벤트·4타입(Command/Http/Prompt/Agent) 완비
- 17-D1/D2/D3: 스킬 fork 격리·paths 자동활성화·user-invocable 필터

Phase 18 완료 표시:
- 18-C2 (AiSnippetHandler), 18-C3 (QuickLinkHandler)

버전 v1.8.0 → v2.0.0:
- AxCopilot.csproj, Installer.csproj, SetupForm.cs, McpClientService.cs

DEVELOPMENT.md 버전 이력 v2.0.0 추가
Phase 17 섹션 헤더: 차기 개발 →  완료

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 02:12:21 +09:00
8693204d2d [Phase 18] 코디네이터 에이전트·플러그인 갤러리·SlashRegistry·watchPaths 완성
Phase 18-A1 — CoordinatorAgentService (신규):
- CoordinatorAgentService.cs (264줄): LLM 계획 수립 → JSON 파싱 → 의존성 토폴로지 정렬 → 병렬 서브에이전트 실행 → 결과 합성
- AgentLoopService.Coordinator.cs (100줄): RunCoordinatorModeAsync 파셜 + FormatCoordinatorPlan
- AppSettings.LlmSettings.cs: EnableCoordinatorMode bool 설정 추가
- AgentLoopService.cs: EnableCoordinatorMode 체크 → RunCoordinatorModeAsync fallback 로직

Phase 17-C4 — watchPaths FileWatcherService 연동 (AgentLoopService.ExtendedHooks.cs):
- SessionStart 훅 결과의 WatchPaths → FileWatcherService.Watch() 등록
- 파일 변경 시 FileChanged 훅 fire-and-forget 트리거

Phase 18-C1 — 플러그인 갤러리 (SettingsWindow):
- SettingsWindow.Plugins.cs (249줄): InitPluginGallery, RenderPluginList, 활성화 토글, 제거 버튼
- SettingsWindow.xaml: 플러그인 탭 추가 (PluginListPanel, 설치/새로고침 버튼)
- SettingsWindow.xaml.cs: Loaded에서 InitPluginGallery() 호출

SlashCommandRegistry ChatWindow 통합:
- ChatWindow.SlashContext.cs (175줄): IAgentChatContext 구현, GetRegistrySlashMatches, TryExecuteRegistrySlashCommandAsync
- ChatWindow.SlashCommands.cs: 레지스트리 명령 팝업 후보 추가
- ChatWindow.Sending.cs: 전송 전 레지스트리 슬래시 명령 우선 처리

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 02:02:37 +09:00
84e5cd9485 [Phase 18] 멀티에이전트 인프라 완성 + 리플레이 탭 통합
Phase 17-D3 수정:
- SkillManagerTool.ListSkills(): UserInvocable=false 내부 스킬 필터링 추가
  (SkillServiceExtensions.IsUserInvocable() 활용)

Phase 18-A 연결 완성:
- ToolRegistry: BackgroundAgentService 프로퍼티 노출 (AgentCompleted 구독용)
- ToolRegistry: WorktreeManager 인스턴스 생성 → DelegateAgentTool에 주입 (18-A2 완성)
- ChatWindow.xaml.cs: _toolRegistry.BackgroundAgentService.AgentCompleted 구독
- ChatWindow.AgentSupport.cs: OnBackgroundAgentCompleted() — 완료/실패 트레이 알림

Phase 18-B: 리플레이/디버깅 UI 통합:
- WorkflowAnalyzerWindow.xaml: "리플레이" 탭 버튼 추가 (&#xE768;)
- WorkflowAnalyzerWindow.xaml: 리플레이 패널 — 세션 목록, 재생 컨트롤, 속도 슬라이더, 진행 바, 이벤트 스트림
- WorkflowAnalyzerWindow.xaml.cs: TabReplay_Click, UpdateTabVisuals 3탭 지원
- WorkflowAnalyzerWindow.xaml.cs: LoadReplaySessions, BtnReplayStart/Stop, BuildReplayEventRow
- ReplayTimelineViewModel 통합 — StartReplayAsync/StopReplay, ReplayEventReceived 이벤트
- AGENT_ROADMAP.md: 18-A2/A3/A4/B1  완료 표시 갱신

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 01:30:29 +09:00
0ef37554bc [v1.8.0] 배포 준비 — 가이드 문서 갱신 및 암호화
DEVELOPMENT.md v1.8.0 항목 상세 보완:
- Phase 17-B: TaskStateService JSON 영속화 + AgentEventLog JSONL 7종 이벤트 정확히 기술
- Phase 17-C: ExtendedHookRunner 18종 이벤트 + Prompt/Command/Http 3타입 상세 기술
- Phase 17-D: PathBasedSkillActivator + context:fork DI 콜백 주입 방식 기술
- Phase 17-E: HierarchicalMemoryService 4-layer + AxMdIncludeResolver + PathScopedRuleInjector 정확히 기술
- Phase 17-F: PermissionDecisionService Chain 5단계 + EvaluateToolPermission 3종 결정 기술
- Phase 17-G: DiffTracker CaptureOriginalFileContent + ToolRiskMapper 위험도 태그 기술

개발자 가이드 v1.8.0 버전 이력 항목 추가 (15개 신기능):
- 자기성찰 메모리, 세션 상태 영속화, 훅 시스템, 스킬 fork
- 경로 기반 스킬/규칙, 계층 메모리, 권한 시스템, 멀티파일 Diff
- 사내/사외 모드, 멀티에이전트, AI 스니펫, 퀵링크, 알림 센터

사용자 가이드: 개발자 가이드에서 버전 이력 섹션 제거 후 재생성
암호화: guide_dev.enc + guide_user.enc 재생성 (AES-256-CBC)
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 01:17:09 +09:00
a635f24399 [Phase 17-F+G] 권한 시스템 고도화 + 멀티파일 Diff 추적기
Phase 17-F — 권한 시스템 고도화:
AgentLoopService.Permissions.cs (신규, 97줄):
- GetPermissionService(): PermissionsConfig → PermissionDecisionService 빌드·캐시
  Chain: DenyRuleHandler → AllowRuleHandler → AcceptEditsHandler → PlanModeHandler → BypassHandler
- EvaluateToolPermission(): Deny=즉시차단 / Allow=CheckDecisionRequired 스킵 / Ask=기존 흐름
- CheckMcpToolAllowed(): MCP 서버·도구 단위 권한 확인
- PermissionRuleEntry(설정) → PermissionRule(런타임) 자동 변환

Phase 17-G — 멀티파일 Diff 추적기:
AgentLoopService.DiffTracker.cs (신규, 99줄):
- DiffViewModel 프로퍼티: MultiFileDiffViewModel 지연 초기화, ChatWindow UI 바인딩용
- ExtractFilePathFromInput(): 도구 입력 JSON에서 path/file_path 추출
- CaptureOriginalFileContent(): 쓰기 도구 실행 전 원본 내용 캡처 (신규=빈 문자열)
- TrackFileModificationForDiff(): 성공 후 디스크에서 신규 내용 읽어 DiffViewModel에 기록
- ResetDiffTracker(): 세션 시작 시 Diff 목록 초기화

AgentLoopService.Execution.cs (편집):
- toolName17 변수 도입: call.ToolName ?? "" — CS8604 nullable 경고 전면 제거 (0개)
- Phase 17-G2: EmitEvent(ToolCall)에 위험도 태그 [⚠ 높음]/[• 보통] 접미사 추가
- Phase 17-F: Deny→즉시차단+DENIED 메시지, Allow→skipLegacyDecisionCheck=true
- Phase 17-G: Pre-실행 diffFilePath+diffOriginalContent 캡처, Post-성공 TrackFileModificationForDiff 호출

AgentLoopService.cs (편집):
- 세션 시작 시 ResetDiffTracker() 호출 (이전 세션 Diff 항목 초기화)

AppSettings.LlmSettings.cs (편집):
- EnableDiffTracker 설정 추가 (기본 true, json: "enableDiffTracker")

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 01:10:09 +09:00
f1b1f1604c [Phase 17-E] 계층 메모리/컨텍스트 고도화 — AgentLoopService 통합
AgentLoopService.Memory.cs (신규, 105줄):
- InjectHierarchicalMemoryAsync(): 세션 시작 시 4-layer 계층 메모리 수집
  (Managed→User→Project→Local AX.md + rules/*.md)
  AxMdIncludeResolver.ResolveAsync()로 @include 지시어 최대 5단계 재귀 해석
  40,000자 초과 시 크기 경고, 마커 기반 in-place 교체(중복 방지)
- InjectPathScopedRulesAsync(): 파일 도구 실행 후 .ax/rules/*.md paths: 프론트매터
  기반 경로 범위 규칙 주입. workFolder별 PathScopedRuleInjector 캐시 적용

AgentLoopService.cs (편집):
- Phase 17-A(Reflexion) 이후 await InjectHierarchicalMemoryAsync() 호출 추가

AgentLoopService.Execution.cs (편집):
- InjectPathBasedSkills() 이후 InjectPathScopedRulesAsync() fire-and-forget 추가

AppSettings.LlmSettings.cs (편집):
- EnableMemorySystem 설정 추가 (기본 true, json: "enableMemorySystem")

docs/AGENT_ROADMAP.md:
- Group E 완료 표시 + 구현 내역 기록 (17-E1/E2 완료, 17-E3 차기)

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 00:56:49 +09:00
1313c65e5e [Phase 17-D] 스킬 시스템 고도화 — paths:glob 자동주입 + context:fork 격리 실행
AgentLoopService.Skills.cs (신규, 95줄):
- InjectPathBasedSkills(): 파일 도구 성공 후 filePath로 GlobMatcher 매칭
  → 매칭 스킬 시스템 프롬프트를 시스템 메시지에 in-place 주입
  → SkillActivated JSONL 이벤트 로그 기록
- RunSkillInForkAsync(): context:fork 스킬 격리 LLM 실행 (도구 없음)
  → SkillCompleted JSONL 이벤트 로그 기록

SkillManagerTool.cs:
- SetForkRunner(Func<SkillDefinition, string, CancellationToken, Task<string>>) 추가
- exec 액션 + arguments 파라미터 추가
- ExecSkillAsync(): PrepareSkillBodyAsync 인자 치환
  → IsForkContext=true: fork runner 호출 → [Fork 스킬 결과] 반환
  → 일반 스킬: 시스템 프롬프트 + 준비된 본문 반환

AgentLoopService.cs:
- 생성자: SkillManagerTool.SetForkRunner(RunSkillInForkAsync) 주입

AgentLoopService.Execution.cs:
- 도구 성공 직후 InjectPathBasedSkills(result.FilePath, messages) 호출

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 00:39:25 +09:00
0a58419c8a [Phase 17-C] 훅 시스템 고도화 — 11종 이벤트 연결 + Prompt 모드 구현
AppSettings.AgentConfig.cs:
- ExtendedHooksConfig에 4개 이벤트 추가:
  preToolUse, postToolUse, postToolUseFailure, agentStop

AgentLoopService.ExtendedHooks.cs (신규, 150줄):
- RunExtendedEventAsync(): 이벤트 훅 실행, 결과(additionalContext) 시스템 메시지 주입, HookFired 이벤트 로그
- GetExtendedHooks(): 설정에서 HookEventKind별 런타임 엔트리 조회
- ConvertToRuntimeEntries(): ExtendedHookEntryConfig → ExtendedHookEntry 변환
- ApplyExtendedHookResult(): additionalContext in-place 주입 (marker 기반 교체)

ExtendedHookRunner.cs:
- RunEventAsync() / ExecuteSingleAsync()에 LlmService? llm 파라미터 추가
- RunPromptHookAsync() 신규: {{tool_name/input/output/user_message/event/session_id}} 치환
  → LLM 호출 → block/deny/차단 감지 시 Block=true 반환
- using AxCopilot.Models 추가

AgentLoopService.cs:
- SessionStart 훅 (fire-and-forget, TaskState init 직후)
- UserPromptSubmit 훅 (동기, Block=true 시 즉시 반환 "⚠ 훅 정책에 의해 차단")
- PreCompact 훅 (적극적 압축 직전, 동기)
- PostCompact 훅 × 2 (기본/적극적 압축 완료 후, fire-and-forget)
- SessionEnd + AgentStop 훅 (finally 블록, fire-and-forget)

AgentLoopService.Execution.cs:
- RunToolHooksAsync() 개선: 레거시 AgentHookRunner 유지
  + ExtendedHookRunner PreToolUse/PostToolUse/PostToolUseFailure 추가
이벤트 커버리지: 11종 완전 연결. Agent 모드는 Phase 18-A 예정.
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 00:14:19 +09:00
2383b1e220 [Phase 17-B] TaskState Working Memory + 이벤트 로그 완전 통합
AgentLoopService.TaskState.cs (신규, 96줄):
- InitTaskStateAsync(): 세션 시작 시 TaskStateService 초기화, 현재 작업 기록
- TrackToolFile(): 도구 성공 시 파일 경로 참조 목록 추가 (fire-and-forget)
- InjectTaskStateContext(): 압축 전 Working Memory를 시스템 메시지에 in-place 주입
  (## 현재 작업 상태 마커로 기존 섹션 탐지·교체 → 중복 방지)
- UpdateTaskStateSummaryAsync(): 압축 완료 후 컨텍스트 요약 갱신 (fire-and-forget)

AgentLoopService.cs:
- userQuery 선언 후 UserMessage 이벤트 기록 + InitTaskStateAsync() 호출
- 압축 블록: InjectTaskStateContext() 호출 (압축 전 Working Memory 주입)
- 기본 압축 완료 시: CompactionCompleted 이벤트 + UpdateTaskStateSummaryAsync()
- 적극적 압축 트리거 시: CompactionTriggered 이벤트 (usagePct 포함)
- LLM 텍스트 응답 후: AssistantMessage 이벤트 기록 (length, hasToolCalls)

AgentLoopService.Execution.cs:
- 도구 성공(state.ConsecutiveErrors = 0) 직후 TrackToolFile(result.FilePath) 호출

이벤트 커버리지: SessionStart/End·UserMessage·AssistantMessage·
ToolRequest·ToolResult·CompactionTriggered·CompactionCompleted 전 구간 기록
저장: %APPDATA%\AxCopilot\sessions\{sessionId}\{task_state.json, events.jsonl}
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 23:22:40 +09:00
90d5943327 [Phase 17-A] Reflexion 자기성찰 메모리 시스템 구현
ReflexionEvaluatorService 신규 구현 (ReflexionService.cs):
- LLM 기반 자기평가: 완성도 점수(0~1), 강점/약점/교훈 추출
- $$raw string 평가 프롬프트로 JSON 포맷 안전하게 삽입
- JSON 블록 추출 + 역직렬화, LLM 실패 시 규칙 기반 폴백 엔트리
- ReflexionRepository.BuildContextPromptAsync() maxEntries 파라미터 추가

AgentLoopService.Reflexion.cs (신규, 82줄):
- InjectReflexionContextAsync(): 세션 시작 전 과거 교훈→시스템 메시지 주입
- FireAndForgetReflexionEval(): 세션 완료 후 Task.Run 비동기 자기평가 저장
- 지연 초기화(_reflexionRepo, _reflexionEval): 사용 시점에 생성

AgentLoopService.cs 통합 포인트 2개 추가:
- RunAsync() 루프 시작 전: await InjectReflexionContextAsync()
- finally 블록 통계 섹션: FireAndForgetReflexionEval() 호출

AgentSettingsPanel — 자기성찰 메모리 섹션 추가:
- 활성화 토글(ChkReflexionEnabled)
- 성공 세션만 평가 토글(ChkReflexionSuccessOnly)
- 최대 참고 교훈 수 슬라이더(1~20, 기본값 5)
- LoadFromSettings() 초기화 + 3개 이벤트 핸들러

빌드: 경고 0, 오류 0
2026-04-03 23:07:59 +09:00
5fe6d5c6ba [Phase 17-UI-C/D/E] AgentSessionHeaderBar·AgentSidebarView·AgentInputArea UserControl 통합
Phase 17-UI-C: AgentSessionHeaderBar 통합 (ChatWindow.xaml 인라인 칩 교체)
- AgentSessionHeaderBar.xaml: 외부 Border 투명화, 높이 42→38px, PlanIcon/PermIcon x:Name 추가
- AgentSessionHeaderBar.xaml.cs: SetPlanMode() x:Name 직접 참조, ChipPermission_Click 이벤트 위임
- ChatWindow.xaml: ModelHeaderChip/BtnPlanMode/PermissionHeaderChip → SessionHeaderBar UserControl 교체
- ChatWindow.SessionHeaderBar.cs (신규, 46줄): InitSessionHeaderBar() 이벤트 구독
- ChatWindow.ModelSelector.cs: UpdateModelLabel() SessionHeaderBar.SetModel() 동기화
- ChatWindow.PermissionMenu.cs: UpdatePermissionUI() SessionHeaderBar.SetPermissionMode() 동기화
- ChatWindow.TabSwitching.cs: UpdatePlanModeUI() 단순화, UpdateTabUI() SetTabLabel() 동기화

Phase 17-UI-D: AgentSidebarView 통합 (SidebarPanel 인라인 110줄 → UserControl 1줄)
- AgentSidebarView.xaml: 7행 구조(헤더/탭세그먼트/검색/카테고리/대화목록/삭제/사용자계정) 재작성
- AgentSidebarView.xaml.cs: internal 프록시 프로퍼티 8개 + 5개 이벤트 추가, 완전 재작성
- ChatWindow.xaml: <Border x:Name="SidebarPanel"> 110줄 → <ctrl:AgentSidebarView x:Name="Sidebar"/> 1줄
- ChatWindow.SidebarCompat.cs (신규, 80줄): 프록시 계산 프로퍼티 8개 + InitSidebarEvents()
- ChatWindow.PermissionMenu.cs: SidebarPanel.Visibility → Sidebar.Visibility, PermissionHeaderChip → SessionHeaderBar
- ChatWindow.TabSwitching.cs: 탭 핸들러 3개 Sidebar?.SetActiveTab() 동기화 추가

Phase 17-UI-E: AgentInputArea IsToolbarOnly 모드 + 입력 툴바 추가
- AgentInputArea.xaml: OuterBorder/InputTextBoxRow/ChipsSendRow x:Name 추가
- AgentInputArea.xaml.cs: IsToolbarOnly 의존성 프로퍼티 + ApplyToolbarOnlyMode() 추가
- ChatWindow.xaml: InputBorder Grid에 Row 0 추가(AgentInputArea IsToolbarOnly=True), 기존 행 0→1/1→2/2→3 시프트
- ChatWindow.InputToolbar.cs (신규, 37줄): InitInputToolbar() — @/스킬/첨부 이벤트 기존 동작 위임
- ChatWindow.xaml.cs: Loaded에 InitSidebarEvents(), InitInputToolbar() 호출 추가

빌드: 경고 0, 오류 0
2026-04-03 22:36:19 +09:00
26c20cf3dc [Phase 17-UI-B] 헤더 바 모델·권한 칩 추가
ChatWindow.xaml:
- 서브 헤더 바(Row 1) 우측에 ModelHeaderChip 버튼 추가
  (Segoe MDL2 브레인 아이콘 + ModelHeaderLabel TextBlock)
- 서브 헤더 바 우측에 PermissionHeaderChip 버튼 추가
  (잠금 아이콘 #4FC3F7 + PermissionHeaderLabel TextBlock)

ChatWindow.ModelSelector.cs:
- UpdateModelLabel(): ModelHeaderLabel 동기 갱신 코드 추가

ChatWindow.PermissionMenu.cs:
- UpdatePermissionUI(): PermissionHeaderLabel 동기 갱신 코드 추가
- PermissionHeaderChip_Click() 신규: PlacementTarget을 헤더 칩으로
  교체 후 기존 BtnPermission_Click 호출

ChatWindow.xaml.cs:
- Loaded 핸들러에 UpdatePermissionUI() 초기 호출 추가

docs/NEXT_ROADMAP.md:
- Phase 17-UI-B 완료 항목 추가

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 22:05:30 +09:00
e7aa107b16 [Phase 17-UI-A] AgentSettingsPanel 완전 통합 — 설정 버튼 직접 연결
ChatWindow.MoodMenu.cs (BtnSettings_Click 개선):
- Shift+클릭 조건 제거 → 기어 버튼 클릭 시 AgentSettingsPanel 직접 열기
- Ctrl+클릭으로 전역 SettingsWindow 열기 (기존 동작 유지)
- ToggleSettingsPanel(): _toolRegistry 패널에 전달, SettingsChanged 이벤트 연결
- OnSettingsPanelChanged() 신규: 설정 변경 시 ModelLabel·AnalyzerButton 즉시 갱신

ChatWindow.TabSwitching.cs:
- UpdateTabUI(): 설정 패널 열린 상태이면 UpdateActiveTab() 자동 호출
- 탭 전환 시 탭별 전용 설정(Cowork 검증/Code LSP 등) 패널 자동 반영

ChatWindow.xaml:
- 설정 버튼 ToolTip: "설정 패널 (Ctrl+클릭: 전역 설정)"으로 UX 안내 추가

AgentSettingsPanel.xaml.cs:
- LoadFromSettings(): ToolRegistry? 매개변수 추가 (외부 레지스트리 주입)
- BuildToolToggles(): 외부 레지스트리 우선, 없으면 ToolRegistry.CreateDefault() 폴백
- 반영 방식 개선: 리플렉션 해킹 제거 → 실제 ChatWindow._toolRegistry 참조

docs/NEXT_ROADMAP.md:
- Phase 17-UI-A 완료 항목 추가 (변경 파일 테이블, 개선 효과)

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 21:57:58 +09:00
4fa38a7b9e [Phase52] PreviewWindow.xaml.cs 분리 — Content.cs 추출
- PreviewWindow.xaml.cs: 505 → 317줄 (P/Invoke + 싱글턴 + 탭 관리 유지)
- PreviewWindow.Content.cs (신규): 콘텐츠 로드(LoadContent/LoadCsvContent/ParseCsvLine)
  + 타이틀바 핸들러 9개 (170줄)

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 21:43:10 +09:00
b750849c9f [Phase52] 7개 파일 추가 분리 — 14개 파일로 재구성
LlmService.Streaming:
- LlmService.Streaming.cs: 516 → 256줄 (Ollama/OpenAI 유지)
- LlmService.GeminiClaude.cs (신규): Gemini+Claude 스트리밍 (~260줄)

DocxSkill:
- DocxSkill.cs: 543 → 158줄 (ExecuteAsync 유지)
- DocxSkill.Builders.cs (신규): 11개 문서 빌더 헬퍼 (290줄)

ChartSkill:
- ChartSkill.cs: 537 → 174줄 (ExecuteAsync+RenderChart 유지)
- ChartSkill.Renderers.cs (신규): 7개 차트 렌더러+헬퍼+Dataset (280줄)

ScreenCaptureHandler:
- ScreenCaptureHandler.cs: 637 → 241줄 (기본 캡처 유지)
- ScreenCaptureHandler.Helpers.cs (신규): 스크롤/영역 캡처+헬퍼 (310줄)

SystemInfoHandler:
- SystemInfoHandler.cs: 509 → 352줄
- SystemInfoHandler.Helpers.cs (신규): 8개 헬퍼+StarInfoHandler (161줄)

AppSettings:
- AppSettings.cs: 564 → 309줄 (AppSettings/Launcher/CustomTheme 유지)
- AppSettings.Models.cs (신규): 14개 설정 모델 클래스 (233줄)

SkillEditorWindow:
- SkillEditorWindow.xaml.cs: 528 → 303줄
- SkillEditorWindow.PreviewSave.cs (신규): 미리보기+저장+로드 (226줄)

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 21:40:56 +09:00
55befebf34 [Phase51] 대규모 파일 분리 — 9개 파일 → 19개 파일
SettingsWindow.Tools:
- SettingsWindow.Tools.cs: 605 → 238줄 (BuildToolRegistryPanel 유지)
- SettingsWindow.SkillListPanel.cs (신규): BuildSkillListSection, CreateSkillGroupCard (295줄)

LauncherWindow.Keyboard:
- LauncherWindow.Keyboard.cs: 593 → 454줄
- LauncherWindow.ShortcutHelp.cs (신규): ShowShortcutHelp, ShowToast, TryHandleSpecialAction (139줄)

CalculatorHandler:
- CalculatorHandler.cs: 566 → ~240줄 (CalculatorHandler 클래스만 유지)
- UnitConverter.cs (신규): 단위변환 클래스 독립 파일 (152줄)
- MathEvaluator.cs (신규): 수식파서 클래스 독립 파일 (183줄)

EmojiHandler:
- EmojiHandler.cs: 553 → 70줄 (핸들러 메서드만 유지)
- EmojiHandler.Data.cs (신규): 이모지 데이터베이스 배열 (~490줄)

DocumentPlannerTool:
- DocumentPlannerTool.cs: 598 → 324줄 (Execute 메서드 유지)
- DocumentPlannerTool.Generators.cs (신규): GenerateHtml/Docx/Markdown, BuildSections 등 (274줄)

DocumentReaderTool:
- DocumentReaderTool.cs: 571 → 338줄 (ExecuteAsync + PDF 메서드 유지)
- DocumentReaderTool.Formats.cs (신규): BibTeX/RIS/DOCX/XLSX/Text/Helpers (233줄)

CodeIndexService:
- CodeIndexService.cs: 588 → 285줄 (DB/인덱싱 유지)
- CodeIndexService.Search.cs (신규): Search, TF-IDF, Tokenize, Dispose (199줄)

ClipboardHistoryService:
- ClipboardHistoryService.cs: 575 → 458줄
- ClipboardHistoryService.ImageCache.cs (신규): 이미지 캐시 유틸리티 (120줄)

IndexService:
- IndexService.cs: 568 → 412줄
- IndexService.Helpers.cs (신규): 경로 탐색 헬퍼 + 검색 캐시 (163줄)

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 21:34:51 +09:00
5bed67f64e [Phase50] PlanViewerWindow·SettingsWindow 분리 — 6개 파일
변경 파일:
- PlanViewerWindow.StepRenderer.cs: 616 → 425줄 (RenderSteps/SwapSteps/EditStep 유지)
- PlanViewerWindow.EditButtons.cs (신규): BuildApprovalButtons, BuildExecutionButtons,
  BuildCloseButton, ShowEditInput, CreateMiniButton, CreateActionButton (197줄)
- SettingsWindow.AgentConfig.cs: 608 → 303줄 (모델/스킬/템플릿 관리 유지)
- SettingsWindow.AiToggle.cs (신규): ApplyAiEnabledState, AiEnabled_Changed,
  NetworkMode_Changed, StepApprovalCheckBox_Checked, BtnClearMemory_Click (316줄)
- SettingsWindow.AgentHooks.cs: 605 → 334줄 (훅 관리 유지)
- SettingsWindow.McpAdvanced.cs (신규): MCP 서버 관리, 감사 로그, 폴백 모델,
  LoadAdvancedSettings/SaveAdvancedSettings (271줄)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 21:26:50 +09:00
306529a02c [Phase49] MarkdownRenderer·ChatWindow.MessageRendering 분리
변경 파일:
- MarkdownRenderer.cs: 621 → 405줄 (Render/AddInlines/Table 유지)
- MarkdownRenderer.CodeBlock.cs (신규): CreateCodeBlock, CreateCodeHeaderButton,
  GetExtensionForLang, ShowCodeFullScreen (~218줄)
- ChatWindow.MessageRendering.cs: 522 → 220줄 (RenderMessages/AddMessageBubble 유지)
- ChatWindow.Animations.cs (신규): GetCheckStyle, CreateCheckIcon, AnimateScale,
  ApplyHoverScaleAnimation, ApplyHoverBounceAnimation, CreateSimpleCheck,
  ApplyMenuItemHover (172줄)
- ChatWindow.FeedbackButtons.cs (신규): CreateActionButton, CreateFeedbackButton,
  AddLinkedFeedbackButtons (121줄)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 21:22:47 +09:00
c4f23eb2b0 [Phase49] ChatWindow.Sending.cs 분리 — MessageEdit, StreamingTimers 분할
변경 파일:
- ChatWindow.Sending.cs: 720 → ~300줄 (전송 섹션만 유지)
- ChatWindow.MessageEdit.cs (신규): ApplyMessageEntryAnimation, _isEditing 필드,
  EnterEditMode, SubmitEditAsync (~180줄)
- ChatWindow.StreamingTimers.cs (신규): StopAiIconPulse, CursorTimer_Tick,
  ElapsedTimer_Tick, TypingTimer_Tick (~58줄)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 21:18:27 +09:00
39e07dd947 [Phase48] 대형 파일 분할 리팩터링 4차 — 4개 신규 파셜 파일 생성
## 분할 대상 및 결과

### ChatWindow.Controls.cs (595줄 → 372줄)
- ChatWindow.TabSwitching.cs (232줄, 신규): _activeTab 필드, _tabConversationId 필드
  TabChat/Cowork/Code_Checked, UpdateTabUI, BtnPlanMode_Click, UpdatePlanModeUI,
  SwitchToTabConversation, SaveCurrentTabConversationId, StopStreamingIfActive

### ChatWindow.SlashCommands.cs (579줄 → 406줄)
- ChatWindow.DropActions.cs (160줄, 신규): DropActions 딕셔너리, CodeExtensions, DataExtensions,
  _dropActionPopup 필드, ShowDropActionMenu() 메서드

### WorkflowAnalyzerWindow.Charts.cs (667줄 → 397줄)
- WorkflowAnalyzerWindow.Timeline.cs (281줄, 신규): CreateTimelineNode, GetEventVisual, CreateBadge,
  ShowDetail, UpdateSummaryCards, FormatMs, Truncate, 윈도우 이벤트 핸들러, WndProc

### SkillGalleryWindow.xaml.cs (631줄 → ~430줄)
- SkillGalleryWindow.SkillDetail.cs (197줄, 신규): ShowSkillDetail() 메서드 전체
  (스킬 상세 보기 팝업 — 메타정보·프롬프트 미리보기·Action 버튼)

## 빌드 결과: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 21:12:38 +09:00
27bd8de83a [Phase47] 대형 파일 분할 리팩터링 3차 — 8개 신규 파셜 파일 생성
## 분할 대상 및 결과

### ChatWindow.ResponseHandling.cs (741줄 → 269줄)
- ChatWindow.StreamingUI.cs (303줄, 신규): CreateStreamingContainer, FinalizeStreamingContainer, ParseSuggestionChips, FormatTokenCount, EstimateTokenCount, StopGeneration
- ChatWindow.ConversationExport.cs (188줄, 신규): ForkConversation, OpenCommandPalette, ExecuteCommand, ExportConversation, ExportToHtml

### ChatWindow.PreviewAndFiles.cs (709줄 → ~340줄)
- ChatWindow.PreviewPopup.cs (~230줄, 신규): ShowPreviewTabContextMenu, OpenPreviewPopupWindow, _previewTabPopup 필드

### HelpDetailWindow.xaml.cs (673줄 → 254줄)
- HelpDetailWindow.Shortcuts.cs (168줄, 신규): BuildShortcutItems() 정적 메서드 (단축키 항목 160개+ 생성)
- HelpDetailWindow.Navigation.cs (266줄, 신규): 테마 프로퍼티, BuildTopMenu/SwitchTopMenu, BuildCategoryBar, NavigateToPage, 이벤트 핸들러
- partial class 전환: `public partial class HelpDetailWindow : Window`

### SkillService.cs (661줄 → 386줄)
- SkillService.Import.cs (203줄, 신규): ExportSkill, ImportSkills, MapToolNames — 가져오기/내보내기 섹션
- SkillDefinition.cs (81줄, 신규): SkillDefinition 클래스 독립 파일로 분리 (별도 최상위 클래스)
- partial class 전환: `public static partial class SkillService`

## NEXT_ROADMAP.md Phase 46 완료 항목 추가

## 빌드 결과: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 21:02:53 +09:00
aa907d7b79 [Phase46] 대형 파일 분할 리팩터링 2차 — 19개 신규 파셜 파일 생성
## 분할 대상 및 결과

### AgentLoopService.cs (1,334줄 → 846줄)
- AgentLoopService.HtmlReport.cs (151줄): AutoSaveAsHtml, ConvertTextToHtml, EscapeHtml
- AgentLoopService.Verification.cs (349줄): 도구 분류 판별 + RunPostToolVerificationAsync + EmitEvent + CheckDecisionRequired + FormatToolCallSummary

### ChatWindow 분할 (8개 신규 파셜 파일)
- ChatWindow.PlanViewer.cs (474줄): 계획 뷰어 — AddPlanningCard, AddDecisionButtons, CollapseDecisionButtons, ShowPlanButton 등 8개 메서드
- ChatWindow.EventBanner.cs (411줄): AddAgentEventBanner, BuildFileQuickActions
- ChatWindow.TaskDecomposition.cs (1,170줄 → 307줄): RenderSuggestActionChips, BuildFeedbackContext, UpdateProgressBar, BuildDiffView 잔류
- ChatWindow.BottomBar.cs (345줄): BuildBottomBar, BuildCodeBottomBar, ShowLogLevelMenu, ShowLanguageMenu 등
- ChatWindow.MoodMenu.cs (456줄): ShowFormatMenu, ShowMoodMenu, ShowCustomMoodDialog 등
- ChatWindow.CustomPresets.cs (978줄 → 203줄): ShowCustomPresetDialog, SelectTopic 잔류
- ChatWindow.ConversationMenu.cs (255줄): ShowConversationMenu (카테고리/삭제/즐겨찾기 팝업)
- ChatWindow.ConversationTitleEdit.cs (108줄): EnterTitleEditMode

### SettingsViewModel 분할
- SettingsViewModel.LlmProperties.cs (417줄): LLM·에이전트 관련 바인딩 프로퍼티
- SettingsViewModel.Properties.cs (837줄 → 427줄): 기능 토글·테마·스니펫 등 앱 수준 프로퍼티

### TemplateService 분할
- TemplateService.Css.cs (559줄): 11종 CSS 테마 문자열 상수
- TemplateService.cs (734줄 → 179줄): 메서드 로직만 잔류

### PlanViewerWindow 분할
- PlanViewerWindow.StepRenderer.cs (616줄): RenderSteps + SwapSteps + EditStep + 버튼 빌더 9개
- PlanViewerWindow.cs (931줄 → 324줄): Win32/생성자/공개 API 잔류

### App.xaml.cs 분할 (776줄 → 452줄)
- App.Settings.cs (252줄): SetupTrayIcon, OpenSettings, ToggleDockBar, RefreshDockBar, OpenAiChat
- App.Helpers.cs (92줄): LoadAppIcon, IsAutoStartEnabled, SetAutoStart, OnExit

### LlmService.ToolUse.cs 분할 (719줄 → 115줄)
- LlmService.ClaudeTools.cs (180줄): SendClaudeWithToolsAsync, BuildClaudeToolBody
- LlmService.GeminiTools.cs (175줄): SendGeminiWithToolsAsync, BuildGeminiToolBody
- LlmService.OpenAiTools.cs (215줄): SendOpenAiWithToolsAsync, BuildOpenAiToolBody

### SettingsWindow.UI.cs 분할 (802줄 → 310줄)
- SettingsWindow.Storage.cs (167줄): RefreshStorageInfo, BtnStorageCleanup_Click 등
- SettingsWindow.HotkeyUI.cs (127줄): RefreshHotkeyBadges, EnsureHotkeyInCombo, GetKeyName 등
- SettingsWindow.DevMode.cs (90줄): DevModeCheckBox_Checked, UpdateDevModeContentVisibility

## 빌드 결과: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 20:51:26 +09:00
f5a1ba999c [Phase 45] AppSettings.cs 클래스 파일 분리 (57% 감소)
31개 클래스 혼재 AppSettings.cs (1,320줄)를 3개 파일로 분리:
- AppSettings.cs → 564줄 (AppSettings·LauncherSettings·CustomThemeColors 등 17개 클래스)
- AppSettings.LlmSettings.cs → 481줄 (LlmSettings 408줄·CodeSettings)
- AppSettings.AgentConfig.cs → 284줄 (권한·훅·이벤트·모델·프리셋 등 12개 클래스)

모두 독립 top-level 클래스 (partial 불필요)
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 20:10:03 +09:00
35e6e4c060 [Phase 44] LauncherViewModel·SettingsWindow.Tools·MarkdownRenderer 파셜 분할
LauncherViewModel (805줄 → 402줄, 50% 감소):
- LauncherViewModel.FileAction.cs (154줄): 파일 액션 서브메뉴, EnterActionMode, ExitActionMode
- LauncherViewModel.Commands.cs (273줄): CopySelectedPath, Favorite, Terminal, 클립보드 병합, INotifyPropertyChanged
- 오류 수정: FileAction.cs에 using AxCopilot.Themes 누락 → 추가

SettingsWindow.Tools (875줄 → 605줄):
- SettingsWindow.ToolCards.cs (283줄): AX Agent 서브탭 전환 + 도구 관리 카드 UI

MarkdownRenderer (825줄 → 621줄):
- MarkdownRenderer.Highlighting.cs (215줄): 구문 하이라이팅 전체 분리

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 20:03:25 +09:00
2cf1fcd411 [Phase 43] 4개 대형 파일 파셜 클래스 분할
SettingsWindow.AgentConfig (1,202줄):
- AgentConfig.cs → 608줄 (등록모델·스킬·프롬프트·AI토글·사내외모드)
- AgentHooks.cs → 605줄 (에이전트훅·MCP서버·감사로그·폴백설정)

ChatWindow.Presets (1,280줄):
- Presets.cs → 315줄 (대화 주제 버튼)
- CustomPresets.cs → 978줄 (커스텀 프리셋 관리·하단바·포맷메뉴)

ChatWindow.PreviewAndFiles (1,105줄):
- PreviewAndFiles.cs → 709줄 (미리보기 패널)
- FileBrowser.cs → 408줄 (에이전트 진행률 바·파일 탐색기)

WorkflowAnalyzerWindow (929줄):
- WorkflowAnalyzerWindow.xaml.cs → 274줄 (리사이즈·탭·데이터수집)
- WorkflowAnalyzerWindow.Charts.cs → 667줄 (차트·타임라인·패널·유틸)

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 19:55:03 +09:00
795ce835e2 [Phase 42-보완] CLAUDE.md 커밋 메시지 작성 규칙 추가
커밋 메시지 관련 지침 추가:
- 언어: 반드시 한글로 작성
- 제목: [PhaseXX] 한글 요약 형식
- 본문: 변경 파일·줄 수·주요 내용 항목별 상세 기술
- 모호한 영문 단독 커밋 금지

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 19:45:52 +09:00
bf37800311 [Phase 42] ChatWindow.ResponseHandling·LlmService 파셜 분할
ChatWindow.ResponseHandling (1,494줄 → 741줄, 50% 감소):
- ChatWindow.MessageActions.cs (277줄): 버튼이벤트, 메시지검색, 에러복구
- ChatWindow.StatusAndUI.cs (498줄): 우클릭, 팁, AX.md, 글로우, 토스트, 하단바

LlmService (1,010줄 → 263줄, 74% 감소):
- LlmService.Streaming.cs (516줄): 스트리밍 응답, 백엔드별 구현
- LlmService.Helpers.cs (252줄): 헬퍼, 토큰 파싱, Dispose
- 빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 19:45:26 +09:00
c9a6e6442f [Phase 41] SettingsViewModel·AgentLoopService 파셜 클래스 분할
SettingsViewModel (1,855줄 → 320줄, 82.7% 감소):
- SettingsViewModel.Properties.cs (837줄): 바인딩 프로퍼티 전체
- SettingsViewModel.Methods.cs (469줄): Save/Browse/Add 등 메서드
- SettingsViewModelModels.cs (265줄): 6개 모델 클래스 분리

AgentLoopService (1,823줄 → 1,334줄, 26.8% 감소):
- AgentLoopService.Execution.cs (498줄): 병렬 도구 실행, ToolExecutionState
- 빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 19:37:24 +09:00
6448451d78 [Phase 40] ChatWindow 2차 파셜 클래스 분할 (94.5% 감소)
4,767줄 ChatWindow.xaml.cs를 7개 파셜 파일로 추가 분할
메인 파일: 4,767줄 → 262줄 (94.5% 감소)
전체 ChatWindow 파셜 파일: 15개

- ChatWindow.Controls.cs (595줄): 사용자정보, 스크롤, 제목편집, 탭전환
- ChatWindow.WorkFolder.cs (359줄): 작업폴더, 폴더 설정
- ChatWindow.PermissionMenu.cs (498줄): 권한, 파일첨부, 사이드바
- ChatWindow.ConversationList.cs (747줄): 대화목록, 제목편집, 검색
- ChatWindow.Sending.cs (720줄): 전송, 편집모드, 타이머
- ChatWindow.HelpCommands.cs (157줄): /help 도움말
- ChatWindow.ResponseHandling.cs (1,494줄): 응답재생성, 스트리밍, 토스트
- 빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 19:21:52 +09:00
0c997f0149 [Phase 39] FontFamily 캐싱 + LauncherWindow 파셜 클래스 분할
- ThemeResourceHelper에 CascadiaCode/ConsolasCode/ConsolasCourierNew 정적 필드 추가
- 25개 파일, 89개 new FontFamily(...) 호출을 정적 캐시 참조로 교체
- LauncherWindow.xaml.cs (1,563줄) → 5개 파셜 파일로 분할 (63% 감소)
  - LauncherWindow.Theme.cs (116줄): ApplyTheme, 커스텀 딕셔너리 빌드
  - LauncherWindow.Animations.cs (153줄): 무지개 글로우, 애니메이션 헬퍼
  - LauncherWindow.Keyboard.cs (593줄): 단축키 20종, ShowToast, IME 검색
  - LauncherWindow.Shell.cs (177줄): Shell32, SendToRecycleBin, 클릭 핸들러
- 빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 18:54:35 +09:00
08524466d2 [Phase 37-38] ChatWindow·SettingsWindow 파셜 클래스 분할 + 코드 품질 개선
Phase 37 — ChatWindow God Class 파셜 분할 (10,184 → 4,767줄, -53%)
  - ChatWindow.MessageRendering.cs (522줄): 메시지 렌더링, 체크 아이콘
  - ChatWindow.SlashCommands.cs (579줄): 슬래시 명령, 드래그앤드롭
  - ChatWindow.AgentSupport.cs (475줄): 에이전트 루프, 시스템 프롬프트
  - ChatWindow.TaskDecomposition.cs (1,170줄): Plan UI, Diff, 이벤트 배너
  - ChatWindow.Presets.cs (1,280줄): 프리셋, 하단바, 설정 토글
  - ChatWindow.ModelSelector.cs (395줄): 모델 선택, 대화 관리
  - ChatWindow.PreviewAndFiles.cs (1,105줄): 미리보기, 파일 탐색기

Phase 38 — SettingsWindow 파셜 분할 (3,216 → 373줄, -88%)
  - SettingsWindow.UI.cs (802줄): 탭 전환, 독바, 스토리지, 핫키
  - SettingsWindow.Tools.cs (875줄): 도구 카드 UI, AX Agent 탭
  - SettingsWindow.AgentConfig.cs (1,202줄): 모델, 스킬, 훅, MCP

Phase 35-36 — 코드 품질 심층 정리
  - bare catch 전량 → catch (Exception) (109개 파일)
  - ColorConverter → ThemeResourceHelper.HexBrush() (81건)
  - Application.Current as App → CurrentApp 프로퍼티 (15개 파일)
  - AgentContext.Settings DI 주입 (11개 에이전트 도구)
  - PopupMenuHelper 실제 적용 (4개 팝업)

CLAUDE.md: 작업 후 깃 푸시 + 오류 시 롤백 지침 추가
docs: TECHNOLOGY_OVERVIEW.md 신규 작성 (762줄 기술 문서)

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 18:37:54 +09:00
5034 changed files with 64963 additions and 161131 deletions

22
.gitignore vendored Normal file
View File

@@ -0,0 +1,22 @@
# Build outputs
**/bin/
**/obj/
**/publish/
dist/
# Installer payload
src/AxCopilot.Installer/payload.zip
# IDE
.vs/
*.user
*.suo
# OS
Thumbs.db
Desktop.ini
.DS_Store
# Secrets
*.env
credentials.json

View File

@@ -4,6 +4,64 @@
---
## 0. 작업 완료 후 깃 푸시 규칙
### 매 작업 단위 완료 시 반드시 깃 푸시
- Phase 작업(기능 개발, 리팩터링 등) 완료 → `dotnet build` 확인 → 소스 파일만 스테이징 → 커밋 → 푸시
- **빌드 오류 없이 커밋** — `경고 0, 오류 0` 상태에서만 푸시
### 커밋 메시지 작성 규칙 (필수)
- **언어**: 반드시 **한글**로 작성
- **제목**: `[PhaseXX] 한글 요약 제목` 형식, 50자 이내
- **본문**: 작업 내용을 **항목별로 자세히** 기술 — 변경된 파일, 줄 수 변화, 주요 메서드/클래스 목록 포함
- **형식 예시**:
```
[Phase 42] ChatWindow.ResponseHandling·LlmService 파셜 분할
ChatWindow.ResponseHandling (1,494줄 → 741줄, 50% 감소):
- ChatWindow.MessageActions.cs (277줄): 버튼이벤트, 메시지검색, 에러복구
- ChatWindow.StatusAndUI.cs (498줄): 우클릭, 팁, AX.md, 글로우, 토스트, 하단바
LlmService (1,010줄 → 263줄, 74% 감소):
- LlmService.Streaming.cs (516줄): 스트리밍 응답, 백엔드별 구현
- LlmService.Helpers.cs (252줄): 헬퍼, 토큰 파싱, Dispose
- 빌드: 경고 0, 오류 0
```
- **금지**: 영문 단독 커밋 메시지, "fix", "update" 같은 모호한 한 단어 제목
### 오류 복구 불가 시 이전 버전 롤백
작업 중 오류가 복구되지 않으면 깃에서 이전 버전을 받아 작업:
```bash
# 마지막 커밋으로 전체 복구
git reset --hard HEAD
# 특정 커밋으로 복구 (git log로 커밋 해시 확인)
git reset --hard <커밋해시>
# 원격 최신 버전으로 완전 복구
git fetch origin
git reset --hard origin/main
```
- 복구 시도 2회 이상 실패 → 즉시 롤백, 사용자에게 알림
- 롤백 후 원인 분석 → 더 작은 단위로 재작업
### 스테이징 규칙 (빌드 산출물 제외)
```bash
# 소스 코드만 스테이징 (bin/, obj/ 제외)
git add src/AxCopilot/Views/
git add src/AxCopilot/Services/
git add src/AxCopilot/Models/
git add src/AxCopilot/Handlers/
git add src/AxCopilot/ViewModels/
git add src/AxCopilot/Themes/
git add src/AxCopilot/Core/
git add docs/
git add CLAUDE.md
# 절대 추가 금지: bin/, obj/, *.dll, *.exe, *.pdb
```
---
## 1. UI/UX 디자인 원칙
### 기본 컨트롤 사용 금지

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 519 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

View File

@@ -1,19 +0,0 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"includedFrameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "8.0.25"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "8.0.25"
}
],
"configProperties": {
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More