export interface NegotiationSpeakerParticipants { sourceUserId?: unknown; candidateUserId?: unknown; } export interface NegotiationSpeakerMessage { senderId?: unknown; parts?: unknown; } /** * Resolves the participant whose agent owns the next canonical bilateral turn. * * Participant identities must be nonempty and distinct. Unrelated agent, * system, and owner-settlement messages are ignored while finding the latest * source/candidate message. An ordinary canonical message passes the floor to * the other participant; `ask_user` retains it for the consulting sender's * exact successor. A valid conversation with no canonical history starts with * the source participant. Invalid participant metadata always fails closed. */ export declare function expectedNegotiationSpeaker(participants: NegotiationSpeakerParticipants, messages: readonly NegotiationSpeakerMessage[]): string | null;