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
@@ -4,24 +4,8 @@ interface Props {
4
4
  defaultNewTokenLabel?: string;
5
5
  defaultNewTokenWorkspace?: string;
6
6
  scopes?: string[];
7
+ onTokenCreated: (token: string) => void;
7
8
  }
8
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
9
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
10
- $$bindings?: Bindings;
11
- } & Exports;
12
- (internal: unknown, props: Props & {
13
- $$events?: Events;
14
- $$slots?: Slots;
15
- }): Exports & {
16
- $set?: any;
17
- $on?: any;
18
- };
19
- z_$$bindings?: Bindings;
20
- }
21
- declare const TokensTable: $$__sveltets_2_IsomorphicComponent<Props, {
22
- tokenCreated: CustomEvent<any>;
23
- } & {
24
- [evt: string]: CustomEvent<any>;
25
- }, {}, {}, "">;
26
- type TokensTable = InstanceType<typeof TokensTable>;
9
+ declare const TokensTable: import("svelte").Component<Props, {}, "">;
10
+ type TokensTable = ReturnType<typeof TokensTable>;
27
11
  export default TokensTable;
@@ -10,10 +10,11 @@ import DataTable from '../table/DataTable.svelte';
10
10
  import Head from '../table/Head.svelte';
11
11
  import Toggle from '../Toggle.svelte';
12
12
  import Tooltip from '../Tooltip.svelte';
13
- import { UserService, WorkspaceService } from '../../gen';
13
+ import { UserService, WorkspaceService, GroupService } from '../../gen';
14
14
  import { userStore, workspaceStore } from '../../stores';
15
15
  import { sendUserToast } from '../../toast';
16
- import { Loader2, Mails, Search } from 'lucide-svelte';
16
+ import { Loader2, Mails, Search, Plus } from 'lucide-svelte';
17
+ import Select from '../select/Select.svelte';
17
18
  import SearchItems from '../SearchItems.svelte';
18
19
  import Cell from '../table/Cell.svelte';
19
20
  import Row from '../table/Row.svelte';
@@ -29,11 +30,37 @@ let auto_invite_domain = $state();
29
30
  let operatorOnly = $state(undefined);
30
31
  let autoAdd = $state(undefined);
31
32
  let nbDisplayed = $state(30);
33
+ // Instance group auto-add settings
34
+ let instanceGroups = $state([]);
35
+ let autoAddInstanceGroups = $state([]);
36
+ let autoAddInstanceGroupsRoles = $state({});
37
+ // Add new instance group form state
38
+ let selectedNewInstanceGroup = $state(undefined);
39
+ let selectedNewRole = $state('developer');
40
+ // Available groups for dropdowns - filter out already configured groups
41
+ let availableGroupItems = $derived(instanceGroups
42
+ .filter(group => !autoAddInstanceGroups.includes(group.name))
43
+ .map(group => ({
44
+ value: group.name,
45
+ label: group.name + (group.summary ? ` - ${group.summary}` : '')
46
+ })));
47
+ // Sort users so manual users come first, then instance group users
48
+ let sortedUsers = $derived(() => {
49
+ const userList = (filteredUsers || users || []).slice();
50
+ return userList.sort((a, b) => {
51
+ const aIsInstanceGroup = a.added_via?.source === 'instance_group' ? 1 : 0;
52
+ const bIsInstanceGroup = b.added_via?.source === 'instance_group' ? 1 : 0;
53
+ return aIsInstanceGroup - bIsInstanceGroup;
54
+ });
55
+ });
56
+ let hasNonManualUsers = $derived((filteredUsers || users || []).some((user) => user.added_via?.source === 'instance_group' || user.added_via?.source === 'domain'));
32
57
  async function loadSettings() {
33
58
  const settings = await WorkspaceService.getSettings({ workspace: $workspaceStore });
34
59
  auto_invite_domain = settings.auto_invite_domain;
35
60
  operatorOnly = settings.auto_invite_operator;
36
61
  autoAdd = settings.auto_add;
62
+ autoAddInstanceGroups = settings.auto_add_instance_groups || [];
63
+ autoAddInstanceGroupsRoles = settings.auto_add_instance_groups_roles || {};
37
64
  }
38
65
  let getUsagePromise = undefined;
39
66
  let usage = $state(undefined);
@@ -62,6 +89,82 @@ let allowedAutoDomain = $state(false);
62
89
  async function getDisallowedAutoDomain() {
63
90
  allowedAutoDomain = await WorkspaceService.isDomainAllowed();
64
91
  }
92
+ async function loadInstanceGroups() {
93
+ try {
94
+ instanceGroups = await GroupService.listInstanceGroups();
95
+ }
96
+ catch (e) {
97
+ console.warn('Failed to load instance groups:', e);
98
+ instanceGroups = [];
99
+ }
100
+ }
101
+ async function saveInstanceGroupSettings() {
102
+ try {
103
+ await WorkspaceService.editInstanceGroups({
104
+ workspace: $workspaceStore ?? '',
105
+ requestBody: {
106
+ groups: autoAddInstanceGroups,
107
+ roles: autoAddInstanceGroupsRoles
108
+ }
109
+ });
110
+ sendUserToast('Instance group settings saved');
111
+ // Refresh user list to show newly auto-added users
112
+ listUsers();
113
+ }
114
+ catch (e) {
115
+ console.error('Failed to save instance group settings:', e);
116
+ sendUserToast('Failed to save settings', true);
117
+ }
118
+ }
119
+ async function addInstanceGroup() {
120
+ if (!selectedNewInstanceGroup || !selectedNewRole)
121
+ return;
122
+ const groupToAdd = selectedNewInstanceGroup;
123
+ const roleToAdd = selectedNewRole;
124
+ try {
125
+ autoAddInstanceGroups = [...autoAddInstanceGroups, groupToAdd];
126
+ autoAddInstanceGroupsRoles[groupToAdd] = roleToAdd;
127
+ // Reset form
128
+ selectedNewInstanceGroup = undefined;
129
+ selectedNewRole = 'developer';
130
+ await saveInstanceGroupSettings();
131
+ }
132
+ catch (e) {
133
+ // Rollback on error
134
+ autoAddInstanceGroups = autoAddInstanceGroups.filter(g => g !== groupToAdd);
135
+ delete autoAddInstanceGroupsRoles[groupToAdd];
136
+ sendUserToast('Failed to add instance group', true);
137
+ }
138
+ }
139
+ async function removeInstanceGroup(groupName) {
140
+ const previousGroups = [...autoAddInstanceGroups];
141
+ const previousRole = autoAddInstanceGroupsRoles[groupName];
142
+ try {
143
+ autoAddInstanceGroups = autoAddInstanceGroups.filter(g => g !== groupName);
144
+ delete autoAddInstanceGroupsRoles[groupName];
145
+ await saveInstanceGroupSettings();
146
+ }
147
+ catch (e) {
148
+ // Rollback on error
149
+ autoAddInstanceGroups = previousGroups;
150
+ if (previousRole) {
151
+ autoAddInstanceGroupsRoles[groupName] = previousRole;
152
+ }
153
+ sendUserToast('Failed to remove instance group', true);
154
+ }
155
+ }
156
+ async function updateGroupRole(groupName, role) {
157
+ const previousRole = autoAddInstanceGroupsRoles[groupName];
158
+ try {
159
+ autoAddInstanceGroupsRoles[groupName] = role;
160
+ await saveInstanceGroupSettings();
161
+ }
162
+ catch (e) {
163
+ // Rollback on error
164
+ autoAddInstanceGroupsRoles[groupName] = previousRole;
165
+ sendUserToast('Failed to update role', true);
166
+ }
167
+ }
65
168
  let domain = $derived($userStore?.email.split('@')[1]);
66
169
  $effect(() => {
67
170
  if ($workspaceStore) {
@@ -71,6 +174,7 @@ $effect(() => {
71
174
  getUsage();
72
175
  listInvites();
73
176
  loadSettings();
177
+ loadInstanceGroups();
74
178
  });
75
179
  }
76
180
  });
@@ -83,6 +187,7 @@ onDestroy(() => {
83
187
  }
84
188
  });
85
189
  let deleteConfirmedCallback = $state(undefined);
190
+ let removeInstanceGroupConfirmedCallback = $state(undefined);
86
191
  async function removeAllInvitesFromDomain() {
87
192
  await Promise.all(invites
88
193
  .filter((x) => isCloudHosted() ? x.email.endsWith('@' + (auto_invite_domain ?? '')) : true)
@@ -248,7 +353,10 @@ $effect(() => {
248
353
  invite_all: !isCloudHosted(),
249
354
  auto_add: showInvites ? (autoAdd ?? false) : true
250
355
  }
251
- : { operator: undefined, auto_add: undefined }
356
+ : {
357
+ operator: undefined,
358
+ auto_add: undefined
359
+ }
252
360
  })
253
361
  loadSettings()
254
362
  listInvites()
@@ -266,6 +374,179 @@ $effect(() => {
266
374
  </div>
267
375
  {/snippet}
268
376
  </Popover>
377
+
378
+ {#if instanceGroups.length > 0}
379
+ <Popover
380
+ floatingConfig={{ strategy: 'absolute', placement: 'bottom-end' }}
381
+ usePointerDownOutside
382
+ floatingClass="!z-20"
383
+ >
384
+ {#snippet trigger()}
385
+ <Button
386
+ color={autoAddInstanceGroups.length > 0 ? 'green' : 'gray'}
387
+ variant="border"
388
+ size="xs"
389
+ nonCaptureEvent={true}
390
+ startIcon={{ icon: Mails }}
391
+ >Instance groups: {autoAddInstanceGroups.length}
392
+ </Button>
393
+ {/snippet}
394
+ {#snippet content()}
395
+ <div class="flex flex-col p-4 min-w-[500px]">
396
+ <div class="flex flex-col gap-4">
397
+ <span class="text-sm leading-6 font-semibold">
398
+ Auto-add instance groups
399
+ </span>
400
+
401
+ <!-- Add new instance group form -->
402
+ {#if availableGroupItems.length > 0}
403
+ <div class="flex w-full mt-1 gap-2 items-end justify-between">
404
+ <div class="flex gap-2 items-end">
405
+ <div class="flex flex-col gap-1">
406
+ <span class="text-xs text-tertiary">Instance group</span>
407
+ <Select
408
+ items={availableGroupItems}
409
+ placeholder="Select group"
410
+ bind:value={selectedNewInstanceGroup}
411
+ class="max-w-[160px]"
412
+ disablePortal={true}
413
+ />
414
+ </div>
415
+
416
+ <div class="flex flex-col gap-1">
417
+ <span class="text-xs text-tertiary">Role</span>
418
+ <ToggleButtonGroup
419
+ selected={selectedNewRole}
420
+ on:selected={(e) => {
421
+ selectedNewRole = e.detail
422
+ }}
423
+ >
424
+ {#snippet children({ item })}
425
+ <ToggleButton
426
+ value="operator"
427
+ label="Operator"
428
+ tooltip="An operator can only execute and view scripts/flows/apps from your workspace, and only those that he has visibility on."
429
+ {item}
430
+ />
431
+ <ToggleButton
432
+ value="developer"
433
+ label="Developer"
434
+ tooltip="A Developer can execute and view scripts/flows/apps, but they can also create new ones and edit those they are allowed to by their path (either u/ or Writer or Admin of their folder found at /f)."
435
+ {item}
436
+ />
437
+ <ToggleButton
438
+ value="admin"
439
+ label="Admin"
440
+ tooltip="An admin has full control over a specific Windmill workspace, including the ability to manage users, edit entities, and control permissions within the workspace."
441
+ {item}
442
+ />
443
+ {/snippet}
444
+ </ToggleButtonGroup>
445
+ </div>
446
+ </div>
447
+
448
+ <Button
449
+ color="blue"
450
+ size="xs"
451
+ startIcon={{ icon: Plus }}
452
+ disabled={!selectedNewInstanceGroup || !selectedNewRole}
453
+ onclick={addInstanceGroup}
454
+ >
455
+ Add
456
+ </Button>
457
+ </div>
458
+ {/if}
459
+
460
+ <!-- Configured groups table -->
461
+ {#if autoAddInstanceGroups.length > 0}
462
+ <div class="flex flex-col gap-2">
463
+ <p class="text-sm font-medium text-secondary">Configured groups:</p>
464
+ <div class="flex flex-col gap-1">
465
+ <table class="w-full text-sm">
466
+ <thead>
467
+ <tr class="text-left text-xs text-tertiary">
468
+ <th class="pb-2 w-1/2">Group</th>
469
+ <th class="pb-2 w-1/4">Role</th>
470
+ <th class="pb-2 w-1/4"></th>
471
+ </tr>
472
+ </thead>
473
+ <tbody>
474
+ {#each autoAddInstanceGroups as groupName (groupName)}
475
+ {@const group = instanceGroups.find(g => g.name === groupName)}
476
+ <tr class="border-t border-gray-200 dark:border-gray-700">
477
+ <td class="py-2">
478
+ <div class="font-medium">{groupName}</div>
479
+ {#if group?.summary}
480
+ <div class="text-xs text-tertiary">{group.summary}</div>
481
+ {/if}
482
+ </td>
483
+ <td class="py-2">
484
+ <div>
485
+ <ToggleButtonGroup
486
+ selected={autoAddInstanceGroupsRoles[groupName] || 'developer'}
487
+ on:selected={async (e) => {
488
+ autoAddInstanceGroupsRoles[groupName] = e.detail
489
+ await updateGroupRole(groupName, e.detail)
490
+ }}
491
+ >
492
+ {#snippet children({ item })}
493
+ <ToggleButton
494
+ value="operator"
495
+ label="Operator"
496
+ tooltip="An operator can only execute and view scripts/flows/apps from your workspace, and only those that he has visibility on."
497
+ {item}
498
+ />
499
+ <ToggleButton
500
+ value="developer"
501
+ label="Developer"
502
+ tooltip="A Developer can execute and view scripts/flows/apps, but they can also create new ones and edit those they are allowed to by their path (either u/ or Writer or Admin of their folder found at /f)."
503
+ {item}
504
+ />
505
+ <ToggleButton
506
+ value="admin"
507
+ label="Admin"
508
+ tooltip="An admin has full control over a specific Windmill workspace, including the ability to manage users, edit entities, and control permissions within the workspace."
509
+ {item}
510
+ />
511
+ {/snippet}
512
+ </ToggleButtonGroup>
513
+ </div>
514
+ </td>
515
+ <td class="py-2">
516
+ <div class="flex justify-end">
517
+ <Button
518
+ color="light"
519
+ variant="contained"
520
+ btnClasses="text-red-500"
521
+ size="xs"
522
+ spacingSize="xs2"
523
+ onclick={() => {
524
+ removeInstanceGroupConfirmedCallback = async () => {
525
+ await removeInstanceGroup(groupName)
526
+ }
527
+ }}
528
+ >
529
+ Remove
530
+ </Button>
531
+ </div>
532
+ </td>
533
+ </tr>
534
+ {/each}
535
+ </tbody>
536
+ </table>
537
+ </div>
538
+ </div>
539
+ {:else}
540
+ <div class="text-center text-tertiary text-sm py-4">
541
+ No instance groups configured for auto-add
542
+ </div>
543
+ {/if}
544
+ </div>
545
+ </div>
546
+ {/snippet}
547
+ </Popover>
548
+ {/if}
549
+
269
550
  <AddUser
270
551
  on:new={() => {
271
552
  listUsers()
@@ -287,6 +568,14 @@ $effect(() => {
287
568
  <tr>
288
569
  <Cell head first>Email</Cell>
289
570
  <Cell head>Username</Cell>
571
+ {#if hasNonManualUsers}
572
+ <Cell head>
573
+ Added via
574
+ <Tooltip>
575
+ Shows how the user was added to the workspace: manually, via domain auto-invite, or through an instance group.
576
+ </Tooltip>
577
+ </Cell>
578
+ {/if}
290
579
 
291
580
  <Cell head>
292
581
  Executions (<abbr title="past 1w">1w</abbr>)
@@ -304,10 +593,34 @@ $effect(() => {
304
593
  </Head>
305
594
  <tbody class="divide-y bg-surface">
306
595
  {#if filteredUsers}
307
- {#each filteredUsers.slice(0, nbDisplayed) as { email, username, is_admin, operator, disabled } (email)}
596
+ {#each sortedUsers().slice(0, nbDisplayed) as { email, username, is_admin, operator, disabled, added_via }, index (email)}
597
+ <!-- Add separator between manual users and instance group users -->
598
+ {#if hasNonManualUsers && index > 0 && sortedUsers()[index - 1]?.added_via?.source !== 'instance_group' && added_via?.source === 'instance_group'}
599
+ <tr class="bg-surface-secondary">
600
+ <td colspan={hasNonManualUsers ? 8 : 7} class="px-4 py-2">
601
+ <div class="text-xs text-tertiary font-bold">
602
+ Instance group users
603
+ </div>
604
+ </td>
605
+ </tr>
606
+ {/if}
308
607
  <tr class="!hover:bg-surface-hover">
309
608
  <Cell first><a href="mailto:{email}">{truncate(email, 20)}</a></Cell>
310
609
  <Cell>{truncate(username, 30)}</Cell>
610
+ {#if hasNonManualUsers}
611
+ <Cell>
612
+ <div class="flex items-center gap-2">
613
+ {#if added_via?.source === 'instance_group'}
614
+ <Badge color="blue">Group</Badge>
615
+ <span>{truncate(added_via.group || 'Unknown', 20)}</span>
616
+ {:else if added_via?.source === 'domain'}
617
+ <Badge color="blue">Auto-add</Badge>
618
+ {:else}
619
+ <Badge color="blue">Manual</Badge>
620
+ {/if}
621
+ </div>
622
+ </Cell>
623
+ {/if}
311
624
  <Cell
312
625
  >{#if usage?.[email] != undefined}{usage?.[email]}{:else}<Loader2
313
626
  size={14}
@@ -325,55 +638,64 @@ $effect(() => {
325
638
  </Cell>
326
639
  <Cell>
327
640
  <div>
328
- <ToggleButtonGroup
329
- selected={is_admin ? 'admin' : operator ? 'operator' : 'developer'}
330
- on:selected={async (e) => {
331
- if (is_admin && email == $userStore?.email && e.detail != 'admin') {
332
- sendUserToast(
333
- 'Admins cannot be demoted by themselves, ask another admin to demote you',
334
- true
335
- )
336
- e.preventDefault()
641
+ {#if added_via?.source === 'instance_group'}
642
+ <div class="flex items-center gap-1">
643
+ <span class="rounded-md text-xs px-2 py-1 bg-surface shadow-md font-bold">
644
+ {is_admin ? 'Admin' : operator ? 'Operator' : 'Developer'}
645
+ </span>
646
+ <Tooltip>Role is managed through instance group configuration above.</Tooltip>
647
+ </div>
648
+ {:else}
649
+ <ToggleButtonGroup
650
+ selected={is_admin ? 'admin' : operator ? 'operator' : 'developer'}
651
+ on:selected={async (e) => {
652
+ if (is_admin && email == $userStore?.email && e.detail != 'admin') {
653
+ sendUserToast(
654
+ 'Admins cannot be demoted by themselves, ask another admin to demote you',
655
+ true
656
+ )
657
+ e.preventDefault()
658
+ listUsers()
659
+ return
660
+ }
661
+ const body =
662
+ e.detail == 'admin'
663
+ ? { is_admin: true, operator: false }
664
+ : e.detail == 'operator'
665
+ ? { is_admin: false, operator: true }
666
+ : { is_admin: false, operator: false }
667
+ await UserService.updateUser({
668
+ workspace: $workspaceStore ?? '',
669
+ username,
670
+ requestBody: body
671
+ })
337
672
  listUsers()
338
- return
339
- }
340
- const body =
341
- e.detail == 'admin'
342
- ? { is_admin: true, operator: false }
343
- : e.detail == 'operator'
344
- ? { is_admin: false, operator: true }
345
- : { is_admin: false, operator: false }
346
- await UserService.updateUser({
347
- workspace: $workspaceStore ?? '',
348
- username,
349
- requestBody: body
350
- })
351
- listUsers()
352
- }}
353
- >
354
- {#snippet children({ item })}
355
- <ToggleButton
356
- value="operator"
357
- label="Operator"
358
- tooltip="An operator can only execute and view scripts/flows/apps from your workspace, and only those that he has visibility on."
359
- {item}
360
- />
673
+ }}
674
+ >
675
+ {#snippet children({ item })}
676
+ <ToggleButton
677
+ value="operator"
678
+ label="Operator"
679
+ tooltip="An operator can only execute and view scripts/flows/apps from your workspace, and only those that he has visibility on."
680
+ {item}
681
+ />
361
682
 
362
- <ToggleButton
363
- value="developer"
364
- label="Developer"
365
- tooltip="A Developer can execute and view scripts/flows/apps, but they can also create new ones and edit those they are allowed to by their path (either u/ or Writer or Admin of their folder found at /f)."
366
- {item}
367
- />
683
+ <ToggleButton
684
+ value="developer"
685
+ label="Developer"
686
+ tooltip="A Developer can execute and view scripts/flows/apps, but they can also create new ones and edit those they are allowed to by their path (either u/ or Writer or Admin of their folder found at /f)."
687
+ {item}
688
+ />
368
689
 
369
- <ToggleButton
370
- value="admin"
371
- label="Admin"
372
- tooltip="An admin has full control over a specific Windmill workspace, including the ability to manage users, edit entities, and control permissions within the workspace."
373
- {item}
374
- />
375
- {/snippet}
376
- </ToggleButtonGroup>
690
+ <ToggleButton
691
+ value="admin"
692
+ label="Admin"
693
+ tooltip="An admin has full control over a specific Windmill workspace, including the ability to manage users, edit entities, and control permissions within the workspace."
694
+ {item}
695
+ />
696
+ {/snippet}
697
+ </ToggleButtonGroup>
698
+ {/if}
377
699
  </div>
378
700
  </Cell>
379
701
  <Cell>
@@ -397,25 +719,41 @@ $effect(() => {
397
719
  {disabled ? 'Enable' : 'Disable'}
398
720
  </Button>
399
721
 
400
- <Button
401
- color="light"
402
- variant="contained"
403
- btnClasses="text-red-500"
404
- size="xs"
405
- spacingSize="xs2"
406
- on:click={() => {
407
- deleteConfirmedCallback = async () => {
408
- await UserService.deleteUser({
409
- workspace: $workspaceStore ?? '',
410
- username
411
- })
412
- sendUserToast('User removed')
413
- listUsers()
414
- }
415
- }}
416
- >
417
- Remove
418
- </Button>
722
+ {#if added_via?.source === 'instance_group'}
723
+ <div class="flex items-center gap-1">
724
+ <Button
725
+ color="light"
726
+ variant="contained"
727
+ btnClasses="text-gray-400"
728
+ size="xs"
729
+ spacingSize="xs2"
730
+ disabled={true}
731
+ >
732
+ Remove
733
+ </Button>
734
+ <Tooltip>Cannot remove users synced from instance groups. Either disable the user or remove them from the SCIM group.</Tooltip>
735
+ </div>
736
+ {:else}
737
+ <Button
738
+ color="light"
739
+ variant="contained"
740
+ btnClasses="text-red-500"
741
+ size="xs"
742
+ spacingSize="xs2"
743
+ on:click={() => {
744
+ deleteConfirmedCallback = async () => {
745
+ await UserService.deleteUser({
746
+ workspace: $workspaceStore ?? '',
747
+ username
748
+ })
749
+ sendUserToast('User removed')
750
+ listUsers()
751
+ }
752
+ }}
753
+ >
754
+ Remove
755
+ </Button>
756
+ {/if}
419
757
  </div>
420
758
  </Cell>
421
759
  </tr>
@@ -563,3 +901,24 @@ $effect(() => {
563
901
  <span>Are you sure you want to remove ?</span>
564
902
  </div>
565
903
  </ConfirmationModal>
904
+
905
+ <div class="[&>div]:!z-[5002]">
906
+ <ConfirmationModal
907
+ open={Boolean(removeInstanceGroupConfirmedCallback)}
908
+ title="Remove instance group"
909
+ confirmationText="Remove"
910
+ on:canceled={() => {
911
+ removeInstanceGroupConfirmedCallback = undefined
912
+ }}
913
+ on:confirmed={() => {
914
+ if (removeInstanceGroupConfirmedCallback) {
915
+ removeInstanceGroupConfirmedCallback()
916
+ }
917
+ removeInstanceGroupConfirmedCallback = undefined
918
+ }}
919
+ >
920
+ <div class="flex flex-col w-full space-y-4">
921
+ <span>Are you sure you want to remove this instance group from auto-add? This will not remove users already added from this group.</span>
922
+ </div>
923
+ </ConfirmationModal>
924
+ </div>
@@ -2,12 +2,13 @@
2
2
  import Popover from '../Popover.svelte';
3
3
  import { createEventDispatcher } from 'svelte';
4
4
  import SideBarNotification from './SideBarNotification.svelte';
5
- import { goto } from '$app/navigation';
6
5
  import { conditionalMelt } from '../../utils';
7
6
  import { triggerableByAI } from '../../actions/triggerableByAI.svelte';
8
7
  let { aiId = undefined, aiDescription = undefined, label = undefined, icon = undefined, iconClasses = null, iconProps = null, isCollapsed, disabled = false, lightMode = false, stopPropagationOnClick = false, shortcut = '', notificationsCount = 0, color = null, trigger = undefined, href = undefined, class: classNames = undefined } = $props();
9
8
  let buttonRef = $state(undefined);
10
9
  let dispatch = createEventDispatcher();
10
+ // Dynamic component based on whether href is provided
11
+ const Element = href ? 'a' : 'button';
11
12
  </script>
12
13
 
13
14
  {#if !disabled}
@@ -18,7 +19,8 @@ let dispatch = createEventDispatcher();
18
19
  disablePopup={!isCollapsed}
19
20
  placement="right"
20
21
  >
21
- <button
22
+ <svelte:element
23
+ this={Element}
22
24
  bind:this={buttonRef}
23
25
  use:triggerableByAI={{
24
26
  id: aiId,
@@ -29,13 +31,13 @@ let dispatch = createEventDispatcher();
29
31
  }
30
32
  }
31
33
  }}
32
- onclick={(e) => {
33
- if (stopPropagationOnClick) e.preventDefault()
34
- if (href) {
35
- goto(href)
36
- }
37
- dispatch('click')
38
- }}
34
+ onclick={href
35
+ ? undefined
36
+ : (e) => {
37
+ if (stopPropagationOnClick) e.preventDefault()
38
+ dispatch('click')
39
+ }}
40
+ {href}
39
41
  class={twMerge(
40
42
  'group flex items-center px-2 py-2 font-light rounded-md h-8 gap-3 w-full',
41
43
  lightMode
@@ -91,7 +93,7 @@ let dispatch = createEventDispatcher();
91
93
  <SideBarNotification notificationCount={notificationsCount} small={false} />
92
94
  </div>
93
95
  {/if}
94
- </button>
96
+ </svelte:element>
95
97
 
96
98
  {#snippet text()}
97
99
  {#if label}
@@ -1,4 +1,9 @@
1
1
  const changelogs = [
2
+ {
3
+ label: 'Dynamic select for flows',
4
+ href: 'https://www.windmill.dev/changelog/dynamic-select-flows',
5
+ date: '2025-08-08'
6
+ },
2
7
  {
3
8
  label: 'MQTT triggers',
4
9
  href: 'https://www.windmill.dev/changelog/mqtt-triggers',