Commit Graph

29 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
deffb33cf9 Initial commit to new repository 2026-04-03 18:23:52 +09:00