diff --git a/crates/goose-cli/src/scenario_tests/scenario_runner.rs b/crates/goose-cli/src/scenario_tests/scenario_runner.rs index 085d28720a95..00a90778d3ae 100644 --- a/crates/goose-cli/src/scenario_tests/scenario_runner.rs +++ b/crates/goose-cli/src/scenario_tests/scenario_runner.rs @@ -218,7 +218,7 @@ where .update_provider(provider_arc as Arc) .await?; - let mut session = CliSession::new(agent, None, false, None, None, None, None); + let mut session = CliSession::new(agent, None, false, None, None, None, None).await; let mut error = None; for message in &messages { diff --git a/crates/goose-cli/src/session/builder.rs b/crates/goose-cli/src/session/builder.rs index 0c84f41bb983..ace3c24df65c 100644 --- a/crates/goose-cli/src/session/builder.rs +++ b/crates/goose-cli/src/session/builder.rs @@ -133,7 +133,7 @@ async fn offer_extension_debugging_help( } // Create the debugging session - let mut debug_session = CliSession::new(debug_agent, None, false, None, None, None, None); + let mut debug_session = CliSession::new(debug_agent, None, false, None, None, None, None).await; // Process the debugging request println!("{}", style("Analyzing the extension failure...").yellow()); @@ -465,7 +465,8 @@ pub async fn build_session(session_config: SessionBuilderConfig) -> CliSession { session_config.max_turns, edit_mode, session_config.retry_config.clone(), - ); + ) + .await; // Add stdio extensions if provided for extension_str in session_config.extensions { diff --git a/crates/goose-cli/src/session/mod.rs b/crates/goose-cli/src/session/mod.rs index 2bb7b035df72..ea32ef089c53 100644 --- a/crates/goose-cli/src/session/mod.rs +++ b/crates/goose-cli/src/session/mod.rs @@ -119,7 +119,7 @@ pub async fn classify_planner_response( } impl CliSession { - pub fn new( + pub async fn new( agent: Agent, session_id: Option, debug: bool, @@ -129,14 +129,10 @@ impl CliSession { retry_config: Option, ) -> Self { let messages = if let Some(session_id) = &session_id { - tokio::task::block_in_place(|| { - tokio::runtime::Handle::current().block_on(async { - SessionManager::get_session(session_id, true) - .await - .map(|session| session.conversation.unwrap_or_default()) - .unwrap() - }) - }) + SessionManager::get_session(session_id, true) + .await + .map(|session| session.conversation.unwrap_or_default()) + .unwrap() } else { Conversation::new_unvalidated(Vec::new()) }; diff --git a/crates/goose/src/session/session_manager.rs b/crates/goose/src/session/session_manager.rs index ddd4d3f513db..0002d4199a1c 100644 --- a/crates/goose/src/session/session_manager.rs +++ b/crates/goose/src/session/session_manager.rs @@ -630,7 +630,7 @@ impl SessionStorage { async fn create_session(&self, working_dir: PathBuf, description: String) -> Result { let today = chrono::Utc::now().format("%Y%m%d").to_string(); - Ok(sqlx::query_as( + let session_id = sqlx::query_as( r#" INSERT INTO sessions (id, description, working_dir, extension_data) VALUES ( @@ -651,7 +651,13 @@ impl SessionStorage { .bind(&description) .bind(working_dir.to_string_lossy().as_ref()) .fetch_one(&self.pool) - .await?) + .await?; + + sqlx::query("PRAGMA wal_checkpoint") + .execute(&self.pool) + .await?; + + Ok(session_id) } async fn get_session(&self, id: &str, include_messages: bool) -> Result {