Compare commits

..

63 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
4902 changed files with 37665 additions and 137106 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

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.

Binary file not shown.

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