windmill-components 1.532.0 → 1.542.4

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 (371) hide show
  1. package/package/components/AIProviderPicker.svelte +181 -0
  2. package/package/components/AIProviderPicker.svelte.d.ts +15 -0
  3. package/package/components/ArgInfo.svelte +2 -2
  4. package/package/components/ArgInput.svelte +60 -27
  5. package/package/components/ArgInput.svelte.d.ts +3 -3
  6. package/package/components/AssignableTagsInner.svelte +89 -3
  7. package/package/components/Auth0Setting.svelte +8 -3
  8. package/package/components/ConcurrentJobsChart.svelte +36 -48
  9. package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
  10. package/package/components/CustomPopover.svelte.d.ts +1 -1
  11. package/package/components/Dev.svelte +5 -4
  12. package/package/components/DiffDrawer.svelte +2 -2
  13. package/package/components/DiffEditor.svelte +34 -37
  14. package/package/components/DiffEditor.svelte.d.ts +23 -39
  15. package/package/components/DropdownSelect.svelte +26 -0
  16. package/package/components/DropdownSelect.svelte.d.ts +11 -0
  17. package/package/components/DropdownV2Inner.svelte +1 -1
  18. package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
  19. package/package/components/DynamicInput.svelte.d.ts +11 -0
  20. package/package/components/EditableSchemaForm.svelte +155 -140
  21. package/package/components/EditableSchemaForm.svelte.d.ts +6 -7
  22. package/package/components/Editor.svelte +101 -87
  23. package/package/components/Editor.svelte.d.ts +7 -1
  24. package/package/components/EditorBar.svelte +2 -5
  25. package/package/components/FlowBuilder.svelte +10 -7
  26. package/package/components/FlowLogRow.svelte +64 -0
  27. package/package/components/FlowLogRow.svelte.d.ts +15 -0
  28. package/package/components/FlowLogViewer.svelte +406 -373
  29. package/package/components/FlowLogViewer.svelte.d.ts +5 -1
  30. package/package/components/FlowLogViewerWrapper.svelte +44 -1
  31. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  32. package/package/components/FlowPreviewContent.svelte +3 -3
  33. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  34. package/package/components/FlowStatusViewer.svelte +28 -0
  35. package/package/components/FlowStatusViewerInner.svelte +106 -23
  36. package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
  37. package/package/components/FolderPicker.svelte +1 -1
  38. package/package/components/InputTransformForm.svelte +20 -10
  39. package/package/components/JobArgs.svelte +1 -1
  40. package/package/components/JobLoader.svelte.d.ts +1 -1
  41. package/package/components/JobStatus.svelte +2 -0
  42. package/package/components/LogSnippetViewer.svelte +3 -3
  43. package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
  44. package/package/components/LogViewer.svelte +87 -71
  45. package/package/components/LogViewer.svelte.d.ts +1 -0
  46. package/package/components/ModulePreview.svelte +2 -1
  47. package/package/components/ModulePreview.svelte.d.ts +1 -0
  48. package/package/components/ModulePreviewForm.svelte +72 -65
  49. package/package/components/ModulePreviewResultViewer.svelte +13 -18
  50. package/package/components/ModuleTest.svelte +6 -5
  51. package/package/components/ModuleTest.svelte.d.ts +1 -0
  52. package/package/components/OktaSetting.svelte +8 -3
  53. package/package/components/Path.svelte +7 -1
  54. package/package/components/Path.svelte.d.ts +1 -1
  55. package/package/components/Portal.svelte +11 -7
  56. package/package/components/Portal.svelte.d.ts +19 -39
  57. package/package/components/PrefixedInput.svelte +120 -0
  58. package/package/components/PrefixedInput.svelte.d.ts +8 -0
  59. package/package/components/QueuePosition.svelte +81 -0
  60. package/package/components/QueuePosition.svelte.d.ts +8 -0
  61. package/package/components/ResourceNarrowing.svelte +13 -0
  62. package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
  63. package/package/components/ResourceTypePicker.svelte +49 -74
  64. package/package/components/RunChart.svelte +74 -89
  65. package/package/components/RunChart.svelte.d.ts +10 -22
  66. package/package/components/RunForm.svelte +2 -2
  67. package/package/components/RunForm.svelte.d.ts +1 -1
  68. package/package/components/RunFormAdvancedPopup.svelte +13 -1
  69. package/package/components/S3FilePicker.svelte +1 -1
  70. package/package/components/SchemaForm.svelte +1 -2
  71. package/package/components/SchemaForm.svelte.d.ts +2 -2
  72. package/package/components/ScriptBuilder.svelte +3 -2
  73. package/package/components/ScriptEditor.svelte +25 -10
  74. package/package/components/ScriptEditor.svelte.d.ts +2 -1
  75. package/package/components/ServiceLogsInner.svelte +1 -1
  76. package/package/components/ShareModal.svelte.d.ts +1 -1
  77. package/package/components/SimpleEditor.svelte +4 -68
  78. package/package/components/StringTypeNarrowing.svelte +5 -10
  79. package/package/components/TemplateEditor.svelte +2 -16
  80. package/package/components/TimeAgo.svelte +1 -1
  81. package/package/components/TimeAgo.svelte.d.ts +1 -0
  82. package/package/components/Toggle.svelte +2 -1
  83. package/package/components/Toggle.svelte.d.ts +2 -1
  84. package/package/components/WorkerRepl.svelte +1 -1
  85. package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
  86. package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
  87. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
  88. package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
  89. package/package/components/apps/components/display/table/utils.js +36 -5
  90. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
  91. package/package/components/apps/components/layout/AppModal.svelte +2 -2
  92. package/package/components/apps/editor/AppEditor.svelte +4 -3
  93. package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
  94. package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
  95. package/package/components/apps/editor/SettingsPanel.svelte +2 -2
  96. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
  97. package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  98. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
  99. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  100. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  101. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
  102. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  103. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +29 -4
  104. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
  105. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
  106. package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
  107. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  108. package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
  109. package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
  110. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
  111. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
  112. package/package/components/assets/JobAssetsViewer.svelte +28 -24
  113. package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
  114. package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
  115. package/package/components/common/OnChange.svelte.d.ts +11 -4
  116. package/package/components/common/badge/Badge.svelte +9 -2
  117. package/package/components/common/badge/Badge.svelte.d.ts +2 -1
  118. package/package/components/common/button/model.d.ts +1 -1
  119. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
  120. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
  121. package/package/components/common/drawer/Disposable.svelte +45 -26
  122. package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
  123. package/package/components/common/drawer/Drawer.svelte +17 -14
  124. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  125. package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
  126. package/package/components/common/modal/Modal.svelte.d.ts +1 -1
  127. package/package/components/common/tabs/TabContent.svelte +2 -7
  128. package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
  129. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
  130. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  131. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
  132. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  133. package/package/components/copilot/MetadataGen.svelte +14 -3
  134. package/package/components/copilot/chat/AIChatInput.svelte +0 -1
  135. package/package/components/copilot/chat/AIChatManager.svelte.js +26 -104
  136. package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
  137. package/package/components/copilot/chat/AvailableContextList.svelte +192 -66
  138. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -2
  139. package/package/components/copilot/chat/ContextElementBadge.svelte +3 -3
  140. package/package/components/copilot/chat/ContextManager.svelte.js +36 -13
  141. package/package/components/copilot/chat/ContextTextarea.svelte +21 -48
  142. package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
  143. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
  144. package/package/components/copilot/chat/anthropic.d.ts +15 -0
  145. package/package/components/copilot/chat/anthropic.js +208 -0
  146. package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
  147. package/package/components/copilot/chat/api/apiTools.js +10 -7
  148. package/package/components/copilot/chat/api/core.d.ts +1 -1
  149. package/package/components/copilot/chat/api/core.js +7 -2
  150. package/package/components/copilot/chat/ask/core.d.ts +1 -1
  151. package/package/components/copilot/chat/ask/core.js +7 -2
  152. package/package/components/copilot/chat/context.d.ts +7 -2
  153. package/package/components/copilot/chat/flow/FlowAIChat.svelte +110 -8
  154. package/package/components/copilot/chat/flow/core.d.ts +12 -1
  155. package/package/components/copilot/chat/flow/core.js +133 -5
  156. package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
  157. package/package/components/copilot/chat/flow/uiIntents.js +5 -0
  158. package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
  159. package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
  160. package/package/components/copilot/chat/monaco-adapter.d.ts +23 -4
  161. package/package/components/copilot/chat/monaco-adapter.js +55 -16
  162. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  163. package/package/components/copilot/chat/navigator/core.js +7 -2
  164. package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
  165. package/package/components/copilot/chat/script/core.d.ts +5 -4
  166. package/package/components/copilot/chat/script/core.js +134 -21
  167. package/package/components/copilot/chat/shared.d.ts +10 -9
  168. package/package/components/copilot/chat/shared.js +24 -12
  169. package/package/components/copilot/lib.d.ts +29 -8
  170. package/package/components/copilot/lib.js +211 -31
  171. package/package/components/copilot/shared.d.ts +1 -1
  172. package/package/components/copilot/shared.js +16 -10
  173. package/package/components/flows/FlowEditor.svelte +4 -2
  174. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  175. package/package/components/flows/FlowModuleIcon.svelte +8 -8
  176. package/package/components/flows/common/FlowCardHeader.svelte +4 -1
  177. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
  178. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
  179. package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
  180. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
  181. package/package/components/flows/content/FlowInput.svelte +36 -39
  182. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
  183. package/package/components/flows/content/FlowLoop.svelte +7 -0
  184. package/package/components/flows/content/FlowModuleComponent.svelte +42 -46
  185. package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
  186. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  187. package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
  188. package/package/components/flows/content/FlowModuleSuspend.svelte +15 -18
  189. package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
  190. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
  191. package/package/components/flows/content/FlowRetries.svelte +108 -3
  192. package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
  193. package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
  194. package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
  195. package/package/components/flows/dfs.d.ts +1 -1
  196. package/package/components/flows/dfs.js +6 -6
  197. package/package/components/flows/flowInfers.js +15 -42
  198. package/package/components/flows/flowStateUtils.svelte.js +1 -2
  199. package/package/components/flows/flowStore.d.ts +45 -1
  200. package/package/components/flows/flowStore.js +1 -1
  201. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  202. package/package/components/flows/map/FlowModuleSchemaItem.svelte +73 -80
  203. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
  204. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
  205. package/package/components/flows/map/InsertModuleButton.svelte +1 -0
  206. package/package/components/flows/map/InsertModuleInner.svelte +12 -15
  207. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
  208. package/package/components/flows/map/MapItem.svelte +8 -4
  209. package/package/components/flows/map/VirtualItem.svelte +1 -1
  210. package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
  211. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
  212. package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
  213. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
  214. package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
  215. package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
  216. package/package/components/flows/types.d.ts +16 -3
  217. package/package/components/flows/utils.js +3 -0
  218. package/package/components/git_sync/DetectionFlow.svelte +15 -17
  219. package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
  220. package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
  221. package/package/components/graph/FlowGraphV2.svelte +1 -1
  222. package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
  223. package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
  224. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
  225. package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
  226. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
  227. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
  228. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
  229. package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
  230. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
  231. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
  232. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
  233. package/package/components/home/ItemsList.svelte +17 -13
  234. package/package/components/home/TreeView.svelte +21 -27
  235. package/package/components/home/TreeView.svelte.d.ts +2 -29
  236. package/package/components/home/TreeViewRoot.svelte +11 -23
  237. package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
  238. package/package/components/icons/GitIcon.svelte +10 -2
  239. package/package/components/icons/GitIcon.svelte.d.ts +1 -0
  240. package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
  241. package/package/components/meltComponents/Popover.svelte +23 -3
  242. package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
  243. package/package/components/monacoLanguagesOptions.d.ts +3 -0
  244. package/package/components/monacoLanguagesOptions.js +109 -0
  245. package/package/components/propertyPicker/ObjectViewer.svelte +18 -5
  246. package/package/components/propertyPicker/PropPicker.svelte +1 -1
  247. package/package/components/propertyPicker/utils.js +14 -7
  248. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
  249. package/package/components/runs/JobRunsPreview.svelte +212 -177
  250. package/package/components/runs/JobsLoader.svelte +2 -2
  251. package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
  252. package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
  253. package/package/components/runs/RunBadges.svelte +100 -0
  254. package/package/components/runs/RunBadges.svelte.d.ts +12 -0
  255. package/package/components/runs/RunLabels.svelte +86 -0
  256. package/package/components/runs/RunLabels.svelte.d.ts +10 -0
  257. package/package/components/runs/RunOption.svelte +20 -0
  258. package/package/components/runs/RunOption.svelte.d.ts +10 -0
  259. package/package/components/runs/RunRow.svelte +239 -151
  260. package/package/components/runs/RunRow.svelte.d.ts +12 -9
  261. package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
  262. package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
  263. package/package/components/runs/RunsFilter.svelte +369 -243
  264. package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
  265. package/package/components/runs/RunsQueue.svelte +96 -25
  266. package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
  267. package/package/components/runs/RunsTable.svelte +62 -71
  268. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  269. package/package/components/runs/runs-grid.css +95 -0
  270. package/package/components/schema/AddPropertyV2.svelte +2 -7
  271. package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
  272. package/package/components/schema/EditableSchemaDrawer.svelte +121 -127
  273. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
  274. package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
  275. package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
  276. package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
  277. package/package/components/schema/FlowPropertyEditor.svelte +195 -236
  278. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  279. package/package/components/schema/PropertyEditor.svelte +33 -35
  280. package/package/components/schema/SchemaFormDND.svelte +11 -10
  281. package/package/components/schema/SchemaFormDND.svelte.d.ts +4 -3
  282. package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
  283. package/package/components/search/GlobalSearchModal.svelte +8 -1
  284. package/package/components/select/DraggableTags.svelte.d.ts +17 -7
  285. package/package/components/select/MultiSelect.svelte.d.ts +21 -11
  286. package/package/components/select/Select.svelte +2 -1
  287. package/package/components/select/Select.svelte.d.ts +25 -13
  288. package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
  289. package/package/components/settings/PremiumInfo.svelte +7 -2
  290. package/package/components/settings/TokenDisplay.svelte +1 -1
  291. package/package/components/sidebar/OperatorMenu.svelte +5 -0
  292. package/package/components/sidebar/SidebarContent.svelte +48 -2
  293. package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
  294. package/package/components/toast.js +6 -3
  295. package/package/components/triggers/AddTriggersButton.svelte +7 -6
  296. package/package/components/triggers/CaptureWrapper.svelte +21 -16
  297. package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
  298. package/package/components/triggers/TriggerLabel.svelte +8 -0
  299. package/package/components/triggers/TriggerTokens.svelte +1 -1
  300. package/package/components/triggers/TriggersEditor.svelte +9 -5
  301. package/package/components/triggers/TriggersTable.svelte +2 -2
  302. package/package/components/triggers/TriggersWrapper.svelte +17 -5
  303. package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
  304. package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
  305. package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
  306. package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
  307. package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
  308. package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
  309. package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
  310. package/package/components/triggers/email/EmailCapture.svelte +39 -0
  311. package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
  312. package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
  313. package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
  314. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
  315. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
  316. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
  317. package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
  318. package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
  319. package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
  320. package/package/components/triggers/email/utils.d.ts +4 -0
  321. package/package/components/triggers/email/utils.js +52 -0
  322. package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
  323. package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
  324. package/package/components/triggers/http/utils.js +1 -1
  325. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
  326. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
  327. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
  328. package/package/components/triggers/triggers.svelte.d.ts +1 -0
  329. package/package/components/triggers/triggers.svelte.js +24 -2
  330. package/package/components/triggers/utils.js +19 -5
  331. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
  332. package/package/components/triggers.d.ts +1 -1
  333. package/package/components/triggers.js +2 -0
  334. package/package/components/wizards/AgGridWizard.svelte +85 -80
  335. package/package/components/workspaceSettings/AISettings.svelte +74 -22
  336. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  337. package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
  338. package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
  339. package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
  340. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
  341. package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
  342. package/package/gen/core/OpenAPI.js +1 -1
  343. package/package/gen/schemas.gen.d.ts +142 -3
  344. package/package/gen/schemas.gen.js +144 -3
  345. package/package/gen/services.gen.d.ts +129 -1
  346. package/package/gen/services.gen.js +267 -1
  347. package/package/gen/types.gen.d.ts +434 -8
  348. package/package/hubPaths.json +6 -2
  349. package/package/infer.js +1 -1
  350. package/package/keyboardChain.d.ts +5 -0
  351. package/package/keyboardChain.js +40 -0
  352. package/package/script_helpers.d.ts +2 -2
  353. package/package/script_helpers.js +2 -0
  354. package/package/services/JobManager.js +2 -2
  355. package/package/stores.d.ts +4 -1
  356. package/package/stores.js +16 -6
  357. package/package/utils/workspaceHierarchy.d.ts +27 -0
  358. package/package/utils/workspaceHierarchy.js +101 -0
  359. package/package/utils.d.ts +6 -3
  360. package/package/utils.js +30 -15
  361. package/package/workspace_settings.js +2 -3
  362. package/package.json +10 -12
  363. package/package/components/DynSelect.svelte.d.ts +0 -11
  364. package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
  365. package/package/components/ObjectTypeNarrowing.svelte +0 -18
  366. package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
  367. package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
  368. package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
  369. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
  370. package/package/components/details/EmailTriggerPanel.svelte +0 -76
  371. package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
@@ -1,6 +1,7 @@
1
1
  import FlowLogViewer from './FlowLogViewer.svelte';
2
2
  import type { FlowModule, FlowStatusModule, Job } from '../gen';
3
3
  import type { GraphModuleState } from './graph/model';
4
+ import type { NavigationChain } from '../keyboardChain';
4
5
  type RootJobData = Partial<Job>;
5
6
  interface Props {
6
7
  modules: FlowModule[];
@@ -28,7 +29,10 @@ interface Props {
28
29
  getSelectedIteration: (stepId: string) => number;
29
30
  flowSummary?: string;
30
31
  mode?: 'flow' | 'aiagent';
32
+ currentId?: string | null;
33
+ navigationChain?: NavigationChain;
34
+ select: (id: string) => void;
31
35
  }
32
- declare const FlowLogViewer: import("svelte").Component<Props, {}, "">;
36
+ declare const FlowLogViewer: import("svelte").Component<Props, {}, "navigationChain">;
33
37
  type FlowLogViewer = ReturnType<typeof FlowLogViewer>;
34
38
  export default FlowLogViewer;
@@ -7,6 +7,9 @@ let { job, localModuleStates, workspaceId, render, onSelectedIteration, mode = '
7
7
  let expandedRows = $state({});
8
8
  let allExpanded = $state(false);
9
9
  let showResultsInputs = $state(true);
10
+ // Keyboard navigation state - incremental like expandedRows
11
+ let currentId = $state('flow-root');
12
+ let navigationChain = $state({});
10
13
  let moduleTracker = new ChangeTracker($state.snapshot(job.raw_flow?.modules ?? []));
11
14
  $effect(() => {
12
15
  readFieldsRecursively(job.raw_flow?.modules ?? []);
@@ -29,9 +32,46 @@ function toggleExpandAll() {
29
32
  allExpanded = !allExpanded;
30
33
  expandedRows = {};
31
34
  }
35
+ // Keyboard event handler using navigation links
36
+ function handleKeydown(event) {
37
+ if (!currentId && job.raw_flow?.modules) {
38
+ currentId = 'flow-root';
39
+ }
40
+ else if (!currentId) {
41
+ return;
42
+ }
43
+ switch (event.key) {
44
+ case 'ArrowDown':
45
+ event.preventDefault();
46
+ const downId = navigationChain[currentId]?.downId;
47
+ if (downId) {
48
+ currentId = downId;
49
+ }
50
+ break;
51
+ case 'ArrowUp':
52
+ event.preventDefault();
53
+ const upId = navigationChain[currentId]?.upId;
54
+ if (upId) {
55
+ currentId = upId;
56
+ }
57
+ break;
58
+ case 'Enter':
59
+ event.preventDefault();
60
+ toggleExpanded(currentId);
61
+ break;
62
+ }
63
+ }
64
+ function select(id) {
65
+ currentId = id;
66
+ }
32
67
  </script>
33
68
 
34
- <div class="w-full rounded-md overflow-hidden border">
69
+ <div
70
+ class="w-full rounded-md overflow-hidden border focus:border-gray-400 dark:focus:border-gray-400"
71
+ role="tree"
72
+ tabindex="0"
73
+ onkeydown={handleKeydown}
74
+ >
35
75
  <FlowLogViewer
36
76
  {modules}
37
77
  {localModuleStates}
@@ -48,5 +88,8 @@ function toggleExpandAll() {
48
88
  flowId="root"
49
89
  flowStatus={undefined}
50
90
  {mode}
91
+ {currentId}
92
+ bind:navigationChain
93
+ {select}
51
94
  />
52
95
  </div>
@@ -30,6 +30,6 @@ declare const FlowLoopIterationPreview: $$__sveltets_2_IsomorphicComponent<Props
30
30
  whileLoopSchema: Schema;
31
31
  test: () => void;
32
32
  runPreview: (args: Record<string, any>, restartedFrom: RestartedFrom | undefined) => Promise<void>;
33
- }, "job" | "jobId" | "previewArgs">;
33
+ }, "job" | "previewArgs" | "jobId">;
34
34
  type FlowLoopIterationPreview = InstanceType<typeof FlowLoopIterationPreview>;
35
35
  export default FlowLoopIterationPreview;
@@ -67,7 +67,7 @@ export async function runPreview(args, restartedFrom) {
67
67
  jobId = await runFlowPreview(args, newFlow, $pathStore, restartedFrom);
68
68
  isRunning = true;
69
69
  if (inputSelected) {
70
- savedArgs = previewArgs.val;
70
+ savedArgs = $state.snapshot(previewArgs.val);
71
71
  inputSelected = undefined;
72
72
  }
73
73
  onRunPreview?.();
@@ -92,7 +92,7 @@ function onKeyDown(event) {
92
92
  if (preventEscape) {
93
93
  selectInput(undefined);
94
94
  event.preventDefault();
95
- event.stopPropagation;
95
+ event.stopPropagation();
96
96
  }
97
97
  break;
98
98
  }
@@ -423,7 +423,7 @@ export function flowHasChanged() {
423
423
  schema={flowStore.val.schema}
424
424
  bind:args={previewArgs.val}
425
425
  on:change={() => {
426
- savedArgs = previewArgs.val
426
+ savedArgs = $state.snapshot(previewArgs.val)
427
427
  }}
428
428
  bind:isValid
429
429
  helperScript={flowStore.val.schema?.['x-windmill-dyn-select-code'] &&
@@ -57,6 +57,6 @@ declare const FlowPreviewContent: $$__sveltets_2_IsomorphicComponent<Props, {
57
57
  getIsOwner: () => boolean;
58
58
  getJob: () => Job | undefined;
59
59
  flowHasChanged: () => boolean;
60
- }, "initial" | "preventEscape" | "job" | "jobId" | "scrollTop" | "localModuleStates" | "rightColumnSelect" | "localDurationStatuses" | "selectedJobStep" | "previewMode" | "selectedJobStepIsTopLevel" | "selectedJobStepType" | "branchOrIterationN">;
60
+ }, "initial" | "preventEscape" | "job" | "scrollTop" | "jobId" | "localModuleStates" | "rightColumnSelect" | "localDurationStatuses" | "selectedJobStep" | "previewMode" | "selectedJobStepIsTopLevel" | "selectedJobStepType" | "branchOrIterationN">;
61
61
  type FlowPreviewContent = InstanceType<typeof FlowPreviewContent>;
62
62
  export default FlowPreviewContent;
@@ -43,6 +43,8 @@ let refreshGlobal = async (moduleId, clear, root) => {
43
43
  let updateGlobalRefresh = (moduleId, updateFn) => {
44
44
  globalRefreshes[moduleId] = [...(globalRefreshes[moduleId] ?? []), updateFn];
45
45
  };
46
+ let storedToolCallJobs = $state({});
47
+ let toolCallIndicesToLoad = $state([]);
46
48
  </script>
47
49
 
48
50
  <FlowStatusViewerInner
@@ -74,4 +76,30 @@ let updateGlobalRefresh = (moduleId, updateFn) => {
74
76
  isNodeSelected={true}
75
77
  {refreshGlobal}
76
78
  {updateGlobalRefresh}
79
+ toolCallStore={{
80
+ getStoredToolCallJob: (storeKey: string) => storedToolCallJobs[storeKey],
81
+ setStoredToolCallJob: (storeKey: string, job: Job) => {
82
+ storedToolCallJobs[storeKey] = job
83
+ },
84
+ getLocalToolCallJobs: (prefix: string) => {
85
+ // we return a map from tool call index to job
86
+ // to do so, we filter the storedToolCallJobs object by the prefix and we make sure what's left in the key is a tool call index: 2 part of format agentModuleId-toolCallIndex
87
+ // and not a further nested tool call index
88
+ return Object.fromEntries(
89
+ Object.entries(storedToolCallJobs)
90
+ .filter(
91
+ ([key]) => key.startsWith(prefix) && key.replace(prefix, '').split('-').length === 2
92
+ )
93
+ .map(([key, job]) => [Number(key.replace(prefix, '').split('-').pop()), job])
94
+ )
95
+ },
96
+ isToolCallToBeLoaded: (storeKey: string) => {
97
+ return toolCallIndicesToLoad.includes(storeKey)
98
+ },
99
+ addToolCallToLoad: (storeKey: string) => {
100
+ if (!toolCallIndicesToLoad.includes(storeKey)) {
101
+ toolCallIndicesToLoad.push(storeKey)
102
+ }
103
+ }
104
+ }}
77
105
  />
@@ -16,6 +16,7 @@ import { ChevronDown, Hourglass } from 'lucide-svelte';
16
16
  import { deepEqual } from 'fast-equals';
17
17
  import FlowTimeline from './FlowTimeline.svelte';
18
18
  import { dfs } from './flows/dfs';
19
+ import { dfs as dfsPreviousResults } from './flows/previousResults';
19
20
  import Alert from './common/alert/Alert.svelte';
20
21
  import FlowGraphViewerStep from './FlowGraphViewerStep.svelte';
21
22
  import FlowGraphV2 from './graph/FlowGraphV2.svelte';
@@ -27,8 +28,9 @@ import { createState } from '../svelte5Utils.svelte';
27
28
  import JobLoader from './JobLoader.svelte';
28
29
  import { writable } from 'svelte/store';
29
30
  import { AI_TOOL_CALL_PREFIX, AI_TOOL_MESSAGE_PREFIX, getToolCallId } from './graph/renderers/nodes/AIToolNode.svelte';
31
+ import JobAssetsViewer from './assets/JobAssetsViewer.svelte';
30
32
  let { flowStateStore, retryStatus, suspendStatus, hideDownloadInGraph, hideTimeline, hideNodeDefinition, hideDownloadLogs, hideJobId } = getContext('FlowStatusViewer');
31
- let { jobId, initialJob = undefined, workspaceId = undefined, flowJobIds = undefined, innerModule = undefined, render = true, isOwner = false, selectedNode = $bindable(undefined), globalModuleStates, globalDurationStatuses = [], globalIterationBounds, updateRecursiveRefreshFn = undefined, isSelectedBranch = true, isSubflow = false, reducedPolling = false, wideResults = false, hideFlowResult = false, workspace = $workspaceStore, prefix = undefined, topModuleStates = undefined, refreshGlobal, updateGlobalRefresh, subflowParentsGlobalModuleStates = [], subflowParentsDurationStatuses = [], isForloopSelected = false, job = $bindable(undefined), rightColumnSelect = $bindable('timeline'), localModuleStates = $bindable({}), localDurationStatuses = $bindable({}), customUi, onResultStreamUpdate = undefined, graphTabOpen, isNodeSelected, loadExtraLogs = undefined, onStart = undefined, onJobsLoaded = undefined, onDone = undefined } = $props();
33
+ let { jobId, initialJob = undefined, workspaceId = undefined, flowJobIds = undefined, innerModule = undefined, render = true, isOwner = false, selectedNode = $bindable(undefined), globalModuleStates, globalDurationStatuses = [], globalIterationBounds, updateRecursiveRefreshFn = undefined, isSelectedBranch = true, isSubflow = false, reducedPolling = false, wideResults = false, hideFlowResult = false, workspace = $workspaceStore, prefix = undefined, topModuleStates = undefined, refreshGlobal, updateGlobalRefresh, subflowParentsGlobalModuleStates = [], subflowParentsDurationStatuses = [], isForloopSelected = false, job = $bindable(undefined), rightColumnSelect = $bindable('timeline'), localModuleStates = $bindable({}), localDurationStatuses = $bindable({}), customUi, onResultStreamUpdate = undefined, graphTabOpen, isNodeSelected, loadExtraLogs = undefined, onStart = undefined, onJobsLoaded = undefined, onDone = undefined, toolCallStore } = $props();
32
34
  let getTopModuleStates = $derived(topModuleStates ?? localModuleStates);
33
35
  let resultStreams = $state({});
34
36
  if (onResultStreamUpdate == undefined) {
@@ -660,9 +662,7 @@ function loadPreviousIters(innerKey, lenToAdd) {
660
662
  }
661
663
  let stepDetail = $state(undefined);
662
664
  let storedListJobs = $state({});
663
- let storedToolCallJobs = $state({});
664
665
  let selectedToolCall = $state(undefined);
665
- let toolCallIndicesToLoad = $state([]);
666
666
  let wrapperHeight = $state(0);
667
667
  function removeFailureNode(id, parent_module) {
668
668
  if (id?.startsWith('failure-') && parent_module) {
@@ -689,7 +689,7 @@ function allModulesForTimeline(modules, expandedSubflows) {
689
689
  }
690
690
  let nprefix = buildPrefix(prefix, oid);
691
691
  return fms
692
- ? rec(dfs(fms, (x) => x.id.startsWith('subflow:') ? x.id : buildSubflowKey(x.id, nprefix)), nprefix)
692
+ ? rec(dfs(fms, (x) => (x.id.startsWith('subflow:') ? x.id : buildSubflowKey(x.id, nprefix)), { skipToolNodes: true }), nprefix)
693
693
  : [];
694
694
  }));
695
695
  }
@@ -734,6 +734,11 @@ async function onSelectedIteration(detail) {
734
734
  selectedForLoopSetManually: false
735
735
  });
736
736
  }
737
+ if (selectedNode?.startsWith(AI_TOOL_CALL_PREFIX)) {
738
+ const [, agentModuleId, toolCallIndex, _] = selectedNode.split('-');
739
+ const parentLoopsPrefix = getParentLoopsPrefix(agentModuleId);
740
+ toolCallStore?.addToolCallToLoad(parentLoopsPrefix + agentModuleId + '-' + toolCallIndex);
741
+ }
737
742
  }
738
743
  $effect(() => {
739
744
  flowJobIds?.moduleId && untrack(() => onFlowModuleId());
@@ -761,6 +766,35 @@ $effect(() => {
761
766
  let selected = $derived(isListJob ? 'sequence' : 'graph');
762
767
  let animateLogsTab = $state(false);
763
768
  let noLogs = $derived(graphTabOpen && !isNodeSelected);
769
+ /**
770
+ * Returns a string like "forloopmodid1-{iter1}-forloopmodid2-{iter2}-forloopmodid3-{iter3}-"
771
+ * that can be used to prefix tool call store keys for nested tool calls.
772
+ */
773
+ function getParentLoopsPrefix(modId) {
774
+ if (job?.raw_flow) {
775
+ const indices = [];
776
+ const parents = dfsPreviousResults(modId, { value: job?.raw_flow, summary: '' }, true);
777
+ for (const parent of parents) {
778
+ if (parent.value.type === 'forloopflow' || parent.value.type === 'whileloopflow') {
779
+ const state = localModuleStates[parent.id];
780
+ if (state?.selectedForloopIndex !== undefined) {
781
+ indices.push(parent.id + '-' + state.selectedForloopIndex.toString());
782
+ }
783
+ }
784
+ }
785
+ indices.reverse();
786
+ return indices.length > 0 ? indices.join('-') + '-' : '';
787
+ }
788
+ return '';
789
+ }
790
+ // Set all tabs content to the same height to prevent layout jumps
791
+ let tabsHeight = $state({
792
+ sequenceHeight: 0,
793
+ logsHeight: 0,
794
+ assetsHeight: 0,
795
+ graphHeight: 0
796
+ });
797
+ let minTabHeight = $derived(Math.max(tabsHeight.sequenceHeight, tabsHeight.logsHeight, tabsHeight.assetsHeight, tabsHeight.graphHeight));
764
798
  </script>
765
799
 
766
800
  <JobLoader workspaceOverride={workspaceId} {noLogs} noCode bind:this={jobLoader} />
@@ -839,12 +873,17 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
839
873
  : ''}><span class="font-semibold">Logs</span></Tab
840
874
  >
841
875
  <Tab value="sequence"><span class="font-semibold">Details</span></Tab>
876
+ <Tab value="assets"><span class="font-semibold">Assets</span></Tab>
842
877
  </Tabs>
843
878
  {:else}
844
879
  <div class="h-[30px]"></div>
845
880
  {/if}
846
881
  {/if}
847
- <div class="{selected != 'sequence' ? 'hidden' : ''} max-w-7xl mx-auto">
882
+ <div
883
+ class="{selected != 'sequence' ? 'hidden' : ''} max-w-7xl mx-auto"
884
+ bind:clientHeight={tabsHeight.sequenceHeight}
885
+ style="min-height: {minTabHeight}px"
886
+ >
848
887
  {#if isListJob}
849
888
  {@const sliceFrom =
850
889
  globalIterationBounds[buildSubflowKey(flowJobIds?.moduleId ?? '', prefix)]
@@ -895,6 +934,10 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
895
934
  {@const forloopIsSelected =
896
935
  forloop_selected == loopJobId ||
897
936
  (innerModule?.type != 'forloopflow' && innerModule?.type != 'whileloopflow')}
937
+ {@const forLoopStoreKeyPrefix =
938
+ innerModule?.type == 'forloopflow' || innerModule?.type == 'whileloopflow'
939
+ ? (flowJobIds?.moduleId ?? '') + '-' + j + '-'
940
+ : ''}
898
941
  <!-- <LogId id={loopJobId} /> -->
899
942
  <div class="border p-6" class:hidden={forloop_selected != loopJobId}>
900
943
  <FlowStatusViewerInner
@@ -929,6 +972,18 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
929
972
  graphTabOpen={selected == 'graph' && graphTabOpen}
930
973
  isNodeSelected={forloop_selected == loopJobId}
931
974
  {globalIterationBounds}
975
+ toolCallStore={{
976
+ getStoredToolCallJob: (storeKey: string) =>
977
+ toolCallStore?.getStoredToolCallJob(forLoopStoreKeyPrefix + storeKey),
978
+ setStoredToolCallJob: (storeKey: string, job: Job) =>
979
+ toolCallStore?.setStoredToolCallJob(forLoopStoreKeyPrefix + storeKey, job),
980
+ getLocalToolCallJobs: (prefix: string) =>
981
+ toolCallStore?.getLocalToolCallJobs(forLoopStoreKeyPrefix + prefix) ?? {},
982
+ addToolCallToLoad: (storeKey: string) =>
983
+ toolCallStore?.addToolCallToLoad(forLoopStoreKeyPrefix + storeKey),
984
+ isToolCallToBeLoaded: (storeKey: string) =>
985
+ toolCallStore?.isToolCallToBeLoaded(forLoopStoreKeyPrefix + storeKey) ?? false
986
+ }}
932
987
  />
933
988
  </div>
934
989
  {/if}
@@ -1088,12 +1143,17 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
1088
1143
  graphTabOpen={selected == 'graph' && graphTabOpen}
1089
1144
  isNodeSelected={localModuleStates?.[selectedNode ?? '']?.job_id == mod.job}
1090
1145
  {globalIterationBounds}
1146
+ {toolCallStore}
1091
1147
  />
1092
- {#if mod.agent_actions && mod.agent_actions.length > 0}
1148
+ {#if mod.agent_actions && mod.agent_actions.length > 0 && mod.id}
1149
+ {@const storeKeyPrefix = getParentLoopsPrefix(mod.id)}
1093
1150
  {#each mod.agent_actions as agentAction, j}
1094
- {#if agentAction.type === 'tool_call' && mod.id}
1151
+ {#if agentAction.type === 'tool_call'}
1095
1152
  {@const toolCallId = getToolCallId(j, mod.id, agentAction.module_id)}
1096
- {@const isSelected = selectedToolCall === j}
1153
+ {@const localToolCallKey = mod.id + '-' + j}
1154
+ {@const storeKey = storeKeyPrefix + localToolCallKey}
1155
+ {@const storedToolCallJob = toolCallStore?.getStoredToolCallJob(storeKey)}
1156
+ {@const isSelected = localToolCallKey === selectedToolCall}
1097
1157
  <Button
1098
1158
  variant={isSelected ? 'contained' : 'border'}
1099
1159
  color={mod.agent_actions_success?.[j] === false
@@ -1103,10 +1163,10 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
1103
1163
  : 'light'}
1104
1164
  btnClasses="w-full flex justify-start"
1105
1165
  on:click={async () => {
1106
- if (selectedToolCall == j) {
1166
+ if (isSelected) {
1107
1167
  selectedToolCall = undefined
1108
1168
  } else {
1109
- selectedToolCall = j
1169
+ selectedToolCall = localToolCallKey
1110
1170
  }
1111
1171
  }}
1112
1172
  endIcon={{
@@ -1118,7 +1178,7 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
1118
1178
  Tool call: {agentAction.function_name}
1119
1179
  </span>
1120
1180
  </Button>
1121
- {#if isSelected || storedToolCallJobs[j] || toolCallIndicesToLoad.includes(j)}
1181
+ {#if isSelected || storedToolCallJob || toolCallStore?.isToolCallToBeLoaded(storeKey)}
1122
1182
  <FlowStatusViewerInner
1123
1183
  topModuleStates={getTopModuleStates}
1124
1184
  {refreshGlobal}
@@ -1136,11 +1196,11 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
1136
1196
  {subflowParentsDurationStatuses}
1137
1197
  {isSelectedBranch}
1138
1198
  jobId={agentAction.job_id}
1139
- job={storedToolCallJobs[j]}
1140
- initialJob={storedToolCallJobs[j]}
1199
+ job={storedToolCallJob}
1200
+ initialJob={storedToolCallJob}
1141
1201
  {reducedPolling}
1142
1202
  onJobsLoaded={({ job, force }) => {
1143
- storedToolCallJobs[j] = job
1203
+ toolCallStore?.setStoredToolCallJob(storeKey, job)
1144
1204
  onJobsLoadedInner({ id: toolCallId } as FlowStatusModule, job, force)
1145
1205
  }}
1146
1206
  loadExtraLogs={(logs) => {
@@ -1172,7 +1232,11 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
1172
1232
  <div class="p-2 text-tertiary text-sm italic">Empty flow</div>
1173
1233
  {/if}
1174
1234
  </div>
1175
- <div class="{selected != 'logs' ? 'hidden' : ''} mx-auto h-[800px]">
1235
+ <div
1236
+ class="{selected != 'logs' ? 'hidden' : ''} mx-auto"
1237
+ bind:clientHeight={tabsHeight.logsHeight}
1238
+ style="min-height: {minTabHeight}px"
1239
+ >
1176
1240
  <FlowLogViewerWrapper
1177
1241
  {job}
1178
1242
  {localModuleStates}
@@ -1181,10 +1245,23 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
1181
1245
  {onSelectedIteration}
1182
1246
  />
1183
1247
  </div>
1248
+ {#if selected == 'assets' && render}
1249
+ <div
1250
+ class="p-2"
1251
+ bind:clientHeight={tabsHeight.assetsHeight}
1252
+ style="min-height: {minTabHeight}px"
1253
+ >
1254
+ <JobAssetsViewer {job} />
1255
+ </div>
1256
+ {/if}
1184
1257
  </div>
1185
1258
  {#if render}
1186
1259
  {#if job.raw_flow && !isListJob}
1187
- <div class="{selected != 'graph' ? 'hidden' : ''} grow mt-4">
1260
+ <div
1261
+ class="{selected != 'graph' ? 'hidden' : ''} grow mt-4"
1262
+ bind:clientHeight={tabsHeight.graphHeight}
1263
+ style="min-height: {minTabHeight}px"
1264
+ >
1188
1265
  <div class="grid grid-cols-3 border h-full" bind:clientHeight={wrapperHeight}>
1189
1266
  <div class="col-span-2 bg-surface-secondary">
1190
1267
  <div class="flex flex-col">
@@ -1231,11 +1308,11 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
1231
1308
  stepDetail = mod
1232
1309
  selectedNode = e
1233
1310
  if (e.startsWith(AI_TOOL_CALL_PREFIX)) {
1234
- const [_prefix, _agentModuleId, j, _toolModuleId] = e.split('-')
1311
+ const [_prefix, agentModuleId, j, _toolModuleId] = e.split('-')
1312
+ const parentLoopsPrefix = getParentLoopsPrefix(agentModuleId)
1235
1313
  const jIdx = Number(j)
1236
- if (!toolCallIndicesToLoad.includes(jIdx)) {
1237
- toolCallIndicesToLoad.push(jIdx)
1238
- }
1314
+ const storeKey = parentLoopsPrefix + agentModuleId + '-' + jIdx
1315
+ toolCallStore?.addToolCallToLoad(storeKey)
1239
1316
  }
1240
1317
  }
1241
1318
  } else {
@@ -1325,6 +1402,7 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
1325
1402
  stepDetail && typeof stepDetail !== 'string' ? stepDetail : undefined}
1326
1403
  {@const agentTools =
1327
1404
  module && module.value.type === 'aiagent' ? module.value.tools : undefined}
1405
+ {@const parentLoopsPrefix = getParentLoopsPrefix(module?.id ?? '')}
1328
1406
  {#if node.flow_jobs_results}
1329
1407
  <span class="pl-1 text-tertiary"
1330
1408
  >Result of step as collection of all subflows</span
@@ -1389,7 +1467,7 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
1389
1467
  logs={node.logs}
1390
1468
  downloadLogs={!hideDownloadLogs}
1391
1469
  aiAgentStatus={agentTools &&
1392
- node.job_id &&
1470
+ node?.job_id &&
1393
1471
  (node.type === 'Success' || node.type === 'Failure')
1394
1472
  ? {
1395
1473
  tools: agentTools,
@@ -1401,9 +1479,14 @@ let noLogs = $derived(graphTabOpen && !isNodeSelected);
1401
1479
  success: node.type === 'Success',
1402
1480
  type: 'CompletedJob'
1403
1481
  },
1404
- storedToolCallJobs,
1482
+ storedToolCallJobs: module
1483
+ ? toolCallStore?.getLocalToolCallJobs(parentLoopsPrefix)
1484
+ : undefined,
1405
1485
  onToolJobLoaded: (job, idx) => {
1406
- storedToolCallJobs[idx] = job
1486
+ if (module) {
1487
+ const storeKey = parentLoopsPrefix + module.id + '-' + idx
1488
+ toolCallStore?.setStoredToolCallJob(storeKey, job)
1489
+ }
1407
1490
  }
1408
1491
  }
1409
1492
  : undefined}
@@ -57,6 +57,13 @@ interface Props {
57
57
  onDone?: ({ job }: {
58
58
  job: CompletedJob;
59
59
  }) => void;
60
+ toolCallStore?: {
61
+ getStoredToolCallJob: (storeKey: string) => Job | undefined;
62
+ setStoredToolCallJob: (storeKey: string, job: Job) => void;
63
+ getLocalToolCallJobs: (prefix: string) => Record<number, Job>;
64
+ isToolCallToBeLoaded: (storeKey: string) => boolean;
65
+ addToolCallToLoad: (storeKey: string) => void;
66
+ };
60
67
  }
61
68
  declare const FlowStatusViewerInner: import("svelte").Component<Props, {}, "job" | "localModuleStates" | "selectedNode" | "rightColumnSelect" | "localDurationStatuses">;
62
69
  type FlowStatusViewerInner = ReturnType<typeof FlowStatusViewerInner>;
@@ -40,7 +40,7 @@ async function addFolder() {
40
40
  loadFolders();
41
41
  </script>
42
42
 
43
- <Drawer bind:this={newFolder}>
43
+ <Drawer bind:this={newFolder} name="newFolder">
44
44
  <DrawerContent
45
45
  title="New Folder"
46
46
  on:close={() => {
@@ -32,6 +32,8 @@ let monaco = $state(undefined);
32
32
  let monacoTemplate = $state(undefined);
33
33
  let argInput = $state(undefined);
34
34
  let focusedPrev = false;
35
+ const variableMatch = (value) => value.match(/^variable\('([^']+)'\)$/);
36
+ const resourceMatch = (value) => value.match(/^resource\('([^']+)'\)$/);
35
37
  const dispatch = createEventDispatcher();
36
38
  $effect(() => {
37
39
  editor = monaco;
@@ -144,18 +146,18 @@ function isStaticTemplate(inputCat) {
144
146
  }
145
147
  function connectProperty(rawValue) {
146
148
  // Extract path from variable('x') or resource('x') format
147
- const varMatch = rawValue.match(/^variable\('([^']+)'\)$/);
148
- const resourceMatch = rawValue.match(/^resource\('([^']+)'\)$/);
149
+ const varMatch = variableMatch(rawValue);
150
+ const resMatch = resourceMatch(rawValue);
149
151
  if (varMatch) {
150
152
  arg.type = 'static';
151
153
  propertyType = 'static';
152
154
  arg.value = '$var:' + varMatch[1];
153
155
  monacoTemplate?.setCode(arg.value);
154
156
  }
155
- else if (resourceMatch) {
157
+ else if (resMatch) {
156
158
  arg.type = 'static';
157
159
  propertyType = 'static';
158
- arg.value = '$res:' + resourceMatch[1];
160
+ arg.value = '$res:' + resMatch[1];
159
161
  monacoTemplate?.setCode(arg.value);
160
162
  }
161
163
  else {
@@ -169,12 +171,20 @@ function onFocus() {
169
171
  focused = true;
170
172
  if (isStaticTemplate(inputCat)) {
171
173
  focusProp?.(argName, 'append', (path) => {
172
- const toAppend = `\$\{${path}}`;
173
- arg.value = `${arg.value ?? ''}${toAppend}`;
174
- monacoTemplate?.setCode(arg.value);
175
- setPropertyType(arg.value);
176
- argInput?.focus();
177
- return false;
174
+ // Empty field + variable = use $var:/$res: syntax instead of ${...}
175
+ const isEmpty = !arg.value || arg.value.trim() === '';
176
+ if (isEmpty && variableMatch(path)) {
177
+ connectProperty(path);
178
+ return true;
179
+ }
180
+ else {
181
+ const toAppend = `\$\{${path}}`;
182
+ arg.value = `${arg.value ?? ''}${toAppend}`;
183
+ monacoTemplate?.setCode(arg.value);
184
+ setPropertyType(arg.value);
185
+ argInput?.focus();
186
+ return false;
187
+ }
178
188
  });
179
189
  }
180
190
  else {
@@ -79,7 +79,7 @@ ${Object.entries(args)
79
79
  {#each Object.entries(args).sort((a, b) => a[0].localeCompare(b[0])) as [arg, value]}
80
80
  <Row>
81
81
  <Cell first>{arg}</Cell>
82
- <Cell last><ArgInfo {value} /></Cell>
82
+ <Cell><ArgInfo {value} /></Cell>
83
83
  </Row>
84
84
  {/each}
85
85
  {:else if args}
@@ -61,6 +61,6 @@ declare const JobLoader: import("svelte").Component<Props, {
61
61
  cancelJob: () => Promise<void>;
62
62
  clearCurrentJob: () => Promise<void>;
63
63
  watchJob: (testId: string, callbacks?: Callbacks) => Promise<void>;
64
- }, "job" | "isLoading" | "notfound" | "jobUpdateLastFetch" | "scriptProgress">;
64
+ }, "isLoading" | "job" | "notfound" | "jobUpdateLastFetch" | "scriptProgress">;
65
65
  type JobLoader = ReturnType<typeof JobLoader>;
66
66
  export default JobLoader;
@@ -4,6 +4,7 @@ import { forLater } from '../forLater';
4
4
  import DurationMs from './DurationMs.svelte';
5
5
  import { Calendar, CheckCircle2, Circle, Clock, Hourglass, Play, XCircle } from 'lucide-svelte';
6
6
  import NoWorkerWithTagWarning from './runs/NoWorkerWithTagWarning.svelte';
7
+ import QueuePosition from './QueuePosition.svelte';
7
8
  const SMALL_ICON_SIZE = 12;
8
9
  export let job;
9
10
  </script>
@@ -56,6 +57,7 @@ export let job;
56
57
  <div class="flex flex-row gap-1 items-center">
57
58
  <Badge color="orange" icon={{ icon: Clock, position: 'left' }}>Queued</Badge>
58
59
  <NoWorkerWithTagWarning tag={job.tag} />
60
+ <QueuePosition jobId={job.id} workspaceId={job.workspace_id} minimal />
59
61
  </div>
60
62
  {:else}
61
63
  <Circle size={SMALL_ICON_SIZE} class="text-gray-200" />
@@ -1,4 +1,4 @@
1
- <script lang="ts">import AnsiUp from 'ansi_up';
1
+ <script lang="ts">import { AnsiUp } from 'ansi_up';
2
2
  export let content;
3
3
  export let highlighted;
4
4
  const ansi_up = new AnsiUp();
@@ -24,8 +24,8 @@ let html = highlightSnippet(content);
24
24
  </script>
25
25
 
26
26
  <button on:click class="font-light !m-0 !p-0">
27
- <pre
28
- class="bg-surface-secondary hover:bg-surface px-2 py-1 text-secondary text-xs w-[100%] whitespace-pre border min-w-full text-start" >
27
+ <pre
28
+ class="bg-surface-secondary hover:bg-surface px-2 py-1 text-secondary text-xs w-[100%] whitespace-pre border min-w-full text-start">
29
29
  {@html html}
30
30
  </pre>
31
31
  </button>
@@ -15,7 +15,7 @@ declare const LogSnippetViewer: $$__sveltets_2_IsomorphicComponent<{
15
15
  content: string;
16
16
  highlighted: any[];
17
17
  }, {
18
- click: MouseEvent;
18
+ click: PointerEvent;
19
19
  } & {
20
20
  [evt: string]: CustomEvent<any>;
21
21
  }, {}, {}, string>;