1c8cb18d8a
Replaced session.read(path) (buffers entire file in memory, OOM risk for large files) with session.open(path) + SftpReader — a streaming Read bridge that wraps an open SFTP file handle and reads in bounded chunks via AsyncReadExt::read + block_on. SftpReader uses Mutex<File> for thread safety and tokio::runtime::Handle to bridge async→sync. Each Read::read() call issues a single SFTP read request for a bounded chunk — large files are never buffered in memory. Updated module doc to document the streaming read surface. 1433 tests pass (default), 1442 with --features sftp, zero warnings.