import signal import sys import threading from .config import load_config from .screenshot import ScreenshotCapture from .ai_client import AIClient from .overlay import OverlayWindow from .hotkey import HotkeyManager class SupportAgent: def __init__(self) -> None: self._cfg = load_config() self._overlay = OverlayWindow(self._cfg.overlay) self._screenshot = ScreenshotCapture(self._cfg.screenshot) self._ai = AIClient(self._cfg.ai) self._hotkeys = HotkeyManager( cfg=self._cfg.hotkeys, on_capture=self._on_capture, on_toggle=self._overlay.toggle, ) self._analyzing = False def _on_capture(self) -> None: if self._analyzing: return threading.Thread(target=self._capture_and_analyze, daemon=True).start() def _capture_and_analyze(self) -> None: self._analyzing = True try: self._overlay.set_loading() image_path = self._screenshot.capture() self._ai.analyze_sync(image_path, self._overlay.append_text) except Exception as e: self._overlay.append_text(f"\n\n⚠ 错误:{e}") finally: self._analyzing = False def run(self) -> None: self._hotkeys.start() print("support-agent 已启动") print(f" 截图分析: {self._cfg.hotkeys.capture}") print(f" 显示/隐藏: {self._cfg.hotkeys.toggle}") print("按 Ctrl+C 退出") signal.signal(signal.SIGINT, signal.SIG_DFL) app = self._overlay.app exit_code = app.exec() sys.exit(exit_code) def main() -> None: SupportAgent().run() if __name__ == "__main__": main()