diff --git a/docs/LAUNCHER_ROADMAP.md b/docs/LAUNCHER_ROADMAP.md index 173697a..19161da 100644 --- a/docs/LAUNCHER_ROADMAP.md +++ b/docs/LAUNCHER_ROADMAP.md @@ -1,8 +1,8 @@ # AX Commander (런처) 고도화 계획 -## 현재 상태 (v2.1.0) +## 현재 상태 (v2.2.0) -### 핵심 기능 (114개 핸들러, L26 완료) +### 핵심 기능 (114개 핸들러, L26 완료 / L27~L29 계획 중) - 퍼지 검색 + 한글 초성 검색 (FuzzyEngine) + **최근 실행 지수 감소 랭킹 (30일 decay)** - 110개+ 프리픽스 명령 (계산기·이모지·웹검색·스니펫·클립보드·프로세스·데이터·네트워크·업무양식 등) - 10가지 테마 + 커스텀 테마 @@ -21,46 +21,88 @@ ## 경쟁 서비스 심층 벤치마킹 (2026년 4월 기준) +> 조사 범위: Raycast v1.104+ (macOS + **Windows 베타 출시**), Alfred 5.6, Flow Launcher 2.1, +> PowerToys Command Palette 0.98, Listary 6.3, Wox 2.0 (개발 중) + ### 주요 런처 기능 매트릭스 -| 기능 | AX Commander | Raycast | Alfred 5 | Flow Launcher | Listary | PowerToys | +| 기능 | AX Commander | Raycast | Alfred 5 | Flow Launcher | PowerToys CP | Listary 6 | |------|:---:|:---:|:---:|:---:|:---:|:---:| -| **플랫폼** | Windows | macOS | macOS | Windows | Windows | Windows | +| **플랫폼** | Windows | macOS + **Win 베타** | macOS | Windows | Windows | Windows | | **기본 앱/파일 검색** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| **한글 초성 검색** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| **AI 대화 통합** | ✅ (AX Agent) | ✅ (AI Commands) | 워크플로우 | ❌ | ❌ | ❌ | -| **MCP / 에이전트 코딩** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | -| **클립보드 히스토리** | ✅ (핀·분류) | ✅ (이미지 포함) | ✅ (파워팩) | 플러그인 | ❌ | ❌ | -| **스니펫 확장** | ✅ | ✅ | ✅ (파워팩) | ❌ | ❌ | ❌ | -| **창 관리** | ✅ (22 레이아웃) | ✅ (70+ 레이아웃) | ❌ | ❌ | ❌ | ✅ (FancyZones) | -| **파일 관리자 통합** | ✅ (대화 감지) | ❌ | ❌ | ❌ | ✅ **핵심** | ❌ | -| **브라우저 북마크 검색** | ❌ **공백** | ✅ | ✅ | ✅ | ❌ | ❌ | -| **브라우저 히스토리 검색** | ❌ **공백** | ✅ | ✅ | 플러그인 | ❌ | ❌ | -| **시스템 볼륨 제어** | ❌ **공백** | ✅ (System Cmds) | ✅ | ❌ | ❌ | ❌ | -| **QR 코드 생성** | ❌ **공백** | ✅ (확장) | ✅ (확장) | 플러그인 | ❌ | ❌ | -| **회의 링크 관리** | ⚠️ (QuickLink 수동) | ✅ (Google Calendar) | ✅ | ❌ | ❌ | ❌ | -| **캘린더 이벤트 조회** | ❌ **공백** | ✅ (오늘 일정 표시) | ✅ | ❌ | ❌ | ❌ | +| **한글 초성 검색** | ✅ **독점** | ❌ | ❌ | ❌ | ❌ | ❌ | +| **한국어 UI** | ✅ **독점** | ❌ | ❌ | ❌ | △ OS 따름 | ❌ | +| **AI 대화 통합** | ✅ AX Agent 3탭 | ✅ Quick AI | △ 워크플로우 | △ Ollama 플러그인 | ❌ | ❌ | +| **MCP 에이전트** | ✅ | ✅ @멘션 방식 | ❌ | ❌ | ❌ | ❌ | +| **사내망 LLM (Ollama)** | ✅ **특화** | ❌ | ❌ | △ 플러그인 | △ Foundry Local | ❌ | +| **AI 자동 모델 선택** | ✅ 폴백 모델 | ✅ Auto Model | ❌ | ❌ | ❌ | ❌ | +| **에이전트 코딩 루프** | ✅ 실구현 | 선언만 | ❌ | ❌ | ❌ | ❌ | +| **사내 보안 AI 게이트** | ✅ **독점** | ❌ | ❌ | ❌ | ❌ | ❌ | +| **클립보드 히스토리** | ✅ 핀·분류·이미지 | ✅ | ✅ | △ 플러그인 | ❌ | ❌ | +| **순차 붙여넣기** | ❌ **공백** | ✅ | ❌ | ❌ | ❌ | ❌ | +| **스니펫 확장** | ✅ | ✅ 동적 플레이스홀더 | ✅ | △ 플러그인 | ❌ | ❌ | +| **창 관리** | ✅ 22 레이아웃 | ✅ 70+ (Win 베타 탑재) | ❌ | ❌ | △ FancyZones 연동 | ❌ | +| **파일 탐색기 인라인** | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ **독점** | +| **파일 미리보기** | △ 텍스트 6줄 | ❌ | ✅ Grid View | ❌ | ❌ | △ 사이드바 | +| **브라우저 북마크 검색** | ❌ **공백** | ✅ 확장 연동 | ✅ | △ 플러그인 | ✅ 내장 | ❌ | +| **브라우저 탭 AI 전달** | ❌ **공백** | ✅ {browser-tab} | ❌ | ❌ | ❌ | ❌ | +| **시스템 볼륨 제어** | ❌ **공백** | ✅ | ✅ | ❌ | ❌ | ❌ | | **화면 밝기 제어** | ❌ **공백** | ✅ | ❌ | ❌ | ❌ | ❌ | -| **스크립트 명령 실행** | ✅ (^ 프리픽스) | ✅ (Script Commands) | ✅ | ✅ | ❌ | ❌ | -| **Everything 연동** | ✅ (es 프리픽스) | ❌ | ❌ | ✅ | ❌ | ❌ | -| **선택 텍스트 AI** | ✅ (팝업) | ✅ (AI Commands) | ❌ | ❌ | ❌ | ❌ | -| **독 바 (영구 표시)** | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | -| **플러그인 마켓** | DLL+JSON | 1,500+ | 갤러리 | 200+ | ❌ | 모듈 | -| **클라우드 동기화** | ❌ (사내 정책) | ✅ (Pro) | Dropbox | ❌ | ❌ | ❌ | -| **다국어·한글 지원** | ✅ **강점** | 영어 | 영어 | 영어 | 영어 | 다국어 | +| **QR 코드 생성** | ❌ **공백** | ✅ | ✅ | △ 플러그인 | ❌ | ❌ | +| **회의 링크 빠른 열기** | △ QuickLink 수동 | ✅ Calendar 연동 | ✅ | ❌ | ❌ | ❌ | +| **winget 앱 설치** | ❌ **공백** | ✅ Win 베타 | ❌ | △ 플러그인 | ❌ | ✅ 내장 | +| **노코드 워크플로우** | ❌ **공백** | △ AI Ext 베타 | ✅ 완전 지원 | ❌ | ❌ | ❌ | +| **스크립트 명령 실행** | ✅ ^ 프리픽스 | ✅ Script Commands | ✅ | ✅ | ✅ | ❌ | +| **Everything 연동** | ✅ es 프리픽스 | ❌ | ❌ | ✅ | ❌ | ❌ | +| **선택 텍스트 AI** | ✅ 팝업 | ✅ AI Commands | ❌ | ❌ | ❌ | ❌ | +| **AI 붙여넣기 변환** | ❌ **공백** | ❌ | ❌ | ❌ | ✅ Advanced Paste | ❌ | +| **OCR** | ✅ | ❌ | ❌ | △ 플러그인 | ✅ Text Extractor | ❌ | +| **독 바 (영구 표시)** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | +| **플러그인 생태계** | DLL+JSON | 1,300+ | 수백+ | 200+ | 내장 중심 | ❌ | +| **클라우드 동기화** | ❌ 사내 정책 | ✅ Pro | ❌ | ❌ | ❌ | ❌ | -### 핵심 공백 분석 — "매일 50회 이상 쓰는 기능" 기준 +### 핵심 공백 분석 — 우선순위 3단계 -경쟁 서비스가 공통으로 제공하지만 AX Commander에 없는 기능을 **사용 빈도**로 정렬: +#### 🔴 즉시 해소 대상 — 경쟁 2개+ 공통 제공, 구현 난이도 낮음, 매일 사용 -| 순위 | 공백 기능 | Raycast | Alfred | Flow | 사용 빈도 | 구현 난이도 | -|:---:|----------|:---:|:---:|:---:|----------|------------| -| 1 | **브라우저 북마크 검색** | ✅ | ✅ | ✅ | 매우 높음 | 낮음 (로컬 JSON 파싱) | -| 2 | **시스템 볼륨 제어** | ✅ | ✅ | ❌ | 매우 높음 | 중간 (Windows Core Audio API) | -| 3 | **QR 코드 생성** | ✅ | ✅ | 플러그인 | 높음 | 낮음 (QRCoder 라이브러리) | -| 4 | **회의 링크 빠른 열기** | ✅ | ✅ | ❌ | 높음 | 낮음 (JSON 설정 기반) | -| 5 | **화면 밝기 제어** | ✅ | ❌ | ❌ | 중간 | 중간 (WMI) | -| 6 | **오늘 캘린더 이벤트** | ✅ | ✅ | ❌ | 중간 | 높음 (Outlook COM / ICS 파싱) | +| 순위 | 공백 기능 | Raycast | Alfred | PowerToys | 구현 방식 | 사무 적합성 | +|:---:|----------|:---:|:---:|:---:|----------|:---:| +| 1 | **브라우저 북마크 검색** (Edge/Chrome) | ✅ | ✅ | ✅ | 로컬 JSON 파싱 | ⭐⭐⭐ | +| 2 | **시스템 볼륨 제어** | ✅ | ✅ | ❌ | Windows Core Audio API | ⭐⭐⭐ | +| 3 | **QR 코드 생성** | ✅ | ✅ | ❌ | QRCoder NuGet (순수 행렬 렌더링) | ⭐⭐ | +| 4 | **회의 링크 전용 관리** | ✅ | ✅ | ❌ | 로컬 JSON + URI Scheme 실행 | ⭐⭐⭐ | +| 5 | **화면 밝기 제어** | ✅ | ❌ | ❌ | WMI MonitorBrightness | ⭐⭐ | +| 6 | **순차 붙여넣기** | ✅ | ❌ | ❌ | ClipboardHistoryHandler 확장 | ⭐⭐ | + +#### 🟠 중기 과제 — 구현 난이도 중간, 차별화 효과 큼 + +| 순위 | 공백 기능 | 경쟁 현황 | 구현 방식 | +|:---:|----------|---------|---------| +| 1 | **winget 앱 검색·설치** | Raycast Win·PowerToys | `winget search/install` subprocess | +| 2 | **스니펫 동적 플레이스홀더** | Raycast {browser-tab} 등 | {date}, {clipboard}, {app}, {user} 치환 | +| 3 | **파일 미리보기 강화** | Alfred Grid View | 이미지 썸네일, PDF 첫 페이지 렌더링 | +| 4 | **AI 붙여넣기 변환** | PowerToys Advanced Paste | 선택 텍스트 → AX Agent 즉시 변환 | + +#### 🟡 장기 과제 — 높은 구현 비용 또는 외부 의존 + +| 공백 기능 | 낮게 본 이유 | +|----------|------------| +| 노코드 워크플로우 편집기 | GUI 빌더 구현 복잡 — `flow` 핸들러 텍스트 방식으로 우선 대응 | +| 파일 탐색기 인라인 검색 | Listary 독점 영역, Hook 방식 불안정 | +| 클라우드 동기화 | 사내 보안 정책상 불가 | +| 1,000개+ 플러그인 스토어 | 생태계 규모는 단기 추격 불가 | + +### AX Commander 경쟁 우위 — 지켜야 할 강점 + +| 강점 | 수준 | 경쟁 대비 | +|------|------|---------| +| **한글 초성 검색 + 한국어 UI** | 독점 | 경쟁 서비스 전무 | +| **사내망 LLM + AI 보안 게이트** | 독점 | 사내 배포 필수 — 타사 구조적 불가 | +| **에이전트 코딩 루프 실구현** | 선두 | Raycast는 방향 선언만, 실제 루프 없음 | +| **한국 특화 핸들러** | 독점 | cal·leave·fix·spell·phrase 등 | +| **독 바 영구 표시** | 차별화 | Raycast·Alfred 모두 없음 | +| **MCP 에이전트 통합** | 동급 | Raycast 2025년 출시, 대등 경쟁 | +| **OCR 통합** | 차별화 | PowerToys와 동급, Raycast 미지원 | ### 기존 핸들러 중 재검토 대상 @@ -541,6 +583,60 @@ public record HotkeyAssignment(string HotkeyStr, string TargetPath, string Label --- +## Phase L27 — 경쟁 공백 즉시 해소: Windows 일상 제어 (v2.3.0) 📋 계획 + +> **방향**: Raycast·Alfred·PowerToys가 공통 제공하나 AX에 없는 **일상 빈도 최상위 기능** 6종 일괄 구현. +> 모두 외부 설치 의존 없이 Windows 네이티브 API + 로컬 파싱으로 구현. + +| # | 기능 | 프리픽스 | 구현 방식 | 사무 적합성 | +|---|------|---------|---------|:---:| +| 📋 L27-1 | **브라우저 북마크 검색** | `bm` | Edge: `%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\Bookmarks` JSON 파싱. Chrome 동일 경로. 제목·URL·폴더 검색. Enter → 기본 브라우저로 열기 | ⭐⭐⭐ | +| 📋 L27-2 | **시스템 볼륨 제어** | `vol` | `Windows.Media.Audio` COM / `NAudio.CoreAudioApi` IAudioEndpointVolume. `vol 50` → 50% 설정, `vol up/down` → ±10%, `vol mute` → 토글. 현재 볼륨 실시간 표시 | ⭐⭐⭐ | +| 📋 L27-3 | **QR 코드 생성** | `qr` | QRCoder NuGet (순수 C# 행렬). `qr {텍스트/URL}` → 128×128 BitmapImage 결과 패널 인라인 표시. Enter → PNG 클립보드 복사. `save` → `%TEMP%\qr.png` 저장 후 탐색기 | ⭐⭐ | +| 📋 L27-4 | **회의 링크 전용 관리** | `meet` | `%APPDATA%\AxCopilot\meet.json` 로컬 저장. `meet add {이름} {URL}` 등록. 서비스 자동 감지 (Zoom/Teams/Google Meet/Webex). Enter → URI 실행. 빈 쿼리 → 전체 목록 | ⭐⭐⭐ | +| 📋 L27-5 | **화면 밝기 제어** | `bright` | WMI `WmiMonitorBrightnessMethods.WmiSetBrightness()`. `bright 70` → 70% 설정. `bright up/down` → ±10%. 노트북 내장 모니터 대상. 외장 모니터는 미지원 안내 | ⭐⭐ | +| 📋 L27-6 | **클립보드 순차 붙여넣기** | `paste` | 클립보드 히스토리 항목 N개를 번호 지정해 순서대로 전송 (`paste 3 1 5` → 3번→1번→5번 순). SendKeys 방식. Raycast "Paste Sequentially" 대응 기능 | ⭐⭐ | + +**구현 순서**: L27-1(bm) → L27-4(meet) → L27-3(qr) → L27-2(vol) → L27-5(bright) → L27-6(paste) +**NuGet 추가**: `QRCoder` (순수 C#, 외부 의존 없음, ~150KB DLL) +**예상 핸들러 파일**: BookmarkHandler.cs, MeetHandler.cs, QrHandler.cs, VolHandler.cs, BrightHandler.cs — PasteHandler.cs 또는 ClipboardHistoryHandler 확장 + +--- + +## Phase L28 — Windows 생태계 통합 + 콘텐츠 UX 강화 (v2.3.0) 📋 계획 + +> **방향**: PowerToys·Raycast Windows 버전이 선점 중인 **Windows 네이티브 통합** + 스니펫·미리보기 UX 수준 향상. +> 외부 설치(winget)가 필요한 기능은 미설치 감지 → 안내 메시지 패턴 적용. + +| # | 기능 | 프리픽스 | 구현 방식 | 경쟁 대비 | +|---|------|---------|---------|---------| +| 📋 L28-1 | **winget 앱 검색·설치** | `pkg` | `winget search {q}` subprocess → 결과 파싱. `pkg install {id}` → 권한 확인 후 실행. `pkg list` → 설치된 앱. winget 미설치 감지 후 안내. PowerToys CP 내장 기능 대응 | PowerToys CP | +| 📋 L28-2 | **스니펫 동적 플레이스홀더** | `snip` 확장 | 기존 SnippetHandler에 치환 엔진 추가. `{date}` → 오늘 날짜, `{time}` → 현재 시각, `{clipboard}` → 현재 클립보드, `{user}` → Windows 사용자명, `{app}` → 포커스 앱명. Raycast 스니펫 플레이스홀더 대응 | Raycast | +| 📋 L28-3 | **파일 미리보기 강화** | 파일 검색 결과 확장 | 기존 텍스트 6줄에서: 이미지(jpg·png·gif·svg) → WPF BitmapImage 썸네일 (120px). PDF → `Windows.Data.Pdf` 첫 페이지 렌더링. 음악(mp3) → 파일 메타(태그·길이·비트레이트). Alfred Grid View 방향 | Alfred 5 | +| 📋 L28-4 | **AI 붙여넣기 변환** | `ap` | 클립보드 텍스트를 AX Agent에 즉시 전달해 변환. `ap 요약`, `ap 번역`, `ap 교정`, `ap 표로 변환` 등. AI 비활성 시 차단. PowerToys Advanced Paste 대응 (사내 LLM 버전) | PowerToys | + +**구현 우선순위**: L28-2(snip 확장) → L28-3(미리보기) → L28-1(pkg) → L28-4(ap) +**주의**: L28-1 winget은 winget 설치 여부 런타임 체크 필수. L28-4는 `AiEnabled` 게이트 필수. + +--- + +## Phase L29 — AX 차별화 심화: 한국어·사내·AI 독점 (v2.4.0) 📋 계획 + +> **방향**: 경쟁 서비스가 구조적으로 따라올 수 없는 **한국어 특화·사내 환경·AI 연동** 깊이 강화. +> Raycast가 Windows로 확장하더라도 절대 복제 불가한 영역. + +| # | 기능 | 프리픽스 | 구현 방식 | 차별화 포인트 | +|---|------|---------|---------|------------| +| 📋 L29-1 | **오프라인 국어사전** | `dict` | 국립국어원 표준국어대사전 오픈 API (사내 모드 차단 → 로컬 SQLite 캐시). `dict {단어}` → 뜻·품사·예문. `dict en {word}` → 내장 영한 사전 (경량 SQLite, ~20MB). 경쟁사 전무 | 한국어 독점 | +| 📋 L29-2 | **명령 체인 (flow)** | `flow` | 여러 핸들러 명령을 순서대로 묶어 실행하는 텍스트 기반 워크플로우. `flow add {이름} {cmd1} > {cmd2} > {cmd3}`. 예: `flow add 출근준비 "remind 09:00 스탠드업" > "today" > "todo list"`. Alfred 워크플로우 경량 대응 | Alfred 대응 | +| 📋 L29-3 | **한국어 맞춤법 교정 강화** | `spell` 확장 | 기존 63개 항목에 사내 용어 사전 추가 기능. `spell add {틀린표현} {올바른표현} [설명]`. `spell import {파일}` → CSV 일괄 등록. 사내 문서·보고서 용어 표준화 용도 | 한국어 독점 | +| 📋 L29-4 | **검색 결과 카테고리 분류** | 전체 검색 강화 | 빈 쿼리·일반 검색 결과를 앱·파일·명령·AI·북마크 카테고리 헤더로 그루핑. 카테고리별 색상 배지. Alfred 5 "Result Types" 방향. 결과 50개 이상 시 카테고리 접기 | Alfred 대응 | + +**구현 우선순위**: L29-4(카테고리) → L29-3(spell 확장) → L29-2(flow) → L29-1(dict) +**외부 의존**: L29-1 사전 API는 사내 모드 차단 → 로컬 SQLite 캐시 선구현 후 API 연동. `dict` SQLite 파일은 별도 선택적 다운로드 (~20MB, 인스톨러 미포함 기본). + +--- + ## 핸들러 추가 기준 (신규 Phase 수립 시 체크리스트) > 아래 기준을 **3개 이상** 충족해야 새 핸들러로 추가.