From cd8f718bbb287164e042eacf151008ad912721f0 Mon Sep 17 00:00:00 2001 From: Angie Jones Date: Mon, 1 Jun 2026 18:28:58 -0500 Subject: [PATCH] Fix scheduled recipe session params (#9553) Signed-off-by: Angie Jones --- crates/goose-server/src/routes/agent.rs | 96 ++++++++++++++----------- ui/desktop/src/components/BaseChat.tsx | 13 ++-- ui/desktop/src/hooks/useAutoSubmit.ts | 4 ++ 3 files changed, 68 insertions(+), 45 deletions(-) diff --git a/crates/goose-server/src/routes/agent.rs b/crates/goose-server/src/routes/agent.rs index be5793f1..62889bde 100644 --- a/crates/goose-server/src/routes/agent.rs +++ b/crates/goose-server/src/routes/agent.rs @@ -468,27 +468,35 @@ async fn update_from_session( status: StatusCode::INTERNAL_SERVER_ERROR, })?; if let Some(recipe) = session.recipe { - match build_recipe_with_parameter_values( - &recipe, - session.user_recipe_values.unwrap_or_default(), - ) - .await - { - Ok(Some(recipe)) => { - if let Some(prompt) = apply_recipe_to_agent(&agent, &recipe, true).await { - agent - .extend_system_prompt("recipe".to_string(), prompt) - .await; + if session.session_type == SessionType::Scheduled { + if let Some(prompt) = apply_recipe_to_agent(&agent, &recipe, true).await { + agent + .extend_system_prompt("recipe".to_string(), prompt) + .await; + } + } else { + match build_recipe_with_parameter_values( + &recipe, + session.user_recipe_values.unwrap_or_default(), + ) + .await + { + Ok(Some(recipe)) => { + if let Some(prompt) = apply_recipe_to_agent(&agent, &recipe, true).await { + agent + .extend_system_prompt("recipe".to_string(), prompt) + .await; + } + } + Ok(None) => { + // Recipe has missing parameters + } + Err(e) => { + return Err(ErrorResponse { + message: e.to_string(), + status: StatusCode::INTERNAL_SERVER_ERROR, + }); } - } - Ok(None) => { - // Recipe has missing parameters - } - Err(e) => { - return Err(ErrorResponse { - message: e.to_string(), - status: StatusCode::INTERNAL_SERVER_ERROR, - }); } } } @@ -758,27 +766,35 @@ async fn restart_agent_internal( })?; if let Some(ref recipe) = session.recipe { - match build_recipe_with_parameter_values( - recipe, - session.user_recipe_values.clone().unwrap_or_default(), - ) - .await - { - Ok(Some(recipe)) => { - if let Some(prompt) = apply_recipe_to_agent(&agent, &recipe, true).await { - agent - .extend_system_prompt("recipe".to_string(), prompt) - .await; + if session.session_type == SessionType::Scheduled { + if let Some(prompt) = apply_recipe_to_agent(&agent, recipe, true).await { + agent + .extend_system_prompt("recipe".to_string(), prompt) + .await; + } + } else { + match build_recipe_with_parameter_values( + recipe, + session.user_recipe_values.clone().unwrap_or_default(), + ) + .await + { + Ok(Some(recipe)) => { + if let Some(prompt) = apply_recipe_to_agent(&agent, &recipe, true).await { + agent + .extend_system_prompt("recipe".to_string(), prompt) + .await; + } + } + Ok(None) => { + // Recipe has missing parameters + } + Err(e) => { + return Err(ErrorResponse { + message: e.to_string(), + status: StatusCode::INTERNAL_SERVER_ERROR, + }); } - } - Ok(None) => { - // Recipe has missing parameters - } - Err(e) => { - return Err(ErrorResponse { - message: e.to_string(), - status: StatusCode::INTERNAL_SERVER_ERROR, - }); } } } diff --git a/ui/desktop/src/components/BaseChat.tsx b/ui/desktop/src/components/BaseChat.tsx index bee64543..d691dad9 100644 --- a/ui/desktop/src/components/BaseChat.tsx +++ b/ui/desktop/src/components/BaseChat.tsx @@ -135,7 +135,7 @@ export default function BaseChat({ return initialMessage; }, [initialMessage, recipe?.prompt, session?.user_recipe_values]); - const canAutoSubmit = !recipe || hasNotAcceptedRecipe === false; + const canAutoSubmit = session?.session_type === 'scheduled' || !recipe || hasNotAcceptedRecipe === false; useAutoSubmit({ sessionId, @@ -208,7 +208,7 @@ export default function BaseChat({ }, [messages]); useEffect(() => { - if (!recipe || !isActiveSession) return; + if (!recipe || !isActiveSession || session?.session_type === 'scheduled') return; (async () => { const accepted = await window.electron.hasAcceptedRecipeBefore(recipe); @@ -219,7 +219,7 @@ export default function BaseChat({ setHasRecipeSecurityWarnings(scanResult.has_security_warnings); } })(); - }, [recipe, isActiveSession]); + }, [recipe, isActiveSession, session?.session_type]); const handleRecipeAccept = async (accept: boolean) => { if (recipe && accept) { @@ -527,7 +527,7 @@ export default function BaseChat({ - {recipe && isActiveSession && ( + {recipe && isActiveSession && session?.session_type !== 'scheduled' && ( handleRecipeAccept(true)} @@ -541,7 +541,10 @@ export default function BaseChat({ /> )} - {recipe?.parameters && recipe.parameters.length > 0 && !session?.user_recipe_values && ( + {recipe?.parameters && + recipe.parameters.length > 0 && + !session?.user_recipe_values && + session?.session_type !== 'scheduled' && ( { + if (session.session_type === 'scheduled') { + return false; + } + const recipe = session.recipe; return recipe?.parameters && recipe.parameters.length > 0 && !session.user_recipe_values; }, []);