From 385e1716b72341beef2cefe7b6cdc17cf3d9354a Mon Sep 17 00:00:00 2001 From: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com> Date: Tue, 12 May 2026 13:57:02 -0400 Subject: [PATCH] agent+acp: preserve session on retriable agent errors (#544) --- crates/sprout-acp/src/pool.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/sprout-acp/src/pool.rs b/crates/sprout-acp/src/pool.rs index 9ed753bbd..b489f394d 100644 --- a/crates/sprout-acp/src/pool.rs +++ b/crates/sprout-acp/src/pool.rs @@ -1157,8 +1157,12 @@ pub async fn run_prompt_task( } Err(e) => { tracing::error!(target: "pool::prompt", "session_prompt error: {e}"); - // Invalidate only the affected session. - agent.state.invalidate(&source); + // AgentError means the agent caught a problem before mutating + // session state (e.g. bad LLM response). The session is healthy — + // don't invalidate it. Other errors may have corrupted state. + if !matches!(e, AcpError::AgentError(_)) { + agent.state.invalidate(&source); + } let _ = result_tx.send(PromptResult { agent, source,