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
220 lines
16 KiB
Markdown
220 lines
16 KiB
Markdown
# AX Commander (런처) 고도화 계획
|
||
|
||
## 현재 상태 (v1.5.0)
|
||
|
||
### 핵심 기능 (44개 핸들러)
|
||
- 퍼지 검색 + 한글 초성 검색 (FuzzyEngine)
|
||
- 44개 프리픽스 명령 (계산기, 이모지, 웹검색, 스니펫, 클립보드, 프로세스 등)
|
||
- 10가지 테마 + 커스텀 테마
|
||
- 플러그인 시스템 (DLL + JSON 스킬)
|
||
- AX Agent AI 대화 통합
|
||
- 글로벌 핫키 (Alt+Space), 무지개 글로우 효과
|
||
- 파일/앱 인덱싱, 북마크 검색, 사용 빈도 랭킹
|
||
- 워크스페이스 프로파일 (창 레이아웃 저장/복원)
|
||
- 클립보드 히스토리, 스니펫 확장
|
||
- 스크린 캡처, 컬러 피커, JSON 도구
|
||
|
||
### 경쟁 서비스 비교 (2026년 3월 기준)
|
||
|
||
| 기능 | AX Commander | Raycast | Alfred 5 | Flow Launcher | PowerToys |
|
||
|------|-------------|---------|----------|---------------|-----------|
|
||
| AI 대화 | O (AX Agent) | O (멀티모델) | 워크플로우 | X | X |
|
||
| MCP 프로토콜 | O | X | X | X | X |
|
||
| 에이전트 코딩 | O (Code 탭) | O | X | X | X |
|
||
| 플러그인 | DLL+JSON | 1500+ 스토어 | 워크플로우 갤러리 | 200+ | 모듈 |
|
||
| 클립보드 히스토리 | O | O (리치) | 파워팩 | 플러그인 | X |
|
||
| 윈도우 관리 | O (22 레이아웃) | 70+ 레이아웃 | X | X | FancyZones |
|
||
| 파일 탐색기 통합 | X | X | X | X | X |
|
||
| Everything 연동 | O (es 프리픽스) | X | X | O | X |
|
||
| 선택 텍스트 AI | O (텍스트 액션 팝업) | O (AI Commands) | X | X | X |
|
||
| 영구 독 UI | O (독 바) | X | X | X | O (Command Palette Dock) |
|
||
| 클라우드 동기화 | X | Pro | Dropbox | X | X |
|
||
| 다국어 | 5개국어 | 영어 | 영어 | 영어 | 다국어 |
|
||
|
||
---
|
||
|
||
## Phase L1 — 차세대 런처 고도화 (v1.5.0)
|
||
|
||
| # | 기능 | 구현 내용 |
|
||
|---|------|----------|
|
||
| L1-1 | 선택 텍스트 AI 명령 | TextActionPopup (커서 위치 팝업), 번역/요약/교정/설명/다시쓰기. 설정 기반 명령 선택, 1개 시 팝업 없이 바로 실행 |
|
||
| L1-2 | Everything 연동 | EverythingHandler (`es` 프리픽스), Everything64.dll P/Invoke, 미설치 시 graceful fallback |
|
||
| L1-3 | 윈도우 타일링 확장 | SnapHandler 11→22개 레이아웃 (3등분, 2/3, 3분할 조합) |
|
||
| L1-4 | 플러그인 자동 설치 | PluginHost.InstallFromZip() + UninstallPlugin(). 로컬 zip 기반 (URL 제외: 사내 보안) |
|
||
| L1-5 | 영구 독 바 | DockBarWindow (화면 하단 고정). 설정 기반 아이템, CPU/RAM, 시계, 글로우, 투명도, 위치 기억 |
|
||
| L1-6 | 대화상자 통합 | FileDialogWatcher (SetWinEventHook + #32770 감지). 열기/저장 시 런처 자동 열기 |
|
||
| L1-7 | 클립보드 핀/카테고리 | IsPinned/Category 필드, 자동 분류(URL/코드/경로), Ctrl+P 핀 토글, #pin/#url/#코드 필터 |
|
||
| L1-8 | 클라우드 설정 동기화 | 보류 (사내 환경) |
|
||
| L1-9 | 커스텀 테마 마켓 | 보류 (사내 환경) |
|
||
| 추가 | 독 바 설정 탭 | 설정창에 독 바 전용 탭 (표시 항목, 투명도, 글로우, 위치 초기화) |
|
||
| 추가 | 설정창 UI 개편 | 테마+색상편집 하위탭 합침, 일반+알림 하위탭 합침, v1.5.0 신기능 설정값 추가 |
|
||
| 추가 | 아이콘 교체 | 다이아몬드 픽셀 ICO (7 sizes). 앱/인스톨러/바로가기/AboutWindow/LauncherWindow/SVG 전체 통일 |
|
||
|
||
---
|
||
|
||
## Phase L1 추가 완료 (v1.5.0)
|
||
|
||
| # | 기능 | 상태 |
|
||
|---|------|------|
|
||
| 추가 | **Windows 탐색기 셸 확장** | ✓ ShellExtensionService — HKCU 레지스트리 등록/해제, 명령줄 파싱 |
|
||
| 추가 | **저장 공간 관리 UI** | ✓ StorageAnalyzer — 사용량 분석, 드라이브 여유, 7/14/30일 정리 |
|
||
| 추가 | **설정 도움말 아이콘** | ✓ AI 관련 설정 17개에 `?` 아이콘 + 커스텀 다크 툴팁 |
|
||
| 추가 | **독 바 실시간 설정** | ✓ 설정 변경 즉시 반영, 자동 표시, 위치 기억 |
|
||
|
||
---
|
||
|
||
## Phase L2 — 클립보드 고도화 + UX 개선 (v1.5.3)
|
||
|
||
> **방향**: 클립보드 히스토리의 실용성 극대화 (이미지 원본 품질, 자동 복사 워크플로우), 런처 UX 개선.
|
||
> Raycast의 리치 클립보드, Alfred의 Snippet 확장을 참고하되 사내 로컬 환경에 최적화.
|
||
|
||
| # | 기능 | 설명 | 우선순위 |
|
||
|---|------|------|----------|
|
||
| L2-1 | **클립보드 이미지 원본 해상도 보존** | 원본 PNG를 `clipboard_images/` 캐시 폴더에 저장, 썸네일(80px)은 표시용으로만 사용. 캐시 정리 정책 (30일/500MB). Enter 복원 시 원본 해상도로 클립보드 복사 | ✅ 완료 |
|
||
| L2-2 | **Shift+Enter 실행 시 자동 클립보드 복사** | Shift+Enter로 외부 뷰어 열기 전에 해당 항목을 시스템 클립보드에 자동 복사. 텍스트/이미지(원본 해상도) 모두 지원 | ✅ 완료 |
|
||
| ✅ L2-3 | **클립보드 이미지 미리보기 창** | `#` 이미지 항목에서 Shift+Enter → `ClipboardImagePreviewWindow`. 원본 해상도 표시, Ctrl+휠/+−/0/F 줌, PNG·JPEG·BMP 저장, Ctrl+C 복사 | 중간 |
|
||
| ✅ L2-4 | **클립보드 검색 강화** | 이미지 OCR 텍스트 추출 → 텍스트 기반 이미지 검색. Windows OCR API (로컬) 활용. `OcrText` 필드, `ExtractOcrTextAsync()`, TFM `net8.0-windows10.0.17763.0` | 중간 |
|
||
| ✅ L2-5 | **클립보드 항목 병합** | Ctrl+Click 마우스 다중 선택 추가 (Shift+↑/↓ 키보드 선택은 기존 구현). `ResultList_PreviewMouseLeftButtonUp` 분기 | 낮음 |
|
||
|
||
### Phase L2 추가 완료 (v1.5.3)
|
||
|
||
| # | 기능 | 상태 |
|
||
|---|------|------|
|
||
| 추가 | **독 바 탭 위치 이동** | ✓ 설정 탭 순서에서 독 바를 3번째(테마 뒤)로 이동 — 사용 빈도 기반 접근성 향상 |
|
||
| 추가 | **설정 기타 탭 접기/열기** | ✓ 등록된 도구, MCP 커넥터, 슬래시 스킬 각각 접기/펼치기 섹션 (화살표 토글) |
|
||
| 추가 | **About 정보 변경** | ✓ ".NET 8" → "Commander + Agent" (기술 스택 비노출 원칙) |
|
||
| 추가 | **가이드 내장 뷰어** | ✓ GuideViewerWindow — 암호화된 가이드를 앱 내 WebBrowser로 복호화 렌더링. 개발자 모드 연동 |
|
||
|
||
---
|
||
|
||
## Phase L3 — 차세대 런처 (v2.0) — 진행 중 / 일부 완료
|
||
|
||
> **방향**: 경쟁 런처(Raycast 1500+ 확장, PowerToys Run)의 에코시스템 수준을 참고하되,
|
||
> 사내 보안/오프라인 환경에서 동작하는 자체 완결형 기능으로 구현.
|
||
> AX Agent **Phase 18 (v2.0)** 과 교차 개발 — 런처와 에이전트의 기능 경계가 겹치는 항목은 통합 구현.
|
||
|
||
| # | 기능 | 설명 | 우선순위 | 교차 |
|
||
|---|------|------|----------|------|
|
||
| ✅ L3-1 | **플러그인 갤러리 + 레지스트리** | 로컬 NAS/Git 레지스트리 기반 탐색/설치/업데이트 인앱 갤러리 | 높음 | → Agent 18-2 |
|
||
| ✅ L3-2 | **웹 검색 AI 요약** | ? 검색 결과를 AI가 요약하여 런처에 표시 | 중간 | → Agent 18-6 |
|
||
| ✅ L3-3 | **AI 스니펫** | `;email {수신자} {주제}` → LLM이 이메일 초안 자동 생성. 기존 스니펫에 AI 확장 | 중간 | → Agent 18-3 |
|
||
| ✅ L3-4 | **파라미터 퀵링크** | `jira {티켓번호}` → URL 템플릿 변수 치환 (사내 JIRA/Confluence 등) | 중간 | → Agent 18-4 |
|
||
| ✅ L3-5 | **파일 태그 시스템** | 파일에 사용자 태그 부여, `tag` 프리픽스로 태그 기반 검색. `file_tags.json` 로컬 저장 | 중간 | — |
|
||
| L3-6 | **오프라인 AI (로컬 SLM)** | ONNX Runtime + phi-3, 서버 없이 번역/요약 | 낮음 | → Agent 18-5 |
|
||
| ✅ L3-7 | **다중 디스플레이** | 마우스 커서 위치 모니터에 런처 표시, 독 바 per-monitor 위치 저장·유효성 검증 | 낮음 | — |
|
||
| ✅ L3-8 | **알림 센터 통합** | `notif` 프리픽스로 알림 이력 조회·검색·초기화. NotificationCenterService 이력 연동, 클립보드 복사 | 낮음 | — |
|
||
| ✅ L3-9 | **런처 미니 위젯** | 하단 위젯 바 4종: 시스템 모니터(CPU/RAM/디스크), 뽀모도로 타이머(`pomo` 프리픽스), 빠른 메모 건수, 서버 상태(Ollama/LLM/MCP). PerformanceMonitorService·PomodoroService·ServerStatusService 싱글턴 | 낮음 | — |
|
||
|
||
---
|
||
|
||
## Phase L4 — 검색/탐색 UX 혁신 + 생산성 확장 (v1.7.x) ✅ 완료
|
||
|
||
> **방향**: Raycast/Alfred 기능 갭 해소 + 기존 L1-7 미완 기능 이행. 런처 단독 완결형 생산성 강화.
|
||
|
||
| # | 기능 | 설명 | 상태 |
|
||
|---|------|------|------|
|
||
| ✅ L4-1 | **파일 탐색기 인라인 패널** | 경로 입력(`C:\`, `D:\`, `~\`) 감지 → 폴더 목록 표시. →/← 키로 폴더 진입/상위 이동. Enter로 탐색기/기본 앱 실행 | 완료 |
|
||
| ✅ L4-2 | **QuickLook F3 강화** | PDF(PdfPig 텍스트 추출), 코드 구문강조(14개 언어 배경색+줄번호), Word/Excel(OpenXml) 미리보기 | 완료 |
|
||
| ✅ L4-3 | **클립보드 핀 & 카테고리** | Ctrl+P 핀 고정, `#pin/#url/#코드/#경로` 필터, 자동 분류. L1-7 기구현 확인 | 완료 |
|
||
| ✅ L4-4 | **검색 히스토리** | ↑/↓ 키로 이전 검색어 탐색. 50개 FIFO `search_history.json` 로컬 저장 | 완료 |
|
||
| ✅ L4-5 | **고급 검색 필터 문법** | `ext:.pdf size:>1mb modified:week in:documents type:file` 인라인 필터. SearchFilterParser + FuzzyEngine.SearchWithFilter() | 완료 |
|
||
| ✅ L4-6 | **계산기 단위 변환 확장** | `=20km` 자동 제안, `=today+30d` 날짜 계산. UnitConverter.AutoSuggest() + DateShortcut | 완료 |
|
||
|
||
---
|
||
|
||
## Phase L5 — 전용 핫키 · OCR · 배치 작업 · 자동화 (v1.7.4~)
|
||
|
||
> **방향**: 파워유저의 반복 작업 제거. Raycast의 핫키 할당, Windows OCR 통합, 멀티파일 배치 이름변경,
|
||
> QuickLook 인라인 편집, 워크플로우 스냅 6가지로 런처를 "행동 허브"로 확장.
|
||
|
||
| # | 기능 | 설명 | 우선순위 |
|
||
|---|------|------|----------|
|
||
| L5-1 | **항목별 전용 핫키** ✅ | 앱·URL·폴더에 `Ctrl+Alt+숫자` 등 글로벌 단축키 직접 할당. `hotkey` 프리픽스로 관리. `HotkeyAssignment` 모델 + `InputListener` 확장 + 설정창 "전용 핫키" 탭 | 높음 |
|
||
| L5-2 | **OCR 화면 텍스트 추출** ✅ | `ocr` 프리픽스 + F4 글로벌 단축키. RegionSelectWindow 재사용, Windows.Media.Ocr 로컬 엔진. 결과 → 클립보드 복사 + 런처 입력창 자동 채움 | 높음 |
|
||
| L5-3 | **QuickLook 인라인 편집** ✅ | F3 미리보기 → Ctrl+E 편집 모드 토글. 텍스트/코드 전체 읽기(300줄 제한 없음). Ctrl+S 저장, ● 수정 마커, Esc 취소 확인, 저장 후 미리보기 새로고침 | 중간 |
|
||
| L5-4 | **앱 세션 스냅** ✅ | `session` 프리픽스. `AppSession/SessionApp` 모델 추가 + `AppSettings.AppSessions` 저장. `SessionHandler`: 목록·실행·new/edit/del 서브커맨드. `SessionEditorWindow`: 세션 이름·설명·앱 행(경로+라벨+스냅 팝업 14종+삭제) 인라인 편집. 실행 시 Process.Start → 창 핸들 대기(6초) → ApplySnapToWindow(P/Invoke SetWindowPos+ShowWindow) | 중간 |
|
||
| L5-5 | **배치 파일 이름 변경** ✅ | `batchren` 프리픽스로 BatchRenameWindow 오픈. 변수 패턴(`{name}`, `{n:3}`, `{date:format}`, `{ext}`) + 정규식 모드(`/old/new/`). 드래그 앤 드롭·폴더/파일 추가, DataGrid 실시간 미리보기, 충돌 감지(배경 붉은 강조), 확장자 유지 토글, 시작 번호 지정, 적용 후 엔트리 갱신 | 중간 |
|
||
| L5-6 | **자동화 스케줄러** ✅ | `sched` 프리픽스. `ScheduleEntry` 모델(Id·Name·Enabled·TriggerType·TriggerTime·WeekDays·TriggerDate·ActionType·ActionTarget·ActionArgs·LastRun) + `AppSettings.Schedules` 저장. `SchedulerService`: 30초 간격 타이머, ±1분 트리거 윈도우, `LastRun.Date == today` 중복 방지, once 실행 후 자동 비활성화. `ScheduleHandler`: 목록(다음 실행 시각 표시)·new·edit·del·Enter 토글. `ScheduleEditorWindow`: 트리거 유형 4종(매일/주중/매주/한번)·요일 다중 선택·날짜 입력, 액션 2종(앱 실행/알림). `ComputeNextRun` + `TriggerLabel` 유틸 공유 | 낮음 |
|
||
|
||
### Phase L5 구현 순서 (권장)
|
||
|
||
```
|
||
L5-1 (핫키) → L5-2 (OCR) → L5-3 (편집) → L5-5 (배치 이름변경) → L5-4 (세션 스냅) → L5-6 (스케줄러)
|
||
```
|
||
|
||
---
|
||
|
||
## Phase L6 — 워크플로우 자동화 확장 (v1.7.5~) ✅ 완료
|
||
|
||
> **방향**: 런처를 "행동 허브"로 완성. 매크로 시퀀서, 컨텍스트 인식, 조건부 스케줄로 반복 작업을 완전 자동화.
|
||
|
||
| # | 기능 | 설명 | 우선순위 |
|
||
|---|------|------|----------|
|
||
| L6-1 | **클립보드 파이프라인** ✅ | `pipe` 프리픽스(기존 구현). upper/lower/trim/sort/unique/b64e/b64d/urle/urld 등 체이닝 | 기존 |
|
||
| L6-2 | **런처 매크로 시퀀서** ✅ | `macro` 프리픽스. `MacroEntry/MacroStep` 모델 + `AppSettings.Macros` 저장. `MacroHandler`: 목록·new·edit·del·Enter 실행. `MacroEditorWindow`: 유형(앱/URL/폴더/알림/PS) + 대상 + 표시이름 + 딜레이(ms) 인라인 행 편집. 재생: 순서대로 Process.Start/알림 실행 | 중간 |
|
||
| L6-3 | **컨텍스트 감지 자동완성** ✅ | `ctx` 프리픽스. `GetForegroundWindow` P/Invoke로 현재 앱 감지. 5개 컨텍스트(웹 브라우저/코드 편집기/오피스/파일 탐색기/커뮤니케이션) → 상황별 런처 명령 제안. Enter 시 해당 프리픽스 런처 입력창에 자동 삽입 | 중간 |
|
||
| L6-4 | **조건부 스케줄** ✅ | `ScheduleEntry.ConditionProcess`(프로세스명) + `ConditionProcessMustRun`(실행중/비실행중) 필드 추가. `SchedulerService.ShouldFire()` 확장: `Process.GetProcessesByName()` 조건 체크. `ScheduleEditorWindow`에 조건 섹션 UI 추가 | 낮음 |
|
||
|
||
### L5-1 항목별 전용 핫키 — 구현 설계
|
||
|
||
```csharp
|
||
// HotkeyAssignment: 단축키 → 실행 대상 매핑 모델
|
||
public record HotkeyAssignment(string HotkeyStr, string TargetPath, string Label);
|
||
|
||
// GlobalHotkeyService 확장
|
||
// - RegisterCustomHotkeys(IEnumerable<HotkeyAssignment>) 추가
|
||
// - 기존 Alt+Space 핫키와 독립 관리 (별도 id 공간)
|
||
|
||
// HotkeyHandler (prefix="hotkey"): 등록/삭제/목록 조회
|
||
// 런처 -> "hotkey set ctrl+alt+1 C:\Apps\Chrome.exe 크롬"
|
||
// 런처 -> "hotkey list" → 등록된 핫키 목록
|
||
// 런처 -> "hotkey del ctrl+alt+1"
|
||
```
|
||
|
||
### L5-2 OCR 화면 텍스트 추출 — 구현 설계
|
||
|
||
```csharp
|
||
// Windows.Media.Ocr.OcrEngine (이미 L2-4 ClipboardOcr에서 사용 중)
|
||
// OcrHandler (prefix="ocr"):
|
||
// 1. 런처 숨김
|
||
// 2. 반투명 오버레이 창(전체화면) 표시 → 마우스 드래그로 영역 선택
|
||
// 3. PrintScreen + crop → BitmapImage → OcrEngine.RecognizeAsync()
|
||
// 4. 결과 텍스트 클립보드 복사 + 런처 재표시 (결과 항목으로 표시)
|
||
// ScreenRegionSelector: 기존 ScreenCaptureHandler의 SelectionOverlay 재사용 가능
|
||
```
|
||
|
||
### L5-3 QuickLook 인라인 편집 — 구현 설계
|
||
|
||
```csharp
|
||
// QuickLookWindow.xaml에 편집 모드 토글 버튼 추가 (타이틀바 우상단 ✏ 아이콘)
|
||
// TextScrollViewer → TextBox (편집 모드에서만 활성)
|
||
// Ctrl+S → File.WriteAllText() + 저장 완료 토스트
|
||
// 수정 감지: TextBox.TextChanged → 타이틀에 "●" 마커
|
||
// Esc → 저장 안 함 확인(CustomMessageBox) 후 미리보기 모드 복귀
|
||
// 편집 가능 확장자: .txt, .md, .log, .cs, .py, .js, .ts, .json, .xml, .yaml 등
|
||
```
|
||
|
||
### L5-5 배치 파일 이름 변경 — 구현 설계
|
||
|
||
```csharp
|
||
// BatchRenameWindow: 선택 파일 목록 + 패턴 입력 + 미리보기 DataGrid
|
||
// 패턴 유형:
|
||
// {name} → 원본 이름
|
||
// {n:3} → 3자리 순번 (001, 002, ...)
|
||
// {date} → 오늘 날짜 (yyyyMMdd)
|
||
// {ext} → 확장자
|
||
// 정규식 치환: /old/new/
|
||
// LauncherWindow: 다중 선택(Shift+↑/↓) 후 F2 → BatchRenameWindow 열기
|
||
```
|
||
|
||
---
|
||
|
||
## 기술 부채 (v1.5.0 해결)
|
||
|
||
| 항목 | 상태 |
|
||
|------|------|
|
||
| SnapHandler 기본 기능만 | ✓ 22개 레이아웃으로 확장 (3등분, 2/3, 3분할 조합 추가) |
|
||
| Everything 미연동 | ✓ EverythingHandler 구현 (`es` 프리픽스, P/Invoke, graceful fallback) |
|
||
| 플러그인 설치 수동 | ✓ PluginHost.InstallFromZip() 로컬 zip 자동 추출·등록 (URL 제외: 사내 보안) |
|
||
| 이미지 클립보드 미지원 | ✓ PNG→Base64 DPAPI 암호화 저장/복원, 앱 재시작 후 이미지 히스토리 유지 |
|