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.
Files changed (446) hide show
  1. package/package/components/AIAgentLogViewer.svelte +123 -0
  2. package/package/components/AIAgentLogViewer.svelte.d.ts +13 -0
  3. package/package/components/AppConnectInner.svelte +10 -10
  4. package/package/components/AppConnectInner.svelte.d.ts +1 -1
  5. package/package/components/ArgInput.svelte +42 -14
  6. package/package/components/ArgInput.svelte.d.ts +2 -10
  7. package/package/components/AssignableTagsInner.svelte +5 -0
  8. package/package/components/AuthSettings.svelte +4 -2
  9. package/package/components/AuthSettings.svelte.d.ts +1 -0
  10. package/package/components/AutoscalingConfigEditor.svelte +76 -2
  11. package/package/components/DBManagerDrawer.svelte +154 -151
  12. package/package/components/DBManagerDrawer.svelte.d.ts +2 -2
  13. package/package/components/DBTable.svelte +3 -3
  14. package/package/components/DBTable.svelte.d.ts +1 -0
  15. package/package/components/DBTableEditor.svelte +7 -7
  16. package/package/components/DBTableEditor.svelte.d.ts +1 -1
  17. package/package/components/DeployWorkspace.svelte +1 -1
  18. package/package/components/Dev.svelte +12 -28
  19. package/package/components/DiffEditor.svelte +6 -3
  20. package/package/components/DiffEditor.svelte.d.ts +1 -0
  21. package/package/components/DisplayResult.svelte +46 -14
  22. package/package/components/DisplayResult.svelte.d.ts +5 -1
  23. package/package/components/DynSelect.svelte +58 -34
  24. package/package/components/DynSelect.svelte.d.ts +3 -11
  25. package/package/components/EditableSchemaForm.svelte +131 -8
  26. package/package/components/EditableSchemaForm.svelte.d.ts +5 -1
  27. package/package/components/Editor.svelte +27 -9
  28. package/package/components/Editor.svelte.d.ts +1 -1
  29. package/package/components/EditorBar.svelte +105 -7
  30. package/package/components/EditorSettings.svelte +6 -0
  31. package/package/components/ErrorOrRecoveryHandler.svelte +76 -8
  32. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +2 -1
  33. package/package/components/ExploreAssetButton.svelte +14 -4
  34. package/package/components/ExploreAssetButton.svelte.d.ts +1 -0
  35. package/package/components/FirstStepInputs.svelte +2 -2
  36. package/package/components/FlowBuilder.svelte +18 -36
  37. package/package/components/FlowGraphViewerStep.svelte +7 -0
  38. package/package/components/FlowJobResult.svelte +16 -64
  39. package/package/components/FlowJobResult.svelte.d.ts +11 -4
  40. package/package/components/FlowLogViewer.svelte +660 -0
  41. package/package/components/FlowLogViewer.svelte.d.ts +34 -0
  42. package/package/components/FlowLogViewerWrapper.svelte +52 -0
  43. package/package/components/FlowLogViewerWrapper.svelte.d.ts +21 -0
  44. package/package/components/FlowLoopIterationPreview.svelte +3 -3
  45. package/package/components/FlowPreviewContent.svelte +13 -6
  46. package/package/components/FlowPreviewContent.svelte.d.ts +7 -7
  47. package/package/components/FlowPreviewResult.svelte +7 -5
  48. package/package/components/FlowPreviewResult.svelte.d.ts +4 -5
  49. package/package/components/FlowStatusViewer.svelte +28 -16
  50. package/package/components/FlowStatusViewer.svelte.d.ts +19 -27
  51. package/package/components/FlowStatusViewerInner.svelte +500 -295
  52. package/package/components/FlowStatusViewerInner.svelte.d.ts +34 -34
  53. package/package/components/FlowTimeline.svelte +11 -13
  54. package/package/components/FlowTimeline.svelte.d.ts +6 -5
  55. package/package/components/FolderEditor.svelte +1 -1
  56. package/package/components/GitDiffPreview.svelte +14 -18
  57. package/package/components/GitDiffPreview.svelte.d.ts +2 -8
  58. package/package/components/GitHubAppIntegration.svelte +3 -1
  59. package/package/components/HighlightCode.svelte +4 -1
  60. package/package/components/IconedResourceType.svelte +9 -5
  61. package/package/components/IdEditorInput.svelte +25 -22
  62. package/package/components/IdEditorInput.svelte.d.ts +11 -23
  63. package/package/components/InstanceSetting.svelte +7 -2
  64. package/package/components/InstanceSettings.svelte +1 -0
  65. package/package/components/JobLoader.svelte +108 -12
  66. package/package/components/JobLoader.svelte.d.ts +16 -3
  67. package/package/components/LogViewer.svelte +8 -2
  68. package/package/components/LogViewer.svelte.d.ts +1 -0
  69. package/package/components/LogViewerHeader.svelte +32 -0
  70. package/package/components/LogViewerHeader.svelte.d.ts +8 -0
  71. package/package/components/Login.svelte +8 -2
  72. package/package/components/MemoryFootprintViewer.svelte +1 -1
  73. package/package/components/ModulePreviewForm.svelte +10 -6
  74. package/package/components/ModulePreviewResultViewer.svelte +18 -2
  75. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -1
  76. package/package/components/ModuleTest.svelte +59 -16
  77. package/package/components/MoveDrawer.svelte.d.ts +2 -2
  78. package/package/components/NextcloudSetting.svelte +84 -0
  79. package/package/components/NextcloudSetting.svelte.d.ts +7 -0
  80. package/package/components/ObjectResourceInput.svelte +3 -2
  81. package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
  82. package/package/components/ParqetCsvTableRenderer.svelte +1 -1
  83. package/package/components/RelativeLineNumbers.svelte +16 -0
  84. package/package/components/RelativeLineNumbers.svelte.d.ts +18 -0
  85. package/package/components/ResourceEditor.svelte +10 -5
  86. package/package/components/ResourcePicker.svelte +8 -1
  87. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  88. package/package/components/ResultStreamDisplay.svelte +5 -0
  89. package/package/components/ResultStreamDisplay.svelte.d.ts +5 -0
  90. package/package/components/RunForm.svelte +9 -1
  91. package/package/components/SchemaForm.svelte +2 -2
  92. package/package/components/SchemaForm.svelte.d.ts +2 -10
  93. package/package/components/ScriptBuilder.svelte +26 -19
  94. package/package/components/ScriptBuilder.svelte.d.ts +1 -1
  95. package/package/components/ScriptEditor.svelte +2 -2
  96. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  97. package/package/components/ScriptWrapper.svelte +1 -1
  98. package/package/components/ShareModal.svelte.d.ts +1 -1
  99. package/package/components/SimpleAgTable.svelte +2 -0
  100. package/package/components/SimpleAgTable.svelte.d.ts +2 -0
  101. package/package/components/SimpleEditor.svelte +10 -4
  102. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  103. package/package/components/SqlRepl.svelte +21 -7
  104. package/package/components/SqlRepl.svelte.d.ts +2 -2
  105. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  106. package/package/components/TemplateEditor.svelte +1 -1
  107. package/package/components/UserSettings.svelte +4 -4
  108. package/package/components/WorkerTagSelect.svelte +70 -1
  109. package/package/components/apps/components/display/AppAccordionList.svelte +1 -1
  110. package/package/components/apps/components/display/AppCarouselList.svelte +10 -8
  111. package/package/components/apps/components/display/AppDisplayComponent.svelte +13 -1
  112. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +3 -3
  113. package/package/components/apps/components/display/AppText.svelte +2 -2
  114. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +8 -1
  115. package/package/components/apps/components/display/dbtable/InsertRow.svelte +5 -4
  116. package/package/components/apps/components/display/dbtable/queries/count.js +11 -1
  117. package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
  118. package/package/components/apps/components/display/dbtable/queries/createTable.js +3 -3
  119. package/package/components/apps/components/display/dbtable/queries/delete.js +7 -0
  120. package/package/components/apps/components/display/dbtable/queries/insert.js +2 -0
  121. package/package/components/apps/components/display/dbtable/queries/select.js +14 -0
  122. package/package/components/apps/components/display/dbtable/queries/update.js +7 -0
  123. package/package/components/apps/components/display/dbtable/utils.d.ts +6 -5
  124. package/package/components/apps/components/display/dbtable/utils.js +52 -28
  125. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +1 -1
  126. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
  127. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -0
  128. package/package/components/apps/components/display/table/AppAggridTable.svelte +7 -6
  129. package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
  130. package/package/components/apps/components/display/table/utils.js +7 -4
  131. package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -3
  132. package/package/components/apps/components/helpers/InputValue.svelte +6 -1
  133. package/package/components/apps/components/helpers/NonRunnableComponent.svelte +8 -4
  134. package/package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
  135. package/package/components/apps/components/helpers/RunnableComponent.svelte +10 -8
  136. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +3 -2
  137. package/package/components/apps/components/helpers/RunnableWrapper.svelte +12 -3
  138. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -1
  139. package/package/components/apps/components/inputs/AppCodeInputComponent.svelte +0 -5
  140. package/package/components/apps/components/inputs/AppS3FileInput.svelte +2 -2
  141. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +1 -1
  142. package/package/components/apps/components/layout/AppContainer.svelte +1 -1
  143. package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -21
  144. package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
  145. package/package/components/apps/components/layout/AppList.svelte +9 -8
  146. package/package/components/apps/components/layout/AppModal.svelte +1 -1
  147. package/package/components/apps/components/layout/AppSplitpanes.svelte +5 -2
  148. package/package/components/apps/components/layout/AppStepper.svelte +10 -6
  149. package/package/components/apps/components/layout/AppTabs.svelte +3 -3
  150. package/package/components/apps/editor/AppEditorHeader.svelte +13 -2
  151. package/package/components/apps/editor/AppJobsDrawer.svelte +2 -2
  152. package/package/components/apps/editor/GridEditor.svelte +24 -19
  153. package/package/components/apps/editor/GridEditor.svelte.d.ts +4 -1
  154. package/package/components/apps/editor/GridViewer.svelte +1 -0
  155. package/package/components/apps/editor/RunnableJobPanelInner.svelte +2 -1
  156. package/package/components/apps/editor/SubGridEditor.svelte +7 -11
  157. package/package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -19
  158. package/package/components/apps/editor/appUtils.js +17 -68
  159. package/package/components/apps/editor/component/ComponentInner.svelte +845 -694
  160. package/package/components/apps/editor/component/componentCallbacks.svelte.js +8 -1
  161. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +7 -7
  162. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +7 -19
  163. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +14 -55
  164. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  165. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  166. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  167. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +31 -45
  168. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
  169. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +1 -0
  170. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +1 -3
  171. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +2 -2
  172. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte.d.ts +1 -0
  173. package/package/components/apps/svelte-grid/Grid.svelte +23 -25
  174. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +21 -9
  175. package/package/components/apps/svelte-grid/MoveResize.svelte +13 -15
  176. package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +17 -24
  177. package/package/components/apps/utils.d.ts +2 -0
  178. package/package/components/apps/utils.js +22 -0
  179. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  180. package/package/components/assets/JobAssetsViewer.svelte +2 -2
  181. package/package/components/assets/lib.js +4 -0
  182. package/package/components/auditLogs/AuditLogsFilters.svelte +7 -9
  183. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  184. package/package/components/common/button/Button.svelte +4 -3
  185. package/package/components/common/button/Button.svelte.d.ts +1 -0
  186. package/package/components/common/confirmationModal/ConfirmationModal.svelte +6 -5
  187. package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +6 -11
  188. package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.d.ts +26 -0
  189. package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.js +50 -0
  190. package/package/components/common/fileDownload/FileDownload.svelte +1 -3
  191. package/package/components/common/fileDownload/FileDownload.svelte.d.ts +4 -18
  192. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  193. package/package/components/common/modal/Modal.svelte +2 -5
  194. package/package/components/common/tabs/TabsV2.svelte +2 -1
  195. package/package/components/common/tabs/TabsV2.svelte.d.ts +1 -0
  196. package/package/components/copilot/FlowInlineScriptAIButton.svelte +58 -0
  197. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -0
  198. package/package/components/copilot/MetadataGen.svelte +19 -1
  199. package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
  200. package/package/components/copilot/ScriptGen.svelte +23 -31
  201. package/package/components/copilot/ScriptGen.svelte.d.ts +0 -1
  202. package/package/components/copilot/autocomplete/Autocompletor.js +2 -0
  203. package/package/components/copilot/chat/AIChatDisplay.svelte +4 -4
  204. package/package/components/copilot/chat/AIChatInput.svelte +29 -6
  205. package/package/components/copilot/chat/AIChatManager.svelte.js +171 -33
  206. package/package/components/copilot/chat/AIChatMessage.svelte +3 -0
  207. package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
  208. package/package/components/copilot/chat/ToolContentDisplay.svelte +84 -0
  209. package/package/components/copilot/chat/ToolContentDisplay.svelte.d.ts +11 -0
  210. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +105 -0
  211. package/package/components/copilot/chat/ToolExecutionDisplay.svelte.d.ts +7 -0
  212. package/package/components/copilot/chat/api/apiTools.d.ts +7 -0
  213. package/package/components/copilot/chat/api/apiTools.js +192 -0
  214. package/package/components/copilot/chat/api/core.d.ts +7 -0
  215. package/package/components/copilot/chat/api/core.js +61 -0
  216. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -6
  217. package/package/components/copilot/chat/flow/core.js +213 -42
  218. package/package/components/copilot/chat/flow/utils.js +3 -0
  219. package/package/components/copilot/chat/monaco-adapter.d.ts +1 -1
  220. package/package/components/copilot/chat/monaco-adapter.js +10 -4
  221. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  222. package/package/components/copilot/chat/navigator/core.js +20 -22
  223. package/package/components/copilot/chat/script/core.d.ts +11 -3
  224. package/package/components/copilot/chat/script/core.js +120 -44
  225. package/package/components/copilot/chat/shared.d.ts +31 -4
  226. package/package/components/copilot/chat/shared.js +235 -10
  227. package/package/components/copilot/lib.d.ts +1 -1
  228. package/package/components/copilot/lib.js +15 -6
  229. package/package/components/custom_ui.d.ts +4 -0
  230. package/package/components/dbOps.d.ts +20 -8
  231. package/package/components/dbOps.js +85 -40
  232. package/package/components/details/DetailPageHeader.svelte +0 -2
  233. package/package/components/details/DetailPageLayout.svelte +34 -33
  234. package/package/components/flow_builder.d.ts +1 -2
  235. package/package/components/flows/FlowEditor.svelte +3 -3
  236. package/package/components/flows/FlowEditor.svelte.d.ts +7 -6
  237. package/package/components/flows/common/FlowCard.svelte +2 -2
  238. package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
  239. package/package/components/flows/common/FlowCardHeader.svelte +13 -4
  240. package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
  241. package/package/components/flows/content/BranchPredicateEditor.svelte +4 -7
  242. package/package/components/flows/content/BranchPredicateEditor.svelte.d.ts +12 -11
  243. package/package/components/flows/content/FlowConstants.svelte +3 -3
  244. package/package/components/flows/content/FlowEditorPanel.svelte +3 -3
  245. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -4
  246. package/package/components/flows/content/FlowInput.svelte +5 -0
  247. package/package/components/flows/content/FlowInputsQuick.svelte +2 -1
  248. package/package/components/flows/content/FlowLoop.svelte +2 -2
  249. package/package/components/flows/content/FlowModuleComponent.svelte +130 -108
  250. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  251. package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
  252. package/package/components/flows/content/FlowModuleScript.svelte +0 -1
  253. package/package/components/flows/content/FlowModuleSkip.svelte +1 -1
  254. package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
  255. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  256. package/package/components/flows/content/FlowModuleWrapper.svelte +15 -5
  257. package/package/components/flows/content/FlowModuleWrapper.svelte.d.ts +1 -0
  258. package/package/components/flows/content/FlowResult.svelte +2 -3
  259. package/package/components/flows/content/FlowResult.svelte.d.ts +2 -4
  260. package/package/components/flows/content/FlowWhileLoop.svelte +1 -1
  261. package/package/components/flows/dfs.d.ts +3 -1
  262. package/package/components/flows/dfs.js +5 -1
  263. package/package/components/flows/flowInfers.js +78 -0
  264. package/package/components/flows/flowState.d.ts +2 -3
  265. package/package/components/flows/flowState.js +2 -2
  266. package/package/components/flows/flowStateUtils.svelte.d.ts +4 -4
  267. package/package/components/flows/flowStateUtils.svelte.js +14 -13
  268. package/package/components/flows/flowStore.d.ts +3 -4
  269. package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
  270. package/package/components/flows/header/FlowYamlEditor.svelte +10 -1
  271. package/package/components/flows/idUtils.js +2 -1
  272. package/package/components/flows/map/FlowGraphPreviewButton.svelte +1 -1
  273. package/package/components/flows/map/FlowJobsMenu.svelte +7 -3
  274. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -0
  275. package/package/components/flows/map/FlowModuleSchemaItem.svelte +15 -15
  276. package/package/components/flows/map/FlowModuleSchemaMap.svelte +27 -15
  277. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +6 -4
  278. package/package/components/flows/map/InsertModuleButton.svelte +4 -1
  279. package/package/components/flows/map/InsertModuleInner.svelte +9 -1
  280. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
  281. package/package/components/flows/map/MapItem.svelte +4 -2
  282. package/package/components/flows/pickers/TopLevelNode.svelte +4 -1
  283. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -4
  284. package/package/components/flows/propPicker/OutputBadge.svelte +16 -10
  285. package/package/components/flows/propPicker/OutputPickerInner.svelte +19 -6
  286. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +6 -2
  287. package/package/components/flows/propPicker/StepHistory.svelte +4 -1
  288. package/package/components/flows/testSteps.svelte.d.ts +3 -2
  289. package/package/components/flows/testSteps.svelte.js +26 -23
  290. package/package/components/flows/types.d.ts +1 -1
  291. package/package/components/flows/utils.d.ts +3 -5
  292. package/package/components/flows/utils.js +3 -4
  293. package/package/components/git_sync/DetectionFlow.svelte +202 -0
  294. package/package/components/git_sync/DetectionFlow.svelte.d.ts +6 -0
  295. package/package/components/git_sync/GitSyncContext.svelte.d.ts +82 -0
  296. package/package/components/git_sync/GitSyncContext.svelte.js +462 -0
  297. package/package/components/git_sync/GitSyncModalManager.svelte +99 -0
  298. package/package/components/git_sync/GitSyncModalManager.svelte.d.ts +18 -0
  299. package/package/components/git_sync/GitSyncRepositoryCard.svelte +339 -0
  300. package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +6 -0
  301. package/package/components/git_sync/GitSyncRepositoryList.svelte +17 -0
  302. package/package/components/git_sync/GitSyncRepositoryList.svelte.d.ts +18 -0
  303. package/package/components/git_sync/GitSyncSection.svelte +89 -0
  304. package/package/components/git_sync/GitSyncSection.svelte.d.ts +3 -0
  305. package/package/components/git_sync/GitSyncSuccessModal.svelte +58 -0
  306. package/package/components/git_sync/GitSyncSuccessModal.svelte.d.ts +7 -0
  307. package/package/components/git_sync/PullWorkspaceModal.svelte +575 -0
  308. package/package/components/git_sync/PullWorkspaceModal.svelte.d.ts +15 -0
  309. package/package/components/git_sync/PushWorkspaceModal.svelte +320 -0
  310. package/package/components/git_sync/PushWorkspaceModal.svelte.d.ts +12 -0
  311. package/package/components/graph/FlowGraphV2.svelte +49 -25
  312. package/package/components/graph/FlowGraphV2.svelte.d.ts +5 -2
  313. package/package/components/graph/graphBuilder.svelte.d.ts +49 -17
  314. package/package/components/graph/graphBuilder.svelte.js +31 -15
  315. package/package/components/graph/model.d.ts +9 -6
  316. package/package/components/graph/renderers/edges/BaseEdge.svelte +3 -3
  317. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +2 -3
  318. package/package/components/graph/renderers/nodes/AIToolNode.svelte +234 -0
  319. package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +24 -0
  320. package/package/components/graph/renderers/nodes/AssetNode.svelte +19 -14
  321. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +18 -1
  322. package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +1 -1
  323. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +1 -1
  324. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  325. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +2 -2
  326. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +1 -1
  327. package/package/components/graph/renderers/nodes/ModuleNode.svelte +21 -21
  328. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +64 -0
  329. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte.d.ts +7 -0
  330. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +1 -1
  331. package/package/components/icons/AssetDucklakeIcon.svelte +28 -0
  332. package/package/components/icons/AssetDucklakeIcon.svelte.d.ts +9 -0
  333. package/package/components/icons/AssetGenericIcon.svelte +3 -0
  334. package/package/components/icons/DucklakeIcon.svelte +18 -0
  335. package/package/components/icons/DucklakeIcon.svelte.d.ts +6 -0
  336. package/package/components/icons/RubyIcon.svelte +656 -0
  337. package/package/components/icons/RubyIcon.svelte.d.ts +7 -0
  338. package/package/components/instanceSettings.js +20 -3
  339. package/package/components/modulesTest.svelte.d.ts +6 -3
  340. package/package/components/modulesTest.svelte.js +32 -0
  341. package/package/components/preview/FlowPreviewStatus.svelte +3 -1
  342. package/package/components/raw_apps/RawAppEditor.svelte +27 -26
  343. package/package/components/raw_apps/RawAppEditor.svelte.d.ts +17 -17
  344. package/package/components/runs/{JobPreview.svelte → JobRunsPreview.svelte} +2 -5
  345. package/package/components/runs/{JobPreview.svelte.d.ts → JobRunsPreview.svelte.d.ts} +3 -3
  346. package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
  347. package/package/components/runs/RunRow.svelte +5 -1
  348. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  349. package/package/components/schema/AddProperty.svelte +41 -36
  350. package/package/components/schema/AddProperty.svelte.d.ts +2 -2
  351. package/package/components/schema/AddPropertyV2.svelte +41 -37
  352. package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -1
  353. package/package/components/schema/FlowPropertyEditor.svelte +11 -8
  354. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  355. package/package/components/schema/PropertyEditor.svelte +0 -2
  356. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  357. package/package/components/schema/SchemaFormDND.svelte +2 -1
  358. package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -0
  359. package/package/components/scriptEditor/LogPanel.svelte +5 -3
  360. package/package/components/scriptEditor/LogPanel.svelte.d.ts +5 -1
  361. package/package/components/search/RunsSearch.svelte +1 -1
  362. package/package/components/select/Select.svelte +7 -4
  363. package/package/components/select/Select.svelte.d.ts +5 -0
  364. package/package/components/select/SelectDropdown.svelte +2 -1
  365. package/package/components/select/SelectDropdown.svelte.d.ts +3 -0
  366. package/package/components/settings/CreateToken.svelte +132 -12
  367. package/package/components/settings/CreateToken.svelte.d.ts +3 -20
  368. package/package/components/settings/TokenDisplay.svelte +18 -42
  369. package/package/components/settings/TokenDisplay.svelte.d.ts +0 -1
  370. package/package/components/settings/TokensTable.svelte +2 -4
  371. package/package/components/settings/TokensTable.svelte.d.ts +3 -19
  372. package/package/components/settings/WorkspaceUserSettings.svelte +428 -69
  373. package/package/components/sidebar/MenuButton.svelte +12 -10
  374. package/package/components/sidebar/changelogs.js +5 -0
  375. package/package/components/stepHistoryLoader.svelte.d.ts +2 -2
  376. package/package/components/stepHistoryLoader.svelte.js +7 -12
  377. package/package/components/table/AutoDataTable.svelte +6 -4
  378. package/package/components/table/AutoDataTable.svelte.d.ts +1 -0
  379. package/package/components/table/DataTable.svelte +12 -10
  380. package/package/components/table/DataTable.svelte.d.ts +1 -0
  381. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +2 -2
  382. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
  383. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
  384. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +50 -11
  385. package/package/components/triggers/gcp/utils.js +1 -0
  386. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
  387. package/package/components/triggers/http/utils.js +1 -1
  388. package/package/components/triggers/kafka/utils.js +1 -1
  389. package/package/components/triggers/mqtt/utils.js +1 -1
  390. package/package/components/triggers/nats/utils.js +1 -1
  391. package/package/components/triggers/postgres/utils.js +1 -1
  392. package/package/components/triggers/sqs/utils.js +1 -1
  393. package/package/components/triggers/utils.js +2 -1
  394. package/package/components/triggers/webhook/WebhooksConfigSection.svelte +24 -26
  395. package/package/components/triggers/webhook/WebhooksPanel.svelte +1 -15
  396. package/package/components/triggers/websocket/utils.js +1 -1
  397. package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte +1 -1
  398. package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +4 -4
  399. package/package/components/tutorials/utils.js +3 -0
  400. package/package/components/worker_group.d.ts +4 -1
  401. package/package/components/worker_group.js +3 -2
  402. package/package/components/workspaceSettings/AISettings.svelte +52 -36
  403. package/package/components/workspaceSettings/DucklakeSettings.svelte +321 -0
  404. package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +23 -0
  405. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +122 -499
  406. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +8 -10
  407. package/package/consts.js +2 -1
  408. package/package/editorLangUtils.d.ts +1 -1
  409. package/package/editorLangUtils.js +2 -0
  410. package/package/editorUtils.d.ts +2 -1
  411. package/package/editorUtils.js +2 -1
  412. package/package/gen/core/OpenAPI.js +1 -1
  413. package/package/gen/schemas.gen.d.ts +303 -14
  414. package/package/gen/schemas.gen.js +371 -76
  415. package/package/gen/services.gen.d.ts +136 -16
  416. package/package/gen/services.gen.js +264 -19
  417. package/package/gen/types.gen.d.ts +736 -17
  418. package/package/git-sync.d.ts +36 -0
  419. package/package/git-sync.js +1 -0
  420. package/package/hub.d.ts +1 -0
  421. package/package/hubPaths.json +9 -3
  422. package/package/infer.js +13 -3
  423. package/package/monaco_workers/graphql.worker.bundle.js +144 -110
  424. package/package/script_helpers.d.ts +5 -2
  425. package/package/script_helpers.js +87 -14
  426. package/package/scripts.d.ts +1 -1
  427. package/package/scripts.js +3 -2
  428. package/package/services/JobManager.d.ts +28 -0
  429. package/package/services/JobManager.js +114 -0
  430. package/package/stores.d.ts +3 -1
  431. package/package/stores.js +2 -0
  432. package/package/svelte5Utils.svelte.d.ts +16 -0
  433. package/package/svelte5Utils.svelte.js +26 -0
  434. package/package/utils.d.ts +19 -2
  435. package/package/utils.js +55 -2
  436. package/package.json +24 -22
  437. package/package/components/AllFlowLogs.svelte +0 -31
  438. package/package/components/AllFlowLogs.svelte.d.ts +0 -8
  439. package/package/components/InitGitRepoPopover.svelte +0 -410
  440. package/package/components/InitGitRepoPopover.svelte.d.ts +0 -13
  441. package/package/components/PullGitRepoPopover.svelte +0 -355
  442. package/package/components/PullGitRepoPopover.svelte.d.ts +0 -18
  443. package/package/components/copilot/chat/navigator/apiTools.d.ts +0 -68
  444. package/package/components/copilot/chat/navigator/apiTools.js +0 -258
  445. package/package/inferArgSig.d.ts +0 -42
  446. 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
- 'duckdb'
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
- <ScriptGen {editor} {diffEditor} {lang} {iconOnly} {args} {openAiChat} />
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 channelCache = $state({
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 === 'teams' || lastHandlerSelected === 'slack') {
191
- channelCache[lastHandlerSelected] = handlerExtraArgs['channel'];
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['channel'] = '';
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['channel'] = channelCache[handlerSelected] ?? '';
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">Create from template</Button
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: 'custom' | 'slack' | 'teams';
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 === 's3object' ||
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
- const { asset, _resourceMetadata, s3FilePicker, dbManagerDrawer, onClick, class: className = '', noText = false, buttonVariant = 'border', btnClasses = '' } = $props();
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(_resourceMetadata.resource_type, asset.path)
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($flowStateStore, flowStore.val);
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 && $flowStateStore && untrack(() => loadSchema());
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, updateDerivedModuleStatesFromTestJobs } from './flows/utils';
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 testModuleId = $state(undefined);
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
- const localModuleStates = $derived(flowPreviewContent?.getLocalModuleStates() ?? writable({}));
719
- const localDurationStatuses = $derived(flowPreviewContent?.getLocalDurationStatuses() ?? writable({}));
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) => ($flowStateStore[mod.id] = 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
- localModuleStates.set({})
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 $flowStateStore}
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={derivedModuleStates}
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={resetModulesStates}
1010
- {individualStepTests}
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 $derivedModuleStates[id]
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>