@@ -671,6 +671,19 @@ export function useWorkflowExecution() {
671671 selectedOutputIds = chatStore . getState ( ) . getSelectedWorkflowOutput ( activeWorkflowId )
672672 }
673673
674+ // Helper to extract test values from inputFormat subblock
675+ const extractTestValuesFromInputFormat = ( inputFormatValue : any ) : Record < string , any > => {
676+ const testInput : Record < string , any > = { }
677+ if ( Array . isArray ( inputFormatValue ) ) {
678+ inputFormatValue . forEach ( ( field : any ) => {
679+ if ( field && typeof field === 'object' && field . name && field . value !== undefined ) {
680+ testInput [ field . name ] = field . value
681+ }
682+ } )
683+ }
684+ return testInput
685+ }
686+
674687 // Determine start block and workflow input based on execution type
675688 let startBlockId : string | undefined
676689 let finalWorkflowInput = workflowInput
@@ -720,19 +733,12 @@ export function useWorkflowExecution() {
720733 // Extract test values from the API trigger's inputFormat
721734 if ( selectedTrigger . type === 'api_trigger' || selectedTrigger . type === 'starter' ) {
722735 const inputFormatValue = selectedTrigger . subBlocks ?. inputFormat ?. value
723- if ( Array . isArray ( inputFormatValue ) ) {
724- const testInput : Record < string , any > = { }
725- inputFormatValue . forEach ( ( field : any ) => {
726- if ( field && typeof field === 'object' && field . name && field . value !== undefined ) {
727- testInput [ field . name ] = field . value
728- }
729- } )
736+ const testInput = extractTestValuesFromInputFormat ( inputFormatValue )
730737
731- // Use the test input as workflow input
732- if ( Object . keys ( testInput ) . length > 0 ) {
733- finalWorkflowInput = testInput
734- logger . info ( 'Using API trigger test values for manual run:' , testInput )
735- }
738+ // Use the test input as workflow input
739+ if ( Object . keys ( testInput ) . length > 0 ) {
740+ finalWorkflowInput = testInput
741+ logger . info ( 'Using API trigger test values for manual run:' , testInput )
736742 }
737743 }
738744 }
@@ -741,18 +747,29 @@ export function useWorkflowExecution() {
741747 logger . error ( 'Multiple API triggers found' )
742748 setIsExecuting ( false )
743749 throw error
744- } else if ( manualTriggers . length === 1 ) {
745- // No API trigger, check for manual trigger
746- selectedTrigger = manualTriggers [ 0 ]
750+ } else if ( manualTriggers . length >= 1 ) {
751+ // No API trigger, check for manual triggers
752+ // Prefer manual_trigger over input_trigger for simple runs
753+ const manualTrigger = manualTriggers . find ( ( t ) => t . type === 'manual_trigger' )
754+ const inputTrigger = manualTriggers . find ( ( t ) => t . type === 'input_trigger' )
755+
756+ selectedTrigger = manualTrigger || inputTrigger || manualTriggers [ 0 ]
747757 const blockEntry = entries . find ( ( [ , block ] ) => block === selectedTrigger )
748758 if ( blockEntry ) {
749759 selectedBlockId = blockEntry [ 0 ]
760+
761+ // Extract test values from input trigger's inputFormat if it's an input_trigger
762+ if ( selectedTrigger . type === 'input_trigger' ) {
763+ const inputFormatValue = selectedTrigger . subBlocks ?. inputFormat ?. value
764+ const testInput = extractTestValuesFromInputFormat ( inputFormatValue )
765+
766+ // Use the test input as workflow input
767+ if ( Object . keys ( testInput ) . length > 0 ) {
768+ finalWorkflowInput = testInput
769+ logger . info ( 'Using Input trigger test values for manual run:' , testInput )
770+ }
771+ }
750772 }
751- } else if ( manualTriggers . length > 1 ) {
752- const error = new Error ( 'Multiple Input Trigger blocks found. Keep only one.' )
753- logger . error ( 'Multiple input triggers found' )
754- setIsExecuting ( false )
755- throw error
756773 } else {
757774 // Fallback: Check for legacy starter block
758775 const starterBlock = Object . values ( filteredStates ) . find ( ( block ) => block . type === 'starter' )
@@ -769,8 +786,8 @@ export function useWorkflowExecution() {
769786 }
770787
771788 if ( ! selectedBlockId || ! selectedTrigger ) {
772- const error = new Error ( 'Manual run requires an Input Trigger or API Trigger block' )
773- logger . error ( 'No input or API triggers found for manual run' )
789+ const error = new Error ( 'Manual run requires a Manual, Input Form, or API Trigger block' )
790+ logger . error ( 'No manual/ input or API triggers found for manual run' )
774791 setIsExecuting ( false )
775792 throw error
776793 }
0 commit comments