Fix conversation failure handling and confirmed delivery memories

This commit is contained in:
Richard Clark
2026-09-22 14:17:06 -04:00
parent 5f0fc86cf9
commit 86d57ec9ae
5 changed files with 76 additions and 21 deletions
+18 -1
View File
@@ -10,7 +10,7 @@ export type ConversationRequest={
receiver:string;
selectedPlayer:string;
nearbyBots:string[];
status:'pending'|'processing'|'completed'|'failed';
status:'pending'|'processing'|'awaiting_delivery'|'completed'|'failed';
attempts:number;
};
@@ -124,3 +124,20 @@ export async function cleanupConversations(db:D1Database){
WHERE status IN ('completed','failed') AND completed_at IS NOT NULL AND completed_at<?`)
.bind(before).run();
}
export async function awaitDelivery(db:D1Database,request:ConversationRequest,botId:string,reply:string,commandId:string){
await db.prepare("UPDATE conversation_requests SET status='awaiting_delivery',result=? WHERE id=?")
.bind(JSON.stringify({request,botId,reply,commandId}),request.id).run();
}
export async function pendingDeliveries(db:D1Database){
await ensure(db);
const rows=await db.prepare("SELECT result FROM conversation_requests WHERE status='awaiting_delivery' ORDER BY created_at LIMIT 50").all<{result:string}>();
const deliveries=[];
for(const row of rows.results){
const delivery=JSON.parse(row.result) as {request:ConversationRequest;botId:string;reply:string;commandId:string};
const command=await db.prepare('SELECT status,error FROM ale_commands WHERE id=?').bind(delivery.commandId).first<{status:string;error:string|null}>();
deliveries.push({...delivery,status:command?.status??'pending',error:command?.error});
}
return deliveries;
}