export const AGENT_PENDING_SERVER_ACCEPTANCE_TIMEOUT_MS = 60 * 1000; interface PendingGenerationAcceptanceState { requestMessageId?: string | null; serverUserTurnCountAtStart?: number; userTurnCountAtStart: number; } interface ServerMessageIdentity { id: string; role: string; } export function isAgentGenerationRequestAccepted(params: { pending: PendingGenerationAcceptanceState; serverMessages: ServerMessageIdentity[]; }) { const requestMessageId = String( params.pending.requestMessageId || "" ).trim(); if ( requestMessageId && params.serverMessages.some( (message) => message.role === "user" && message.id === requestMessageId ) ) { return true; } const serverUserMessageCount = params.serverMessages.filter( (message) => message.role === "user" ).length; const baseline = params.pending.serverUserTurnCountAtStart ?? params.pending.userTurnCountAtStart; return serverUserMessageCount > baseline; } export function getAgentGenerationAcceptanceRemainingMs(params: { startedAt: number; now?: number; timeoutMs?: number; }) { const now = params.now ?? Date.now(); const timeoutMs = Math.max( 0, params.timeoutMs ?? AGENT_PENDING_SERVER_ACCEPTANCE_TIMEOUT_MS ); return Math.max(0, timeoutMs - Math.max(0, now - params.startedAt)); }