Skip scheduled sessions for implicit resume (#10178)
Co-authored-by: Douwe M Osinga <douwe@sidewalklabs.com>
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user