#!/usr/bin/env python3
"""Read-only runtime transcript, without runtime identifiers or local paths.
Usage: observe.py CHECKOUT THREAD_ID LABEL
"""
import sqlite3,json,sys,datetime
from pathlib import Path
checkout,thread,label=sys.argv[1:]
c=sqlite3.connect('file:'+str(Path(checkout)/'.t3/userdata/statev2.sqlite')+'?mode=ro',uri=True)
def rows(table):
 return [json.loads(r[0]) for r in c.execute(f'SELECT payload_json FROM {table} WHERE thread_id=?',(thread,))]
runs=rows('orchestration_v2_projection_runs')
turns=rows('orchestration_v2_projection_provider_turns')
messages=rows('orchestration_v2_projection_messages')
items=rows('orchestration_v2_projection_turn_items')
result={'label':label,'observedAt':datetime.datetime.now(datetime.timezone.utc).isoformat(),'runs':[{'ordinal':r['ordinal'],'status':r['status'],'requestedAt':r['requestedAt'],'completedAt':r['completedAt']} for r in runs],'usage':[t.get('tokenUsage') for t in turns if t.get('tokenUsage')],'compactionRequests':sum(m.get('text','').strip()=='/compact' for m in messages),'errors':[{'code':i.get('failure',{}).get('code'),'class':i.get('failure',{}).get('class')} for i in items if i.get('type')=='error']}
print(json.dumps(result,indent=2))
