From 3d8deeea4b60e1c5ed98bb55779dee3ea96b73e0 Mon Sep 17 00:00:00 2001 From: jif-oai Date: Wed, 4 Feb 2026 10:57:58 +0000 Subject: [PATCH] fix: single transaction for dyn tools injection (#10614) --- codex-rs/state/src/runtime.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/codex-rs/state/src/runtime.rs b/codex-rs/state/src/runtime.rs index 9a750f1d5..c64b7d56c 100644 --- a/codex-rs/state/src/runtime.rs +++ b/codex-rs/state/src/runtime.rs @@ -419,6 +419,7 @@ ON CONFLICT(id) DO UPDATE SET return Ok(()); } let thread_id = thread_id.to_string(); + let mut tx = self.pool.begin().await?; for (idx, tool) in tools.iter().enumerate() { let position = i64::try_from(idx).unwrap_or(i64::MAX); let input_schema = serde_json::to_string(&tool.input_schema)?; @@ -439,9 +440,10 @@ ON CONFLICT(thread_id, position) DO NOTHING .bind(tool.name.as_str()) .bind(tool.description.as_str()) .bind(input_schema) - .execute(self.pool.as_ref()) + .execute(&mut *tx) .await?; } + tx.commit().await?; Ok(()) }