diff --git a/crates/goose-cli/src/cli.rs b/crates/goose-cli/src/cli.rs index fe1efccbc..46c7d133b 100644 --- a/crates/goose-cli/src/cli.rs +++ b/crates/goose-cli/src/cli.rs @@ -408,7 +408,9 @@ async fn get_or_create_session_id( let resolved_id = if resume { let Some(id) = identifier else { - let sessions = session_manager.list_sessions().await?; + let sessions = session_manager + .list_sessions_by_types(&[SessionType::User]) + .await?; let session_id = sessions .first() .map(|s| s.id.clone()) diff --git a/crates/goose-cli/src/session/builder.rs b/crates/goose-cli/src/session/builder.rs index 2823d374f..de228d6e9 100644 --- a/crates/goose-cli/src/session/builder.rs +++ b/crates/goose-cli/src/session/builder.rs @@ -333,7 +333,10 @@ async fn resolve_session_id( } } } else { - match session_manager.list_sessions().await { + match session_manager + .list_sessions_by_types(&[SessionType::User]) + .await + { Ok(sessions) if !sessions.is_empty() => sessions[0].id.clone(), _ => { output::render_error("Cannot resume - no previous sessions found"); @@ -695,6 +698,8 @@ fn is_provider_unavailable_error(e: &anyhow::Error) -> bool { #[cfg(test)] mod tests { use super::*; + use goose::session::SessionManager; + use tempfile::TempDir; #[test] fn test_session_builder_config_creation() { @@ -758,6 +763,44 @@ mod tests { assert!(!config.fork); } + #[tokio::test] + async fn test_implicit_resume_ignores_newer_scheduled_sessions() { + let temp_dir = TempDir::new().unwrap(); + let session_manager = SessionManager::new(temp_dir.path().to_path_buf()); + let goose_mode = GooseMode::default(); + + let user_session = session_manager + .create_session( + temp_dir.path().to_path_buf(), + "User session".to_string(), + SessionType::User, + goose_mode, + ) + .await + .unwrap(); + session_manager + .create_session( + temp_dir.path().to_path_buf(), + "Scheduled job: test".to_string(), + SessionType::Scheduled, + goose_mode, + ) + .await + .unwrap(); + + let resolved = resolve_session_id( + &SessionBuilderConfig { + resume: true, + ..SessionBuilderConfig::default() + }, + &session_manager, + goose_mode, + ) + .await; + + assert_eq!(resolved, user_session.id); + } + #[test] fn test_truncate_with_ellipsis() { assert_eq!(truncate_with_ellipsis("abc", 5), "abc");