fix: Emit pending items before Completed when stream closes gracefully

- When SSE stream closes with Ok(None), now emits pending assistant_item and reasoning_item BEFORE sending Completed event
- Previously would send Completed immediately without emitting accumulated messages, causing UI to hang with "working" state
- This fixes the hang when API returns 200 OK but SSE stream has no events
- Added debug logging for graceful stream closure

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-17 18:31:24 +01:00
parent a3ced1f246
commit 44dc7a3bed

View File

@@ -645,7 +645,14 @@ async fn process_chat_sse<S>(
return;
}
Ok(None) => {
// Stream closed gracefully emit Completed with dummy id.
// Stream closed gracefully emit any pending items first, then Completed
debug!("Stream closed gracefully (Ok(None)), emitting pending items");
if let Some(item) = assistant_item.take() {
let _ = tx_event.send(Ok(ResponseEvent::OutputItemDone(item))).await;
}
if let Some(item) = reasoning_item.take() {
let _ = tx_event.send(Ok(ResponseEvent::OutputItemDone(item))).await;
}
let _ = tx_event
.send(Ok(ResponseEvent::Completed {
response_id: String::new(),