import datetime,hashlib,json,time,urllib.request
from pathlib import Path
folder=Path(__file__).parent
sid='01a0fcd2-7b96-77fb-a57a-40bbfb9fe5da'
expected='网络恢复验证完成。'
def get(path):
 with urllib.request.urlopen('http://127.0.0.1:18081'+path,timeout=5) as response:return json.load(response)
body=json.dumps({'text':'仅进行网络韧性验收：用 bash 执行 sleep 20，最后只回复：'+expected+' 不要修改文件，不要触发 Speech 或 TTS。'}).encode()
request=urllib.request.Request('http://127.0.0.1:18081/api/agents/pi/sessions/'+sid+'/input',data=body,headers={'Content-Type':'application/json'},method='POST')
with urllib.request.urlopen(request,timeout=15) as response:
 print(json.dumps({'input_status':response.status,'time':datetime.datetime.now(datetime.timezone.utc).isoformat()}),flush=True)
previous=None
with (folder/'agent-interruption-samples.jsonl').open('w',buffering=1) as out:
 for i in range(181):
  sample={'time':datetime.datetime.now(datetime.timezone.utc).isoformat()}
  try:
   status=get('/api/status'); d=next(x for x in status['devices'] if x['device_id']=='esp32s3-28848543a200')
   a=next(x for x in status['pi_sessions'] if x['session_id']==sid)
   final=a.get('final_text','')
   sample.update(online=d['online'],target=d['target'],state=a['state'],elapsed_seconds=a['elapsed_seconds'],turn_id=a.get('turn_id'),final_bytes=len(final.encode()),final_matches=final.strip().rstrip('。.!！')==expected.rstrip('。'),final_hash=hashlib.sha256(final.encode()).hexdigest(),pending=len(get('/api/approvals')))
  except Exception as error:sample['error']=type(error).__name__
  out.write(json.dumps(sample)+'\n')
  current=(sample.get('online'),sample.get('state'),sample.get('pending'))
  if current!=previous or i%30==0:print(json.dumps(sample),flush=True);previous=current
  if i<180:time.sleep(1)
