Sessions required (#5548)

Co-authored-by: Douwe Osinga <douwe@squareup.com>
This commit is contained in:
Douwe Osinga
2025-11-03 21:04:44 -05:00
committed by GitHub
parent 86c3e42e43
commit 5b93ee587f
31 changed files with 956 additions and 2678 deletions
+2 -1
View File
@@ -6,7 +6,7 @@ use goose::config::ExtensionEntry;
use goose::conversation::Conversation;
use goose::permission::permission_confirmation::PrincipalType;
use goose::providers::base::{ConfigKey, ModelInfo, ProviderMetadata, ProviderType};
use goose::session::{Session, SessionInsights};
use goose::session::{Session, SessionInsights, SessionType};
use rmcp::model::{
Annotations, Content, EmbeddedResource, Icon, ImageContent, JsonObject, RawAudioContent,
RawEmbeddedResource, RawImageContent, RawResource, RawTextContent, ResourceContents, Role,
@@ -444,6 +444,7 @@ derive_utoipa!(Icon as IconSchema);
ModelInfo,
Session,
SessionInsights,
SessionType,
Conversation,
IconSchema,
goose::session::extension_data::ExtensionData,
+11 -9
View File
@@ -18,6 +18,7 @@ use goose::prompt_template::render_global_file;
use goose::providers::{create, create_with_named_model};
use goose::recipe::Recipe;
use goose::recipe_deeplink;
use goose::session::session_manager::SessionType;
use goose::session::{Session, SessionManager};
use goose::{
agents::{extension::ToolInfo, extension_manager::get_parameter_names},
@@ -137,15 +138,16 @@ async fn start_agent(
let counter = state.session_counter.fetch_add(1, Ordering::SeqCst) + 1;
let name = format!("New session {}", counter);
let mut session = SessionManager::create_session(PathBuf::from(&working_dir), name)
.await
.map_err(|err| {
error!("Failed to create session: {}", err);
ErrorResponse {
message: format!("Failed to create session: {}", err),
status: StatusCode::BAD_REQUEST,
}
})?;
let mut session =
SessionManager::create_session(PathBuf::from(&working_dir), name, SessionType::User)
.await
.map_err(|err| {
error!("Failed to create session: {}", err);
ErrorResponse {
message: format!("Failed to create session: {}", err),
status: StatusCode::BAD_REQUEST,
}
})?;
if let Some(recipe) = original_recipe {
SessionManager::update_session(&session.id)
+17 -4
View File
@@ -257,17 +257,30 @@ pub async fn reply(
let session_config = SessionConfig {
id: session_id.clone(),
working_dir: session.working_dir.clone(),
schedule_id: session.schedule_id.clone(),
execution_mode: None,
max_turns: None,
retry_config: None,
};
let user_message = match messages.last() {
Some(msg) => msg,
_ => {
let _ = stream_event(
MessageEvent::Error {
error: "Reply started with empty messages".to_string(),
},
&task_tx,
&task_cancel,
)
.await;
return;
}
};
let mut stream = match agent
.reply(
messages.clone(),
Some(session_config.clone()),
user_message.clone(),
session_config,
Some(task_cancel.clone()),
)
.await
@@ -115,7 +115,6 @@ async fn create_schedule(
paused: false,
current_session_id: None,
process_start_time: None,
execution_mode: req.execution_mode.or(Some("background".to_string())), // Default to background
};
scheduler
.add_scheduled_job(job.clone())