fix(theme-create/stream): stream reasoning and output deltas like spinner (Created, ReasoningSummaryDelta, ReasoningContentDelta, OutputTextDelta, OutputItemDone); coalesce into in-flight lines for live UI

This commit is contained in:
James Peter
2025-09-11 06:54:47 +10:00
parent c75704c7ef
commit 53cc6f7b89
@@ -602,9 +602,32 @@ impl ThemeSelectionView {
let mut out = String::new();
while let Some(ev) = stream.next().await {
match ev {
Ok(codex_core::ResponseEvent::OutputTextDelta { delta, .. }) => { let _ = progress_tx.send(ProgressMsg::OutputDelta(delta.clone())); out.push_str(&delta); }
Ok(codex_core::ResponseEvent::ReasoningSummaryDelta { delta, .. }) => { let _ = progress_tx.send(ProgressMsg::ThinkingDelta(delta)); }
Ok(codex_core::ResponseEvent::Created) => {
let _ = progress_tx.send(ProgressMsg::ThinkingDelta("(created)".to_string()));
}
Ok(codex_core::ResponseEvent::ReasoningSummaryDelta { delta, .. }) => {
let _ = progress_tx.send(ProgressMsg::ThinkingDelta(delta));
}
Ok(codex_core::ResponseEvent::ReasoningContentDelta { delta, .. }) => {
let _ = progress_tx.send(ProgressMsg::ThinkingDelta(delta));
}
Ok(codex_core::ResponseEvent::OutputTextDelta { delta, .. }) => {
let _ = progress_tx.send(ProgressMsg::OutputDelta(delta.clone()));
out.push_str(&delta);
}
Ok(codex_core::ResponseEvent::OutputItemDone { item, .. }) => {
if let codex_protocol::models::ResponseItem::Message { content, .. } = item {
for c in content {
if let codex_protocol::models::ContentItem::OutputText { text } = c {
out.push_str(&text);
}
}
}
}
Ok(codex_core::ResponseEvent::Completed { .. }) => break,
Err(e) => {
let _ = progress_tx.send(ProgressMsg::ThinkingDelta(format!("(stream error: {})", e)));
}
_ => {}
}
}