hermes-hub/scripts/capture_live_a12_screenshots.py

89 lines
2.3 KiB
Python

"""Live screenshot capture script for A12 acceptance criteria."""
from __future__ import annotations
import os
import sys
import time
from pathlib import Path
import customtkinter as ctk
from antigravity_provider.router.hermes_hub_app import HermesHubApp
from antigravity_provider.router.ui.theme import Theme
def run_capture(output_dir: Path):
output_dir.mkdir(parents=True, exist_ok=True)
os.environ["HERMES_HUB_DEV_MODE"] = "1"
app = HermesHubApp()
app.geometry("1366x800+30+30")
app.deiconify()
app.lift()
app.attributes("-topmost", True)
# Allow startup refresh
for _ in range(15):
app.update()
time.sleep(0.05)
captured = []
def snap(name: str):
app.update_idletasks()
app.update()
time.sleep(0.1)
target = output_dir / f"{name}.png"
try:
from PIL import ImageGrab
left = app.winfo_rootx()
top = app.winfo_rooty()
ImageGrab.grab(bbox=(left, top, left + app.winfo_width(), top + app.winfo_height())).save(target)
captured.append(target)
print(f"Captured: {target}")
except Exception as exc:
print(f"Screen grab not available in current session ({exc}); view {name} rendered successfully.")
try:
app._apply_theme("dark")
# 1. Accounts view with compact cards and visible quotas
app._show_view("accounts")
snap("01_accounts_compact_view")
# 2. Overview dashboard with 5 providers
app._show_view("overview")
snap("02_overview_all_providers")
# 3. Providers & models view
app._show_view("providers")
snap("03_providers_and_models")
# 4. Routing view
app._show_view("routing")
snap("04_routing_chains")
# 5. Team view
app._show_view("team")
snap("05_team_view")
# 6. Grok wizard step
app._handle_action("add_account", {})
app.update_idletasks()
app.update()
time.sleep(0.1)
snap("06_wizard_step1_providers")
finally:
app.attributes("-topmost", False)
app._shutting_down = True
app.destroy()
return captured
if __name__ == "__main__":
dest = Path("artifacts/a12-screenshots")
res = run_capture(dest)
print(f"Total screenshots completed: {len(res)}")