diff --git a/src/agent/agent_loop.rs b/src/agent/agent_loop.rs index 1ef5bf5..8f2069a 100644 --- a/src/agent/agent_loop.rs +++ b/src/agent/agent_loop.rs @@ -933,6 +933,21 @@ impl AgentLoop { Some(tool_defs) }; + // Defense-in-depth: sanitize incomplete tool call sequences + // before EVERY LLM request, not just once at process() entry. + // This catches edge cases where compression, persistence races, + // or delta message merging may have introduced orphaned sequences + // that survived the initial sanitization. + let mid_loop_removed = + crate::bus::message::sanitize_incomplete_tool_call_sequences(&mut messages); + if mid_loop_removed > 0 { + tracing::warn!( + iteration = iteration, + removed_count = mid_loop_removed, + "Mid-loop sanitize removed incomplete tool call sequences before LLM request" + ); + } + // 过滤超出轮次和数量限制的图片 let filtered_messages = filter_images_by_age_and_count( &messages,