import time import uuid from collections import defaultdict class SessionDB: def __init__(self): # session_id → full timeline self.sessions = {} # session_id → event log self.events = defaultdict(list) # session_id → snapshots (state checkpoints) self.snapshots = defaultdict(list) # ----------------------------- # CREATE SESSION # ----------------------------- def create_session(self, project): sid = str(uuid.uuid4()) self.sessions[sid] = { "project": project, "created_at": time.time(), "status": "active" } return sid # ----------------------------- # EVENT LOGGING (IMMUTABLE) # ----------------------------- def log_event(self, session_id, event_type, payload): event = { "ts": time.time(), "type": event_type, "data": payload } self.events[session_id].append(event) return event # ----------------------------- # SNAPSHOT (STATE CHECKPOINT) # ----------------------------- def snapshot(self, session_id, state): snap = { "ts": time.time(), "state": state } self.snapshots[session_id].append(snap) return snap # ----------------------------- # GET FULL TIMELINE # ----------------------------- def get_session(self, session_id): return { "session": self.sessions.get(session_id), "events": self.events.get(session_id, []), "snapshots": self.snapshots.get(session_id, []) } # ----------------------------- # REPLAY ENGINE INPUT # ----------------------------- def get_replay_stream(self, session_id): return sorted( self.events[session_id], key=lambda e: e["ts"] )