From 156f47edd0ec739df98ce641559bdaca51a81d0d Mon Sep 17 00:00:00 2001 From: jif-oai Date: Wed, 11 Feb 2026 14:34:11 +0000 Subject: [PATCH] feat: close mem agent after consolidation (#11455) Close the phase-2 agent of memory when it's done Fire and forget (i.e. best effort) --- codex-rs/core/src/memories/startup/phase2.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/codex-rs/core/src/memories/startup/phase2.rs b/codex-rs/core/src/memories/startup/phase2.rs index fb5483a9c..137add783 100644 --- a/codex-rs/core/src/memories/startup/phase2.rs +++ b/codex-rs/core/src/memories/startup/phase2.rs @@ -43,7 +43,7 @@ pub(super) fn spawn_phase2_completion_task( } }; - run_phase2_completion_task( + let final_status = run_phase2_completion_task( Arc::clone(&state_db), ownership_token, completion_watermark, @@ -51,6 +51,17 @@ pub(super) fn spawn_phase2_completion_task( status_rx, ) .await; + if matches!(final_status, AgentStatus::Shutdown | AgentStatus::NotFound) { + return; + } + + tokio::spawn(async move { + if let Err(err) = agent_control.shutdown_agent(consolidation_agent_id).await { + warn!( + "failed to auto-close global memory consolidation agent {consolidation_agent_id}: {err}" + ); + } + }); }); } @@ -60,7 +71,7 @@ async fn run_phase2_completion_task( completion_watermark: i64, consolidation_agent_id: ThreadId, mut status_rx: watch::Receiver, -) { +) -> AgentStatus { let final_status = { let mut heartbeat_interval = tokio::time::interval(Duration::from_secs(PHASE_TWO_JOB_HEARTBEAT_SECONDS)); @@ -131,7 +142,7 @@ async fn run_phase2_completion_task( ); } } - return; + return final_status; } let failure_reason = phase2_failure_reason(&final_status); @@ -139,6 +150,7 @@ async fn run_phase2_completion_task( warn!( "memory phase-2 global consolidation agent finished with non-success status: agent_id={consolidation_agent_id} final_status={final_status:?}" ); + final_status } async fn mark_phase2_failed_with_recovery(