{#if flowModule.value}
{ if (flowModule.value.type == 'script') { flowModule.value.hash = e.detail } }} on:fork={async () => { const [module, state] = await fork(flowModule, opWs) flowModule = module flowStateStore.val[module.id] = state }} on:reload={reloadModule} bind:summary={flowModule.summary} bind:description={toolDescription} {isAgentTool} {siblingToolNames} > {#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.type == 'aiagent') { flowModule.value.tag = e.detail } }} on:reload={reloadModule} on:createScriptFromInlineScript={async () => { const [module, state] = await createScriptFromInlineScript( flowModule, flowModule.id, flowStateStore.val[flowModule.id]?.schema, $pathStore, opWs ) 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}
{#snippet topPaneContent()} {#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 (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-${opWs}-${$pathStore}-${flowModule.id}`} moduleId={flowModule.id} preparedAssetsSqlQueries={preparedSqlQueries.current} customTag={flowModule.value.tag} />
(showDebugConsole = false)} workspace={opWs} jobId={debugSessionJobId ?? undefined} />
{:else}
{ selected = 'test' 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-${opWs}-${$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/'))}
{#if referencedScriptSettings.settings && getActiveScriptSettingsBadges(referencedScriptSettings.settings).length > 0}
{/if} {#key forceReload} {/key}
{/if} {:else if flowModule.value.type === 'flow'} {#key forceReload} {/key} {/if} {/snippet} {#snippet bottomPaneContent()}
{ selected = event.detail }} wrapperClass="shrink-0" > {#if !preprocessorModule} {/if} {#if canShowChatTab && flowModule.value.type === 'aiagent'} {/if} {#if !preprocessorModule && !isAgentTool} {#snippet extra()} {/snippet} {/if} {#if visibleSelected === 'inputs' && (flowModule.value.type == 'rawscript' || flowModule.value.type == 'script' || flowModule.value.type == 'flow' || flowModule.value.type == 'aiagent')}
{#if reloadError}
{/if} {#if flowModule.value.type === 'aiagent'} flowModule.value.type === 'aiagent' ? flowModule.value.agent : undefined, (v) => { if (flowModule.value.type === 'aiagent') { flowModule.value.agent = v } } } bind:inputTransforms={ () => (flowModule.value as any).input_transforms, (v) => { if (flowModule.value.type === 'aiagent') { ;(flowModule.value as any).input_transforms = v } } } bind:tools={ () => flowModule.value.type === 'aiagent' ? (flowModule.value.tools ?? noTools(flowModule.value)) : noTools(flowModule), (v) => { if (flowModule.value.type === 'aiagent') { flowModule.value.tools = v } } } bind:toolInputs={ () => flowModule.value.type === 'aiagent' ? (flowModule.value.tool_inputs ?? {}) : {}, (v) => { if (flowModule.value.type === 'aiagent') { // An emptied map reverts to absent so the doc matches its pre-override state. flowModule.value.tool_inputs = Object.keys(v).length > 0 ? v : undefined } } } /> {/if} {#if flowModule.value.type === 'aiagent'} { // @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} noConnect={staticOnly} noJavascript={staticOnly} allowedAiTransforms={isAgentTool ? AI_AGENT_TOOL_AI_KEYS : undefined} helperScript={retrieveDynCodeAndLang(flowModule.value)} chatInputEnabled={flowStore.val.value?.chat_input_enabled ?? false} workspace={opWs} visibilityKey={agentFieldsKey} tools={agentLinked ? getLinkedAgentTools( linkedToolsScope(opWs, $pathStore), linkedToolsModuleId ) : (flowModule.value.tools ?? [])} onSelectTool={noToolNavigation ? undefined : (toolId) => selectionManager.selectId(toolId, { openPanel: true })} onAddTool={flowModuleSchemaMap ? (detail) => flowModuleSchemaMap?.addToolToAgent(flowModule.id, detail) : undefined} /> {:else} { // @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} noConnect={staticOnly} noJavascript={staticOnly} allowedAiTransforms={undefined} helperScript={retrieveDynCodeAndLang(flowModule.value)} chatInputEnabled={flowStore.val.value?.chat_input_enabled ?? false} workspace={opWs} /> {/if} {#if agentLinked} flowModule.value.type === 'aiagent' ? (flowModule.value.tool_inputs ?? {}) : {}, (v) => { if (flowModule.value.type === 'aiagent') { // An emptied map reverts to absent so the doc matches its pre-override state. flowModule.value.tool_inputs = Object.keys(v).length > 0 ? v : undefined } } } /> {/if}
{:else if visibleSelected === 'test'} {#if debugMode && isDebuggableScript}
{/if} {:else if visibleSelected === 'chat' && canShowChatTab && flowModule.value.type === 'aiagent'}
{ setOmitOutputFromConversation(event.detail) }} options={{ right: 'Omit assistant and tool messages from the flow conversation', rightTooltip: 'When enabled, this AI agent still runs normally, but its assistant response and tool-use messages are not stored in chat-mode conversation history.' }} />
{:else if visibleSelected === 'advanced'} editor?.setCode(code)} bind:flowModule {isAgentTool} {parentModule} {previousModule} selectedId={flowModule.id} {referencedConcurrentLimit} referencedConcurrencyTimeWindowS={referencedScriptSettings.settings ?.concurrency_time_window_s} workspaceScriptCacheTtl={referencedCacheTtl} loadingWorkspaceScript={referencedScriptSettings.loading} workspaceScriptError={referencedScriptSettings.error} canEditWorkspaceScript={canEditWorkspaceScriptSettings} {workspaceScriptNoEditReason} onEditWorkspaceScript={openWorkspaceScriptSettings} /> {/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} linkedAgentTools={agentLinked ? getLinkedAgentTools( linkedToolsScope(opWs, $pathStore), linkedToolsModuleId ) : undefined} {testIsLoading} disableMock={preprocessorModule || failureModule} disableHistory={failureModule} loadingJob={stepHistoryLoader?.stepStates[flowModule.id]?.loadingJobs} tagLabel={customUi?.tagLabel} bind:this={modulePreviewResultViewer} /> {/if}
{/if}
{/snippet} {#if flowModule.value.type === 'aiagent' || (noEditor && flowModule.value.type !== 'flow')}
{@render bottomPaneContent()}
{:else} {@render topPaneContent()} {@render bottomPaneContent()} {/if}
{:else} Incorrect flow module type {/if}