stream Messages
fun Dm.streamMessages(options: ConversationMessageStreamOptions = ConversationMessageStreamOptions()): Flow<Message>
fun Group.streamMessages(options: ConversationMessageStreamOptions = ConversationMessageStreamOptions()): Flow<Message>
fun Conversation.streamMessages(options: ConversationMessageStreamOptions = ConversationMessageStreamOptions()): Flow<Message>
This cold Flow holds its client before and between collections. Each collection opens a reader. With direct sequential collection, the next read acknowledges the previous message after the collector returns. A buffer or asynchronous operator can let acknowledgement start before downstream work finishes. Cancellation cannot undo an acknowledgement that has started.
Only one default message reader can own progress in a client database, across all group, DM, and filter scopes. A second reader fails with XmtpException.ConsumerOwned. An explicit from cursor opens independent replay/live reading. It does not change default progress or create a durable checkpoint for each downstream consumer.