chore: archive tools/ui_inspector snapshot before migration removal.

Keep the last in-template copy on main so history can restore it; product continues in jiangchang-ui-recorder.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-07 11:19:14 +08:00
parent 46bc573777
commit 633ecff4e2
92 changed files with 13704 additions and 288 deletions

View File

@@ -0,0 +1,47 @@
"""Per-capture evidence model.
UIState represents a deduplicated semantic state. UIObservation represents
one concrete capture and is therefore never deduplicated.
"""
from __future__ import annotations
import uuid
from dataclasses import dataclass, field
from datetime import datetime
from typing import Any, Optional
SCHEMA_OBSERVATION = "openclaw.ui_inspector.observation.v1"
def _now_iso() -> str:
return datetime.now().astimezone().isoformat()
def _new_id() -> str:
return f"obs_{uuid.uuid4().hex[:12]}"
@dataclass
class UIObservation:
schema: str = SCHEMA_OBSERVATION
id: str = field(default_factory=_new_id)
captured_at: str = field(default_factory=_now_iso)
state_id: str = ""
previous_observation_id: Optional[str] = None
change_reason: str = "capture"
surface: str = "windows"
driver: str = ""
page_id: str = ""
document_id: str = ""
frame_id: str = ""
url: str = ""
page_title: str = ""
tree_path: str = ""
index_path: str = ""
locatable_path: str = ""
screenshot_path: str = ""
stats: dict[str, Any] = field(default_factory=dict)
selection: dict[str, Any] = field(default_factory=dict)
may_contain_sensitive_data: bool = False