{#if flowModule.value}
{ forceReload++ reload(flowModule) }} {noEditor} on:setHash={(e) => { if (flowModule.value.type == 'script') { flowModule.value.hash = e.detail } }} bind:summary={flowModule.summary} {isAgentTool} > {#snippet header()} { console.log('tagChange', e.detail) if (flowModule.value.type == 'script') { flowModule.value.tag_override = e.detail } else if (flowModule.value.type == 'rawscript') { flowModule.value.tag = e.detail } }} on:toggleSuspend={() => selectAdvanced('suspend')} on:toggleSleep={() => selectAdvanced('sleep')} on:toggleMock={() => selectAdvanced('mock')} on:toggleRetry={() => selectAdvanced('retries')} on:togglePin={() => (selected = 'test')} on:toggleConcurrency={() => selectAdvanced('runtime')} on:toggleCache={() => selectAdvanced('cache')} on:toggleStopAfterIf={() => selectAdvanced('early-stop')} on:fork={async () => { const [module, state] = await fork(flowModule) flowModule = module flowStateStore.val[module.id] = state }} on:reload={async () => { if (flowModule.value.type == 'script') { if (flowModule.value.hash != undefined) { flowModule.value.hash = await getLatestHashForScript(flowModule.value.path) } forceReload++ await reload(flowModule) } if (flowModule.value.type == 'flow') { forceReload++ await reload(flowModule) } }} on:createScriptFromInlineScript={async () => { const [module, state] = await createScriptFromInlineScript( flowModule, selectedId, flowStateStore.val[flowModule.id].schema, $pathStore ) if (flowModule.value.type == 'rawscript') { module.value.input_transforms = flowModule.value.input_transforms } flowModule = module flowStateStore.val[module.id] = state }} /> {/snippet}
{#if flowModule.value.type === 'rawscript' && !noEditor}
{ acc[key] = obj.type === 'static' ? obj.value : undefined return acc }, {})} on:showDiffMode={showDiffMode} on:hideDiffMode={hideDiffMode} {lastDeployedCode} {diffMode} openAiChat moduleId={flowModule.id} />
{/if}
{#if flowModule.value.type !== 'aiagent'} {#if flowModule.value.type === 'rawscript'} {#if !noEditor} {#key flowModule.id}
{#if assets?.length} {/if} {#if isDebuggableScript && customUi?.editorBar?.debug != false} {/if} {#if showDebugPanel && !showDebugConsole} {/if}
{#if debugConsoleVisible}
{ selected = 'test' if (selectedId == flowModule.id) { if (flowModule.value.type === 'rawscript' && editor) { flowModule.value.content = editor.getCode() } await reload(flowModule) modulePreview?.runTestWithStepArgs() } }} on:change={async (event) => { const content = event.detail if (flowModule.value.type === 'rawscript') { if (flowModule.value.content !== content) { flowModule.value.content = content } await reload(flowModule) if (debugMode && breakpointDecorations.length > 0) { refreshBreakpointPositions() } } }} formatAction={() => { reload(flowModule) saveDraft() }} fixedOverflowWidgets={true} args={Object.entries(flowModule.value.input_transforms).reduce( (acc, [key, obj]) => { acc[key] = obj.type === 'static' ? obj.value : undefined return acc }, {} )} key={`flow-inline-${$workspaceStore}-${$pathStore}-${flowModule.id}`} moduleId={flowModule.id} preparedAssetsSqlQueries={preparedSqlQueries.current} customTag={flowModule.value.tag} />
(showDebugConsole = false)} workspace={$workspaceStore} jobId={debugSessionJobId ?? undefined} />
{:else}
{ selected = 'test' if (selectedId == flowModule.id) { if (flowModule.value.type === 'rawscript' && editor) { flowModule.value.content = editor.getCode() } await reload(flowModule) modulePreview?.runTestWithStepArgs() } }} on:change={async (event) => { const content = event.detail if (flowModule.value.type === 'rawscript') { if (flowModule.value.content !== content) { flowModule.value.content = content } await reload(flowModule) if (debugMode && breakpointDecorations.length > 0) { refreshBreakpointPositions() } } }} formatAction={() => { reload(flowModule) saveDraft() }} fixedOverflowWidgets={true} args={Object.entries(flowModule.value.input_transforms).reduce( (acc, [key, obj]) => { acc[key] = obj.type === 'static' ? obj.value : undefined return acc }, {} )} key={`flow-inline-${$workspaceStore}-${$pathStore}-${flowModule.id}`} moduleId={flowModule.id} preparedAssetsSqlQueries={preparedSqlQueries.current} customTag={flowModule.value.tag} />
{/if} {/key} {/if} {:else if flowModule.value.type === 'script'} {#if !noEditor && (customUi?.hubCode != false || !flowModule?.value?.path?.startsWith('hub/'))}
{#key forceReload} {/key}
{/if} {:else if flowModule.value.type === 'flow'} {#key forceReload} {/key} {/if}
{/if} { if (flowModule.value.type === 'aiagent') { return 100 } return editorSettingsPanelSize }, (v) => { if (flowModule.value.type !== 'aiagent') { editorSettingsPanelSize = v } } } minSize={20} >
{#if !preprocessorModule} {/if} {#if !preprocessorModule && !isAgentTool} {/if} {#if selected === 'inputs' && (flowModule.value.type == 'rawscript' || flowModule.value.type == 'script' || flowModule.value.type == 'flow' || flowModule.value.type == 'aiagent')}
{#if reloadError}
{/if} { // @ts-ignore return flowModule?.value?.input_transforms }, (v) => { if ( typeof flowModule?.value === 'object' && flowModule?.value !== null ) { // @ts-ignore flowModule.value.input_transforms = v } } } extraLib={stepPropPicker.extraLib} {enableAi} {isAgentTool} allowedAiTransforms={isAgentTool && flowModule.value.type === 'aiagent' ? ['user_message'] : undefined} helperScript={retrieveDynCodeAndLang(flowModule.value)} chatInputEnabled={flowStore.val.value?.chat_input_enabled ?? false} />
{:else if selected === 'test'} {#if debugMode && isDebuggableScript}
{/if} {:else if selected === 'advanced'} {#if !selectedId.includes('failure')} {#if flowModule.value['language'] === 'python3' || flowModule.value['language'] === 'deno'} {/if} {/if} {#if advancedSelected === 'runtime'} {/if}
{#if advancedSelected === 'retries'}
{#snippet header()} If defined, upon error this step will be retried with a delay and a maximum number of attempts as defined below. {/snippet}
{:else if advancedSelected === 'runtime' && advancedRuntimeSelected === 'concurrency'}
{#snippet header()} Allowed concurrency within a given timeframe {/snippet} {#if flowModule.value.type == 'rawscript'} {:else} The concurrency limit of a workspace script is only settable in the script metadata itself. For hub scripts, this feature is non available yet. {/if}
{:else if advancedSelected === 'runtime' && advancedRuntimeSelected === 'timeout'}
{:else if advancedSelected === 'runtime' && advancedRuntimeSelected === 'priority'}
0} on:change={() => { if (flowModule.priority) { flowModule.priority = undefined } else { flowModule.priority = 100 } }} options={{ right: 'Enabled high priority flow step', rightTooltip: `Jobs scheduled from this step when the flow is executed are labeled as high priority and take precedence over the other jobs in the jobs queue. ${ !$enterpriseLicense ? 'This is a feature only available on enterprise edition.' : '' }` }} /> Setting priority is only available for enterprise edition and not available on the cloud.
{:else if advancedSelected === 'runtime' && advancedRuntimeSelected === 'lifetime'}
{:else if advancedSelected === 'cache'}
{:else if advancedSelected === 'early-stop'} {:else if advancedSelected === 'skip'} {:else if advancedSelected === 'suspend'}
{:else if advancedSelected === 'sleep'}
{:else if advancedSelected === 'mock'}
{:else if advancedSelected === 'same_worker'}
If shared directory is set, will share a folder that will be mounted on `./shared` for each of them to pass data between each other.
{:else if advancedSelected === 's3'}

S3 snippets Read/Write object from/to S3 and leverage Polars and DuckDB to run efficient ETL processes.

{#snippet children({ item })} {#if flowModule.value['language'] === 'deno'} {:else} {/if} {/snippet}
{/if}
{/if}
{#if selected === 'test'} {#if stepHistoryLoader?.stepStates[flowModule.id]?.initial && !flowModule.mock?.enabled}
{ stepHistoryLoader?.resetInitial(flowModule.id) }} class="cursor-pointer h-full hover:bg-gray-500/20 dark:hover:bg-gray-500/20 dark:bg-gray-500/80 bg-gray-500/40 absolute top-0 left-0 w-full z-50" >
Run loaded from history
{/if} {#if showDebugPanel || hasDebugResult} {#if hasDebugResult}
{:else}
{#if $debugState.running && !$debugState.stopped} Running... {:else if $debugState.stopped} Paused at breakpoint {:else} Waiting for debug session {/if}
{/if}
{:else if debugMode && isDebuggableScript}
Click "Debug" in the toolbar to start debugging
{:else} { flowModule.mock = detail flowModule = flowModule refreshStateStore(flowStore) }} {testJob} {scriptProgress} mod={flowModule} {testIsLoading} disableMock={preprocessorModule || failureModule} disableHistory={failureModule} loadingJob={stepHistoryLoader?.stepStates[flowModule.id]?.loadingJobs} tagLabel={customUi?.tagLabel} bind:this={modulePreviewResultViewer} /> {/if}
{/if}
{:else} Incorrect flow module type {/if}

The Debug feature is currently in beta. You may encounter unexpected behavior or limitations.

By continuing, you acknowledge that this feature is experimental.

{#snippet actions()} {/snippet}