런처 Agent Compare 기능 1차 이식 및 현재 런처 구조 연결

- Agent Compare 기준으로 런처 빠른 실행 칩, 검색 히스토리 탐색, 선택 항목 미리보기 패널을 현재 런처에 이식
- 하단 위젯 바, QuickLook(F3), 화면 OCR(F4), 관련 서비스/partial 파일을 현재 LauncherWindow/LauncherViewModel 구조에 연결
- UsageRankingService 상위 항목 조회와 SearchHistoryService를 추가해 실행 상위 경로/검색 기록이 실제 런처 동작에 반영되도록 정리
- README.md, docs/DEVELOPMENT.md에 이식 범위와 검증 결과를 2026-04-05 11:58 (KST) 기준으로 기록

검증 결과
- dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ 경고 0 / 오류 0
This commit is contained in:
2026-04-05 11:51:43 +09:00
parent 0336904258
commit f7cafe0cfc
17 changed files with 2518 additions and 24 deletions

View File

@@ -0,0 +1,67 @@
using System.Windows;
using System.Windows.Input;
using AxCopilot.Models;
namespace AxCopilot.Views;
public partial class LauncherWindow
{
private QuickLookWindow? _quickLookWindow;
private async void QuickActionChip_Click(object sender, MouseButtonEventArgs e)
{
if (((FrameworkElement)sender).DataContext is not QuickActionChip chip)
return;
var expanded = Environment.ExpandEnvironmentVariables(chip.Path);
Hide();
try
{
await Task.Run(() =>
System.Diagnostics.Process.Start(
new System.Diagnostics.ProcessStartInfo(expanded)
{
UseShellExecute = true
}));
_ = Task.Run(() => Services.UsageRankingService.RecordExecution(chip.Path));
}
catch (Exception ex)
{
Services.LogService.Error($"빠른 실행 칩 열기 실패: {expanded} - {ex.Message}");
}
}
internal void ToggleQuickLook()
{
if (_quickLookWindow != null)
{
_quickLookWindow.Close();
_quickLookWindow = null;
return;
}
if (_vm.SelectedItem?.Data is not Services.IndexEntry indexEntry)
return;
var path = Environment.ExpandEnvironmentVariables(indexEntry.Path);
if (!System.IO.File.Exists(path) && !System.IO.Directory.Exists(path))
return;
var qlLeft = Left + ActualWidth + 8;
var qlTop = Top;
var screen = System.Windows.Forms.Screen.FromHandle(
new System.Windows.Interop.WindowInteropHelper(this).Handle);
if (qlLeft + 400 > screen.WorkingArea.Right)
qlLeft = Left - 408;
_quickLookWindow = new QuickLookWindow(path, this)
{
Left = qlLeft,
Top = qlTop
};
_quickLookWindow.Closed += (_, _) => _quickLookWindow = null;
_quickLookWindow.Show();
}
}