fixed recipe schedule jobs (#3880)

This commit is contained in:
Lifei Zhou
2025-08-07 11:18:39 +10:00
committed by GitHub
parent a646c7a0f5
commit 67e63624ab
4 changed files with 25 additions and 7 deletions
+2 -2
View File
@@ -1139,8 +1139,8 @@ impl Agent {
let mode = session.and_then(|s| s.execution_mode.as_deref());
match mode {
Some("foreground") => "auto".to_string(),
Some("background") => "chat".to_string(),
Some("foreground") => "chat".to_string(),
Some("background") => "auto".to_string(),
_ => config
.get_param("GOOSE_MODE")
.unwrap_or_else(|_| "auto".to_string()),
+11
View File
@@ -1154,6 +1154,17 @@ async fn run_scheduled_job_internal(
),
})?;
}
if let Some(recipe_extensions) = recipe.extensions {
for extension in recipe_extensions {
agent
.add_extension(extension.clone())
.await
.map_err(|e| JobExecutionError {
job_id: job.id.clone(),
error: format!("Failed to add extension '{}': {}", extension.name(), e),
})?;
}
}
if let Err(e) = agent.update_provider(agent_provider).await {
return Err(JobExecutionError {
+5 -3
View File
@@ -143,7 +143,7 @@ function BaseChatContent({
chatState,
error,
setMessages,
input: _input,
input,
setInput: _setInput,
handleSubmit: engineHandleSubmit,
onStopGoose,
@@ -231,7 +231,9 @@ function BaseChatContent({
useEffect(() => {
const isProcessingResponse =
chatState !== ChatState.Idle && chatState !== ChatState.WaitingForUserInput;
handleAutoExecution(append, isProcessingResponse);
handleAutoExecution(append, isProcessingResponse, () => {
setHasStartedUsingRecipe(true);
});
}, [handleAutoExecution, append, chatState]);
// Use shared session continuation
@@ -528,7 +530,7 @@ function BaseChatContent({
chatState={chatState}
onStop={onStopGoose}
commandHistory={commandHistory}
initialValue={_input || ''}
initialValue={input || ''}
setView={setView}
numTokens={sessionTokenCount}
inputTokens={sessionInputTokens || localInputTokens}
+7 -2
View File
@@ -129,7 +129,7 @@ export const useRecipeManager = (messages: Message[], locationState?: LocationSt
// Get the recipe's initial prompt (always return the actual prompt, don't modify based on conversation state)
const initialPrompt = useMemo(() => {
if (!recipeConfig?.prompt || !recipeAccepted) {
if (!recipeConfig?.prompt || !recipeAccepted || recipeConfig?.isScheduledExecution) {
return '';
}
@@ -184,7 +184,11 @@ export const useRecipeManager = (messages: Message[], locationState?: LocationSt
};
// Auto-execution handler for scheduled recipes
const handleAutoExecution = (append: (message: Message) => void, isLoading: boolean) => {
const handleAutoExecution = (
append: (message: Message) => void,
isLoading: boolean,
onAutoExecute?: () => void
) => {
const hasRequiredParams = recipeConfig?.parameters && recipeConfig.parameters.length > 0;
if (
@@ -205,6 +209,7 @@ export const useRecipeManager = (messages: Message[], locationState?: LocationSt
const userMessage = createUserMessage(finalPrompt);
append(userMessage);
onAutoExecute?.();
}
};