fix: auto-wake after turn if pending messages exist, don't block on recv

This commit is contained in:
damocles 2026-05-16 13:50:11 +02:00
parent d99e0812d0
commit 3d2a7ffec7

View file

@ -165,6 +165,15 @@ async fn serve(
let outcome = turn::drive_turn(&prompt, files, &bus).await; let outcome = turn::drive_turn(&prompt, files, &bus).await;
turn::emit_turn_end(&bus, &outcome); turn::emit_turn_end(&bus, &outcome);
bus.set_state(TurnState::Idle); bus.set_state(TurnState::Idle);
// After turn completes, check if there are pending messages waiting.
// If so, immediately process them instead of blocking on recv().
// This ensures messages queued during the turn are processed ASAP.
let pending = inbox_unread(socket).await;
if pending > 0 {
tracing::info!(%pending, "pending messages after turn; fetching next");
continue; // Loop back to recv() immediately instead of sleeping
}
} }
Ok(AgentResponse::Empty) => { Ok(AgentResponse::Empty) => {
// Idle: brief sleep before next poll to avoid busy-looping // Idle: brief sleep before next poll to avoid busy-looping