창 위치 기억 (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
예약어 실용성 검토 결과: 사무 환경과 무관한 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>
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
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
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
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
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>
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>
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>
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>
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>
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
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
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>
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>
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
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