/// A reusable conversation client with optional automatic tool execution.
///
/// Manual mode streams blocks as they arrive. Auto mode runs tool rounds first,
/// then yields the final response. Use [`Client::interrupt_handle`] for cancellation
/// from another task without locking the client across an await.