AX Commander 비교본 런처 기능 대량 이식

변경 목적: Agent Compare 아래 비교본의 개발 문서와 런처 소스를 기준으로 현재 AX Commander에 빠져 있던 신규 런처 기능을 동일한 흐름으로 옮겨, 비교본 수준의 기능 폭을 현재 제품에 반영했습니다.

핵심 수정사항: 비교본의 신규 런처 핸들러 다수를 src/AxCopilot/Handlers로 이식하고 App.xaml.cs 등록 흐름에 연결했습니다. 빠른 링크, 파일 태그, 알림 센터, 포모도로, 파일 브라우저, 핫키 관리, OCR, 세션/스케줄/매크로, Git/정규식/네트워크/압축/해시/UUID/JWT/QR 등 AX Commander 기능을 추가했습니다.

핵심 수정사항: 신규 기능이 실제 동작하도록 AppSettings 확장, SchedulerService/FileTagService/NotificationCenterService/IconCacheService/UrlTemplateEngine/PomodoroService 추가, 배치 이름변경/세션/스케줄/매크로 편집 창 추가, NotificationService와 Symbols 보강, QR/OCR용 csproj 의존성과 Windows 타겟 프레임워크를 반영했습니다.

문서 반영: README.md와 docs/DEVELOPMENT.md에 비교본 기반 런처 기능 이식 이력과 검증 결과를 업데이트했습니다.

검증 결과: 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 00:59:45 +09:00
parent 0929778ca7
commit 0336904258
115 changed files with 30749 additions and 1 deletions

View File

@@ -19,6 +19,7 @@ public partial class App : System.Windows.Application
private SettingsService? _settings;
private SettingsWindow? _settingsWindow;
private PluginHost? _pluginHost;
private SchedulerService? _schedulerService;
private ClipboardHistoryService? _clipboardHistory;
private DockBarWindow? _dockBar;
private FileDialogWatcher? _fileDialogWatcher;
@@ -172,6 +173,102 @@ public partial class App : System.Windows.Application
commandResolver.RegisterHandler(new EverythingHandler());
commandResolver.RegisterHandler(new HelpHandler(settings));
commandResolver.RegisterHandler(new ChatHandler(settings));
commandResolver.RegisterHandler(new QuickLinkHandler(settings));
commandResolver.RegisterHandler(new TagHandler());
commandResolver.RegisterHandler(new NotifHandler());
commandResolver.RegisterHandler(new PomoHandler());
commandResolver.RegisterHandler(new FileBrowserHandler());
commandResolver.RegisterHandler(new HotkeyHandler(settings));
commandResolver.RegisterHandler(new OcrHandler());
commandResolver.RegisterHandler(new SessionHandler(settings));
commandResolver.RegisterHandler(new BatchRenameHandler());
_schedulerService = new SchedulerService(settings);
_schedulerService.Start();
commandResolver.RegisterHandler(new ScheduleHandler(settings));
commandResolver.RegisterHandler(new MacroHandler(settings));
commandResolver.RegisterHandler(new ContextHandler());
commandResolver.RegisterHandler(new GitHandler());
commandResolver.RegisterHandler(new RegexHandler());
commandResolver.RegisterHandler(new TimeZoneHandler());
commandResolver.RegisterHandler(new NetDiagHandler());
commandResolver.RegisterHandler(new FileHashHandler());
commandResolver.RegisterHandler(new ZipHandler());
commandResolver.RegisterHandler(new EventLogHandler());
commandResolver.RegisterHandler(new SshHandler(settings));
commandResolver.RegisterHandler(new PasswordGenHandler());
commandResolver.RegisterHandler(new SubnetHandler());
commandResolver.RegisterHandler(new CleanHandler());
commandResolver.RegisterHandler(new BaseConvertHandler());
commandResolver.RegisterHandler(new XmlHandler());
commandResolver.RegisterHandler(new UuidHandler());
commandResolver.RegisterHandler(new CertHandler());
commandResolver.RegisterHandler(new LoremHandler());
commandResolver.RegisterHandler(new CsvHandler());
commandResolver.RegisterHandler(new JwtHandler());
commandResolver.RegisterHandler(new CronHandler());
commandResolver.RegisterHandler(new UnicodeHandler());
commandResolver.RegisterHandler(new HttpTesterHandler());
commandResolver.RegisterHandler(new HostsHandler());
commandResolver.RegisterHandler(new MorseHandler());
commandResolver.RegisterHandler(new StartupHandler());
commandResolver.RegisterHandler(new DnsQueryHandler());
commandResolver.RegisterHandler(new PathHandler());
commandResolver.RegisterHandler(new DriveHandler());
commandResolver.RegisterHandler(new AgeHandler());
commandResolver.RegisterHandler(new WolHandler());
commandResolver.RegisterHandler(new RegHandler());
commandResolver.RegisterHandler(new TipHandler());
commandResolver.RegisterHandler(new FontHandler());
commandResolver.RegisterHandler(new WslHandler());
commandResolver.RegisterHandler(new CurrencyHandler());
commandResolver.RegisterHandler(new BmiHandler());
commandResolver.RegisterHandler(new MdHandler());
commandResolver.RegisterHandler(new PingHandler());
commandResolver.RegisterHandler(new DockerHandler());
commandResolver.RegisterHandler(new TodoHandler());
commandResolver.RegisterHandler(new TableHandler());
commandResolver.RegisterHandler(new UnitHandler());
commandResolver.RegisterHandler(new NumHandler());
commandResolver.RegisterHandler(new YamlHandler());
commandResolver.RegisterHandler(new GitignoreHandler());
commandResolver.RegisterHandler(new SqlHandler());
commandResolver.RegisterHandler(new TextCaseHandler());
commandResolver.RegisterHandler(new AspectHandler());
commandResolver.RegisterHandler(new AbbrHandler());
commandResolver.RegisterHandler(new CalcHandler());
commandResolver.RegisterHandler(new TimerHandler());
commandResolver.RegisterHandler(new IpInfoHandler());
commandResolver.RegisterHandler(new NpmHandler());
commandResolver.RegisterHandler(new HexHandler());
commandResolver.RegisterHandler(new RandHandler());
commandResolver.RegisterHandler(new StrHandler());
commandResolver.RegisterHandler(new PermHandler());
commandResolver.RegisterHandler(new TomlHandler());
commandResolver.RegisterHandler(new LogHandler());
commandResolver.RegisterHandler(new PsHandler());
commandResolver.RegisterHandler(new KeyHandler());
commandResolver.RegisterHandler(new ProcHandler());
commandResolver.RegisterHandler(new XlHandler());
commandResolver.RegisterHandler(new PipHandler());
commandResolver.RegisterHandler(new FormHandler());
commandResolver.RegisterHandler(new CalHandler());
commandResolver.RegisterHandler(new LeaveHandler());
commandResolver.RegisterHandler(new WorkTimeHandler());
commandResolver.RegisterHandler(new FixHandler());
commandResolver.RegisterHandler(new SpellHandler());
commandResolver.RegisterHandler(new ContactHandler());
commandResolver.RegisterHandler(new RemindHandler());
commandResolver.RegisterHandler(new PhraseHandler());
commandResolver.RegisterHandler(new TodayHandler());
commandResolver.RegisterHandler(new VolHandler());
commandResolver.RegisterHandler(new QrHandler());
commandResolver.RegisterHandler(new MeetHandler());
commandResolver.RegisterHandler(new BrightHandler());
commandResolver.RegisterHandler(new PasteHandler(_clipboardHistory));
commandResolver.RegisterHandler(new PkgHandler());
commandResolver.RegisterHandler(new ApHandler());
commandResolver.RegisterHandler(new DictHandler());
commandResolver.RegisterHandler(new FlowHandler());
// ─── 플러그인 로드 ────────────────────────────────────────────────────
var pluginHost = new PluginHost(settings, commandResolver);
@@ -848,6 +945,7 @@ public partial class App : System.Windows.Application
_inputListener?.Dispose();
_clipboardHistory?.Dispose();
_indexService?.Dispose();
_schedulerService?.Dispose();
_sessionTracking?.Dispose();
_worktimeReminder?.Dispose();
_trayIcon?.Dispose();