Schedule consultation bridges on demand and preserve delivery evidence

This commit is contained in:
aiagent
2026-10-20 00:39:12 -07:00
parent 557f1ee03c
commit 2f633869fe
18 changed files with 483 additions and 56 deletions
+10 -1
View File
@@ -888,11 +888,13 @@ class Store:
@staticmethod
def public_message(row):
from .conversation import delivery_fields
result = {k: row[k] for k in ('id','session_id','text','source','reply_to','status','created','response_id')}
result['outcome'] = row['status'] if row['status'] in ('completed','failed','uncertain') else None
result['origin'] = row['origin']
result['execution'] = 'started' if row['started'] else 'not_started'
result['submission'] = json.loads(row['submission']) if row['submission'] else None
result.update(delivery_fields(dict(row)))
return result
def send(self, data):
@@ -1905,9 +1907,16 @@ class Store:
value=self._decision(row)
if value['session_id']:
session=self._get(db,'sessions',value['session_id'])
rows=db.execute("SELECT * FROM messages WHERE session_id=? AND source='human' AND origin='coordination' AND status IN ('queued','claimed','uncertain')", (value['session_id'],)).fetchall()
now=time.time()
queued=[m for m in rows if m['status']=='queued' or (m['status']=='claimed' and not m['started'] and (m['lease_until'] or 0)<=now)]
uncertain=[m for m in rows if m['status']=='uncertain' or (m['status']=='claimed' and m['started'] and (m['lease_until'] or 0)<=now)]
inflight=[m for m in rows if m not in queued and m not in uncertain]
demand=dict(queued=len(queued),inflight=len(inflight),uncertain=len(uncertain),
human_queued=len(queued),oldest_queued_at=min((m['created'] for m in queued),default=None))
bindings.append(dict(decision_id=value['id'],session_id=value['session_id'],thread_id=value['session_thread_id'],
worktree=session['worktree'],status=value['status'],archive_status=value['archive_status'],
pending_messages=self._decision_pending(db,value)))
pending_messages=self._decision_pending(db,value),demand=demand))
return {'bindings':bindings}
def decision_consultation(self, did, data=None):