diff --git a/ui/desktop/src/components/BaseChat.tsx b/ui/desktop/src/components/BaseChat.tsx index 43e490f516..c813ed204f 100644 --- a/ui/desktop/src/components/BaseChat.tsx +++ b/ui/desktop/src/components/BaseChat.tsx @@ -105,6 +105,8 @@ export default function BaseChat({ onStreamFinish, }); + const recipe = session?.recipe; + useAutoSubmit({ sessionId, session, @@ -169,7 +171,6 @@ export default function BaseChat({ session, }); - const recipe = session?.recipe; const { setProviderAndModel } = useModelAndProvider(); useEffect(() => { diff --git a/ui/desktop/src/components/recipes/RecipesView.tsx b/ui/desktop/src/components/recipes/RecipesView.tsx index 440433da93..7a0f3c367e 100644 --- a/ui/desktop/src/components/recipes/RecipesView.tsx +++ b/ui/desktop/src/components/recipes/RecipesView.tsx @@ -156,6 +156,7 @@ export default function RecipesView() { setView('pair', { disableAnimation: true, resumeSessionId: session.id, + initialMessage: recipe.prompt ? { msg: recipe.prompt, images: [] } : undefined, }); } catch (error) { console.error('Failed to load recipe:', error); diff --git a/ui/desktop/src/hooks/useAutoSubmit.ts b/ui/desktop/src/hooks/useAutoSubmit.ts index f418b25d4a..4d4eb52587 100644 --- a/ui/desktop/src/hooks/useAutoSubmit.ts +++ b/ui/desktop/src/hooks/useAutoSubmit.ts @@ -50,6 +50,11 @@ export function useAutoSubmit({ ); }, [sessionId]); + const hasUnfilledParameters = useCallback((session: Session) => { + const recipe = session.recipe; + return recipe?.parameters && recipe.parameters.length > 0 && !session.user_recipe_values; + }, []); + // Auto-submit logic useEffect(() => { const currentSessionId = searchParams.get('resumeSessionId'); @@ -60,7 +65,6 @@ export function useAutoSubmit({ return; } - // Don't submit if already streaming or loading if (chatState !== ChatState.Idle) { return; } @@ -68,9 +72,11 @@ export function useAutoSubmit({ // Scenario 1: New session with initial message from Hub // Hub always creates new sessions, so message_count will be 0 if (initialMessage && session.message_count === 0 && messages.length === 0) { - hasAutoSubmittedRef.current = true; - handleSubmit(initialMessage); - clearInitialMessage(); + if (!hasUnfilledParameters(session)) { + hasAutoSubmittedRef.current = true; + handleSubmit(initialMessage); + clearInitialMessage(); + } return; } @@ -87,8 +93,11 @@ export function useAutoSubmit({ // Scenario 3: Resume with shouldStartAgent (continue existing conversation) if (shouldStartAgent) { - hasAutoSubmittedRef.current = true; - handleSubmit({ msg: '', images: [] }); + if (!hasUnfilledParameters(session)) { + hasAutoSubmittedRef.current = true; + handleSubmit({ msg: '', images: [] }); + } + return; } }, [ session, @@ -99,6 +108,7 @@ export function useAutoSubmit({ messages.length, chatState, clearInitialMessage, + hasUnfilledParameters, ]); return {