fix(session): un item.completed tardif n'efface plus le final agent_message Codex — #240
event_supersedes_pending_final ne fait plus annuler le final en attente par tout événement autre que Heartbeat/RateLimited/turn-progress: seuls un progress non-turn Started/Delta, un ToolActivity ou un Error annulent. Le buffering agent_message survive ainsi jusqu'au flush a turn.completed (regréssion codex_agent_message_survives_late_completed_item_as_final).
This commit is contained in:
@ -699,17 +699,21 @@ impl CodexExecSession {
|
||||
}
|
||||
|
||||
fn event_supersedes_pending_final(event: &ReplyEvent) -> bool {
|
||||
!matches!(
|
||||
event,
|
||||
ReplyEvent::Heartbeat
|
||||
| ReplyEvent::RateLimited { .. }
|
||||
| ReplyEvent::Progress {
|
||||
progress: ReplyProgress {
|
||||
kind: ReplyProgressKind::Turn,
|
||||
..
|
||||
}
|
||||
}
|
||||
)
|
||||
match event {
|
||||
ReplyEvent::Progress { progress } => {
|
||||
progress.kind != ReplyProgressKind::Turn
|
||||
&& matches!(
|
||||
progress.stage,
|
||||
ReplyProgressStage::Started | ReplyProgressStage::Delta
|
||||
)
|
||||
}
|
||||
ReplyEvent::ToolActivity { .. } | ReplyEvent::Error { .. } => true,
|
||||
ReplyEvent::Final { .. }
|
||||
| ReplyEvent::TextDelta { .. }
|
||||
| ReplyEvent::Announcement { .. }
|
||||
| ReplyEvent::Heartbeat
|
||||
| ReplyEvent::RateLimited { .. } => false,
|
||||
}
|
||||
}
|
||||
|
||||
fn agent_message_progress_from_line(line: &str) -> Result<Option<ReplyEvent>, AgentSessionError> {
|
||||
|
||||
Reference in New Issue
Block a user