Fix mock payload

This commit is contained in:
Siddharth Ganesan
2026-01-27 14:59:34 -08:00
parent 2f504ce07e
commit 6f66d33e62
3 changed files with 42 additions and 4 deletions

View File

@@ -33,6 +33,7 @@ const ExecuteFromBlockSchema = z.object({
parallelBlockMapping: z.record(z.any()).optional(),
activeExecutionPath: z.array(z.string()),
}),
input: z.any().optional(),
})
export const runtime = 'nodejs'
@@ -71,7 +72,7 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
)
}
const { startBlockId, sourceSnapshot } = validation.data
const { startBlockId, sourceSnapshot, input } = validation.data
const executionId = uuidv4()
const [workflowRecord] = await db
@@ -122,7 +123,7 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
startTime: new Date().toISOString(),
}
const snapshot = new ExecutionSnapshot(metadata, {}, {}, {})
const snapshot = new ExecutionSnapshot(metadata, {}, input || {}, {})
try {
const startTime = new Date()

View File

@@ -1469,10 +1469,45 @@ export function useWorkflowExecution() {
activeExecutionPath: [],
}
// Extract mock payload for trigger blocks
let workflowInput: any
if (isTriggerBlock) {
const workflowBlocks = useWorkflowStore.getState().blocks
const mergedStates = mergeSubblockState(workflowBlocks, workflowId)
const candidates = resolveStartCandidates(mergedStates, { execution: 'manual' })
const candidate = candidates.find((c) => c.blockId === blockId)
if (candidate) {
if (triggerNeedsMockPayload(candidate)) {
workflowInput = extractTriggerMockPayload(candidate)
logger.info('Extracted mock payload for trigger block', { blockId, workflowInput })
} else if (
candidate.path === StartBlockPath.SPLIT_API ||
candidate.path === StartBlockPath.SPLIT_INPUT ||
candidate.path === StartBlockPath.UNIFIED
) {
const inputFormatValue = candidate.block.subBlocks?.inputFormat?.value
if (Array.isArray(inputFormatValue)) {
const testInput: Record<string, any> = {}
inputFormatValue.forEach((field: any) => {
if (field && typeof field === 'object' && field.name && field.value !== undefined) {
testInput[field.name] = coerceValue(field.type, field.value)
}
})
if (Object.keys(testInput).length > 0) {
workflowInput = testInput
logger.info('Extracted test input for trigger block', { blockId, workflowInput })
}
}
}
}
}
logger.info('Starting run-from-block execution', {
workflowId,
startBlockId: blockId,
isTriggerBlock,
hasInput: !!workflowInput,
})
setIsExecuting(true)
@@ -1487,6 +1522,7 @@ export function useWorkflowExecution() {
workflowId,
startBlockId: blockId,
sourceSnapshot: effectiveSnapshot,
input: workflowInput,
callbacks: {
onExecutionStarted: (data) => {
logger.info('Run-from-block execution started:', data)

View File

@@ -151,6 +151,7 @@ export interface ExecuteFromBlockOptions {
workflowId: string
startBlockId: string
sourceSnapshot: SerializableExecutionState
input?: any
callbacks?: ExecutionStreamCallbacks
}
@@ -222,7 +223,7 @@ export function useExecutionStream() {
}, [])
const executeFromBlock = useCallback(async (options: ExecuteFromBlockOptions) => {
const { workflowId, startBlockId, sourceSnapshot, callbacks = {} } = options
const { workflowId, startBlockId, sourceSnapshot, input, callbacks = {} } = options
if (abortControllerRef.current) {
abortControllerRef.current.abort()
@@ -238,7 +239,7 @@ export function useExecutionStream() {
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ startBlockId, sourceSnapshot }),
body: JSON.stringify({ startBlockId, sourceSnapshot, input }),
signal: abortController.signal,
})