Files
weval-l99/ux-agent.py.PAUSED
2026-04-13 12:43:21 +02:00

68 lines
2.4 KiB
Python
Executable File

#!/usr/bin/env python3
"""WEVIA UX Agent v1.0 — Autonomous visual quality checker"""
import subprocess, json, time, datetime
PAGES = [
'enterprise-model','wevia-meeting-rooms','l99-brain','wevia-cortex',
'admin','ai-benchmark','oss-discovery','director','sovereign-claude',
'wevia-master','l99-saas','agents-fleet','agents-valuechain',
'wevia-vs-opus','realtime-monitor-v3'
]
results = {"timestamp": datetime.datetime.now().isoformat(), "pages": [], "issues": []}
for page in PAGES:
url = f"https://weval-consulting.com/{page}.html"
try:
out = subprocess.run([
"python3", "-c", f"""
from playwright.sync_api import sync_playwright
import time
p=sync_playwright().start()
b=p.chromium.launch(headless=True)
pg=b.new_page()
pg.set_viewport_size({{'width':1440,'height':900}})
errs=[]
pg.on('pageerror',lambda e:errs.append(str(e)[:50]))
pg.goto('{url}',wait_until='domcontentloaded',timeout=10000)
time.sleep(2)
# DOM checks
txt=pg.evaluate('()=>document.body.innerText')
issues=[]
if 'undefined' in txt: issues.append('TEXT:undefined')
if 'NaN' in txt: issues.append('TEXT:NaN')
if txt.count('0/0')>0: issues.append('TEXT:0/0')
# Empty badges
badges=pg.locator('.badge').all_text_contents()
for b in badges:
if b.strip() in ['0','?','undefined','null','']: issues.append(f'BADGE_EMPTY:{{b}}')
# JS errors
for e in errs: issues.append(f'JS:{{e}}')
# Screenshot
pg.screenshot(path='/opt/weval-l99/screenshots/ux-{page}.png')
import json
print(json.dumps({{'page':'{page}','js':len(errs),'issues':issues,'size':len(txt)}}))
b.close();p.stop()
"""
], capture_output=True, text=True, timeout=20)
if out.stdout.strip():
data = json.loads(out.stdout.strip())
results["pages"].append(data)
if data["issues"]:
for iss in data["issues"]:
results["issues"].append({"page": page, "issue": iss})
except Exception as e:
results["pages"].append({"page": page, "error": str(e)[:60]})
# Summary
total = len(results["pages"])
clean = sum(1 for p in results["pages"] if not p.get("issues") and not p.get("error"))
results["summary"] = {"total": total, "clean": clean, "issues": len(results["issues"])}
json.dump(results, open("/opt/weval-l99/ux-agent-results.json","w"), indent=2)
print(f"UX AGENT: {clean}/{total} clean | {len(results['issues'])} issues")
for iss in results["issues"][:10]:
print(f" {iss['page']}: {iss['issue']}")