Commit Graph

7 Commits

Author SHA1 Message Date
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
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
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
b750849c9f [Phase52] 7개 파일 추가 분리 — 14개 파일로 재구성
LlmService.Streaming:
- LlmService.Streaming.cs: 516 → 256줄 (Ollama/OpenAI 유지)
- LlmService.GeminiClaude.cs (신규): Gemini+Claude 스트리밍 (~260줄)

DocxSkill:
- DocxSkill.cs: 543 → 158줄 (ExecuteAsync 유지)
- DocxSkill.Builders.cs (신규): 11개 문서 빌더 헬퍼 (290줄)

ChartSkill:
- ChartSkill.cs: 537 → 174줄 (ExecuteAsync+RenderChart 유지)
- ChartSkill.Renderers.cs (신규): 7개 차트 렌더러+헬퍼+Dataset (280줄)

ScreenCaptureHandler:
- ScreenCaptureHandler.cs: 637 → 241줄 (기본 캡처 유지)
- ScreenCaptureHandler.Helpers.cs (신규): 스크롤/영역 캡처+헬퍼 (310줄)

SystemInfoHandler:
- SystemInfoHandler.cs: 509 → 352줄
- SystemInfoHandler.Helpers.cs (신규): 8개 헬퍼+StarInfoHandler (161줄)

AppSettings:
- AppSettings.cs: 564 → 309줄 (AppSettings/Launcher/CustomTheme 유지)
- AppSettings.Models.cs (신규): 14개 설정 모델 클래스 (233줄)

SkillEditorWindow:
- SkillEditorWindow.xaml.cs: 528 → 303줄
- SkillEditorWindow.PreviewSave.cs (신규): 미리보기+저장+로드 (226줄)

빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 21:40:56 +09:00
f5a1ba999c [Phase 45] AppSettings.cs 클래스 파일 분리 (57% 감소)
31개 클래스 혼재 AppSettings.cs (1,320줄)를 3개 파일로 분리:
- AppSettings.cs → 564줄 (AppSettings·LauncherSettings·CustomThemeColors 등 17개 클래스)
- AppSettings.LlmSettings.cs → 481줄 (LlmSettings 408줄·CodeSettings)
- AppSettings.AgentConfig.cs → 284줄 (권한·훅·이벤트·모델·프리셋 등 12개 클래스)

모두 독립 top-level 클래스 (partial 불필요)
빌드: 경고 0, 오류 0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 20:10:03 +09:00
deffb33cf9 Initial commit to new repository 2026-04-03 18:23:52 +09:00