from typing import Optional, Callable, List from dataclasses import dataclass, field @dataclass class PendingPatch: patch_text: str file_paths: List[str] generated_by: str timestamp: float class PatchModalManager: def __init__(self): self._pending_patch: Optional[PendingPatch] = None self._show_modal: bool = False self._on_apply_callback: Optional[Callable[[str], bool]] = None self._on_reject_callback: Optional[Callable[[], None]] = None def request_patch_approval(self, patch_text: str, file_paths: List[str], generated_by: str = "Tier 4 QA") -> bool: from time import time self._pending_patch = PendingPatch( patch_text=patch_text, file_paths=file_paths, generated_by=generated_by, timestamp=time() ) self._show_modal = True return True def get_pending_patch(self) -> Optional[PendingPatch]: return self._pending_patch def is_modal_shown(self) -> bool: return self._show_modal def set_apply_callback(self, callback: Callable[[str], bool]) -> None: self._on_apply_callback = callback def set_reject_callback(self, callback: Callable[[], None]) -> None: self._on_reject_callback = callback def apply_patch(self, patch_text: str) -> bool: if self._on_apply_callback: return self._on_apply_callback(patch_text) return False def reject_patch(self) -> None: self._pending_patch = None self._show_modal = False if self._on_reject_callback: self._on_reject_callback() def close_modal(self) -> None: self._show_modal = False def reset(self) -> None: self._pending_patch = None self._show_modal = False self._on_apply_callback = None self._on_reject_callback = None _patch_modal_manager: Optional[PatchModalManager] = None def get_patch_modal_manager() -> PatchModalManager: global _patch_modal_manager if _patch_modal_manager is None: _patch_modal_manager = PatchModalManager() return _patch_modal_manager def reset_patch_modal_manager() -> None: global _patch_modal_manager if _patch_modal_manager: _patch_modal_manager.reset() _patch_modal_manager = None