diff --git a/src/agent/api/mod.rs b/src/agent/api/mod.rs index 26bb293..fac187c 100644 --- a/src/agent/api/mod.rs +++ b/src/agent/api/mod.rs @@ -392,15 +392,37 @@ impl SseReader { } Ok(Ok(None)) => return Ok(None), Ok(Err(e)) => { - self.save_failed_request(&format!("stream error: {}", e)); + let buf_preview = if self.line_buf.is_empty() { + "(empty)".to_string() + } else { + let n = self.line_buf.len().min(500); + format!("{}B: {}", self.line_buf.len(), &self.line_buf[..n]) + }; + let msg = format!( + "stream error after {} chunks, {:.1}s, {} sse lines: {} | buf: {}", + self.chunks_received, + self.stream_start.elapsed().as_secs_f64(), + self.sse_lines_parsed, + e, buf_preview, + ); + let _ = self.ui_tx.send(UiMessage::Debug(msg.clone())); + self.save_failed_request(&msg); return Err(e.into()); } Err(_) => { + let buf_preview = if self.line_buf.is_empty() { + "(empty)".to_string() + } else { + let n = self.line_buf.len().min(500); + format!("{}B: {}", self.line_buf.len(), &self.line_buf[..n]) + }; let msg = format!( - "stream timeout: no data for {}s ({} chunks, {:.1}s elapsed)", + "stream timeout: {}s, {} chunks, {} sse lines, {:.1}s elapsed | buf: {}", self.chunk_timeout.as_secs(), self.chunks_received, - self.stream_start.elapsed().as_secs_f64() + self.sse_lines_parsed, + self.stream_start.elapsed().as_secs_f64(), + buf_preview, ); let _ = self.ui_tx.send(UiMessage::Debug(msg.clone())); self.save_failed_request(&msg);