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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
</script>
|
|
3
3
|
|
|
4
4
|
<script lang="ts">import { run } from 'svelte/legacy';
|
|
5
|
-
import { ResourceService, VariableService } from '../gen';
|
|
5
|
+
import { ResourceService, VariableService, WorkspaceService } from '../gen';
|
|
6
6
|
import { workspaceStore } from '../stores';
|
|
7
7
|
import { base } from '../base';
|
|
8
8
|
import ItemPicker from './ItemPicker.svelte';
|
|
@@ -20,15 +20,17 @@ import { createEventDispatcher, untrack } from 'svelte';
|
|
|
20
20
|
import { sendUserToast } from '../toast';
|
|
21
21
|
import { getScriptByPath, scriptLangToEditorLang } from '../scripts';
|
|
22
22
|
import Toggle from './Toggle.svelte';
|
|
23
|
-
import { DiffIcon, DollarSign, File, History, Library, Link, Package, Plus, RotateCw, Save, Users } from 'lucide-svelte';
|
|
23
|
+
import { DatabaseIcon, DiffIcon, DollarSign, File, History, Library, Link, Package, Plus, RotateCw, Save, Users } from 'lucide-svelte';
|
|
24
24
|
import { capitalize, formatS3Object, toCamel } from '../utils';
|
|
25
25
|
import ScriptVersionHistory from './ScriptVersionHistory.svelte';
|
|
26
|
-
import ScriptGen from './copilot/ScriptGen.svelte';
|
|
27
26
|
import { getResetCode } from '../script_helpers';
|
|
28
27
|
import Popover from './Popover.svelte';
|
|
29
28
|
import ResourceEditorDrawer from './ResourceEditorDrawer.svelte';
|
|
30
29
|
import EditorSettings from './EditorSettings.svelte';
|
|
31
30
|
import S3FilePicker from './S3FilePicker.svelte';
|
|
31
|
+
import DucklakeIcon from './icons/DucklakeIcon.svelte';
|
|
32
|
+
import FlowInlineScriptAiButton from './copilot/FlowInlineScriptAIButton.svelte';
|
|
33
|
+
import ScriptGen from './copilot/ScriptGen.svelte';
|
|
32
34
|
let { lang, editor, websocketAlive, iconOnly = false, validCode = true, kind = 'script', template = 'script', collabMode = false, collabLive = false, collabUsers = [], scriptPath = undefined, diffEditor = undefined, args, noHistory = false, saveToWorkspace = false, customUi = {}, lastDeployedCode = undefined, diffMode = false, showHistoryDrawer = $bindable(false), right, openAiChat = false } = $props();
|
|
33
35
|
let contextualVariablePicker = $state();
|
|
34
36
|
let variablePicker = $state();
|
|
@@ -37,6 +39,8 @@ let resourceTypePicker = $state();
|
|
|
37
39
|
let variableEditor = $state();
|
|
38
40
|
let resourceEditor = $state();
|
|
39
41
|
let s3FilePicker = $state();
|
|
42
|
+
let ducklakePicker = $state();
|
|
43
|
+
let databasePicker = $state();
|
|
40
44
|
let showContextVarPicker = $derived([
|
|
41
45
|
'python3',
|
|
42
46
|
'bash',
|
|
@@ -50,7 +54,8 @@ let showContextVarPicker = $derived([
|
|
|
50
54
|
'rust',
|
|
51
55
|
'csharp',
|
|
52
56
|
'nu',
|
|
53
|
-
'java'
|
|
57
|
+
'java',
|
|
58
|
+
'ruby'
|
|
54
59
|
// for related places search: ADD_NEW_LANG
|
|
55
60
|
].includes(lang ?? ''));
|
|
56
61
|
let showVarPicker = $derived([
|
|
@@ -66,7 +71,8 @@ let showVarPicker = $derived([
|
|
|
66
71
|
'rust',
|
|
67
72
|
'csharp',
|
|
68
73
|
'nu',
|
|
69
|
-
'java'
|
|
74
|
+
'java',
|
|
75
|
+
'ruby'
|
|
70
76
|
// for related places search: ADD_NEW_LANG
|
|
71
77
|
].includes(lang ?? ''));
|
|
72
78
|
let showResourcePicker = $derived([
|
|
@@ -83,11 +89,13 @@ let showResourcePicker = $derived([
|
|
|
83
89
|
'csharp',
|
|
84
90
|
'nu',
|
|
85
91
|
'java',
|
|
86
|
-
'
|
|
92
|
+
'ruby',
|
|
87
93
|
// for related places search: ADD_NEW_LANG
|
|
88
94
|
].includes(lang ?? ''));
|
|
89
95
|
let showS3Picker = $derived(['duckdb', 'python3'].includes(lang ?? '') ||
|
|
90
96
|
['typescript', 'javascript'].includes(scriptLangToEditorLang(lang)));
|
|
97
|
+
let showDucklakePicker = $derived(['duckdb'].includes(lang ?? ''));
|
|
98
|
+
let showDatabasePicker = $derived(['duckdb'].includes(lang ?? ''));
|
|
91
99
|
let showResourceTypePicker = $derived(['typescript', 'javascript'].includes(scriptLangToEditorLang(lang)) ||
|
|
92
100
|
lang === 'python3' ||
|
|
93
101
|
lang === 'php');
|
|
@@ -337,6 +345,8 @@ function windmillPathToCamelCaseName(path) {
|
|
|
337
345
|
} else if (lang == 'java') {
|
|
338
346
|
editor.insertAtCursor(`System.getenv("${name}");`)
|
|
339
347
|
// for related places search: ADD_NEW_LANG
|
|
348
|
+
} else if (lang == 'ruby') {
|
|
349
|
+
editor.insertAtCursor(`ENV['${name}']`)
|
|
340
350
|
}
|
|
341
351
|
sendUserToast(`${name} inserted at cursor`)
|
|
342
352
|
}}
|
|
@@ -407,6 +417,11 @@ string ${windmillPathToCamelCaseName(path)} = await client.GetStringAsync(uri);
|
|
|
407
417
|
} else if (lang == 'java') {
|
|
408
418
|
editor.insertAtCursor(`(Wmill.getVariable("${path}"))`)
|
|
409
419
|
// for related places search: ADD_NEW_LANG
|
|
420
|
+
} else if (lang == 'ruby') {
|
|
421
|
+
if (!editor.getCode().includes("require 'windmill/mini'")) {
|
|
422
|
+
editor.insertAtBeginning("require 'windmill/mini'\n")
|
|
423
|
+
}
|
|
424
|
+
editor.insertAtCursor(`get_variable("${path}")`)
|
|
410
425
|
}
|
|
411
426
|
sendUserToast(`${name} inserted at cursor`)
|
|
412
427
|
}}
|
|
@@ -496,6 +511,11 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS
|
|
|
496
511
|
} else if (lang == 'java') {
|
|
497
512
|
editor.insertAtCursor(`(Wmill.getResource("${path}"))`)
|
|
498
513
|
// for related places search: ADD_NEW_LANG
|
|
514
|
+
} else if (lang == 'ruby') {
|
|
515
|
+
if (!editor.getCode().includes("require 'windmill/mini'")) {
|
|
516
|
+
editor.insertAtBeginning("require 'windmill/mini'\n")
|
|
517
|
+
}
|
|
518
|
+
editor.insertAtCursor(`get_resource("${path}")`)
|
|
499
519
|
} else if (lang == 'duckdb') {
|
|
500
520
|
let t = { postgresql: 'postgres', mysql: 'mysql', bigquery: 'bigquery' }[resType]
|
|
501
521
|
if (!t) {
|
|
@@ -551,6 +571,48 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS
|
|
|
551
571
|
<ResourceEditorDrawer bind:this={resourceEditor} on:refresh={resourcePicker.openDrawer} />
|
|
552
572
|
<VariableEditor bind:this={variableEditor} on:create={variablePicker.openDrawer} />
|
|
553
573
|
|
|
574
|
+
{#if showDucklakePicker}
|
|
575
|
+
<ItemPicker
|
|
576
|
+
bind:this={ducklakePicker}
|
|
577
|
+
pickCallback={async (_, name) => {
|
|
578
|
+
const connStr = name == 'main' ? 'ducklake' : `ducklake://${name}`
|
|
579
|
+
editor?.insertAtCursor(`ATTACH '${connStr}' AS dl; USE dl;\n`)
|
|
580
|
+
}}
|
|
581
|
+
tooltip="Attach a Ducklake in your DuckDB script. Ducklake allows you to manipulate large data on S3 blob files through a traditional SQL interface."
|
|
582
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/ducklake"
|
|
583
|
+
itemName="ducklake"
|
|
584
|
+
loadItems={async () =>
|
|
585
|
+
(await WorkspaceService.listDucklakes({ workspace: $workspaceStore ?? 'NO_W' })).map(
|
|
586
|
+
(path) => ({ path })
|
|
587
|
+
)}
|
|
588
|
+
/>
|
|
589
|
+
{/if}
|
|
590
|
+
|
|
591
|
+
{#if showDatabasePicker}
|
|
592
|
+
<ItemPicker
|
|
593
|
+
bind:this={databasePicker}
|
|
594
|
+
pickCallback={(path, _, resType) => {
|
|
595
|
+
if (!editor) return
|
|
596
|
+
if (lang == 'duckdb') {
|
|
597
|
+
let t = { postgresql: 'postgres', mysql: 'mysql', bigquery: 'bigquery' }[resType]
|
|
598
|
+
editor.insertAtCursor(`ATTACH 'res://${path}' AS db (TYPE ${t});`)
|
|
599
|
+
}
|
|
600
|
+
sendUserToast(`${path} inserted at cursor`)
|
|
601
|
+
}}
|
|
602
|
+
tooltip="Attach a database resource in your script. This allows you to query data from the database using SQL."
|
|
603
|
+
documentationLink="https://www.windmill.dev/docs/core_concepts/resources_and_types"
|
|
604
|
+
itemName="Database"
|
|
605
|
+
buttons={{ 'Edit/View': (x) => resourceEditor?.initEdit(x) }}
|
|
606
|
+
extraField="description"
|
|
607
|
+
extraField2="resource_type"
|
|
608
|
+
loadItems={async () =>
|
|
609
|
+
await ResourceService.listResource({
|
|
610
|
+
workspace: $workspaceStore ?? 'NO_W',
|
|
611
|
+
resourceType: 'postgresql,mysql,bigquery'
|
|
612
|
+
})}
|
|
613
|
+
></ItemPicker>
|
|
614
|
+
{/if}
|
|
615
|
+
|
|
554
616
|
<S3FilePicker
|
|
555
617
|
bind:this={s3FilePicker}
|
|
556
618
|
readOnlyMode={false}
|
|
@@ -664,6 +726,38 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS
|
|
|
664
726
|
</Button>
|
|
665
727
|
{/if}
|
|
666
728
|
|
|
729
|
+
{#if showDatabasePicker && customUi?.database != false}
|
|
730
|
+
<Button
|
|
731
|
+
aiId="editor-bar-add-database"
|
|
732
|
+
aiDescription="Add database"
|
|
733
|
+
title="Add database"
|
|
734
|
+
color="light"
|
|
735
|
+
on:click={() => databasePicker?.openDrawer()}
|
|
736
|
+
size="xs"
|
|
737
|
+
btnClasses="!font-medium text-tertiary"
|
|
738
|
+
spacingSize="md"
|
|
739
|
+
startIcon={{ icon: DatabaseIcon }}
|
|
740
|
+
{iconOnly}
|
|
741
|
+
>+Database
|
|
742
|
+
</Button>
|
|
743
|
+
{/if}
|
|
744
|
+
|
|
745
|
+
{#if showDucklakePicker && customUi?.ducklake != false}
|
|
746
|
+
<Button
|
|
747
|
+
aiId="editor-bar-use-ducklake"
|
|
748
|
+
aiDescription="Use Ducklake"
|
|
749
|
+
title="Use Ducklake"
|
|
750
|
+
color="light"
|
|
751
|
+
on:click={() => ducklakePicker?.openDrawer()}
|
|
752
|
+
size="xs"
|
|
753
|
+
btnClasses="!font-medium text-tertiary"
|
|
754
|
+
spacingSize="md"
|
|
755
|
+
startIcon={{ icon: DucklakeIcon }}
|
|
756
|
+
{iconOnly}
|
|
757
|
+
>+Ducklake
|
|
758
|
+
</Button>
|
|
759
|
+
{/if}
|
|
760
|
+
|
|
667
761
|
{#if customUi?.reset != false}
|
|
668
762
|
<Button
|
|
669
763
|
aiId="editor-bar-reset-content"
|
|
@@ -775,7 +869,11 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS
|
|
|
775
869
|
{/if}
|
|
776
870
|
|
|
777
871
|
{#if customUi?.aiGen != false}
|
|
778
|
-
|
|
872
|
+
{#if openAiChat}
|
|
873
|
+
<FlowInlineScriptAiButton />
|
|
874
|
+
{:else}
|
|
875
|
+
<ScriptGen {editor} {diffEditor} {lang} {iconOnly} {args} />
|
|
876
|
+
{/if}
|
|
779
877
|
{/if}
|
|
780
878
|
|
|
781
879
|
<EditorSettings {customUi} />
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script lang="ts">import { Settings } from 'lucide-svelte';
|
|
2
2
|
import FormatOnSave from './FormatOnSave.svelte';
|
|
3
3
|
import VimMode from './VimMode.svelte';
|
|
4
|
+
import RelativeLineNumbers from './RelativeLineNumbers.svelte';
|
|
4
5
|
import { Button } from './common';
|
|
5
6
|
import CodeCompletionStatus from './copilot/CodeCompletionStatus.svelte';
|
|
6
7
|
import Popover from './meltComponents/Popover.svelte';
|
|
@@ -36,6 +37,11 @@ export let customUi = {};
|
|
|
36
37
|
<VimMode />
|
|
37
38
|
</div>
|
|
38
39
|
{/if}
|
|
40
|
+
{#if customUi?.relativeLineNumbers != false}
|
|
41
|
+
<div>
|
|
42
|
+
<RelativeLineNumbers />
|
|
43
|
+
</div>
|
|
44
|
+
{/if}
|
|
39
45
|
{#if customUi?.aiCompletion != false}
|
|
40
46
|
<div>
|
|
41
47
|
<CodeCompletionStatus />
|
|
@@ -7,18 +7,21 @@ import { base } from '../base';
|
|
|
7
7
|
import { enterpriseLicense, workspaceStore } from '../stores';
|
|
8
8
|
import MsTeamsIcon from './icons/MSTeamsIcon.svelte';
|
|
9
9
|
import { emptySchema, emptyString, sendUserToast, tryEvery } from '../utils';
|
|
10
|
+
import Description from './Description.svelte';
|
|
11
|
+
import MultiSelect from './select/MultiSelect.svelte';
|
|
10
12
|
import { FlowService, JobService, ScriptService, WorkspaceService } from '../gen';
|
|
11
13
|
import { inferArgs } from '../infer';
|
|
12
14
|
import { hubBaseUrlStore } from '../stores';
|
|
13
15
|
import { CheckCircle2, Loader2, RotateCw, XCircle, RefreshCcw } from 'lucide-svelte';
|
|
14
16
|
import { hubPaths } from '../hub';
|
|
17
|
+
import { isCloudHosted } from '../cloud';
|
|
15
18
|
const slackRecoveryHandler = hubPaths.slackRecoveryHandler;
|
|
16
19
|
const slackHandlerScriptPath = hubPaths.slackErrorHandler;
|
|
17
20
|
const slackSuccessHandler = hubPaths.slackSuccessHandler;
|
|
18
21
|
const teamsRecoveryHandler = hubPaths.teamsRecoveryHandler;
|
|
19
22
|
const teamsHandlerScriptPath = hubPaths.teamsErrorHandler;
|
|
20
23
|
const teamsSuccessHandler = hubPaths.teamsSuccessHandler;
|
|
21
|
-
let { errorOrRecovery, isEditable, toggleText = 'Enable', showScriptHelpText = false, handlerSelected = $bindable(), handlerPath = $bindable(), handlerExtraArgs = $bindable(), customScriptTemplate, customHandlerKind = $bindable('script'), customTabTooltip } = $props();
|
|
24
|
+
let { errorOrRecovery, isEditable, toggleText = 'Enable', showScriptHelpText = false, handlerSelected = $bindable('custom'), handlerPath = $bindable(), handlerExtraArgs = $bindable(), customScriptTemplate, customHandlerKind = $bindable('script'), customTabTooltip, } = $props();
|
|
22
25
|
let customHandlerSchema = $state();
|
|
23
26
|
let slackHandlerSchema = $state();
|
|
24
27
|
let isFetching = $state(false);
|
|
@@ -27,6 +30,8 @@ let teams_team_name = $state(undefined);
|
|
|
27
30
|
let workspaceConnectedToSlack = $state(undefined);
|
|
28
31
|
let workspaceConnectedToTeams = $state(undefined);
|
|
29
32
|
let connectionTestJob = $state();
|
|
33
|
+
const EMAIL_RECIPIENTS_KEY = 'email_recipients';
|
|
34
|
+
const CHANNEL_KEY = 'channel';
|
|
30
35
|
async function loadSlackResources() {
|
|
31
36
|
const settings = await WorkspaceService.getSettings({ workspace: $workspaceStore });
|
|
32
37
|
if (!emptyString(settings.slack_name) && !emptyString(settings.slack_team_id)) {
|
|
@@ -166,6 +171,12 @@ function isTeamsHandler(scriptPath) {
|
|
|
166
171
|
return scriptPath.startsWith('hub/') && scriptPath.endsWith('/schedule-success-handler-teams');
|
|
167
172
|
}
|
|
168
173
|
}
|
|
174
|
+
function isEmailHandler(scriptPath) {
|
|
175
|
+
if (!scriptPath) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
return scriptPath.startsWith('hub/') && scriptPath.endsWith('/workspace-or-error-handler-email');
|
|
179
|
+
}
|
|
169
180
|
$effect(() => {
|
|
170
181
|
if ($workspaceStore) {
|
|
171
182
|
loadSlackResources();
|
|
@@ -181,21 +192,27 @@ $effect(() => {
|
|
|
181
192
|
}
|
|
182
193
|
});
|
|
183
194
|
let lastHandlerSelected = $state(undefined);
|
|
184
|
-
let
|
|
195
|
+
let handlerCache = $state({
|
|
185
196
|
slack: undefined,
|
|
186
|
-
teams: undefined
|
|
197
|
+
teams: undefined,
|
|
198
|
+
email: undefined
|
|
187
199
|
});
|
|
188
200
|
$effect(() => {
|
|
189
201
|
if (lastHandlerSelected !== handlerSelected && lastHandlerSelected !== undefined) {
|
|
190
|
-
if (lastHandlerSelected
|
|
191
|
-
|
|
202
|
+
if (lastHandlerSelected != 'custom') {
|
|
203
|
+
const key = lastHandlerSelected === 'email' ? EMAIL_RECIPIENTS_KEY : CHANNEL_KEY;
|
|
204
|
+
handlerCache[lastHandlerSelected] = handlerExtraArgs[key];
|
|
192
205
|
}
|
|
193
206
|
if (handlerSelected === 'custom') {
|
|
194
|
-
handlerExtraArgs[
|
|
207
|
+
handlerExtraArgs[CHANNEL_KEY] = '';
|
|
208
|
+
handlerExtraArgs[EMAIL_RECIPIENTS_KEY] = [];
|
|
195
209
|
handlerPath = undefined;
|
|
196
210
|
}
|
|
211
|
+
else if (handlerSelected === 'email') {
|
|
212
|
+
handlerExtraArgs[EMAIL_RECIPIENTS_KEY] = handlerCache[handlerSelected] ?? [];
|
|
213
|
+
}
|
|
197
214
|
else {
|
|
198
|
-
handlerExtraArgs[
|
|
215
|
+
handlerExtraArgs[CHANNEL_KEY] = handlerCache[handlerSelected] ?? '';
|
|
199
216
|
}
|
|
200
217
|
}
|
|
201
218
|
lastHandlerSelected = handlerSelected;
|
|
@@ -204,6 +221,7 @@ $effect(() => {
|
|
|
204
221
|
handlerPath &&
|
|
205
222
|
!isSlackHandler(handlerPath) &&
|
|
206
223
|
!isTeamsHandler(handlerPath) &&
|
|
224
|
+
!isEmailHandler(handlerPath) &&
|
|
207
225
|
loadHandlerScriptArgs(handlerPath, [
|
|
208
226
|
'path',
|
|
209
227
|
'workspace_id',
|
|
@@ -242,12 +260,18 @@ $effect(() => {
|
|
|
242
260
|
'slack'
|
|
243
261
|
]).then((schema) => (slackHandlerSchema = schema));
|
|
244
262
|
});
|
|
263
|
+
$effect(() => {
|
|
264
|
+
if (handlerSelected === 'email') {
|
|
265
|
+
handlerPath = hubPaths.emailErrorHandler;
|
|
266
|
+
}
|
|
267
|
+
});
|
|
245
268
|
</script>
|
|
246
269
|
|
|
247
270
|
<div>
|
|
248
271
|
<Tabs bind:selected={handlerSelected} class="mt-2 mb-4">
|
|
249
272
|
<Tab value="slack" disabled={!isEditable}>Slack</Tab>
|
|
250
273
|
<Tab value="teams" disabled={!isEditable}>Teams</Tab>
|
|
274
|
+
<Tab value="email" disabled={!isEditable}>Email</Tab>
|
|
251
275
|
<Tab value="custom" disabled={!isEditable}>
|
|
252
276
|
Custom
|
|
253
277
|
{@render customTabTooltip?.()}
|
|
@@ -274,8 +298,10 @@ $effect(() => {
|
|
|
274
298
|
size="xs"
|
|
275
299
|
href={customScriptTemplate}
|
|
276
300
|
disabled={!isEditable}
|
|
277
|
-
target="_blank"
|
|
301
|
+
target="_blank"
|
|
278
302
|
>
|
|
303
|
+
Create from template
|
|
304
|
+
</Button>
|
|
279
305
|
{/if}
|
|
280
306
|
</div>
|
|
281
307
|
{#if showScriptHelpText}
|
|
@@ -503,4 +529,46 @@ $effect(() => {
|
|
|
503
529
|
{/if}
|
|
504
530
|
{/if}
|
|
505
531
|
{/if}
|
|
532
|
+
{:else if handlerSelected === 'email'}
|
|
533
|
+
{#if isCloudHosted()}
|
|
534
|
+
<Alert type="info" title="Email notifications are not available in Cloud">
|
|
535
|
+
Email notifications for trigger failures are only available in self-hosted Windmill instances.
|
|
536
|
+
</Alert>
|
|
537
|
+
{:else}
|
|
538
|
+
<div class="flex flex-col gap-4 my-4">
|
|
539
|
+
<Description>
|
|
540
|
+
Configure email addresses to receive notifications when jobs fail. This feature requires
|
|
541
|
+
SMTP to be configured.
|
|
542
|
+
</Description>
|
|
543
|
+
</div>
|
|
544
|
+
<div class="flex flex-col gap-2 my-4">
|
|
545
|
+
<MultiSelect
|
|
546
|
+
items={[] as { label: string; value: string }[]}
|
|
547
|
+
bind:value={
|
|
548
|
+
() => handlerExtraArgs[EMAIL_RECIPIENTS_KEY] ?? [],
|
|
549
|
+
(recipients) => (handlerExtraArgs[EMAIL_RECIPIENTS_KEY] = recipients)
|
|
550
|
+
}
|
|
551
|
+
placeholder="Enter email addresses..."
|
|
552
|
+
onCreateItem={(email) => {
|
|
553
|
+
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
|
|
554
|
+
if (!emailRegex.test(email)) {
|
|
555
|
+
sendUserToast('Invalid email format', true)
|
|
556
|
+
return
|
|
557
|
+
}
|
|
558
|
+
const currentArray = handlerExtraArgs[EMAIL_RECIPIENTS_KEY] ?? []
|
|
559
|
+
handlerExtraArgs[EMAIL_RECIPIENTS_KEY] = [...currentArray, email]
|
|
560
|
+
}}
|
|
561
|
+
class="w-full"
|
|
562
|
+
/>
|
|
563
|
+
{#if handlerExtraArgs[EMAIL_RECIPIENTS_KEY]?.length > 0}
|
|
564
|
+
<span class="text-sm text-tertiary">
|
|
565
|
+
{handlerExtraArgs[EMAIL_RECIPIENTS_KEY]?.length} email{handlerExtraArgs[
|
|
566
|
+
EMAIL_RECIPIENTS_KEY
|
|
567
|
+
]?.length === 1
|
|
568
|
+
? ''
|
|
569
|
+
: 's'} configured
|
|
570
|
+
</span>
|
|
571
|
+
{/if}
|
|
572
|
+
</div>
|
|
573
|
+
{/if}
|
|
506
574
|
{/if}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import type { ErrorHandler } from '../gen/types.gen';
|
|
1
2
|
interface Props {
|
|
2
3
|
errorOrRecovery: 'error' | 'recovery' | 'success';
|
|
3
4
|
isEditable: boolean;
|
|
4
5
|
toggleText?: string;
|
|
5
6
|
showScriptHelpText?: boolean;
|
|
6
|
-
handlerSelected:
|
|
7
|
+
handlerSelected: ErrorHandler;
|
|
7
8
|
handlerPath: string | undefined;
|
|
8
9
|
handlerExtraArgs: Record<string, any>;
|
|
9
10
|
customScriptTemplate: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script module lang="ts">export function assetCanBeExplored(asset, _resourceMetadata) {
|
|
2
|
-
return (asset.kind === '
|
|
2
|
+
return (asset.kind === 'ducklake' ||
|
|
3
|
+
asset.kind === 's3object' ||
|
|
3
4
|
(asset.kind === 'resource' && isDbType(_resourceMetadata?.resource_type)));
|
|
4
5
|
}
|
|
5
6
|
</script>
|
|
@@ -12,12 +13,13 @@ import S3FilePicker from './S3FilePicker.svelte';
|
|
|
12
13
|
import { userStore } from '../stores';
|
|
13
14
|
import { isS3Uri } from '../utils';
|
|
14
15
|
import { Database, File } from 'lucide-svelte';
|
|
15
|
-
|
|
16
|
+
import DucklakeIcon from './icons/DucklakeIcon.svelte';
|
|
17
|
+
const { asset, _resourceMetadata, s3FilePicker, dbManagerDrawer, onClick, class: className = '', noText = false, buttonVariant = 'border', btnClasses = '', disabled = false } = $props();
|
|
16
18
|
const assetUri = $derived(formatAsset(asset));
|
|
17
19
|
</script>
|
|
18
20
|
|
|
19
21
|
<Button
|
|
20
|
-
disabled={$userStore?.operator}
|
|
22
|
+
disabled={$userStore?.operator || disabled}
|
|
21
23
|
size="xs"
|
|
22
24
|
variant={buttonVariant}
|
|
23
25
|
spacingSize="xs2"
|
|
@@ -25,9 +27,15 @@ const assetUri = $derived(formatAsset(asset));
|
|
|
25
27
|
{btnClasses}
|
|
26
28
|
on:click={async () => {
|
|
27
29
|
if (asset.kind === 'resource' && isDbType(_resourceMetadata?.resource_type)) {
|
|
28
|
-
dbManagerDrawer?.openDrawer(
|
|
30
|
+
dbManagerDrawer?.openDrawer({
|
|
31
|
+
type: 'database',
|
|
32
|
+
resourceType: _resourceMetadata.resource_type,
|
|
33
|
+
resourcePath: asset.path
|
|
34
|
+
})
|
|
29
35
|
} else if (asset.kind === 's3object' && isS3Uri(assetUri)) {
|
|
30
36
|
s3FilePicker?.open(assetUri)
|
|
37
|
+
} else if (asset.kind === 'ducklake') {
|
|
38
|
+
dbManagerDrawer?.openDrawer({ type: 'ducklake', ducklake: asset.path })
|
|
31
39
|
}
|
|
32
40
|
onClick?.()
|
|
33
41
|
}}
|
|
@@ -36,5 +44,7 @@ const assetUri = $derived(formatAsset(asset));
|
|
|
36
44
|
<span class:hidden={noText}>Explore</span> <File size={18} />
|
|
37
45
|
{:else if asset.kind === 'resource'}
|
|
38
46
|
<span class:hidden={noText}>Manage</span> <Database size={18} />
|
|
47
|
+
{:else if asset.kind === 'ducklake'}
|
|
48
|
+
<span class:hidden={noText}>Manage</span> <DucklakeIcon size={18} />
|
|
39
49
|
{/if}
|
|
40
50
|
</Button>
|
|
@@ -17,6 +17,7 @@ type $$ComponentProps = {
|
|
|
17
17
|
noText?: boolean;
|
|
18
18
|
buttonVariant?: ButtonType.Variant;
|
|
19
19
|
btnClasses?: string;
|
|
20
|
+
disabled?: boolean;
|
|
20
21
|
};
|
|
21
22
|
declare const ExploreAssetButton: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
22
23
|
type ExploreAssetButton = ReturnType<typeof ExploreAssetButton>;
|
|
@@ -14,7 +14,7 @@ let error = $state(undefined);
|
|
|
14
14
|
let mod = $state(undefined);
|
|
15
15
|
async function loadSchema() {
|
|
16
16
|
try {
|
|
17
|
-
const res = await getFirstStepSchema(
|
|
17
|
+
const res = await getFirstStepSchema(flowStateStore.val, flowStore.val);
|
|
18
18
|
schema = res.schema;
|
|
19
19
|
mod = res.mod;
|
|
20
20
|
dispatch('connectFirstNode', { connectFirstNode: res.connectFirstNode });
|
|
@@ -24,7 +24,7 @@ async function loadSchema() {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
$effect(() => {
|
|
27
|
-
flowStore.val &&
|
|
27
|
+
flowStore.val && flowStateStore.val && untrack(() => loadSchema());
|
|
28
28
|
});
|
|
29
29
|
function handleClick() {
|
|
30
30
|
selected = !selected;
|
|
@@ -15,7 +15,7 @@ import ScriptEditorDrawer from './flows/content/ScriptEditorDrawer.svelte';
|
|
|
15
15
|
import { dfs as dfsApply } from './flows/dfs';
|
|
16
16
|
import FlowImportExportMenu from './flows/header/FlowImportExportMenu.svelte';
|
|
17
17
|
import FlowPreviewButtons from './flows/header/FlowPreviewButtons.svelte';
|
|
18
|
-
import { cleanInputs
|
|
18
|
+
import { cleanInputs } from './flows/utils';
|
|
19
19
|
import { Calendar, Pen, Save, DiffIcon, HistoryIcon, FileJson, Settings } from 'lucide-svelte';
|
|
20
20
|
import Awareness from './Awareness.svelte';
|
|
21
21
|
import { getAllModules } from './flows/flowExplorer';
|
|
@@ -445,13 +445,7 @@ function select(selectedId) {
|
|
|
445
445
|
selectedIdStore.set(selectedId);
|
|
446
446
|
}
|
|
447
447
|
let insertButtonOpen = writable(false);
|
|
448
|
-
let
|
|
449
|
-
let modulesTestStates = new ModulesTestStates((moduleId) => {
|
|
450
|
-
// Update the derived store with test job states
|
|
451
|
-
delete $derivedModuleStates[moduleId];
|
|
452
|
-
testModuleId = moduleId;
|
|
453
|
-
showJobStatus = false;
|
|
454
|
-
});
|
|
448
|
+
let modulesTestStates = new ModulesTestStates();
|
|
455
449
|
let outputPickerOpenFns = $state({});
|
|
456
450
|
let flowEditor = $state(undefined);
|
|
457
451
|
setContext('FlowEditorContext', {
|
|
@@ -715,25 +709,8 @@ function onJobDone() {
|
|
|
715
709
|
}
|
|
716
710
|
}
|
|
717
711
|
}
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
const suspendStatus = $derived(flowPreviewContent?.getSuspendStatus() ?? writable({}));
|
|
721
|
-
// Create a derived store that only shows the module states when showModuleStatus is true
|
|
722
|
-
// this store can also be updated
|
|
723
|
-
let derivedModuleStates = writable({});
|
|
724
|
-
$effect(() => {
|
|
725
|
-
derivedModuleStates.update((currentStates) => {
|
|
726
|
-
return showJobStatus ? $localModuleStates : currentStates;
|
|
727
|
-
});
|
|
728
|
-
});
|
|
729
|
-
$effect(() => {
|
|
730
|
-
updateDerivedModuleStatesFromTestJobs(testModuleId, modulesTestStates, derivedModuleStates);
|
|
731
|
-
});
|
|
732
|
-
function resetModulesStates() {
|
|
733
|
-
derivedModuleStates.set({});
|
|
734
|
-
showJobStatus = false;
|
|
735
|
-
}
|
|
736
|
-
const individualStepTests = $derived(!(showJobStatus && job) && Object.keys($derivedModuleStates).length > 0);
|
|
712
|
+
let localModuleStates = $state({});
|
|
713
|
+
let suspendStatus = $state({ val: {} });
|
|
737
714
|
const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
|
|
738
715
|
</script>
|
|
739
716
|
|
|
@@ -798,7 +775,7 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
|
|
|
798
775
|
for (const mod of restoredModules) {
|
|
799
776
|
if (mod) {
|
|
800
777
|
try {
|
|
801
|
-
loadFlowModuleState(mod).then((state) => (
|
|
778
|
+
loadFlowModuleState(mod).then((state) => (flowStateStore.val[mod.id] = state))
|
|
802
779
|
} catch (e) {
|
|
803
780
|
console.error('Error loading state for restored node', e)
|
|
804
781
|
}
|
|
@@ -928,10 +905,12 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
|
|
|
928
905
|
showCaptureHint.set(true)
|
|
929
906
|
}}
|
|
930
907
|
{onJobDone}
|
|
908
|
+
bind:localModuleStates
|
|
931
909
|
bind:this={flowPreviewButtons}
|
|
932
910
|
{loading}
|
|
933
911
|
onRunPreview={() => {
|
|
934
|
-
|
|
912
|
+
modulesTestStates.hideJobsInGraph()
|
|
913
|
+
localModuleStates = {}
|
|
935
914
|
showJobStatus = true
|
|
936
915
|
}}
|
|
937
916
|
/>
|
|
@@ -958,7 +937,7 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
|
|
|
958
937
|
</div>
|
|
959
938
|
</div>
|
|
960
939
|
<!-- metadata -->
|
|
961
|
-
{#if
|
|
940
|
+
{#if flowStateStore.val}
|
|
962
941
|
<FlowEditor
|
|
963
942
|
bind:this={flowEditor}
|
|
964
943
|
{disabledFlowInputs}
|
|
@@ -1001,19 +980,22 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
|
|
|
1001
980
|
showFlowAiButton={!disableAi && customUi?.topBar?.aiBuilder != false}
|
|
1002
981
|
toggleAiChat={() => aiChatManager.toggleOpen()}
|
|
1003
982
|
onOpenPreview={flowPreviewButtons?.openPreview}
|
|
1004
|
-
localModuleStates={
|
|
983
|
+
localModuleStates={showJobStatus ? localModuleStates : {}}
|
|
984
|
+
{showJobStatus}
|
|
985
|
+
testModuleStates={modulesTestStates}
|
|
1005
986
|
isOwner={flowPreviewContent?.getIsOwner()}
|
|
1006
987
|
onTestFlow={flowPreviewButtons?.runPreview}
|
|
1007
988
|
isRunning={flowPreviewContent?.getIsRunning()}
|
|
1008
989
|
onCancelTestFlow={flowPreviewContent?.cancelTest}
|
|
1009
|
-
onHideJobStatus={
|
|
1010
|
-
|
|
990
|
+
onHideJobStatus={() => {
|
|
991
|
+
modulesTestStates.hideJobsInGraph()
|
|
992
|
+
showJobStatus = false
|
|
993
|
+
}}
|
|
1011
994
|
{job}
|
|
1012
|
-
{localDurationStatuses}
|
|
1013
995
|
{suspendStatus}
|
|
1014
|
-
{showJobStatus}
|
|
1015
996
|
onDelete={(id) => {
|
|
1016
|
-
delete
|
|
997
|
+
delete localModuleStates[id]
|
|
998
|
+
delete modulesTestStates.states[id]
|
|
1017
999
|
}}
|
|
1018
1000
|
{flowHasChanged}
|
|
1019
1001
|
/>
|
|
@@ -132,6 +132,8 @@ let codeViewer;
|
|
|
132
132
|
Inline {stepDetail.value.language} script
|
|
133
133
|
{:else if stepDetail.value.type == 'script'}
|
|
134
134
|
Workspace script
|
|
135
|
+
{:else if stepDetail.value.type == 'aiagent'}
|
|
136
|
+
AI Agent
|
|
135
137
|
{/if}
|
|
136
138
|
</span>
|
|
137
139
|
</div>
|
|
@@ -212,6 +214,11 @@ let codeViewer;
|
|
|
212
214
|
{:else}
|
|
213
215
|
<FlowModuleScript path={stepDetail.value.path} />
|
|
214
216
|
{/if}
|
|
217
|
+
{:else if stepDetail.value.type == 'aiagent'}
|
|
218
|
+
<div class="text-2xs">
|
|
219
|
+
<h3 class="mb-2 font-semibold mt-2">Step Inputs</h3>
|
|
220
|
+
<InputTransformsViewer inputTransforms={stepDetail?.value?.input_transforms ?? {}} />
|
|
221
|
+
</div>
|
|
215
222
|
{:else if stepDetail.value.type == 'forloopflow'}
|
|
216
223
|
<div>
|
|
217
224
|
<p class="font-medium text-secondary pb-2"> Iterator expression: </p>
|