{#if notAnonynmous} As a non logged in user, you can only see jobs ran by anonymous users like you {:else if job}
{#if isListJob} {#if render}
{/if} {:else if render}
{#if showLogsWithResult && job} {#if job && showJobDetailHeader}
{/if}

Result

{#if job !== undefined && (job.result_stream || (job.type == 'CompletedJob' && 'result' in job && job.result !== undefined))} {:else if job}
No output is available yet
{:else}
{/if}

Logs

{:else}

Result

{#if job !== undefined && (job.result_stream || (job.type == 'CompletedJob' && 'result' in job && job.result !== undefined))} {:else if job}
No output is available yet
{:else}
{/if}
{/if}
{/if} {#if render} {#if innerModules && innerModules.length > 0 && !isListJob} {:else}
{/if} {/if}
{#if isListJob}

Subflows ({flowJobIds?.flowJobs.length})

{#each flowJobIds?.flowJobs ?? [] as loopJobId, j (loopJobId)} {#if render && j + subflowsSize + 1 == (flowJobIds?.flowJobs.length ?? 0)} {/if} {#if render && (j + subflowsSize + 1 > (flowJobIds?.flowJobs.length ?? 0) || forloop_selected == loopJobId)} {/if} {#if forloop_selected == loopJobId || innerModule?.type == 'branchall'} {@const forloopIsSelected = forloop_selected == loopJobId || (innerModule?.type != 'forloopflow' && innerModule?.type != 'whileloopflow')} {@const forLoopStoreKeyPrefix = innerModule?.type == 'forloopflow' || innerModule?.type == 'whileloopflow' ? (flowJobIds?.moduleId ?? '') + '-' + j + '-' : ''}
20)} {workspaceId} jobId={loopJobId} onJobsLoaded={({ job, force }) => { storedListJobs[j] = job innerJobLoaded(job, j, false, force) }} {onResultStreamUpdate} graphTabOpen={selected == 'graph' && graphTabOpen} isNodeSelected={forloop_selected == loopJobId} toolCallStore={{ getStoredToolCallJob: (storeKey: string) => toolCallStore?.getStoredToolCallJob(forLoopStoreKeyPrefix + storeKey), setStoredToolCallJob: (storeKey: string, job: Job) => toolCallStore?.setStoredToolCallJob(forLoopStoreKeyPrefix + storeKey, job), getLocalToolCallJobs: (prefix: string) => toolCallStore?.getLocalToolCallJobs(forLoopStoreKeyPrefix + prefix) ?? {}, addToolCallToLoad: (storeKey: string) => toolCallStore?.addToolCallToLoad(forLoopStoreKeyPrefix + storeKey), isToolCallToBeLoaded: (storeKey: string) => toolCallStore?.isToolCallToBeLoaded(forLoopStoreKeyPrefix + storeKey) ?? false }} showLogsWithResult showJobDetailHeader />
{/if} {/each}
{:else if innerModules && innerModules.length > 0 && ((job.raw_flow?.modules.length ?? 0) > 0 || innerModules[0]?.id == 'preprocessor')} {@const hasPreprocessor = innerModules[0]?.id == 'preprocessor' ? 1 : 0} {@const isPreprocessorOnly = hasPreprocessor && (job.raw_flow?.modules.length ?? 0) === 0} {@const modules = isPreprocessorOnly ? [innerModules[0]] : (innerModules ?? [])}

    Step-by-step

    {#each modules as mod, i} {#if render}

    {#if mod.id === 'preprocessor'} Preprocessor module {:else if job?.raw_flow?.modules && i < job?.raw_flow?.modules.length + hasPreprocessor} Step {i + 1 - hasPreprocessor} out of {job?.raw_flow?.modules.length} {#if job.raw_flow?.modules[i]?.summary} : {job.raw_flow?.modules[i]?.summary ?? ''} {/if} {:else} Failure module {/if}

    {/if}
  • {#if render && Array.isArray(mod.failed_retries)} {#each mod.failed_retries as failedRetry, j}
    {/each} {/if} {#if ['InProgress', 'Success', 'Failure'].includes(mod.type)} {#if job.raw_flow?.modules[i]?.value.type == 'flow'} { onJobsLoadedInner(mod, job, force) }} {onResultStreamUpdate} graphTabOpen={selected == 'graph' && graphTabOpen} isNodeSelected={false} /> {:else if mod.flow_jobs?.length == 0 && mod.job == '00000000-0000-0000-0000-000000000000'}
    no subflow (empty loop?)
    {:else} { onJobsLoadedInner(mod, job, force) }} loadExtraLogs={(logs) => { setModuleState(mod.id ?? '', { logs }) }} {onResultStreamUpdate} graphTabOpen={selected == 'graph' && graphTabOpen} isNodeSelected={localModuleStates?.[selectedNode ?? '']?.job_id == mod.job} {toolCallStore} showLogsWithResult={['script', 'rawscript'].includes( job.raw_flow?.modules[i]?.value?.type ?? '' )} showJobDetailHeader={['script', 'rawscript'].includes( job.raw_flow?.modules[i]?.value?.type ?? '' )} /> {#if mod.agent_actions && mod.agent_actions.length > 0 && mod.id} {@const storeKeyPrefix = getParentLoopsPrefix(mod.id)} {#each mod.agent_actions as agentAction, j} {#if agentAction.type === 'tool_call'} {@const toolCallId = getToolCallId(j, mod.id, agentAction.module_id)} {@const localToolCallKey = mod.id + '-' + j} {@const storeKey = storeKeyPrefix + localToolCallKey} {@const storedToolCallJob = toolCallStore?.getStoredToolCallJob(storeKey)} {@const isSelected = localToolCallKey === selectedToolCall} {#if isSelected || storedToolCallJob || toolCallStore?.isToolCallToBeLoaded(storeKey)} { toolCallStore?.setStoredToolCallJob(storeKey, job) onJobsLoadedInner({ id: toolCallId } as FlowStatusModule, job, force) }} loadExtraLogs={(logs) => { setModuleState(toolCallId, { logs }) }} {onResultStreamUpdate} graphTabOpen={selected == 'graph' && graphTabOpen} isNodeSelected={localModuleStates?.[toolCallId]?.job_id == agentAction.job_id} /> {/if} {/if} {/each} {/if} {/if} {:else} {/if}
  • {/each}
{:else}
Empty flow
{/if}
{#if selected == 'logs' && render}
{:else if selected == 'assets' && render}
{/if}
{#if render} {#if job.raw_flow && !isListJob}
{#each Object.values(retryStatus?.val ?? {}) as count} {#if count} Retry in progress, # of failed attempts: {count} {/if} {/each} {#if totalEventsWaiting} Flow suspended, waiting for {totalEventsWaiting} events {/if}
{ if (rightColumnSelect != 'node_definition' && rightColumnSelect != 'tracing') { rightColumnSelect = 'node_status' } if (typeof e == 'string') { if (e == 'Input') { selectedNode = 'start' stepDetail = undefined } else if (e == 'Result') { selectedNode = 'end' stepDetail = 'end' } else { const id = e.startsWith(AI_TOOL_CALL_PREFIX) ? e.split('-').pop() : e const mod = dfs(job?.raw_flow?.modules ?? [], (m) => m).find( (m) => m?.id === id ) stepDetail = mod selectedNode = e if (e.startsWith(AI_TOOL_CALL_PREFIX)) { const [_prefix, agentModuleId, j, _toolModuleId] = e.split('-') const parentLoopsPrefix = getParentLoopsPrefix(agentModuleId) const jIdx = Number(j) const storeKey = parentLoopsPrefix + agentModuleId + '-' + jIdx toolCallStore?.addToolCallToLoad(storeKey) } } } else { stepDetail = e selectedNode = e.id } }} {onSelectedIteration} earlyStop={job.raw_flow?.skip_expr !== undefined} cache={job.raw_flow?.cache_ttl !== undefined} modules={job.raw_flow?.modules ?? []} notes={job.raw_flow?.notes ?? []} failureModule={job.raw_flow?.failure_module} preprocessorModule={job.raw_flow?.preprocessor_module} allowSimplifiedPoll={false} {workspace} />
{#if !hideTimeline} {/if} {#if !hideNodeDefinition} {/if} {#if Object.keys(job?.flow_status?.user_states ?? {}).length > 0} {/if} {#if rightColumnSelect == 'timeline'} buildSubflowKey(key, prefix)} durationStatuses={localDurationStatuses} /> {:else if rightColumnSelect == 'node_status'}
{#if selectedNode?.startsWith(AI_TOOL_MESSAGE_PREFIX)}
{:else if selectedNode?.startsWith(AI_MCP_TOOL_CALL_PREFIX)} {@const [, agentModuleId, toolCallIndex] = selectedNode.split('-')} {@const agentNode = localModuleStates?.[agentModuleId]} {@const agentActions = agentNode?.agent_actions} {@const mcpActionIndex = parseInt(toolCallIndex)} {@const mcpAction = agentActions && mcpActionIndex >= 0 && mcpActionIndex < agentActions.length ? agentActions[mcpActionIndex] : undefined} {#if mcpAction?.type === 'mcp_tool_call' && agentNode?.result?.messages} {@const message = agentNode.result.messages.find( (m: { agent_action?: { call_id?: string }; content?: any }) => m.agent_action?.call_id === mcpAction.call_id )} {/if} {:else if selectedNode?.startsWith(AI_WEBSEARCH_PREFIX)} {:else if selectedNode} {@const node = localModuleStates[selectedNode]} {#if selectedNode == 'end'} {:else if selectedNode == 'start'} {#if job.args} {:else}

No arguments

{/if} {:else if node} {@const module = stepDetail && typeof stepDetail !== 'string' ? stepDetail : undefined} {@const agentTools = module && module.value.type === 'aiagent' ? module.value.tools : undefined} {@const parentLoopsPrefix = getParentLoopsPrefix(module?.id ?? '')} {#if node.flow_jobs_results}
Result of step as collection of all subflows
{/if}
{#if node.flow_jobs_results} Selected subflow {/if}
{#if node.duration_ms} {msToSec(node.duration_ms)} s {/if} {#if node.job_id} {/if}
{#if !node.isListJob}
Inputs
{/if}
{ if (module) { const storeKey = parentLoopsPrefix + module.id + '-' + idx toolCallStore?.setStoredToolCallJob(storeKey, job) } } } : undefined} />
{:else}

The execution of this node has no information attached to it. The job likely did not run yet

{/if} {:else}

Select a node to see its details here

{/if}
{:else if rightColumnSelect == 'node_definition'} {@const node = selectedNode ? localModuleStates[selectedNode] : undefined} {:else if rightColumnSelect == 'user_states'}
{:else if rightColumnSelect == 'tracing'} {@const node = selectedNode ? localModuleStates[selectedNode] : undefined} {#if node?.job_id} {:else}
Select a node with a job to see HTTP request traces
{/if} {/if}
{/if} {/if} {:else} {/if}