import type { Message } from './types' export type DeliveryStage = 'saved' | 'queued' | 'delivered' | 'processing' | 'replied' | 'blocked' | 'unknown' export const deliveryLabels: Record = { saved:'已保存', queued:'排队中', delivered:'已送达', processing:'处理中', replied:'已回复', blocked:'受阻', unknown:'待核查' } export function messageDelivery(message: Message, messages: Message[]) { const replied = messages.some(row => row.source === 'agent' && row.reply_to === message.id && row.session_id === message.session_id) let stage: DeliveryStage if (replied) stage = 'replied' else if (message.delivery_stage && message.delivery_stage in deliveryLabels) stage = message.delivery_stage else if (['failed','uncertain','blocked'].includes(message.status)) stage = 'blocked' else if (message.status === 'queued') stage = 'queued' else if (message.status === 'delivered' || message.submission?.state === 'accepted') stage = 'delivered' else if (message.status === 'claimed') stage = 'queued' // A lease alone is not a running native turn. else if (message.status === 'saved') stage = 'saved' else stage = 'unknown' // Transport completion alone does not prove a visible reply. const reason = stage === 'blocked' ? (message.delivery_reason || '结果尚未确认,正在核查;请勿重复发送。') : stage === 'unknown' ? '暂无法确认消息阶段,请刷新查看。' : '' return {stage, label:deliveryLabels[stage], reason, waiting:['queued','processing','blocked','unknown'].includes(stage)} }