windmill-components 1.511.1 → 1.531.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/components/AIAgentLogViewer.svelte +123 -0
- package/package/components/AIAgentLogViewer.svelte.d.ts +13 -0
- package/package/components/AppConnectInner.svelte +10 -10
- package/package/components/AppConnectInner.svelte.d.ts +1 -1
- package/package/components/ArgInput.svelte +42 -14
- package/package/components/ArgInput.svelte.d.ts +2 -10
- package/package/components/AssignableTagsInner.svelte +5 -0
- package/package/components/AuthSettings.svelte +4 -2
- package/package/components/AuthSettings.svelte.d.ts +1 -0
- package/package/components/AutoscalingConfigEditor.svelte +76 -2
- package/package/components/DBManagerDrawer.svelte +154 -151
- package/package/components/DBManagerDrawer.svelte.d.ts +2 -2
- package/package/components/DBTable.svelte +3 -3
- package/package/components/DBTable.svelte.d.ts +1 -0
- package/package/components/DBTableEditor.svelte +7 -7
- package/package/components/DBTableEditor.svelte.d.ts +1 -1
- package/package/components/DeployWorkspace.svelte +1 -1
- package/package/components/Dev.svelte +12 -28
- package/package/components/DiffEditor.svelte +6 -3
- package/package/components/DiffEditor.svelte.d.ts +1 -0
- package/package/components/DisplayResult.svelte +46 -14
- package/package/components/DisplayResult.svelte.d.ts +5 -1
- package/package/components/DynSelect.svelte +58 -34
- package/package/components/DynSelect.svelte.d.ts +3 -11
- package/package/components/EditableSchemaForm.svelte +131 -8
- package/package/components/EditableSchemaForm.svelte.d.ts +5 -1
- package/package/components/Editor.svelte +27 -9
- package/package/components/Editor.svelte.d.ts +1 -1
- package/package/components/EditorBar.svelte +105 -7
- package/package/components/EditorSettings.svelte +6 -0
- package/package/components/ErrorOrRecoveryHandler.svelte +76 -8
- package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +2 -1
- package/package/components/ExploreAssetButton.svelte +14 -4
- package/package/components/ExploreAssetButton.svelte.d.ts +1 -0
- package/package/components/FirstStepInputs.svelte +2 -2
- package/package/components/FlowBuilder.svelte +18 -36
- package/package/components/FlowGraphViewerStep.svelte +7 -0
- package/package/components/FlowJobResult.svelte +16 -64
- package/package/components/FlowJobResult.svelte.d.ts +11 -4
- package/package/components/FlowLogViewer.svelte +660 -0
- package/package/components/FlowLogViewer.svelte.d.ts +34 -0
- package/package/components/FlowLogViewerWrapper.svelte +52 -0
- package/package/components/FlowLogViewerWrapper.svelte.d.ts +21 -0
- package/package/components/FlowLoopIterationPreview.svelte +3 -3
- package/package/components/FlowPreviewContent.svelte +13 -6
- package/package/components/FlowPreviewContent.svelte.d.ts +7 -7
- package/package/components/FlowPreviewResult.svelte +7 -5
- package/package/components/FlowPreviewResult.svelte.d.ts +4 -5
- package/package/components/FlowStatusViewer.svelte +28 -16
- package/package/components/FlowStatusViewer.svelte.d.ts +19 -27
- package/package/components/FlowStatusViewerInner.svelte +500 -295
- package/package/components/FlowStatusViewerInner.svelte.d.ts +34 -34
- package/package/components/FlowTimeline.svelte +11 -13
- package/package/components/FlowTimeline.svelte.d.ts +6 -5
- package/package/components/FolderEditor.svelte +1 -1
- package/package/components/GitDiffPreview.svelte +14 -18
- package/package/components/GitDiffPreview.svelte.d.ts +2 -8
- package/package/components/GitHubAppIntegration.svelte +3 -1
- package/package/components/HighlightCode.svelte +4 -1
- package/package/components/IconedResourceType.svelte +9 -5
- package/package/components/IdEditorInput.svelte +25 -22
- package/package/components/IdEditorInput.svelte.d.ts +11 -23
- package/package/components/InstanceSetting.svelte +7 -2
- package/package/components/InstanceSettings.svelte +1 -0
- package/package/components/JobLoader.svelte +108 -12
- package/package/components/JobLoader.svelte.d.ts +16 -3
- package/package/components/LogViewer.svelte +8 -2
- package/package/components/LogViewer.svelte.d.ts +1 -0
- package/package/components/LogViewerHeader.svelte +32 -0
- package/package/components/LogViewerHeader.svelte.d.ts +8 -0
- package/package/components/Login.svelte +8 -2
- package/package/components/MemoryFootprintViewer.svelte +1 -1
- package/package/components/ModulePreviewForm.svelte +10 -6
- package/package/components/ModulePreviewResultViewer.svelte +18 -2
- package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -1
- package/package/components/ModuleTest.svelte +59 -16
- package/package/components/MoveDrawer.svelte.d.ts +2 -2
- package/package/components/NextcloudSetting.svelte +84 -0
- package/package/components/NextcloudSetting.svelte.d.ts +7 -0
- package/package/components/ObjectResourceInput.svelte +3 -2
- package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
- package/package/components/ParqetCsvTableRenderer.svelte +1 -1
- package/package/components/RelativeLineNumbers.svelte +16 -0
- package/package/components/RelativeLineNumbers.svelte.d.ts +18 -0
- package/package/components/ResourceEditor.svelte +10 -5
- package/package/components/ResourcePicker.svelte +8 -1
- package/package/components/ResourcePicker.svelte.d.ts +1 -0
- package/package/components/ResultStreamDisplay.svelte +5 -0
- package/package/components/ResultStreamDisplay.svelte.d.ts +5 -0
- package/package/components/RunForm.svelte +9 -1
- package/package/components/SchemaForm.svelte +2 -2
- package/package/components/SchemaForm.svelte.d.ts +2 -10
- package/package/components/ScriptBuilder.svelte +26 -19
- package/package/components/ScriptBuilder.svelte.d.ts +1 -1
- package/package/components/ScriptEditor.svelte +2 -2
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/ScriptWrapper.svelte +1 -1
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/SimpleAgTable.svelte +2 -0
- package/package/components/SimpleAgTable.svelte.d.ts +2 -0
- package/package/components/SimpleEditor.svelte +10 -4
- package/package/components/SimpleEditor.svelte.d.ts +1 -0
- package/package/components/SqlRepl.svelte +21 -7
- package/package/components/SqlRepl.svelte.d.ts +2 -2
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/TemplateEditor.svelte +1 -1
- package/package/components/UserSettings.svelte +4 -4
- package/package/components/WorkerTagSelect.svelte +70 -1
- package/package/components/apps/components/display/AppAccordionList.svelte +1 -1
- package/package/components/apps/components/display/AppCarouselList.svelte +10 -8
- package/package/components/apps/components/display/AppDisplayComponent.svelte +13 -1
- package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +3 -3
- package/package/components/apps/components/display/AppText.svelte +2 -2
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +8 -1
- package/package/components/apps/components/display/dbtable/InsertRow.svelte +5 -4
- package/package/components/apps/components/display/dbtable/queries/count.js +11 -1
- package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
- package/package/components/apps/components/display/dbtable/queries/createTable.js +3 -3
- package/package/components/apps/components/display/dbtable/queries/delete.js +7 -0
- package/package/components/apps/components/display/dbtable/queries/insert.js +2 -0
- package/package/components/apps/components/display/dbtable/queries/select.js +14 -0
- package/package/components/apps/components/display/dbtable/queries/update.js +7 -0
- package/package/components/apps/components/display/dbtable/utils.d.ts +6 -5
- package/package/components/apps/components/display/dbtable/utils.js +52 -28
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +1 -1
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/AppAggridTable.svelte +7 -6
- package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/utils.js +7 -4
- package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -3
- package/package/components/apps/components/helpers/InputValue.svelte +6 -1
- package/package/components/apps/components/helpers/NonRunnableComponent.svelte +8 -4
- package/package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +10 -8
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +3 -2
- package/package/components/apps/components/helpers/RunnableWrapper.svelte +12 -3
- package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -1
- package/package/components/apps/components/inputs/AppCodeInputComponent.svelte +0 -5
- package/package/components/apps/components/inputs/AppS3FileInput.svelte +2 -2
- package/package/components/apps/components/layout/AppConditionalWrapper.svelte +1 -1
- package/package/components/apps/components/layout/AppContainer.svelte +1 -1
- package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -21
- package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
- package/package/components/apps/components/layout/AppList.svelte +9 -8
- package/package/components/apps/components/layout/AppModal.svelte +1 -1
- package/package/components/apps/components/layout/AppSplitpanes.svelte +5 -2
- package/package/components/apps/components/layout/AppStepper.svelte +10 -6
- package/package/components/apps/components/layout/AppTabs.svelte +3 -3
- package/package/components/apps/editor/AppEditorHeader.svelte +13 -2
- package/package/components/apps/editor/AppJobsDrawer.svelte +2 -2
- package/package/components/apps/editor/GridEditor.svelte +24 -19
- package/package/components/apps/editor/GridEditor.svelte.d.ts +4 -1
- package/package/components/apps/editor/GridViewer.svelte +1 -0
- package/package/components/apps/editor/RunnableJobPanelInner.svelte +2 -1
- package/package/components/apps/editor/SubGridEditor.svelte +7 -11
- package/package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -19
- package/package/components/apps/editor/appUtils.js +17 -68
- package/package/components/apps/editor/component/ComponentInner.svelte +845 -694
- package/package/components/apps/editor/component/componentCallbacks.svelte.js +8 -1
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +7 -7
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +7 -19
- package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +14 -55
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +31 -45
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +1 -3
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +2 -2
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte.d.ts +1 -0
- package/package/components/apps/svelte-grid/Grid.svelte +23 -25
- package/package/components/apps/svelte-grid/Grid.svelte.d.ts +21 -9
- package/package/components/apps/svelte-grid/MoveResize.svelte +13 -15
- package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +17 -24
- package/package/components/apps/utils.d.ts +2 -0
- package/package/components/apps/utils.js +22 -0
- package/package/components/assets/AssetsDropdownButton.svelte +1 -1
- package/package/components/assets/JobAssetsViewer.svelte +2 -2
- package/package/components/assets/lib.js +4 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte +7 -9
- package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
- package/package/components/common/button/Button.svelte +4 -3
- package/package/components/common/button/Button.svelte.d.ts +1 -0
- package/package/components/common/confirmationModal/ConfirmationModal.svelte +6 -5
- package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +6 -11
- package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.d.ts +26 -0
- package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.js +50 -0
- package/package/components/common/fileDownload/FileDownload.svelte +1 -3
- package/package/components/common/fileDownload/FileDownload.svelte.d.ts +4 -18
- package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
- package/package/components/common/modal/Modal.svelte +2 -5
- package/package/components/common/tabs/TabsV2.svelte +2 -1
- package/package/components/common/tabs/TabsV2.svelte.d.ts +1 -0
- package/package/components/copilot/FlowInlineScriptAIButton.svelte +58 -0
- package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -0
- package/package/components/copilot/MetadataGen.svelte +19 -1
- package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
- package/package/components/copilot/ScriptGen.svelte +23 -31
- package/package/components/copilot/ScriptGen.svelte.d.ts +0 -1
- package/package/components/copilot/autocomplete/Autocompletor.js +2 -0
- package/package/components/copilot/chat/AIChatDisplay.svelte +4 -4
- package/package/components/copilot/chat/AIChatInput.svelte +29 -6
- package/package/components/copilot/chat/AIChatManager.svelte.js +171 -33
- package/package/components/copilot/chat/AIChatMessage.svelte +3 -0
- package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
- package/package/components/copilot/chat/ToolContentDisplay.svelte +84 -0
- package/package/components/copilot/chat/ToolContentDisplay.svelte.d.ts +11 -0
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte +105 -0
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte.d.ts +7 -0
- package/package/components/copilot/chat/api/apiTools.d.ts +7 -0
- package/package/components/copilot/chat/api/apiTools.js +192 -0
- package/package/components/copilot/chat/api/core.d.ts +7 -0
- package/package/components/copilot/chat/api/core.js +61 -0
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -6
- package/package/components/copilot/chat/flow/core.js +213 -42
- package/package/components/copilot/chat/flow/utils.js +3 -0
- package/package/components/copilot/chat/monaco-adapter.d.ts +1 -1
- package/package/components/copilot/chat/monaco-adapter.js +10 -4
- package/package/components/copilot/chat/navigator/core.d.ts +1 -1
- package/package/components/copilot/chat/navigator/core.js +20 -22
- package/package/components/copilot/chat/script/core.d.ts +11 -3
- package/package/components/copilot/chat/script/core.js +120 -44
- package/package/components/copilot/chat/shared.d.ts +31 -4
- package/package/components/copilot/chat/shared.js +235 -10
- package/package/components/copilot/lib.d.ts +1 -1
- package/package/components/copilot/lib.js +15 -6
- package/package/components/custom_ui.d.ts +4 -0
- package/package/components/dbOps.d.ts +20 -8
- package/package/components/dbOps.js +85 -40
- package/package/components/details/DetailPageHeader.svelte +0 -2
- package/package/components/details/DetailPageLayout.svelte +34 -33
- package/package/components/flow_builder.d.ts +1 -2
- package/package/components/flows/FlowEditor.svelte +3 -3
- package/package/components/flows/FlowEditor.svelte.d.ts +7 -6
- package/package/components/flows/common/FlowCard.svelte +2 -2
- package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
- package/package/components/flows/common/FlowCardHeader.svelte +13 -4
- package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
- package/package/components/flows/content/BranchPredicateEditor.svelte +4 -7
- package/package/components/flows/content/BranchPredicateEditor.svelte.d.ts +12 -11
- package/package/components/flows/content/FlowConstants.svelte +3 -3
- package/package/components/flows/content/FlowEditorPanel.svelte +3 -3
- package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -4
- package/package/components/flows/content/FlowInput.svelte +5 -0
- package/package/components/flows/content/FlowInputsQuick.svelte +2 -1
- package/package/components/flows/content/FlowLoop.svelte +2 -2
- package/package/components/flows/content/FlowModuleComponent.svelte +130 -108
- package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
- package/package/components/flows/content/FlowModuleScript.svelte +0 -1
- package/package/components/flows/content/FlowModuleSkip.svelte +1 -1
- package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
- package/package/components/flows/content/FlowModuleWrapper.svelte +15 -5
- package/package/components/flows/content/FlowModuleWrapper.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowResult.svelte +2 -3
- package/package/components/flows/content/FlowResult.svelte.d.ts +2 -4
- package/package/components/flows/content/FlowWhileLoop.svelte +1 -1
- package/package/components/flows/dfs.d.ts +3 -1
- package/package/components/flows/dfs.js +5 -1
- package/package/components/flows/flowInfers.js +78 -0
- package/package/components/flows/flowState.d.ts +2 -3
- package/package/components/flows/flowState.js +2 -2
- package/package/components/flows/flowStateUtils.svelte.d.ts +4 -4
- package/package/components/flows/flowStateUtils.svelte.js +14 -13
- package/package/components/flows/flowStore.d.ts +3 -4
- package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
- package/package/components/flows/header/FlowYamlEditor.svelte +10 -1
- package/package/components/flows/idUtils.js +2 -1
- package/package/components/flows/map/FlowGraphPreviewButton.svelte +1 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +7 -3
- package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -0
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +15 -15
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +27 -15
- package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +6 -4
- package/package/components/flows/map/InsertModuleButton.svelte +4 -1
- package/package/components/flows/map/InsertModuleInner.svelte +9 -1
- package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
- package/package/components/flows/map/MapItem.svelte +4 -2
- package/package/components/flows/pickers/TopLevelNode.svelte +4 -1
- package/package/components/flows/propPicker/InputPickerInner.svelte +5 -4
- package/package/components/flows/propPicker/OutputBadge.svelte +16 -10
- package/package/components/flows/propPicker/OutputPickerInner.svelte +19 -6
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +6 -2
- package/package/components/flows/propPicker/StepHistory.svelte +4 -1
- package/package/components/flows/testSteps.svelte.d.ts +3 -2
- package/package/components/flows/testSteps.svelte.js +26 -23
- package/package/components/flows/types.d.ts +1 -1
- package/package/components/flows/utils.d.ts +3 -5
- package/package/components/flows/utils.js +3 -4
- package/package/components/git_sync/DetectionFlow.svelte +202 -0
- package/package/components/git_sync/DetectionFlow.svelte.d.ts +6 -0
- package/package/components/git_sync/GitSyncContext.svelte.d.ts +82 -0
- package/package/components/git_sync/GitSyncContext.svelte.js +462 -0
- package/package/components/git_sync/GitSyncModalManager.svelte +99 -0
- package/package/components/git_sync/GitSyncModalManager.svelte.d.ts +18 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +339 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +6 -0
- package/package/components/git_sync/GitSyncRepositoryList.svelte +17 -0
- package/package/components/git_sync/GitSyncRepositoryList.svelte.d.ts +18 -0
- package/package/components/git_sync/GitSyncSection.svelte +89 -0
- package/package/components/git_sync/GitSyncSection.svelte.d.ts +3 -0
- package/package/components/git_sync/GitSyncSuccessModal.svelte +58 -0
- package/package/components/git_sync/GitSyncSuccessModal.svelte.d.ts +7 -0
- package/package/components/git_sync/PullWorkspaceModal.svelte +575 -0
- package/package/components/git_sync/PullWorkspaceModal.svelte.d.ts +15 -0
- package/package/components/git_sync/PushWorkspaceModal.svelte +320 -0
- package/package/components/git_sync/PushWorkspaceModal.svelte.d.ts +12 -0
- package/package/components/graph/FlowGraphV2.svelte +49 -25
- package/package/components/graph/FlowGraphV2.svelte.d.ts +5 -2
- package/package/components/graph/graphBuilder.svelte.d.ts +49 -17
- package/package/components/graph/graphBuilder.svelte.js +31 -15
- package/package/components/graph/model.d.ts +9 -6
- package/package/components/graph/renderers/edges/BaseEdge.svelte +3 -3
- package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +2 -3
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +234 -0
- package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +24 -0
- package/package/components/graph/renderers/nodes/AssetNode.svelte +19 -14
- package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +18 -1
- package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +1 -1
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte +1 -1
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
- package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +2 -2
- package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +1 -1
- package/package/components/graph/renderers/nodes/ModuleNode.svelte +21 -21
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +64 -0
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte.d.ts +7 -0
- package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +1 -1
- package/package/components/icons/AssetDucklakeIcon.svelte +28 -0
- package/package/components/icons/AssetDucklakeIcon.svelte.d.ts +9 -0
- package/package/components/icons/AssetGenericIcon.svelte +3 -0
- package/package/components/icons/DucklakeIcon.svelte +18 -0
- package/package/components/icons/DucklakeIcon.svelte.d.ts +6 -0
- package/package/components/icons/RubyIcon.svelte +656 -0
- package/package/components/icons/RubyIcon.svelte.d.ts +7 -0
- package/package/components/instanceSettings.js +20 -3
- package/package/components/modulesTest.svelte.d.ts +6 -3
- package/package/components/modulesTest.svelte.js +32 -0
- package/package/components/preview/FlowPreviewStatus.svelte +3 -1
- package/package/components/raw_apps/RawAppEditor.svelte +27 -26
- package/package/components/raw_apps/RawAppEditor.svelte.d.ts +17 -17
- package/package/components/runs/{JobPreview.svelte → JobRunsPreview.svelte} +2 -5
- package/package/components/runs/{JobPreview.svelte.d.ts → JobRunsPreview.svelte.d.ts} +3 -3
- package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
- package/package/components/runs/RunRow.svelte +5 -1
- package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
- package/package/components/schema/AddProperty.svelte +41 -36
- package/package/components/schema/AddProperty.svelte.d.ts +2 -2
- package/package/components/schema/AddPropertyV2.svelte +41 -37
- package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -1
- package/package/components/schema/FlowPropertyEditor.svelte +11 -8
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/PropertyEditor.svelte +0 -2
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/SchemaFormDND.svelte +2 -1
- package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -0
- package/package/components/scriptEditor/LogPanel.svelte +5 -3
- package/package/components/scriptEditor/LogPanel.svelte.d.ts +5 -1
- package/package/components/search/RunsSearch.svelte +1 -1
- package/package/components/select/Select.svelte +7 -4
- package/package/components/select/Select.svelte.d.ts +5 -0
- package/package/components/select/SelectDropdown.svelte +2 -1
- package/package/components/select/SelectDropdown.svelte.d.ts +3 -0
- package/package/components/settings/CreateToken.svelte +132 -12
- package/package/components/settings/CreateToken.svelte.d.ts +3 -20
- package/package/components/settings/TokenDisplay.svelte +18 -42
- package/package/components/settings/TokenDisplay.svelte.d.ts +0 -1
- package/package/components/settings/TokensTable.svelte +2 -4
- package/package/components/settings/TokensTable.svelte.d.ts +3 -19
- package/package/components/settings/WorkspaceUserSettings.svelte +428 -69
- package/package/components/sidebar/MenuButton.svelte +12 -10
- package/package/components/sidebar/changelogs.js +5 -0
- package/package/components/stepHistoryLoader.svelte.d.ts +2 -2
- package/package/components/stepHistoryLoader.svelte.js +7 -12
- package/package/components/table/AutoDataTable.svelte +6 -4
- package/package/components/table/AutoDataTable.svelte.d.ts +1 -0
- package/package/components/table/DataTable.svelte +12 -10
- package/package/components/table/DataTable.svelte.d.ts +1 -0
- package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +2 -2
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +50 -11
- package/package/components/triggers/gcp/utils.js +1 -0
- package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
- package/package/components/triggers/http/utils.js +1 -1
- package/package/components/triggers/kafka/utils.js +1 -1
- package/package/components/triggers/mqtt/utils.js +1 -1
- package/package/components/triggers/nats/utils.js +1 -1
- package/package/components/triggers/postgres/utils.js +1 -1
- package/package/components/triggers/sqs/utils.js +1 -1
- package/package/components/triggers/utils.js +2 -1
- package/package/components/triggers/webhook/WebhooksConfigSection.svelte +24 -26
- package/package/components/triggers/webhook/WebhooksPanel.svelte +1 -15
- package/package/components/triggers/websocket/utils.js +1 -1
- package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte +1 -1
- package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +4 -4
- package/package/components/tutorials/utils.js +3 -0
- package/package/components/worker_group.d.ts +4 -1
- package/package/components/worker_group.js +3 -2
- package/package/components/workspaceSettings/AISettings.svelte +52 -36
- package/package/components/workspaceSettings/DucklakeSettings.svelte +321 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +23 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +122 -499
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +8 -10
- package/package/consts.js +2 -1
- package/package/editorLangUtils.d.ts +1 -1
- package/package/editorLangUtils.js +2 -0
- package/package/editorUtils.d.ts +2 -1
- package/package/editorUtils.js +2 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +303 -14
- package/package/gen/schemas.gen.js +371 -76
- package/package/gen/services.gen.d.ts +136 -16
- package/package/gen/services.gen.js +264 -19
- package/package/gen/types.gen.d.ts +736 -17
- package/package/git-sync.d.ts +36 -0
- package/package/git-sync.js +1 -0
- package/package/hub.d.ts +1 -0
- package/package/hubPaths.json +9 -3
- package/package/infer.js +13 -3
- package/package/monaco_workers/graphql.worker.bundle.js +144 -110
- package/package/script_helpers.d.ts +5 -2
- package/package/script_helpers.js +87 -14
- package/package/scripts.d.ts +1 -1
- package/package/scripts.js +3 -2
- package/package/services/JobManager.d.ts +28 -0
- package/package/services/JobManager.js +114 -0
- package/package/stores.d.ts +3 -1
- package/package/stores.js +2 -0
- package/package/svelte5Utils.svelte.d.ts +16 -0
- package/package/svelte5Utils.svelte.js +26 -0
- package/package/utils.d.ts +19 -2
- package/package/utils.js +55 -2
- package/package.json +24 -22
- package/package/components/AllFlowLogs.svelte +0 -31
- package/package/components/AllFlowLogs.svelte.d.ts +0 -8
- package/package/components/InitGitRepoPopover.svelte +0 -410
- package/package/components/InitGitRepoPopover.svelte.d.ts +0 -13
- package/package/components/PullGitRepoPopover.svelte +0 -355
- package/package/components/PullGitRepoPopover.svelte.d.ts +0 -18
- package/package/components/copilot/chat/navigator/apiTools.d.ts +0 -68
- package/package/components/copilot/chat/navigator/apiTools.js +0 -258
- package/package/inferArgSig.d.ts +0 -42
- package/package/inferArgSig.js +0 -198
|
@@ -4,7 +4,7 @@ import { workspaceStore } from '../stores';
|
|
|
4
4
|
import { base } from '../base';
|
|
5
5
|
import FlowJobResult from './FlowJobResult.svelte';
|
|
6
6
|
import DisplayResult from './DisplayResult.svelte';
|
|
7
|
-
import {
|
|
7
|
+
import { getContext, setContext, tick, untrack } from 'svelte';
|
|
8
8
|
import { onDestroy } from 'svelte';
|
|
9
9
|
import { Badge, Button, Skeleton, Tab } from './common';
|
|
10
10
|
import Tabs from './common/tabs/Tabs.svelte';
|
|
@@ -16,19 +16,32 @@ import { ChevronDown, Hourglass } from 'lucide-svelte';
|
|
|
16
16
|
import { deepEqual } from 'fast-equals';
|
|
17
17
|
import FlowTimeline from './FlowTimeline.svelte';
|
|
18
18
|
import { dfs } from './flows/dfs';
|
|
19
|
-
import { get, writable } from 'svelte/store';
|
|
20
19
|
import Alert from './common/alert/Alert.svelte';
|
|
21
20
|
import FlowGraphViewerStep from './FlowGraphViewerStep.svelte';
|
|
22
21
|
import FlowGraphV2 from './graph/FlowGraphV2.svelte';
|
|
23
22
|
import { buildPrefix } from './graph/graphBuilder.svelte';
|
|
24
23
|
import { parseInputArgsAssets } from './assets/lib';
|
|
25
24
|
import FlowPreviewResult from './FlowPreviewResult.svelte';
|
|
25
|
+
import FlowLogViewerWrapper from './FlowLogViewerWrapper.svelte';
|
|
26
26
|
import { createState } from '../svelte5Utils.svelte';
|
|
27
27
|
import JobLoader from './JobLoader.svelte';
|
|
28
|
-
|
|
28
|
+
import { writable } from 'svelte/store';
|
|
29
|
+
import { AI_TOOL_CALL_PREFIX, AI_TOOL_MESSAGE_PREFIX, getToolCallId } from './graph/renderers/nodes/AIToolNode.svelte';
|
|
29
30
|
let { flowStateStore, retryStatus, suspendStatus, hideDownloadInGraph, hideTimeline, hideNodeDefinition, hideDownloadLogs, hideJobId } = getContext('FlowStatusViewer');
|
|
30
|
-
let { jobId, initialJob = undefined, workspaceId = undefined, flowJobIds = undefined, innerModule = undefined,
|
|
31
|
+
let { jobId, initialJob = undefined, workspaceId = undefined, flowJobIds = undefined, innerModule = undefined, render = true, isOwner = false, selectedNode = $bindable(undefined), globalModuleStates, globalDurationStatuses = [], globalIterationBounds, updateRecursiveRefreshFn = undefined, isSelectedBranch = true, isSubflow = false, reducedPolling = false, wideResults = false, hideFlowResult = false, workspace = $workspaceStore, prefix = undefined, topModuleStates = undefined, refreshGlobal, updateGlobalRefresh, subflowParentsGlobalModuleStates = [], subflowParentsDurationStatuses = [], isForloopSelected = false, job = $bindable(undefined), rightColumnSelect = $bindable('timeline'), localModuleStates = $bindable({}), localDurationStatuses = $bindable({}), customUi, onResultStreamUpdate = undefined, graphTabOpen, isNodeSelected, loadExtraLogs = undefined, onStart = undefined, onJobsLoaded = undefined, onDone = undefined } = $props();
|
|
32
|
+
let getTopModuleStates = $derived(topModuleStates ?? localModuleStates);
|
|
33
|
+
let resultStreams = $state({});
|
|
34
|
+
if (onResultStreamUpdate == undefined) {
|
|
35
|
+
onResultStreamUpdate = ({ jobId, result_stream }) => {
|
|
36
|
+
resultStreams[jobId] = result_stream;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
31
39
|
let recursiveRefresh = $state({});
|
|
40
|
+
let updateRecursiveRefreshInner = (childJobId, updateFn) => {
|
|
41
|
+
if (childJobId) {
|
|
42
|
+
recursiveRefresh[childJobId] = updateFn;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
32
45
|
// Add support for the input args assets shown as an asset node
|
|
33
46
|
const _flowGraphAssetsCtx = getContext('FlowGraphAssetContext');
|
|
34
47
|
let extendedFlowGraphAssetsCtx = $state(createState(clone(_flowGraphAssetsCtx)));
|
|
@@ -62,178 +75,179 @@ let timeout = undefined;
|
|
|
62
75
|
let expandedSubflows = $state({});
|
|
63
76
|
let selectedId = writable(selectedNode);
|
|
64
77
|
function onFlowModuleId() {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
78
|
+
let modId = flowJobIds?.moduleId;
|
|
79
|
+
if (modId) {
|
|
80
|
+
let prefixedId = buildSubflowKey(modId, prefix);
|
|
81
|
+
updateGlobalRefresh(prefixedId, async (clear, root) => {
|
|
82
|
+
// console.debug('updateGlobalRefreshInner refresh', prefixedId, clear, root)
|
|
83
|
+
await refresh(clear, root); // refresh(true, loopJob)
|
|
84
|
+
});
|
|
72
85
|
}
|
|
73
86
|
}
|
|
74
87
|
function updateModuleStates(moduleState, key, newValue, keepType) {
|
|
75
|
-
const state = get(moduleState);
|
|
76
88
|
if (newValue.selectedForloop != undefined &&
|
|
77
|
-
|
|
78
|
-
newValue.selectedForloop !=
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
89
|
+
moduleState[key]?.selectedForloop != undefined &&
|
|
90
|
+
newValue.selectedForloop != moduleState[key].selectedForloop) {
|
|
91
|
+
let newState = { ...moduleState[key] };
|
|
92
|
+
if (newValue.type == 'InProgress' &&
|
|
93
|
+
moduleState[key]?.type != 'InProgress' &&
|
|
94
|
+
!(keepType &&
|
|
95
|
+
(moduleState[key]?.type === 'Success' || moduleState[key]?.type === 'Failure'))) {
|
|
96
|
+
newState.type = 'InProgress';
|
|
84
97
|
}
|
|
85
|
-
if (
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
98
|
+
else if (['Success', 'Failure'].includes(newValue.type)) {
|
|
99
|
+
newState.type = newValue.type;
|
|
100
|
+
}
|
|
101
|
+
if (moduleState[key]?.job_id != newValue.job_id ||
|
|
102
|
+
!deepEqual(moduleState[key]?.args, newValue.args) ||
|
|
103
|
+
!deepEqual(moduleState[key]?.result, newValue.result)) {
|
|
104
|
+
newState.args = newValue.args;
|
|
105
|
+
newState.result = newValue.result;
|
|
106
|
+
newState.job_id = newValue.job_id;
|
|
94
107
|
}
|
|
108
|
+
moduleState[key] = newState;
|
|
95
109
|
return;
|
|
96
110
|
}
|
|
97
|
-
if (
|
|
111
|
+
if (moduleState[key]?.selectedForLoopSetManually) {
|
|
98
112
|
if (newValue.selectedForloop != undefined &&
|
|
99
|
-
|
|
100
|
-
return
|
|
113
|
+
moduleState[key]?.selectedForloop != newValue.selectedForloop) {
|
|
114
|
+
return moduleState;
|
|
101
115
|
}
|
|
102
116
|
else {
|
|
103
117
|
newValue.selectedForLoopSetManually = true;
|
|
104
|
-
newValue.selectedForloopIndex =
|
|
105
|
-
newValue.selectedForloop =
|
|
118
|
+
newValue.selectedForloopIndex = moduleState[key]?.selectedForloopIndex;
|
|
119
|
+
newValue.selectedForloop = moduleState[key]?.selectedForloop;
|
|
106
120
|
}
|
|
107
121
|
}
|
|
108
|
-
else if (
|
|
109
|
-
newValue.selectedForloopIndex =
|
|
110
|
-
newValue.selectedForloop =
|
|
122
|
+
else if (moduleState[key]?.selectedForloopIndex != undefined) {
|
|
123
|
+
newValue.selectedForloopIndex = moduleState[key]?.selectedForloopIndex;
|
|
124
|
+
newValue.selectedForloop = moduleState[key]?.selectedForloop;
|
|
111
125
|
}
|
|
112
|
-
if (keepType && (
|
|
113
|
-
newValue.type =
|
|
126
|
+
if (keepType && (moduleState[key]?.type == 'Success' || moduleState[key]?.type == 'Failure')) {
|
|
127
|
+
newValue.type = moduleState[key].type;
|
|
114
128
|
}
|
|
115
|
-
if (!deepEqual(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
return state;
|
|
119
|
-
});
|
|
129
|
+
if (!deepEqual(moduleState[key], newValue)) {
|
|
130
|
+
// console.debug('updateModuleStates 2', key, $state.snapshot(moduleState))
|
|
131
|
+
moduleState[key] = newValue;
|
|
120
132
|
}
|
|
121
133
|
}
|
|
122
134
|
function buildSubflowKey(key, prefix) {
|
|
123
135
|
return prefix ? 'subflow:' + prefix + key : key;
|
|
124
136
|
}
|
|
125
137
|
async function refresh(clearLoop, rootJob) {
|
|
138
|
+
console.debug('refresh', clearLoop, rootJob);
|
|
126
139
|
let modId = flowJobIds?.moduleId;
|
|
140
|
+
let topModuleStates = getTopModuleStates;
|
|
127
141
|
if (clearLoop) {
|
|
128
142
|
if (!rootJob) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
if (modId) {
|
|
133
|
-
delete x[modId];
|
|
134
|
-
}
|
|
135
|
-
return x;
|
|
136
|
-
});
|
|
143
|
+
if (modId && topModuleStates) {
|
|
144
|
+
let prefixedId = buildSubflowKey(modId, prefix);
|
|
145
|
+
delete topModuleStates[prefixedId]; // TODO: this is not working
|
|
137
146
|
}
|
|
138
147
|
if (subflowParentsGlobalModuleStates.length > 0) {
|
|
139
|
-
subflowParentsGlobalModuleStates?.[subflowParentsGlobalModuleStates?.length - 1]
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}
|
|
148
|
+
let subflowModuleStates = subflowParentsGlobalModuleStates?.[subflowParentsGlobalModuleStates?.length - 1];
|
|
149
|
+
for (let mod of innerModules ?? []) {
|
|
150
|
+
if (mod.id) {
|
|
151
|
+
delete subflowModuleStates[buildSubflowKey(mod.id, prefix)];
|
|
144
152
|
}
|
|
145
|
-
|
|
146
|
-
});
|
|
153
|
+
}
|
|
147
154
|
}
|
|
148
155
|
else {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
156
|
+
for (let mod of innerModules ?? []) {
|
|
157
|
+
if (mod.id && topModuleStates) {
|
|
158
|
+
let prefixedId = buildSubflowKey(mod.id, prefix);
|
|
159
|
+
delete topModuleStates[prefixedId];
|
|
154
160
|
}
|
|
155
|
-
|
|
156
|
-
});
|
|
161
|
+
}
|
|
157
162
|
}
|
|
158
163
|
}
|
|
159
164
|
}
|
|
160
165
|
else {
|
|
161
|
-
let state = modId ?
|
|
166
|
+
let state = modId ? topModuleStates?.[buildSubflowKey(modId, prefix)] : undefined;
|
|
162
167
|
let loopjob = state?.selectedForloop;
|
|
163
168
|
let njob = flowJobIds && modId && loopjob ? storedListJobs?.[loopjob] : job;
|
|
164
169
|
if (njob) {
|
|
165
|
-
|
|
170
|
+
onJobsLoaded?.({ job: njob, force: true });
|
|
166
171
|
}
|
|
167
172
|
}
|
|
168
|
-
|
|
169
|
-
if (rootJob != undefined && rootJob != k) {
|
|
170
|
-
continue;
|
|
171
|
-
}
|
|
173
|
+
let callRec = async (rec) => {
|
|
172
174
|
await tick();
|
|
173
175
|
await rec(clearLoop, undefined);
|
|
176
|
+
};
|
|
177
|
+
if (rootJob) {
|
|
178
|
+
let rec = recursiveRefresh[rootJob];
|
|
179
|
+
if (rec) {
|
|
180
|
+
await callRec(rec);
|
|
181
|
+
// console.debug('refresh recursive 1', rec)
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
// console.debug('refresh recursive no rec', rootJob)
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
for (let rec of Object.values(recursiveRefresh)) {
|
|
189
|
+
await callRec(rec);
|
|
190
|
+
// console.debug('refresh recursive 2', rec)
|
|
191
|
+
}
|
|
174
192
|
}
|
|
175
193
|
}
|
|
176
194
|
function updateRecursiveRefresh(jobId) {
|
|
177
195
|
if (jobId) {
|
|
178
|
-
|
|
196
|
+
updateRecursiveRefreshFn?.(jobId, async (clear, root) => {
|
|
179
197
|
if (globalModuleStates.length > 0 || isSubflow) {
|
|
180
198
|
await refresh(clear, root);
|
|
181
199
|
}
|
|
182
|
-
};
|
|
200
|
+
});
|
|
183
201
|
}
|
|
184
202
|
}
|
|
185
203
|
function setModuleState(key, value, force, keepType) {
|
|
186
|
-
let newValue = { ...(
|
|
187
|
-
if (!deepEqual(
|
|
204
|
+
let newValue = { ...(localModuleStates[key] ?? {}), ...value };
|
|
205
|
+
if (!deepEqual(localModuleStates[key], value) || force) {
|
|
206
|
+
// console.debug('setModuleState', key, force, keepType, $state.snapshot(value))
|
|
188
207
|
;
|
|
189
208
|
[localModuleStates, ...globalModuleStates].forEach((s) => {
|
|
190
209
|
updateModuleStates(s, key, newValue, keepType);
|
|
191
210
|
});
|
|
192
211
|
if (prefix) {
|
|
193
|
-
|
|
212
|
+
let prefixedId = buildSubflowKey(key, prefix);
|
|
213
|
+
subflowParentsGlobalModuleStates.forEach((s) => {
|
|
214
|
+
updateModuleStates(s, prefixedId, newValue, keepType);
|
|
215
|
+
});
|
|
194
216
|
}
|
|
195
217
|
}
|
|
196
218
|
}
|
|
197
219
|
function setDurationStatusByJob(key, id, value) {
|
|
198
|
-
if (!deepEqual(
|
|
199
|
-
|
|
220
|
+
if (!deepEqual(localDurationStatuses[key]?.byJob[id], value)) {
|
|
221
|
+
localDurationStatuses[key].byJob[id] = value;
|
|
200
222
|
globalDurationStatuses.forEach((s) => {
|
|
201
|
-
s.
|
|
202
|
-
x[key].byJob[id] = value;
|
|
203
|
-
return x;
|
|
204
|
-
});
|
|
223
|
+
s[key].byJob[id] = value;
|
|
205
224
|
});
|
|
206
225
|
if (prefix) {
|
|
207
226
|
subflowParentsDurationStatuses.forEach((s) => {
|
|
208
|
-
s
|
|
209
|
-
x[buildSubflowKey(key, prefix)].byJob[id] = value;
|
|
210
|
-
return x;
|
|
211
|
-
});
|
|
227
|
+
s[buildSubflowKey(key, prefix)].byJob[id] = value;
|
|
212
228
|
});
|
|
213
229
|
}
|
|
214
230
|
}
|
|
215
231
|
}
|
|
216
232
|
function initializeByJob(modId) {
|
|
217
|
-
if (
|
|
218
|
-
|
|
233
|
+
if (localDurationStatuses[modId] == undefined) {
|
|
234
|
+
localDurationStatuses[modId] = { byJob: {} };
|
|
219
235
|
}
|
|
220
|
-
globalDurationStatuses.forEach((x) =>
|
|
236
|
+
globalDurationStatuses.forEach((x) => {
|
|
221
237
|
if (x[modId] == undefined) {
|
|
222
238
|
x[modId] = { byJob: {} };
|
|
223
239
|
}
|
|
224
|
-
|
|
225
|
-
}));
|
|
240
|
+
});
|
|
226
241
|
if (prefix) {
|
|
227
|
-
subflowParentsDurationStatuses.forEach((x) =>
|
|
242
|
+
subflowParentsDurationStatuses.forEach((x) => {
|
|
228
243
|
let key = buildSubflowKey(modId, prefix);
|
|
229
244
|
if (x[key] == undefined) {
|
|
230
245
|
x[key] = { byJob: {} };
|
|
231
246
|
}
|
|
232
|
-
|
|
233
|
-
}));
|
|
247
|
+
});
|
|
234
248
|
}
|
|
235
249
|
}
|
|
236
|
-
let innerModules = $state(
|
|
250
|
+
let innerModules = $state(undefined);
|
|
237
251
|
function updateStatus(status) {
|
|
238
252
|
innerModules =
|
|
239
253
|
status?.modules?.concat(status.failure_module.type != 'WaitingForPriorSteps' ? status.failure_module : []) ?? [];
|
|
@@ -243,29 +257,27 @@ function updateStatus(status) {
|
|
|
243
257
|
updateInnerModules();
|
|
244
258
|
let count = status.retry?.fail_count;
|
|
245
259
|
if (count) {
|
|
246
|
-
|
|
260
|
+
retryStatus.val[jobId ?? ''] = count;
|
|
247
261
|
}
|
|
248
|
-
else if (
|
|
249
|
-
delete
|
|
250
|
-
$retryStatus = $retryStatus;
|
|
262
|
+
else if (retryStatus.val[jobId ?? ''] != undefined) {
|
|
263
|
+
delete retryStatus.val[jobId ?? ''];
|
|
251
264
|
}
|
|
252
265
|
let jobStatus = job?.flow_status?.modules?.[job?.flow_status.step];
|
|
253
266
|
if (jobStatus && jobStatus.count != undefined) {
|
|
254
|
-
|
|
267
|
+
suspendStatus.val[jobId ?? ''] = { nb: jobStatus.count, job: job };
|
|
255
268
|
}
|
|
256
|
-
else if (
|
|
257
|
-
delete
|
|
258
|
-
$suspendStatus = $suspendStatus;
|
|
269
|
+
else if (suspendStatus.val[jobId ?? ''] != undefined) {
|
|
270
|
+
delete suspendStatus.val[jobId ?? ''];
|
|
259
271
|
}
|
|
260
272
|
}
|
|
261
273
|
function updateInnerModules() {
|
|
262
|
-
if (
|
|
263
|
-
innerModules
|
|
274
|
+
if (localModuleStates) {
|
|
275
|
+
innerModules?.forEach((mod, i) => {
|
|
264
276
|
if (mod.type === 'WaitingForEvents' && innerModules?.[i - 1]?.type === 'Success') {
|
|
265
277
|
setModuleState(mod.id ?? '', { type: mod.type, args: job?.args, tag: job?.tag });
|
|
266
278
|
}
|
|
267
279
|
else if (mod.type === 'WaitingForExecutor' &&
|
|
268
|
-
|
|
280
|
+
localModuleStates[mod.id ?? '']?.scheduled_for == undefined) {
|
|
269
281
|
JobService.getJob({
|
|
270
282
|
workspace: workspaceId ?? $workspaceStore ?? '',
|
|
271
283
|
id: mod.job ?? '',
|
|
@@ -289,12 +301,13 @@ function updateInnerModules() {
|
|
|
289
301
|
}
|
|
290
302
|
else if ((mod.flow_jobs || mod.branch_chosen) &&
|
|
291
303
|
(mod.type == 'Success' || mod.type == 'Failure') &&
|
|
292
|
-
!['Success', 'Failure'].includes(
|
|
304
|
+
!['Success', 'Failure'].includes(localModuleStates?.[mod.id ?? '']?.type)) {
|
|
293
305
|
let branchChosen = mod.branch_chosen
|
|
294
306
|
? {
|
|
295
307
|
branchChosen: mod.branch_chosen.type == 'default' ? 0 : (mod.branch_chosen.branch ?? 0) + 1
|
|
296
308
|
}
|
|
297
309
|
: {};
|
|
310
|
+
console.debug('updateInnerModules', mod.id, mod.type, branchChosen);
|
|
298
311
|
setModuleState(mod.id ?? '', {
|
|
299
312
|
type: mod.type,
|
|
300
313
|
...branchChosen
|
|
@@ -303,9 +316,34 @@ function updateInnerModules() {
|
|
|
303
316
|
else if (isForloopSelected) {
|
|
304
317
|
setModuleState(mod.id ?? '', {}, true);
|
|
305
318
|
}
|
|
306
|
-
if (mod.flow_jobs_success) {
|
|
319
|
+
if (mod.flow_jobs_success || mod.flow_jobs) {
|
|
307
320
|
setModuleState(mod.id ?? '', {
|
|
308
|
-
flow_jobs_success: mod.flow_jobs_success
|
|
321
|
+
flow_jobs_success: mod.flow_jobs_success,
|
|
322
|
+
flow_jobs: mod.flow_jobs,
|
|
323
|
+
iteration_total: mod.iterator?.itered?.length ?? mod.flow_jobs?.length
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
if (mod.agent_actions && mod.id) {
|
|
327
|
+
setModuleState(mod.id, {
|
|
328
|
+
agent_actions: mod.agent_actions
|
|
329
|
+
});
|
|
330
|
+
mod.agent_actions.forEach((action, idx) => {
|
|
331
|
+
if (mod.id) {
|
|
332
|
+
if (action.type == 'tool_call') {
|
|
333
|
+
const toolCallId = getToolCallId(idx, mod.id, action.module_id);
|
|
334
|
+
const success = mod.agent_actions_success?.[idx];
|
|
335
|
+
setModuleState(toolCallId, {
|
|
336
|
+
job_id: action.job_id,
|
|
337
|
+
type: success != undefined ? (success ? 'Success' : 'Failure') : 'InProgress'
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
else if (action.type == 'message') {
|
|
341
|
+
const toolCallId = getToolCallId(idx, mod.id);
|
|
342
|
+
setModuleState(toolCallId, {
|
|
343
|
+
type: 'Success'
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
}
|
|
309
347
|
});
|
|
310
348
|
}
|
|
311
349
|
});
|
|
@@ -331,20 +369,20 @@ let notAnonynmous = $state(false);
|
|
|
331
369
|
let started = false;
|
|
332
370
|
let jobLoader = undefined;
|
|
333
371
|
function setJob(newJob, force) {
|
|
334
|
-
if (!deepEqual(job, newJob) || isForloopSelected || force) {
|
|
372
|
+
if (!deepEqual(job, newJob) || isForloopSelected || force || innerModules == undefined) {
|
|
335
373
|
job = newJob;
|
|
336
374
|
job?.flow_status && updateStatus(job?.flow_status);
|
|
337
|
-
|
|
375
|
+
onJobsLoaded?.({ job, force: false });
|
|
338
376
|
notAnonynmous = false;
|
|
339
377
|
if (job?.type == 'CompletedJob' && !destroyed) {
|
|
340
|
-
|
|
378
|
+
onDone?.({ job });
|
|
341
379
|
}
|
|
342
380
|
}
|
|
343
381
|
}
|
|
344
382
|
async function loadJobInProgress() {
|
|
345
383
|
if (!started) {
|
|
346
384
|
started = true;
|
|
347
|
-
|
|
385
|
+
onStart?.();
|
|
348
386
|
}
|
|
349
387
|
if (jobId != '00000000-0000-0000-0000-000000000000') {
|
|
350
388
|
try {
|
|
@@ -357,6 +395,17 @@ async function loadJobInProgress() {
|
|
|
357
395
|
jobLoader?.watchJob(jobId, {
|
|
358
396
|
change(newJob) {
|
|
359
397
|
setJob(newJob, true);
|
|
398
|
+
},
|
|
399
|
+
resultStreamUpdate({ id, result_stream }) {
|
|
400
|
+
onResultStreamUpdate?.({ jobId: id, result_stream });
|
|
401
|
+
},
|
|
402
|
+
loadExtraLogs({ id, logs }) {
|
|
403
|
+
if (id == jobId && job) {
|
|
404
|
+
job.logs = logs;
|
|
405
|
+
}
|
|
406
|
+
if (loadExtraLogs) {
|
|
407
|
+
loadExtraLogs(logs);
|
|
408
|
+
}
|
|
360
409
|
}
|
|
361
410
|
});
|
|
362
411
|
}
|
|
@@ -374,61 +423,41 @@ async function loadJobInProgress() {
|
|
|
374
423
|
let destroyed = false;
|
|
375
424
|
updateRecursiveRefresh(jobId);
|
|
376
425
|
async function updateJobId() {
|
|
377
|
-
if (jobId !== job?.id) {
|
|
378
|
-
|
|
426
|
+
if (jobId !== job?.id || innerModules == undefined) {
|
|
427
|
+
localModuleStates = {};
|
|
379
428
|
flowTimeline?.reset();
|
|
380
429
|
timeout && clearTimeout(timeout);
|
|
381
|
-
innerModules =
|
|
430
|
+
innerModules = undefined;
|
|
431
|
+
console.log('updateJobId', jobId);
|
|
382
432
|
if (flowJobIds) {
|
|
383
433
|
let modId = flowJobIds?.moduleId ?? '';
|
|
384
|
-
|
|
434
|
+
if (localDurationStatuses[modId] == undefined) {
|
|
435
|
+
localDurationStatuses[modId] = { byJob: {} };
|
|
436
|
+
}
|
|
437
|
+
let prefixed = buildSubflowKey(modId, prefix);
|
|
438
|
+
globalDurationStatuses.forEach((x) => {
|
|
439
|
+
if (x[prefixed] == undefined) {
|
|
440
|
+
x[prefixed] = { byJob: {} };
|
|
441
|
+
}
|
|
442
|
+
});
|
|
443
|
+
globalIterationBounds[prefixed] = {
|
|
385
444
|
iteration_from: flowJobIds?.branchall ? 0 : Math.max(flowJobIds.flowJobs.length - 20, 0),
|
|
386
|
-
iteration_total:
|
|
387
|
-
};
|
|
388
|
-
$localDurationStatuses[modId] = {
|
|
389
|
-
...($localDurationStatuses[modId] ?? { byJob: {} }),
|
|
390
|
-
...common
|
|
445
|
+
iteration_total: flowJobIds?.length
|
|
391
446
|
};
|
|
392
|
-
let prefixed = modId;
|
|
393
|
-
globalDurationStatuses.forEach((x) => x.update((x) => {
|
|
394
|
-
x[prefixed] = { ...(x[prefixed] ?? { byJob: {} }), ...common };
|
|
395
|
-
return x;
|
|
396
|
-
}));
|
|
397
447
|
}
|
|
398
448
|
else {
|
|
399
|
-
updateRecursiveRefresh(jobId);
|
|
400
449
|
recursiveRefresh = {};
|
|
401
|
-
|
|
450
|
+
localDurationStatuses = {};
|
|
451
|
+
updateRecursiveRefresh(jobId);
|
|
402
452
|
}
|
|
403
453
|
await loadJobInProgress();
|
|
404
454
|
}
|
|
405
455
|
}
|
|
406
|
-
|
|
407
|
-
return get(globalModuleStates?.[globalModuleStates?.length - 1]);
|
|
408
|
-
}
|
|
409
|
-
let forloop_selected = $state(getTopModuleStates()?.[flowJobIds?.moduleId ?? '']?.selectedForloop);
|
|
410
|
-
let sub = undefined;
|
|
411
|
-
let timeoutForloopSelectedSub = undefined;
|
|
412
|
-
let timeoutForloopSelected = undefined;
|
|
413
|
-
function onModuleIdChange() {
|
|
414
|
-
clearTimeout(timeoutForloopSelectedSub);
|
|
415
|
-
timeoutForloopSelectedSub = setTimeout(() => {
|
|
416
|
-
sub?.();
|
|
417
|
-
sub = globalModuleStates?.[globalModuleStates?.length - 1].subscribe((x) => {
|
|
418
|
-
const newForloopSelected = x[flowJobIds?.moduleId ?? '']?.selectedForloop;
|
|
419
|
-
if (newForloopSelected != forloop_selected) {
|
|
420
|
-
clearTimeout(timeoutForloopSelected);
|
|
421
|
-
timeoutForloopSelected = setTimeout(() => {
|
|
422
|
-
forloop_selected = newForloopSelected;
|
|
423
|
-
}, 200);
|
|
424
|
-
}
|
|
425
|
-
});
|
|
426
|
-
}, 200);
|
|
427
|
-
}
|
|
456
|
+
let forloop_selected = $state(getTopModuleStates?.[buildSubflowKey(flowJobIds?.moduleId ?? '', prefix)]?.selectedForloop);
|
|
428
457
|
onDestroy(() => {
|
|
429
458
|
destroyed = true;
|
|
430
459
|
timeout && clearTimeout(timeout);
|
|
431
|
-
sub?.()
|
|
460
|
+
// sub?.()
|
|
432
461
|
});
|
|
433
462
|
function isSuccess(arg) {
|
|
434
463
|
if (arg == undefined) {
|
|
@@ -438,24 +467,23 @@ function isSuccess(arg) {
|
|
|
438
467
|
return arg == true;
|
|
439
468
|
}
|
|
440
469
|
}
|
|
441
|
-
function
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
}
|
|
470
|
+
function onJobsLoadedInner(mod, job, force) {
|
|
471
|
+
let id = mod.id;
|
|
472
|
+
if (id && ((mod.flow_jobs ?? []).length == 0 || force)) {
|
|
473
|
+
// console.debug('onJobsLoadedInner', id, job.id, force)
|
|
474
|
+
if (flowStateStore) {
|
|
475
|
+
flowStateStore[buildSubflowKey(id, prefix)] = {
|
|
476
|
+
...(flowStateStore?.[buildSubflowKey(id, prefix)] ?? {}),
|
|
477
|
+
previewResult: job['result'],
|
|
478
|
+
previewArgs: job.args,
|
|
479
|
+
previewJobId: job.id,
|
|
480
|
+
previewSuccess: job['success']
|
|
481
|
+
};
|
|
454
482
|
}
|
|
455
|
-
initializeByJob(
|
|
483
|
+
initializeByJob(id);
|
|
456
484
|
let started_at = job.started_at ? new Date(job.started_at).getTime() : undefined;
|
|
457
485
|
if (job.type == 'QueuedJob') {
|
|
458
|
-
setModuleState(
|
|
486
|
+
setModuleState(id, {
|
|
459
487
|
type: 'InProgress',
|
|
460
488
|
job_id: job.id,
|
|
461
489
|
logs: job.logs,
|
|
@@ -464,7 +492,7 @@ function onJobsLoaded(mod, job, force) {
|
|
|
464
492
|
started_at,
|
|
465
493
|
parent_module: mod['parent_module']
|
|
466
494
|
}, force);
|
|
467
|
-
setDurationStatusByJob(
|
|
495
|
+
setDurationStatusByJob(id, job.id, {
|
|
468
496
|
created_at: job.created_at ? new Date(job.created_at).getTime() : undefined,
|
|
469
497
|
started_at
|
|
470
498
|
});
|
|
@@ -472,8 +500,8 @@ function onJobsLoaded(mod, job, force) {
|
|
|
472
500
|
else {
|
|
473
501
|
const parent_module = mod['parent_module'];
|
|
474
502
|
// Delete existing failure node attached to the same parent module
|
|
475
|
-
removeFailureNode(
|
|
476
|
-
setModuleState(
|
|
503
|
+
removeFailureNode(id, parent_module);
|
|
504
|
+
setModuleState(id, {
|
|
477
505
|
args: job.args,
|
|
478
506
|
type: job['success'] ? 'Success' : 'Failure',
|
|
479
507
|
logs: job.logs,
|
|
@@ -487,10 +515,11 @@ function onJobsLoaded(mod, job, force) {
|
|
|
487
515
|
flow_jobs_success: mod.flow_jobs_success,
|
|
488
516
|
iteration_total: mod.iterator?.itered?.length,
|
|
489
517
|
retries: mod?.failed_retries?.length,
|
|
490
|
-
skipped: mod.skipped
|
|
491
|
-
|
|
518
|
+
skipped: mod.skipped,
|
|
519
|
+
agent_actions: mod.agent_actions
|
|
520
|
+
// retries: flowStateStore?.raw_flow
|
|
492
521
|
}, force);
|
|
493
|
-
setDurationStatusByJob(
|
|
522
|
+
setDurationStatusByJob(id, job.id, {
|
|
494
523
|
created_at: job.created_at ? new Date(job.created_at).getTime() : undefined,
|
|
495
524
|
started_at,
|
|
496
525
|
duration_ms: job['duration_ms']
|
|
@@ -500,11 +529,11 @@ function onJobsLoaded(mod, job, force) {
|
|
|
500
529
|
}
|
|
501
530
|
async function setIteration(j, id, clicked, modId, isForloop) {
|
|
502
531
|
if (modId) {
|
|
503
|
-
let
|
|
504
|
-
let
|
|
505
|
-
let state =
|
|
532
|
+
let prefixedId = buildSubflowKey(modId, prefix);
|
|
533
|
+
let topModuleStates = getTopModuleStates;
|
|
534
|
+
let state = topModuleStates?.[prefixedId];
|
|
506
535
|
if (clicked && state?.selectedForloop) {
|
|
507
|
-
await
|
|
536
|
+
await refreshGlobal?.(prefixedId, true, state.selectedForloop);
|
|
508
537
|
}
|
|
509
538
|
let manualOnce = state?.selectedForLoopSetManually;
|
|
510
539
|
if (clicked ||
|
|
@@ -520,20 +549,19 @@ async function setIteration(j, id, clicked, modId, isForloop) {
|
|
|
520
549
|
const selectedNotEqual = id != state?.selectedForloop ||
|
|
521
550
|
j != state?.selectedForloopIndex ||
|
|
522
551
|
setManually != state?.selectedForLoopSetManually;
|
|
552
|
+
// console.debug('setIteration', selectedNotEqual, state, topModuleStates)
|
|
523
553
|
if (selectedNotEqual) {
|
|
524
|
-
|
|
525
|
-
|
|
554
|
+
if (topModuleStates) {
|
|
555
|
+
topModuleStates[prefixedId] = {
|
|
526
556
|
type: 'WaitingForPriorSteps',
|
|
527
557
|
args: {},
|
|
528
558
|
...newState
|
|
529
559
|
};
|
|
530
|
-
|
|
531
|
-
// clicked && callGlobRefresh(modId, {index: j, job: id, selectedManually: setManually ?? false})
|
|
532
|
-
});
|
|
560
|
+
}
|
|
533
561
|
}
|
|
534
562
|
}
|
|
535
563
|
if (clicked) {
|
|
536
|
-
await
|
|
564
|
+
await refreshGlobal?.(prefixedId, false, id);
|
|
537
565
|
}
|
|
538
566
|
}
|
|
539
567
|
}
|
|
@@ -541,27 +569,31 @@ function innerJobLoaded(jobLoaded, j, clicked, force) {
|
|
|
541
569
|
let modId = flowJobIds?.moduleId;
|
|
542
570
|
if (modId) {
|
|
543
571
|
setIteration(j, jobLoaded.id, clicked, modId, innerModule?.type == 'forloopflow' || innerModule?.type == 'whileloopflow');
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
572
|
+
let prefixedId = buildSubflowKey(modId, prefix);
|
|
573
|
+
// if (flowStateStore) {
|
|
574
|
+
// flowStateStore[modId] = {
|
|
575
|
+
// ...((flowStateStore[modId] as object) ?? {}),
|
|
576
|
+
// previewResult: jobLoaded.args
|
|
577
|
+
// }
|
|
578
|
+
// }
|
|
579
|
+
if (flowStateStore && flowStateStore[prefixedId] == undefined) {
|
|
580
|
+
flowStateStore[prefixedId] = {};
|
|
549
581
|
}
|
|
550
|
-
if (
|
|
551
|
-
if (!
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
$flowStateStore[modId].previewResult = [];
|
|
555
|
-
}
|
|
556
|
-
$flowStateStore[modId].previewArgs = jobLoaded.args;
|
|
582
|
+
if (flowStateStore) {
|
|
583
|
+
if (!flowStateStore?.[prefixedId]?.previewResult ||
|
|
584
|
+
!Array.isArray(flowStateStore[prefixedId]?.previewResult)) {
|
|
585
|
+
flowStateStore[prefixedId].previewResult = [];
|
|
557
586
|
}
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
587
|
+
flowStateStore[prefixedId].previewArgs = jobLoaded.args;
|
|
588
|
+
}
|
|
589
|
+
if (jobLoaded.type == 'QueuedJob') {
|
|
590
|
+
jobResults[j] = 'Job in progress ...';
|
|
591
|
+
}
|
|
592
|
+
else if (jobLoaded.type == 'CompletedJob') {
|
|
593
|
+
if (flowStateStore?.[prefixedId]) {
|
|
594
|
+
flowStateStore[prefixedId].previewResult[j] = jobLoaded.result;
|
|
564
595
|
}
|
|
596
|
+
jobResults[j] = jobLoaded.result;
|
|
565
597
|
}
|
|
566
598
|
let started_at = jobLoaded.started_at ? new Date(jobLoaded.started_at).getTime() : undefined;
|
|
567
599
|
let created_at = jobLoaded.created_at ? new Date(jobLoaded.created_at).getTime() : undefined;
|
|
@@ -574,14 +606,14 @@ function innerJobLoaded(jobLoaded, j, clicked, force) {
|
|
|
574
606
|
iteration_total: flowJobIds?.length,
|
|
575
607
|
duration_ms: undefined
|
|
576
608
|
};
|
|
577
|
-
let currentIndex = getTopModuleStates
|
|
609
|
+
let currentIndex = getTopModuleStates?.[prefixedId]?.selectedForloopIndex == j;
|
|
578
610
|
if (currentIndex) {
|
|
579
611
|
v.logs = jobLoaded.logs;
|
|
580
612
|
v.args = jobLoaded.args;
|
|
581
613
|
v.job_id = jobLoaded.id;
|
|
582
614
|
}
|
|
583
615
|
if (jobLoaded.type == 'QueuedJob') {
|
|
584
|
-
if (started_at &&
|
|
616
|
+
if (started_at && localModuleStates[modId]?.type != 'InProgress') {
|
|
585
617
|
v.type = 'InProgress';
|
|
586
618
|
}
|
|
587
619
|
}
|
|
@@ -612,47 +644,42 @@ function innerJobLoaded(jobLoaded, j, clicked, force) {
|
|
|
612
644
|
id = innerModule?.modules?.[0]?.id;
|
|
613
645
|
}
|
|
614
646
|
if (id) {
|
|
615
|
-
|
|
647
|
+
onJobsLoadedInner({ id }, jobLoaded);
|
|
616
648
|
}
|
|
617
649
|
}
|
|
618
650
|
}
|
|
619
651
|
}
|
|
620
652
|
let flowTimeline = $state();
|
|
621
|
-
function loadPreviousIters(lenToAdd) {
|
|
622
|
-
let
|
|
623
|
-
if (
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
globalDurationStatuses.forEach((x) => x.update((x) => x));
|
|
653
|
+
function loadPreviousIters(innerKey, lenToAdd) {
|
|
654
|
+
let key = buildSubflowKey(innerKey, prefix);
|
|
655
|
+
if (globalIterationBounds[key]) {
|
|
656
|
+
globalIterationBounds[key].iteration_from =
|
|
657
|
+
(globalIterationBounds[key]?.iteration_from ?? 0) - lenToAdd;
|
|
627
658
|
}
|
|
628
|
-
jobResults = [
|
|
629
|
-
...[...new Array(lenToAdd).keys()].map((x) => 'not computed or loaded yet'),
|
|
630
|
-
...jobResults
|
|
631
|
-
];
|
|
632
659
|
// updateSlicedListJobIds()
|
|
633
660
|
}
|
|
634
661
|
let stepDetail = $state(undefined);
|
|
635
662
|
let storedListJobs = $state({});
|
|
663
|
+
let storedToolCallJobs = $state({});
|
|
664
|
+
let selectedToolCall = $state(undefined);
|
|
665
|
+
let toolCallIndicesToLoad = $state([]);
|
|
636
666
|
let wrapperHeight = $state(0);
|
|
637
667
|
function removeFailureNode(id, parent_module) {
|
|
638
668
|
if (id?.startsWith('failure-') && parent_module) {
|
|
639
669
|
;
|
|
640
|
-
[...globalModuleStates, localModuleStates].forEach((
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
}
|
|
649
|
-
return stateMap;
|
|
650
|
-
});
|
|
670
|
+
[...globalModuleStates, localModuleStates].forEach((stateMap) => {
|
|
671
|
+
if (id) {
|
|
672
|
+
Object.keys(stateMap).forEach((key) => {
|
|
673
|
+
if (stateMap[key]?.parent_module == parent_module) {
|
|
674
|
+
delete stateMap[key];
|
|
675
|
+
}
|
|
676
|
+
});
|
|
677
|
+
}
|
|
651
678
|
});
|
|
652
679
|
}
|
|
653
680
|
}
|
|
654
681
|
function allModulesForTimeline(modules, expandedSubflows) {
|
|
655
|
-
const ids = dfs(modules, (x) => x.id);
|
|
682
|
+
const ids = dfs(modules, (x) => x.id, { skipToolNodes: true });
|
|
656
683
|
function rec(ids, prefix) {
|
|
657
684
|
return ids.concat(ids.flatMap((id) => {
|
|
658
685
|
let fms = expandedSubflows[id];
|
|
@@ -669,6 +696,45 @@ function allModulesForTimeline(modules, expandedSubflows) {
|
|
|
669
696
|
return rec(ids, undefined);
|
|
670
697
|
}
|
|
671
698
|
let subflowsSize = $state(500);
|
|
699
|
+
function setParentModuleState(modId, state) {
|
|
700
|
+
;
|
|
701
|
+
[localModuleStates, ...globalModuleStates].forEach((stateMap) => {
|
|
702
|
+
if (stateMap[modId]) {
|
|
703
|
+
stateMap[modId] = { ...stateMap[modId], ...state };
|
|
704
|
+
}
|
|
705
|
+
});
|
|
706
|
+
if (prefix) {
|
|
707
|
+
let prefixedId = buildSubflowKey(modId, prefix);
|
|
708
|
+
subflowParentsGlobalModuleStates.forEach((stateMap) => {
|
|
709
|
+
if (stateMap[prefixedId]) {
|
|
710
|
+
stateMap[prefixedId] = { ...stateMap[prefixedId], ...state };
|
|
711
|
+
}
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
async function onSelectedIteration(detail) {
|
|
716
|
+
let prefixedId = buildSubflowKey(detail.moduleId, prefix);
|
|
717
|
+
if (detail.manuallySet) {
|
|
718
|
+
let rootJobId = detail.id;
|
|
719
|
+
await tick();
|
|
720
|
+
let previousId = getTopModuleStates?.[prefixedId]?.selectedForloop;
|
|
721
|
+
if (previousId) {
|
|
722
|
+
await refreshGlobal?.(prefixedId, true, previousId);
|
|
723
|
+
}
|
|
724
|
+
setParentModuleState(detail.moduleId, {
|
|
725
|
+
selectedForloop: detail.id,
|
|
726
|
+
selectedForloopIndex: detail.index,
|
|
727
|
+
selectedForLoopSetManually: true
|
|
728
|
+
});
|
|
729
|
+
await tick();
|
|
730
|
+
await refreshGlobal?.(prefixedId, false, rootJobId);
|
|
731
|
+
}
|
|
732
|
+
else {
|
|
733
|
+
setParentModuleState(detail.moduleId, {
|
|
734
|
+
selectedForLoopSetManually: false
|
|
735
|
+
});
|
|
736
|
+
}
|
|
737
|
+
}
|
|
672
738
|
$effect(() => {
|
|
673
739
|
flowJobIds?.moduleId && untrack(() => onFlowModuleId());
|
|
674
740
|
});
|
|
@@ -680,12 +746,24 @@ $effect(() => {
|
|
|
680
746
|
});
|
|
681
747
|
let isListJob = $derived(flowJobIds != undefined && Array.isArray(flowJobIds?.flowJobs));
|
|
682
748
|
$effect(() => {
|
|
683
|
-
|
|
749
|
+
if (isSelectedBranch) {
|
|
750
|
+
let modId = flowJobIds?.moduleId;
|
|
751
|
+
if (modId) {
|
|
752
|
+
let selectedForloop = getTopModuleStates?.[buildSubflowKey(modId, prefix)]?.selectedForloop;
|
|
753
|
+
untrack(() => {
|
|
754
|
+
if (selectedForloop != forloop_selected) {
|
|
755
|
+
forloop_selected = selectedForloop;
|
|
756
|
+
}
|
|
757
|
+
});
|
|
758
|
+
}
|
|
759
|
+
}
|
|
684
760
|
});
|
|
685
761
|
let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
762
|
+
let animateLogsTab = $state(false);
|
|
763
|
+
let noLogs = $derived(graphTabOpen && !isNodeSelected);
|
|
686
764
|
</script>
|
|
687
765
|
|
|
688
|
-
<JobLoader
|
|
766
|
+
<JobLoader workspaceOverride={workspaceId} {noLogs} noCode bind:this={jobLoader} />
|
|
689
767
|
{#if notAnonynmous}
|
|
690
768
|
<Alert type="error" title="Required Auth">
|
|
691
769
|
As a non logged in user, you can only see jobs ran by anonymous users like you
|
|
@@ -698,16 +776,17 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
698
776
|
<div class="h-8" />
|
|
699
777
|
{/if} -->
|
|
700
778
|
{#if isListJob}
|
|
701
|
-
{@const sliceFrom =
|
|
779
|
+
{@const sliceFrom =
|
|
780
|
+
globalIterationBounds[buildSubflowKey(flowJobIds?.moduleId ?? '', prefix)]
|
|
781
|
+
?.iteration_from ?? 0}
|
|
702
782
|
{@const lenToAdd = Math.min(20, sliceFrom)}
|
|
703
|
-
|
|
704
783
|
{#if (flowJobIds?.flowJobs.length ?? 0) > 20 && lenToAdd > 0}
|
|
705
784
|
{@const allToAdd = (flowJobIds?.length ?? 0) - sliceFrom}
|
|
706
785
|
<p class="text-tertiary italic text-xs">
|
|
707
786
|
For performance reasons, only the last 20 items are shown by default <button
|
|
708
787
|
class="text-primary underline ml-4"
|
|
709
788
|
onclick={() => {
|
|
710
|
-
loadPreviousIters(lenToAdd)
|
|
789
|
+
loadPreviousIters(flowJobIds?.moduleId ?? '', lenToAdd)
|
|
711
790
|
}}
|
|
712
791
|
>Load {lenToAdd} prior
|
|
713
792
|
</button>
|
|
@@ -716,7 +795,7 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
716
795
|
<button
|
|
717
796
|
class="text-primary underline ml-4"
|
|
718
797
|
onclick={() => {
|
|
719
|
-
loadPreviousIters(allToAdd)
|
|
798
|
+
loadPreviousIters(flowJobIds?.moduleId ?? '', allToAdd)
|
|
720
799
|
}}
|
|
721
800
|
>Load {allToAdd} prior
|
|
722
801
|
</button>
|
|
@@ -728,6 +807,7 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
728
807
|
<DisplayResult
|
|
729
808
|
workspaceId={job?.workspace_id}
|
|
730
809
|
{jobId}
|
|
810
|
+
result_stream={job?.result_stream}
|
|
731
811
|
result={jobResults}
|
|
732
812
|
language={job?.language}
|
|
733
813
|
/>
|
|
@@ -741,17 +821,23 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
741
821
|
{isOwner}
|
|
742
822
|
{hideFlowResult}
|
|
743
823
|
{hideDownloadLogs}
|
|
744
|
-
{localDurationStatuses}
|
|
745
824
|
{innerModules}
|
|
746
825
|
{suspendStatus}
|
|
747
826
|
{hideJobId}
|
|
827
|
+
result_streams={resultStreams}
|
|
748
828
|
/>
|
|
749
829
|
</div>
|
|
750
830
|
{/if}
|
|
751
831
|
{#if render}
|
|
752
|
-
{#if innerModules.length > 0 && !isListJob}
|
|
832
|
+
{#if innerModules && innerModules.length > 0 && !isListJob}
|
|
753
833
|
<Tabs class="mx-auto {wideResults ? '' : 'max-w-7xl'}" bind:selected>
|
|
754
834
|
<Tab value="graph"><span class="font-semibold text-md">Graph</span></Tab>
|
|
835
|
+
<Tab
|
|
836
|
+
value="logs"
|
|
837
|
+
class={animateLogsTab
|
|
838
|
+
? 'animate-pulse animate-duration-1000 bg-surface-inverse text-primary-inverse'
|
|
839
|
+
: ''}><span class="font-semibold">Logs</span></Tab
|
|
840
|
+
>
|
|
755
841
|
<Tab value="sequence"><span class="font-semibold">Details</span></Tab>
|
|
756
842
|
</Tabs>
|
|
757
843
|
{:else}
|
|
@@ -760,7 +846,9 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
760
846
|
{/if}
|
|
761
847
|
<div class="{selected != 'sequence' ? 'hidden' : ''} max-w-7xl mx-auto">
|
|
762
848
|
{#if isListJob}
|
|
763
|
-
{@const sliceFrom =
|
|
849
|
+
{@const sliceFrom =
|
|
850
|
+
globalIterationBounds[buildSubflowKey(flowJobIds?.moduleId ?? '', prefix)]
|
|
851
|
+
?.iteration_from ?? 0}
|
|
764
852
|
<h3 class="text-md leading-6 font-bold text-tertiary border-b mb-4">
|
|
765
853
|
Subflows ({flowJobIds?.flowJobs.length})
|
|
766
854
|
</h3>
|
|
@@ -810,9 +898,10 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
810
898
|
<!-- <LogId id={loopJobId} /> -->
|
|
811
899
|
<div class="border p-6" class:hidden={forloop_selected != loopJobId}>
|
|
812
900
|
<FlowStatusViewerInner
|
|
813
|
-
{
|
|
814
|
-
|
|
815
|
-
{
|
|
901
|
+
topModuleStates={getTopModuleStates}
|
|
902
|
+
{refreshGlobal}
|
|
903
|
+
isSelectedBranch={isSelectedBranch && forloopIsSelected}
|
|
904
|
+
updateRecursiveRefreshFn={updateRecursiveRefreshInner}
|
|
816
905
|
job={storedListJobs[j]}
|
|
817
906
|
initialJob={storedListJobs[j]}
|
|
818
907
|
globalModuleStates={forloopIsSelected
|
|
@@ -824,6 +913,7 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
824
913
|
? subflowParentsGlobalModuleStates
|
|
825
914
|
: []}
|
|
826
915
|
{subflowParentsDurationStatuses}
|
|
916
|
+
{updateGlobalRefresh}
|
|
827
917
|
render={forloop_selected == loopJobId && selected == 'sequence' && render}
|
|
828
918
|
isForloopSelected={forloop_selected == loopJobId &&
|
|
829
919
|
(innerModule?.type == 'forloopflow' || innerModule?.type == 'whileloopflow')}
|
|
@@ -831,24 +921,27 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
831
921
|
(!!flowJobIds?.flowJobs.length && flowJobIds?.flowJobs.length > 20)}
|
|
832
922
|
{workspaceId}
|
|
833
923
|
jobId={loopJobId}
|
|
834
|
-
|
|
835
|
-
let { job, force } = e.detail
|
|
924
|
+
onJobsLoaded={({ job, force }) => {
|
|
836
925
|
storedListJobs[j] = job
|
|
837
926
|
innerJobLoaded(job, j, false, force)
|
|
838
927
|
}}
|
|
928
|
+
{onResultStreamUpdate}
|
|
929
|
+
graphTabOpen={selected == 'graph' && graphTabOpen}
|
|
930
|
+
isNodeSelected={forloop_selected == loopJobId}
|
|
931
|
+
{globalIterationBounds}
|
|
839
932
|
/>
|
|
840
933
|
</div>
|
|
841
934
|
{/if}
|
|
842
935
|
{/each}
|
|
843
936
|
</div>
|
|
844
|
-
{:else if innerModules.length > 0 && (job.raw_flow?.modules.length ?? 0) > 0}
|
|
937
|
+
{:else if innerModules && innerModules.length > 0 && (job.raw_flow?.modules.length ?? 0) > 0}
|
|
845
938
|
{@const hasPreprocessor = innerModules[0]?.id == 'preprocessor' ? 1 : 0}
|
|
846
939
|
<ul class="w-full">
|
|
847
940
|
<h3 class="text-md leading-6 font-bold text-primary border-b mb-4 py-2">
|
|
848
941
|
Step-by-step
|
|
849
942
|
</h3>
|
|
850
943
|
|
|
851
|
-
{#each innerModules as mod, i}
|
|
944
|
+
{#each innerModules ?? [] as mod, i}
|
|
852
945
|
{#if render}
|
|
853
946
|
<div class="line w-8 h-10"></div>
|
|
854
947
|
<h3 class="text-tertiary mb-2 w-full">
|
|
@@ -899,9 +992,11 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
899
992
|
<!-- <LogId id={loopJobId} /> -->
|
|
900
993
|
<div class="border p-6" class:hidden={retry_selected != failedRetry}>
|
|
901
994
|
<FlowStatusViewerInner
|
|
902
|
-
{
|
|
903
|
-
|
|
904
|
-
{
|
|
995
|
+
topModuleStates={getTopModuleStates}
|
|
996
|
+
{refreshGlobal}
|
|
997
|
+
isSelectedBranch={isSelectedBranch && retry_selected == failedRetry}
|
|
998
|
+
{updateGlobalRefresh}
|
|
999
|
+
updateRecursiveRefreshFn={updateRecursiveRefreshInner}
|
|
905
1000
|
globalModuleStates={[localModuleStates, ...globalModuleStates]}
|
|
906
1001
|
globalDurationStatuses={[localDurationStatuses, ...globalDurationStatuses]}
|
|
907
1002
|
{prefix}
|
|
@@ -911,6 +1006,10 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
911
1006
|
{reducedPolling}
|
|
912
1007
|
{workspaceId}
|
|
913
1008
|
jobId={failedRetry}
|
|
1009
|
+
{onResultStreamUpdate}
|
|
1010
|
+
graphTabOpen={selected == 'graph' && graphTabOpen}
|
|
1011
|
+
isNodeSelected={retry_selected == failedRetry}
|
|
1012
|
+
{globalIterationBounds}
|
|
914
1013
|
/>
|
|
915
1014
|
</div>
|
|
916
1015
|
{/each}
|
|
@@ -918,10 +1017,14 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
918
1017
|
{#if ['InProgress', 'Success', 'Failure'].includes(mod.type)}
|
|
919
1018
|
{#if job.raw_flow?.modules[i]?.value.type == 'flow'}
|
|
920
1019
|
<FlowStatusViewerInner
|
|
921
|
-
{
|
|
922
|
-
|
|
1020
|
+
topModuleStates={getTopModuleStates}
|
|
1021
|
+
{isSelectedBranch}
|
|
1022
|
+
{refreshGlobal}
|
|
1023
|
+
updateRecursiveRefreshFn={updateRecursiveRefreshInner}
|
|
923
1024
|
globalModuleStates={[]}
|
|
1025
|
+
{updateGlobalRefresh}
|
|
924
1026
|
globalDurationStatuses={[]}
|
|
1027
|
+
{globalIterationBounds}
|
|
925
1028
|
prefix={buildPrefix(prefix, mod.id ?? '')}
|
|
926
1029
|
subflowParentsGlobalModuleStates={[
|
|
927
1030
|
localModuleStates,
|
|
@@ -938,26 +1041,29 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
938
1041
|
jobId={mod.job ?? ''}
|
|
939
1042
|
{reducedPolling}
|
|
940
1043
|
isSubflow
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
let { force, job } = e.detail
|
|
944
|
-
onJobsLoaded(mod, job, force)
|
|
1044
|
+
onJobsLoaded={({ job, force }) => {
|
|
1045
|
+
onJobsLoadedInner(mod, job, force)
|
|
945
1046
|
}}
|
|
1047
|
+
{onResultStreamUpdate}
|
|
1048
|
+
graphTabOpen={selected == 'graph' && graphTabOpen}
|
|
1049
|
+
isNodeSelected={false}
|
|
946
1050
|
/>
|
|
947
1051
|
{:else if mod.flow_jobs?.length == 0 && mod.job == '00000000-0000-0000-0000-000000000000'}
|
|
948
1052
|
<div class="text-secondary">no subflow (empty loop?)</div>
|
|
949
1053
|
{:else}
|
|
950
1054
|
<FlowStatusViewerInner
|
|
951
|
-
{
|
|
952
|
-
|
|
953
|
-
{
|
|
1055
|
+
topModuleStates={getTopModuleStates}
|
|
1056
|
+
{refreshGlobal}
|
|
1057
|
+
updateRecursiveRefreshFn={updateRecursiveRefreshInner}
|
|
954
1058
|
globalModuleStates={[localModuleStates, ...globalModuleStates]}
|
|
955
1059
|
globalDurationStatuses={[localDurationStatuses, ...globalDurationStatuses]}
|
|
956
1060
|
render={selected == 'sequence' && render}
|
|
957
1061
|
{workspaceId}
|
|
958
1062
|
{prefix}
|
|
1063
|
+
{updateGlobalRefresh}
|
|
959
1064
|
{subflowParentsGlobalModuleStates}
|
|
960
1065
|
{subflowParentsDurationStatuses}
|
|
1066
|
+
{isSelectedBranch}
|
|
961
1067
|
jobId={mod.job ?? ''}
|
|
962
1068
|
{reducedPolling}
|
|
963
1069
|
innerModule={mod.flow_jobs ? job.raw_flow?.modules[i]?.value : undefined}
|
|
@@ -970,16 +1076,93 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
970
1076
|
branchall: job?.raw_flow?.modules?.[i]?.value?.type == 'branchall'
|
|
971
1077
|
}
|
|
972
1078
|
: undefined}
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
onJobsLoaded(mod, job, force)
|
|
1079
|
+
onJobsLoaded={({ job, force }) => {
|
|
1080
|
+
onJobsLoadedInner(mod, job, force)
|
|
976
1081
|
}}
|
|
1082
|
+
loadExtraLogs={(logs) => {
|
|
1083
|
+
setModuleState(mod.id ?? '', {
|
|
1084
|
+
logs
|
|
1085
|
+
})
|
|
1086
|
+
}}
|
|
1087
|
+
{onResultStreamUpdate}
|
|
1088
|
+
graphTabOpen={selected == 'graph' && graphTabOpen}
|
|
1089
|
+
isNodeSelected={localModuleStates?.[selectedNode ?? '']?.job_id == mod.job}
|
|
1090
|
+
{globalIterationBounds}
|
|
977
1091
|
/>
|
|
1092
|
+
{#if mod.agent_actions && mod.agent_actions.length > 0}
|
|
1093
|
+
{#each mod.agent_actions as agentAction, j}
|
|
1094
|
+
{#if agentAction.type === 'tool_call' && mod.id}
|
|
1095
|
+
{@const toolCallId = getToolCallId(j, mod.id, agentAction.module_id)}
|
|
1096
|
+
{@const isSelected = selectedToolCall === j}
|
|
1097
|
+
<Button
|
|
1098
|
+
variant={isSelected ? 'contained' : 'border'}
|
|
1099
|
+
color={mod.agent_actions_success?.[j] === false
|
|
1100
|
+
? 'red'
|
|
1101
|
+
: isSelected
|
|
1102
|
+
? 'dark'
|
|
1103
|
+
: 'light'}
|
|
1104
|
+
btnClasses="w-full flex justify-start"
|
|
1105
|
+
on:click={async () => {
|
|
1106
|
+
if (selectedToolCall == j) {
|
|
1107
|
+
selectedToolCall = undefined
|
|
1108
|
+
} else {
|
|
1109
|
+
selectedToolCall = j
|
|
1110
|
+
}
|
|
1111
|
+
}}
|
|
1112
|
+
endIcon={{
|
|
1113
|
+
icon: ChevronDown,
|
|
1114
|
+
classes: isSelected ? '!rotate-180' : ''
|
|
1115
|
+
}}
|
|
1116
|
+
>
|
|
1117
|
+
<span class="truncate font-mono">
|
|
1118
|
+
Tool call: {agentAction.function_name}
|
|
1119
|
+
</span>
|
|
1120
|
+
</Button>
|
|
1121
|
+
{#if isSelected || storedToolCallJobs[j] || toolCallIndicesToLoad.includes(j)}
|
|
1122
|
+
<FlowStatusViewerInner
|
|
1123
|
+
topModuleStates={getTopModuleStates}
|
|
1124
|
+
{refreshGlobal}
|
|
1125
|
+
updateRecursiveRefreshFn={updateRecursiveRefreshInner}
|
|
1126
|
+
globalModuleStates={[localModuleStates, ...globalModuleStates]}
|
|
1127
|
+
globalDurationStatuses={[
|
|
1128
|
+
localDurationStatuses,
|
|
1129
|
+
...globalDurationStatuses
|
|
1130
|
+
]}
|
|
1131
|
+
render={selected == 'sequence' && render && isSelected}
|
|
1132
|
+
{workspaceId}
|
|
1133
|
+
{prefix}
|
|
1134
|
+
{updateGlobalRefresh}
|
|
1135
|
+
{subflowParentsGlobalModuleStates}
|
|
1136
|
+
{subflowParentsDurationStatuses}
|
|
1137
|
+
{isSelectedBranch}
|
|
1138
|
+
jobId={agentAction.job_id}
|
|
1139
|
+
job={storedToolCallJobs[j]}
|
|
1140
|
+
initialJob={storedToolCallJobs[j]}
|
|
1141
|
+
{reducedPolling}
|
|
1142
|
+
onJobsLoaded={({ job, force }) => {
|
|
1143
|
+
storedToolCallJobs[j] = job
|
|
1144
|
+
onJobsLoadedInner({ id: toolCallId } as FlowStatusModule, job, force)
|
|
1145
|
+
}}
|
|
1146
|
+
loadExtraLogs={(logs) => {
|
|
1147
|
+
setModuleState(toolCallId, {
|
|
1148
|
+
logs
|
|
1149
|
+
})
|
|
1150
|
+
}}
|
|
1151
|
+
{onResultStreamUpdate}
|
|
1152
|
+
graphTabOpen={selected == 'graph' && graphTabOpen}
|
|
1153
|
+
isNodeSelected={localModuleStates?.[toolCallId]?.job_id ==
|
|
1154
|
+
agentAction.job_id}
|
|
1155
|
+
{globalIterationBounds}
|
|
1156
|
+
/>
|
|
1157
|
+
{/if}
|
|
1158
|
+
{/if}
|
|
1159
|
+
{/each}
|
|
1160
|
+
{/if}
|
|
978
1161
|
{/if}
|
|
979
1162
|
{:else}
|
|
980
1163
|
<ModuleStatus
|
|
981
1164
|
type={mod.type}
|
|
982
|
-
scheduled_for={
|
|
1165
|
+
scheduled_for={localModuleStates?.[mod.id ?? '']?.scheduled_for}
|
|
983
1166
|
/>
|
|
984
1167
|
{/if}
|
|
985
1168
|
</li>
|
|
@@ -989,6 +1172,15 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
989
1172
|
<div class="p-2 text-tertiary text-sm italic">Empty flow</div>
|
|
990
1173
|
{/if}
|
|
991
1174
|
</div>
|
|
1175
|
+
<div class="{selected != 'logs' ? 'hidden' : ''} mx-auto h-[800px]">
|
|
1176
|
+
<FlowLogViewerWrapper
|
|
1177
|
+
{job}
|
|
1178
|
+
{localModuleStates}
|
|
1179
|
+
{workspaceId}
|
|
1180
|
+
{render}
|
|
1181
|
+
{onSelectedIteration}
|
|
1182
|
+
/>
|
|
1183
|
+
</div>
|
|
992
1184
|
</div>
|
|
993
1185
|
{#if render}
|
|
994
1186
|
{#if job.raw_flow && !isListJob}
|
|
@@ -996,14 +1188,14 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
996
1188
|
<div class="grid grid-cols-3 border h-full" bind:clientHeight={wrapperHeight}>
|
|
997
1189
|
<div class="col-span-2 bg-surface-secondary">
|
|
998
1190
|
<div class="flex flex-col">
|
|
999
|
-
{#each Object.values(
|
|
1191
|
+
{#each Object.values(retryStatus?.val ?? {}) as count}
|
|
1000
1192
|
{#if count}
|
|
1001
1193
|
<span class="text-sm">
|
|
1002
1194
|
Retry in progress, # of failed attempts: {count}
|
|
1003
1195
|
</span>
|
|
1004
1196
|
{/if}
|
|
1005
1197
|
{/each}
|
|
1006
|
-
{#each Object.values(
|
|
1198
|
+
{#each Object.values(suspendStatus?.val ?? {}) as count}
|
|
1007
1199
|
{#if count.nb}
|
|
1008
1200
|
<span class="text-sm">
|
|
1009
1201
|
Flow suspended, waiting for {count.nb} events
|
|
@@ -1011,14 +1203,13 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
1011
1203
|
{/if}
|
|
1012
1204
|
{/each}
|
|
1013
1205
|
</div>
|
|
1014
|
-
|
|
1015
1206
|
<FlowGraphV2
|
|
1016
1207
|
{selectedId}
|
|
1017
1208
|
triggerNode={true}
|
|
1018
1209
|
download={!hideDownloadInGraph}
|
|
1019
1210
|
minHeight={wrapperHeight}
|
|
1020
1211
|
success={jobId != undefined && isSuccess(job?.['success'])}
|
|
1021
|
-
flowModuleStates={
|
|
1212
|
+
flowModuleStates={localModuleStates}
|
|
1022
1213
|
bind:expandedSubflows
|
|
1023
1214
|
onSelect={(e) => {
|
|
1024
1215
|
console.log('onSelect', e)
|
|
@@ -1033,42 +1224,26 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
1033
1224
|
selectedNode = 'end'
|
|
1034
1225
|
stepDetail = 'end'
|
|
1035
1226
|
} else {
|
|
1036
|
-
const
|
|
1227
|
+
const id = e.startsWith(AI_TOOL_CALL_PREFIX) ? e.split('-').pop() : e
|
|
1228
|
+
const mod = dfs(job?.raw_flow?.modules ?? [], (m) => m).find(
|
|
1229
|
+
(m) => m?.id === id
|
|
1230
|
+
)
|
|
1037
1231
|
stepDetail = mod
|
|
1038
1232
|
selectedNode = e
|
|
1233
|
+
if (e.startsWith(AI_TOOL_CALL_PREFIX)) {
|
|
1234
|
+
const [_prefix, _agentModuleId, j, _toolModuleId] = e.split('-')
|
|
1235
|
+
const jIdx = Number(j)
|
|
1236
|
+
if (!toolCallIndicesToLoad.includes(jIdx)) {
|
|
1237
|
+
toolCallIndicesToLoad.push(jIdx)
|
|
1238
|
+
}
|
|
1239
|
+
}
|
|
1039
1240
|
}
|
|
1040
1241
|
} else {
|
|
1041
1242
|
stepDetail = e
|
|
1042
1243
|
selectedNode = e.id
|
|
1043
1244
|
}
|
|
1044
1245
|
}}
|
|
1045
|
-
onSelectedIteration
|
|
1046
|
-
if (detail.manuallySet) {
|
|
1047
|
-
let rootJobId = detail.id
|
|
1048
|
-
await tick()
|
|
1049
|
-
|
|
1050
|
-
let previousId = $localModuleStates[detail.moduleId]?.selectedForloop
|
|
1051
|
-
if (previousId) {
|
|
1052
|
-
await globalRefreshes?.[detail.moduleId]?.(true, previousId)
|
|
1053
|
-
}
|
|
1054
|
-
|
|
1055
|
-
$localModuleStates[detail.moduleId] = {
|
|
1056
|
-
...$localModuleStates[detail.moduleId],
|
|
1057
|
-
selectedForloop: detail.id,
|
|
1058
|
-
selectedForloopIndex: detail.index,
|
|
1059
|
-
selectedForLoopSetManually: true
|
|
1060
|
-
}
|
|
1061
|
-
|
|
1062
|
-
await tick()
|
|
1063
|
-
|
|
1064
|
-
await globalRefreshes?.[detail.moduleId]?.(false, rootJobId)
|
|
1065
|
-
} else {
|
|
1066
|
-
$localModuleStates[detail.moduleId] = {
|
|
1067
|
-
...$localModuleStates[detail.moduleId],
|
|
1068
|
-
selectedForLoopSetManually: false
|
|
1069
|
-
}
|
|
1070
|
-
}
|
|
1071
|
-
}}
|
|
1246
|
+
{onSelectedIteration}
|
|
1072
1247
|
earlyStop={job.raw_flow?.skip_expr !== undefined}
|
|
1073
1248
|
cache={job.raw_flow?.cache_ttl !== undefined}
|
|
1074
1249
|
modules={job.raw_flow?.modules ?? []}
|
|
@@ -1104,13 +1279,21 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
1104
1279
|
job?.raw_flow?.modules ?? [],
|
|
1105
1280
|
expandedSubflows ?? {}
|
|
1106
1281
|
)}
|
|
1282
|
+
buildSubflowKey={(key) => buildSubflowKey(key, prefix)}
|
|
1283
|
+
{globalIterationBounds}
|
|
1107
1284
|
durationStatuses={localDurationStatuses}
|
|
1285
|
+
decreaseIterationFrom={(key, amount) => {
|
|
1286
|
+
loadPreviousIters(key, amount)
|
|
1287
|
+
}}
|
|
1108
1288
|
/>
|
|
1109
1289
|
{:else if rightColumnSelect == 'node_status'}
|
|
1110
1290
|
<div class="pt-2 grow flex flex-col">
|
|
1111
|
-
{#if selectedNode}
|
|
1112
|
-
|
|
1113
|
-
|
|
1291
|
+
{#if selectedNode?.startsWith(AI_TOOL_MESSAGE_PREFIX)}
|
|
1292
|
+
<div class="pt-2 px-4 pb-4">
|
|
1293
|
+
<Alert type="info" title="Message output is available on the AI agent node" />
|
|
1294
|
+
</div>
|
|
1295
|
+
{:else if selectedNode}
|
|
1296
|
+
{@const node = localModuleStates[selectedNode]}
|
|
1114
1297
|
{#if selectedNode == 'end'}
|
|
1115
1298
|
<FlowJobResult
|
|
1116
1299
|
tagLabel={customUi?.tagLabel}
|
|
@@ -1123,7 +1306,6 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
1123
1306
|
col
|
|
1124
1307
|
result={job['result']}
|
|
1125
1308
|
logs={job.logs ?? ''}
|
|
1126
|
-
durationStates={localDurationStatuses}
|
|
1127
1309
|
downloadLogs={!hideDownloadLogs}
|
|
1128
1310
|
/>
|
|
1129
1311
|
{:else if selectedNode == 'start'}
|
|
@@ -1139,6 +1321,10 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
1139
1321
|
<p class="p-2 text-secondary">No arguments</p>
|
|
1140
1322
|
{/if}
|
|
1141
1323
|
{:else if node}
|
|
1324
|
+
{@const module =
|
|
1325
|
+
stepDetail && typeof stepDetail !== 'string' ? stepDetail : undefined}
|
|
1326
|
+
{@const agentTools =
|
|
1327
|
+
module && module.value.type === 'aiagent' ? module.value.tools : undefined}
|
|
1142
1328
|
{#if node.flow_jobs_results}
|
|
1143
1329
|
<span class="pl-1 text-tertiary"
|
|
1144
1330
|
>Result of step as collection of all subflows</span
|
|
@@ -1197,11 +1383,30 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
1197
1383
|
waitingForExecutor={node.type == 'WaitingForExecutor'}
|
|
1198
1384
|
refreshLog={node.type == 'InProgress'}
|
|
1199
1385
|
col
|
|
1386
|
+
result_stream={resultStreams[node.job_id ?? '']}
|
|
1200
1387
|
result={node.result}
|
|
1201
1388
|
tag={node.tag}
|
|
1202
1389
|
logs={node.logs}
|
|
1203
|
-
durationStates={localDurationStatuses}
|
|
1204
1390
|
downloadLogs={!hideDownloadLogs}
|
|
1391
|
+
aiAgentStatus={agentTools &&
|
|
1392
|
+
node.job_id &&
|
|
1393
|
+
(node.type === 'Success' || node.type === 'Failure')
|
|
1394
|
+
? {
|
|
1395
|
+
tools: agentTools,
|
|
1396
|
+
agentJob: {
|
|
1397
|
+
id: node.job_id,
|
|
1398
|
+
result: node.result,
|
|
1399
|
+
logs: node.logs,
|
|
1400
|
+
args: node.args,
|
|
1401
|
+
success: node.type === 'Success',
|
|
1402
|
+
type: 'CompletedJob'
|
|
1403
|
+
},
|
|
1404
|
+
storedToolCallJobs,
|
|
1405
|
+
onToolJobLoaded: (job, idx) => {
|
|
1406
|
+
storedToolCallJobs[idx] = job
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
1409
|
+
: undefined}
|
|
1205
1410
|
/>
|
|
1206
1411
|
{:else}
|
|
1207
1412
|
<p class="p-2 text-tertiary italic"
|