Reconcile proven completed inputs without replay and hide internal fact notices
This commit is contained in:
@@ -28,6 +28,31 @@ def atomic_json(path, data):
|
||||
os.replace(tmp, path)
|
||||
|
||||
|
||||
def reconcile_completed(path,client,session_id,thread_id):
|
||||
"""Clear only a proven terminal original execution, never submit another input."""
|
||||
state=json.loads(path.read_text(encoding='utf-8'))
|
||||
record=state.get('inflight') or {}
|
||||
proof=record.get('submission') or {}
|
||||
if (not record.get('message_id') or not proof.get('input_sha256') or not proof.get('turn_id')
|
||||
or proof.get('thread_id')!=thread_id):return False
|
||||
from urllib.parse import quote
|
||||
rows=client.call('/api/messages?session_id='+quote(session_id,safe=''))['messages']
|
||||
original=next((m for m in rows if m['id']==record['message_id']),None)
|
||||
if not original:return False
|
||||
reply=next((m for m in rows if m['id']==original.get('response_id')),None)
|
||||
remote=original.get('submission') or {}
|
||||
if (not reply or reply.get('source')!='agent' or reply.get('reply_to')!=original['id']
|
||||
or original.get('session_id')!=session_id
|
||||
or original.get('status') not in ('completed','failed')
|
||||
or remote.get('thread_id')!=thread_id
|
||||
or remote.get('input_sha256')!=proof['input_sha256']
|
||||
or (proof.get('turn_id') and remote.get('turn_id')!=proof['turn_id'])):return False
|
||||
state.setdefault('delivery_receipts',{})[record['message_id']]=remote
|
||||
for key in ('inflight','pending_completion','needs_reconciliation'):state.pop(key,None)
|
||||
atomic_json(path,state)
|
||||
return True
|
||||
|
||||
|
||||
def redact(text):
|
||||
text = re.sub(r'(?i)(authorization\s*[:=]\s*(?:bearer|token)\s+)\S+', r'\1[REDACTED]', text)
|
||||
text = re.sub(r'\bsk-[A-Za-z0-9_-]{16,}', '[REDACTED]', text)
|
||||
|
||||
Reference in New Issue
Block a user