windmill-components 1.537.1 → 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 (273) 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 +35 -9
  5. package/package/components/ArgInput.svelte.d.ts +3 -3
  6. package/package/components/AssignableTagsInner.svelte +89 -3
  7. package/package/components/ConcurrentJobsChart.svelte +36 -48
  8. package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
  9. package/package/components/CustomPopover.svelte.d.ts +1 -1
  10. package/package/components/DropdownSelect.svelte +26 -0
  11. package/package/components/DropdownSelect.svelte.d.ts +11 -0
  12. package/package/components/DropdownV2Inner.svelte +1 -1
  13. package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
  14. package/package/components/DynamicInput.svelte.d.ts +11 -0
  15. package/package/components/EditableSchemaForm.svelte +119 -95
  16. package/package/components/EditableSchemaForm.svelte.d.ts +4 -4
  17. package/package/components/Editor.svelte +86 -93
  18. package/package/components/Editor.svelte.d.ts +4 -3
  19. package/package/components/EditorBar.svelte +2 -5
  20. package/package/components/FlowBuilder.svelte +3 -3
  21. package/package/components/FlowLogRow.svelte +64 -0
  22. package/package/components/FlowLogRow.svelte.d.ts +15 -0
  23. package/package/components/FlowLogViewer.svelte +406 -373
  24. package/package/components/FlowLogViewer.svelte.d.ts +5 -1
  25. package/package/components/FlowLogViewerWrapper.svelte +44 -1
  26. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  27. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  28. package/package/components/FlowStatusViewerInner.svelte +34 -3
  29. package/package/components/FolderPicker.svelte +1 -1
  30. package/package/components/InputTransformForm.svelte +20 -10
  31. package/package/components/JobArgs.svelte +1 -1
  32. package/package/components/JobLoader.svelte.d.ts +1 -1
  33. package/package/components/JobStatus.svelte +2 -0
  34. package/package/components/LogSnippetViewer.svelte +3 -3
  35. package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
  36. package/package/components/LogViewer.svelte +87 -71
  37. package/package/components/LogViewer.svelte.d.ts +1 -0
  38. package/package/components/Path.svelte +7 -1
  39. package/package/components/Path.svelte.d.ts +1 -1
  40. package/package/components/PrefixedInput.svelte +120 -0
  41. package/package/components/PrefixedInput.svelte.d.ts +8 -0
  42. package/package/components/QueuePosition.svelte +81 -0
  43. package/package/components/QueuePosition.svelte.d.ts +8 -0
  44. package/package/components/ResourceNarrowing.svelte +13 -0
  45. package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
  46. package/package/components/ResourceTypePicker.svelte +49 -74
  47. package/package/components/RunChart.svelte +74 -89
  48. package/package/components/RunChart.svelte.d.ts +10 -22
  49. package/package/components/S3FilePicker.svelte +1 -1
  50. package/package/components/SchemaForm.svelte.d.ts +2 -2
  51. package/package/components/ScriptBuilder.svelte +2 -1
  52. package/package/components/ScriptEditor.svelte +4 -3
  53. package/package/components/ScriptEditor.svelte.d.ts +2 -1
  54. package/package/components/ServiceLogsInner.svelte +1 -1
  55. package/package/components/ShareModal.svelte.d.ts +1 -1
  56. package/package/components/SimpleEditor.svelte +4 -67
  57. package/package/components/StringTypeNarrowing.svelte +5 -10
  58. package/package/components/TemplateEditor.svelte +2 -16
  59. package/package/components/TimeAgo.svelte +1 -1
  60. package/package/components/TimeAgo.svelte.d.ts +1 -0
  61. package/package/components/Toggle.svelte +2 -1
  62. package/package/components/Toggle.svelte.d.ts +2 -1
  63. package/package/components/WorkerRepl.svelte +1 -1
  64. package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
  65. package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
  66. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
  67. package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
  68. package/package/components/apps/components/display/table/utils.js +36 -5
  69. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
  70. package/package/components/apps/editor/AppEditor.svelte +4 -3
  71. package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
  72. package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
  73. package/package/components/apps/editor/SettingsPanel.svelte +2 -2
  74. package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  75. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  76. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  77. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  78. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +26 -3
  79. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  80. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
  81. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
  82. package/package/components/assets/JobAssetsViewer.svelte +28 -24
  83. package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
  84. package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
  85. package/package/components/common/OnChange.svelte.d.ts +11 -4
  86. package/package/components/common/badge/Badge.svelte +9 -2
  87. package/package/components/common/badge/Badge.svelte.d.ts +2 -1
  88. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
  89. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
  90. package/package/components/common/drawer/Disposable.svelte +9 -11
  91. package/package/components/common/drawer/Drawer.svelte +3 -4
  92. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  93. package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
  94. package/package/components/common/modal/Modal.svelte.d.ts +1 -1
  95. package/package/components/common/tabs/TabContent.svelte +2 -7
  96. package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
  97. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
  98. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  99. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
  100. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  101. package/package/components/copilot/MetadataGen.svelte +1 -1
  102. package/package/components/copilot/chat/AIChatManager.svelte.js +24 -102
  103. package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
  104. package/package/components/copilot/chat/anthropic.d.ts +15 -0
  105. package/package/components/copilot/chat/anthropic.js +208 -0
  106. package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
  107. package/package/components/copilot/chat/api/apiTools.js +10 -7
  108. package/package/components/copilot/chat/api/core.d.ts +1 -1
  109. package/package/components/copilot/chat/api/core.js +7 -2
  110. package/package/components/copilot/chat/ask/core.d.ts +1 -1
  111. package/package/components/copilot/chat/ask/core.js +7 -2
  112. package/package/components/copilot/chat/flow/core.d.ts +1 -1
  113. package/package/components/copilot/chat/flow/core.js +14 -4
  114. package/package/components/copilot/chat/monaco-adapter.d.ts +6 -5
  115. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  116. package/package/components/copilot/chat/navigator/core.js +7 -2
  117. package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
  118. package/package/components/copilot/chat/script/core.d.ts +5 -4
  119. package/package/components/copilot/chat/script/core.js +131 -19
  120. package/package/components/copilot/chat/shared.d.ts +7 -7
  121. package/package/components/copilot/lib.d.ts +29 -8
  122. package/package/components/copilot/lib.js +199 -24
  123. package/package/components/flows/content/FlowInput.svelte +5 -5
  124. package/package/components/flows/content/FlowModuleComponent.svelte +5 -2
  125. package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
  126. package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
  127. package/package/components/flows/content/FlowModuleSuspend.svelte +0 -1
  128. package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
  129. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
  130. package/package/components/flows/content/FlowRetries.svelte +108 -3
  131. package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
  132. package/package/components/flows/flowInfers.js +8 -35
  133. package/package/components/flows/flowStore.d.ts +45 -1
  134. package/package/components/flows/flowStore.js +1 -1
  135. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  136. package/package/components/flows/map/FlowModuleSchemaItem.svelte +61 -54
  137. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
  138. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
  139. package/package/components/flows/map/InsertModuleButton.svelte +1 -0
  140. package/package/components/flows/map/InsertModuleInner.svelte +12 -15
  141. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
  142. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  143. package/package/components/git_sync/DetectionFlow.svelte +15 -17
  144. package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
  145. package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
  146. package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
  147. package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
  148. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
  149. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
  150. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
  151. package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
  152. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
  153. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
  154. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
  155. package/package/components/home/ItemsList.svelte +17 -13
  156. package/package/components/home/TreeView.svelte +21 -27
  157. package/package/components/home/TreeView.svelte.d.ts +2 -29
  158. package/package/components/home/TreeViewRoot.svelte +11 -23
  159. package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
  160. package/package/components/icons/GitIcon.svelte +10 -2
  161. package/package/components/icons/GitIcon.svelte.d.ts +1 -0
  162. package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
  163. package/package/components/meltComponents/Popover.svelte +23 -3
  164. package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
  165. package/package/components/monacoLanguagesOptions.d.ts +3 -0
  166. package/package/components/monacoLanguagesOptions.js +109 -0
  167. package/package/components/propertyPicker/ObjectViewer.svelte +7 -2
  168. package/package/components/propertyPicker/PropPicker.svelte +1 -1
  169. package/package/components/propertyPicker/utils.js +14 -7
  170. package/package/components/runs/JobRunsPreview.svelte +212 -177
  171. package/package/components/runs/JobsLoader.svelte +2 -2
  172. package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
  173. package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
  174. package/package/components/runs/RunBadges.svelte +100 -0
  175. package/package/components/runs/RunBadges.svelte.d.ts +12 -0
  176. package/package/components/runs/RunLabels.svelte +86 -0
  177. package/package/components/runs/RunLabels.svelte.d.ts +10 -0
  178. package/package/components/runs/RunOption.svelte +20 -0
  179. package/package/components/runs/RunOption.svelte.d.ts +10 -0
  180. package/package/components/runs/RunRow.svelte +239 -151
  181. package/package/components/runs/RunRow.svelte.d.ts +12 -9
  182. package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
  183. package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
  184. package/package/components/runs/RunsFilter.svelte +369 -243
  185. package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
  186. package/package/components/runs/RunsQueue.svelte +96 -25
  187. package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
  188. package/package/components/runs/RunsTable.svelte +62 -71
  189. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  190. package/package/components/runs/runs-grid.css +95 -0
  191. package/package/components/schema/EditableSchemaDrawer.svelte +12 -12
  192. package/package/components/schema/FlowPropertyEditor.svelte +197 -206
  193. package/package/components/schema/PropertyEditor.svelte +33 -35
  194. package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -2
  195. package/package/components/search/GlobalSearchModal.svelte +8 -1
  196. package/package/components/select/DraggableTags.svelte.d.ts +17 -7
  197. package/package/components/select/MultiSelect.svelte.d.ts +21 -11
  198. package/package/components/select/Select.svelte +2 -1
  199. package/package/components/select/Select.svelte.d.ts +25 -13
  200. package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
  201. package/package/components/settings/TokenDisplay.svelte +1 -1
  202. package/package/components/sidebar/OperatorMenu.svelte +5 -0
  203. package/package/components/sidebar/SidebarContent.svelte +48 -2
  204. package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
  205. package/package/components/toast.js +6 -3
  206. package/package/components/triggers/AddTriggersButton.svelte +7 -6
  207. package/package/components/triggers/CaptureWrapper.svelte +19 -3
  208. package/package/components/triggers/TriggerLabel.svelte +8 -0
  209. package/package/components/triggers/TriggerTokens.svelte +1 -1
  210. package/package/components/triggers/TriggersEditor.svelte +9 -5
  211. package/package/components/triggers/TriggersTable.svelte +2 -2
  212. package/package/components/triggers/TriggersWrapper.svelte +16 -5
  213. package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
  214. package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
  215. package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
  216. package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
  217. package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
  218. package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
  219. package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
  220. package/package/components/triggers/email/EmailCapture.svelte +39 -0
  221. package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
  222. package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
  223. package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
  224. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
  225. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
  226. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
  227. package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
  228. package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
  229. package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
  230. package/package/components/triggers/email/utils.d.ts +4 -0
  231. package/package/components/triggers/email/utils.js +52 -0
  232. package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
  233. package/package/components/triggers/http/utils.js +1 -1
  234. package/package/components/triggers/triggers.svelte.d.ts +1 -0
  235. package/package/components/triggers/triggers.svelte.js +24 -2
  236. package/package/components/triggers/utils.js +19 -5
  237. package/package/components/triggers.d.ts +1 -1
  238. package/package/components/triggers.js +2 -0
  239. package/package/components/wizards/AgGridWizard.svelte +85 -80
  240. package/package/components/workspaceSettings/AISettings.svelte +74 -22
  241. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  242. package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
  243. package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
  244. package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
  245. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
  246. package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
  247. package/package/gen/core/OpenAPI.js +1 -1
  248. package/package/gen/schemas.gen.d.ts +142 -3
  249. package/package/gen/schemas.gen.js +144 -3
  250. package/package/gen/services.gen.d.ts +129 -1
  251. package/package/gen/services.gen.js +267 -1
  252. package/package/gen/types.gen.d.ts +434 -8
  253. package/package/hubPaths.json +4 -2
  254. package/package/infer.js +1 -1
  255. package/package/keyboardChain.d.ts +5 -0
  256. package/package/keyboardChain.js +40 -0
  257. package/package/services/JobManager.js +2 -2
  258. package/package/stores.d.ts +3 -1
  259. package/package/stores.js +8 -5
  260. package/package/utils/workspaceHierarchy.d.ts +27 -0
  261. package/package/utils/workspaceHierarchy.js +101 -0
  262. package/package/utils.d.ts +6 -3
  263. package/package/utils.js +30 -15
  264. package/package/workspace_settings.js +2 -3
  265. package/package.json +9 -11
  266. package/package/components/DynSelect.svelte.d.ts +0 -11
  267. package/package/components/ObjectTypeNarrowing.svelte +0 -18
  268. package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
  269. package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
  270. package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
  271. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
  272. package/package/components/details/EmailTriggerPanel.svelte +0 -76
  273. package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
@@ -1,6 +1,7 @@
1
1
  import type { FlowModule } from '../../../gen';
2
2
  interface Props {
3
3
  flowModule: FlowModule;
4
+ previousModuleId: string | undefined;
4
5
  }
5
6
  declare const FlowModuleTimeout: import("svelte").Component<Props, {}, "flowModule">;
6
7
  type FlowModuleTimeout = ReturnType<typeof FlowModuleTimeout>;
@@ -3,10 +3,31 @@ import ToggleButtonGroup from '../../common/toggleButton-v2/ToggleButtonGroup.sv
3
3
  import ToggleButton from '../../common/toggleButton-v2/ToggleButton.svelte';
4
4
  import { enterpriseLicense } from '../../../stores';
5
5
  import { AlertTriangle } from 'lucide-svelte';
6
- import { untrack } from 'svelte';
7
- let { flowModuleRetry = $bindable(), disabled = false } = $props();
6
+ import { untrack, getContext } from 'svelte';
7
+ import Toggle from '../../Toggle.svelte';
8
+ import SimpleEditor from '../../SimpleEditor.svelte';
9
+ import PropPickerWrapper from '../propPicker/PropPickerWrapper.svelte';
10
+ import Tooltip from '../../Tooltip.svelte';
11
+ import Section from '../../Section.svelte';
12
+ import { getStepPropPicker } from '../previousResults';
13
+ import { NEVER_TESTED_THIS_FAR } from '../models';
14
+ let { flowModule = $bindable(), flowModuleRetry = $bindable(), disabled = false } = $props();
15
+ const flowEditorContext = getContext('FlowEditorContext');
16
+ const { flowStateStore, flowStore, previewArgs } = flowEditorContext || {
17
+ flowStateStore: null,
18
+ flowStore: null,
19
+ previewArgs: null
20
+ };
8
21
  let delayType = $state();
9
22
  let loaded = $state(false);
23
+ let editor = $state(undefined);
24
+ let stepPropPicker = $derived(flowModule && flowStateStore?.val && flowStore?.val && previewArgs?.val
25
+ ? getStepPropPicker(flowStateStore.val, undefined, undefined, flowModule.id, flowStore.val, previewArgs.val, false)
26
+ : null);
27
+ let isRetryConditionEnabled = $derived(Boolean(flowModuleRetry?.retry_if));
28
+ let result = $derived(flowModule && flowStateStore?.val
29
+ ? (flowStateStore.val[flowModule.id]?.previewResult ?? NEVER_TESTED_THIS_FAR)
30
+ : NEVER_TESTED_THIS_FAR);
10
31
  function setConstantRetries() {
11
32
  flowModuleRetry = {
12
33
  ...flowModuleRetry,
@@ -48,7 +69,7 @@ $effect(() => {
48
69
  const u32Max = 4294967295;
49
70
  </script>
50
71
 
51
- <div class="h-full flex flex-col">
72
+ <div class="h-full flex flex-col gap-4">
52
73
  <ToggleButtonGroup
53
74
  bind:selected={delayType}
54
75
  class={`h-10 ${disabled ? 'disabled' : ''}`}
@@ -69,6 +90,90 @@ const u32Max = 4294967295;
69
90
  <ToggleButton light value="exponential" label="Exponential" {item} />
70
91
  {/snippet}
71
92
  </ToggleButtonGroup>
93
+
94
+ {#if delayType === 'constant' || delayType === 'exponential'}
95
+ <Section label="Retry Condition" class="w-full">
96
+ {#snippet header()}
97
+ <Tooltip>
98
+ Optional condition to determine when to retry. If not specified, will retry on any failure
99
+ within the configured attempt limits.
100
+ </Tooltip>
101
+ {/snippet}
102
+
103
+ <Toggle
104
+ checked={isRetryConditionEnabled}
105
+ on:change={() => {
106
+ if (!flowModuleRetry) {
107
+ return
108
+ }
109
+ if (isRetryConditionEnabled && flowModuleRetry.retry_if) {
110
+ const { retry_if, ...rest } = flowModuleRetry
111
+ flowModuleRetry = rest
112
+ } else {
113
+ flowModuleRetry = {
114
+ ...flowModuleRetry,
115
+ retry_if: {
116
+ expr: 'error && error.name !== "PERMANENT_FAILURE"'
117
+ }
118
+ }
119
+ }
120
+ }}
121
+ options={{
122
+ right: 'Only retry if condition is met'
123
+ }}
124
+ />
125
+
126
+ <div
127
+ class="w-full border p-2 mt-2 flex flex-col {flowModuleRetry?.retry_if
128
+ ? ''
129
+ : 'bg-surface-secondary'}"
130
+ >
131
+ {#if flowModuleRetry?.retry_if}
132
+ <span class="mt-2 text-xs font-bold">Retry condition expression</span>
133
+ <span class="text-xs text-tertiary mb-2"
134
+ >Expression should return true to retry, false to skip retry</span
135
+ >
136
+ <div class="border w-full">
137
+ {#if stepPropPicker}
138
+ <PropPickerWrapper
139
+ notSelectable
140
+ pickableProperties={stepPropPicker.pickableProperties}
141
+ {result}
142
+ on:select={({ detail }) => {
143
+ editor?.insertAtCursor(detail)
144
+ editor?.focus()
145
+ }}
146
+ >
147
+ <SimpleEditor
148
+ bind:this={editor}
149
+ lang="javascript"
150
+ bind:code={flowModuleRetry.retry_if.expr}
151
+ class="few-lines-editor"
152
+ extraLib={`declare const result = ${JSON.stringify(result)};` +
153
+ `\ndeclare const flow_input = ${JSON.stringify(stepPropPicker.pickableProperties.flow_input || {})};`}
154
+ />
155
+ </PropPickerWrapper>
156
+ {:else}
157
+ <SimpleEditor
158
+ bind:this={editor}
159
+ lang="javascript"
160
+ bind:code={flowModuleRetry.retry_if.expr}
161
+ class="few-lines-editor"
162
+ extraLib={`declare const result = ${JSON.stringify(result)};`}
163
+ />
164
+ {/if}
165
+ </div>
166
+ {:else}
167
+ <span class="mt-2 text-xs font-bold">Retry condition expression</span>
168
+ <span class="text-xs text-tertiary mb-2"
169
+ >Expression should return true to retry, false to skip retry</span
170
+ >
171
+ <textarea disabled rows="3" class="min-h-[80px]"></textarea>
172
+ {/if}
173
+ </div>
174
+ </Section>
175
+ {/if}
176
+
72
177
  <div class="flex h-[calc(100%-22px)]">
73
178
  <div class="w-1/2 h-full overflow-auto pr-2">
74
179
  {#if delayType === 'constant'}
@@ -1,8 +1,9 @@
1
- import type { Retry } from '../../../gen';
1
+ import type { Retry, FlowModule } from '../../../gen';
2
2
  interface Props {
3
3
  flowModuleRetry: Retry | undefined;
4
4
  disabled?: boolean;
5
+ flowModule?: FlowModule;
5
6
  }
6
- declare const FlowRetries: import("svelte").Component<Props, {}, "flowModuleRetry">;
7
+ declare const FlowRetries: import("svelte").Component<Props, {}, "flowModule" | "flowModuleRetry">;
7
8
  type FlowRetries = ReturnType<typeof FlowRetries>;
8
9
  export default FlowRetries;
@@ -47,40 +47,7 @@ export async function loadSchemaFromModule(module) {
47
47
  properties: {
48
48
  provider: {
49
49
  type: 'object',
50
- oneOf: [
51
- {
52
- type: 'object',
53
- title: 'OpenAI',
54
- properties: {
55
- kind: { type: 'string', enum: ['OpenAI'] },
56
- resource: {
57
- type: 'object',
58
- format: 'resource-openai'
59
- },
60
- model: {
61
- type: 'string',
62
- enum: ['gpt-5', 'gpt-5-mini', 'gpt-5-nano', 'gpt-4.1', 'gpt-4o', 'gpt-4o-mini']
63
- }
64
- },
65
- required: ['kind', 'resource', 'model']
66
- },
67
- {
68
- type: 'object',
69
- title: 'Anthropic',
70
- properties: {
71
- kind: { type: 'string', enum: ['Anthropic'] },
72
- resource: {
73
- type: 'object',
74
- format: 'resource-anthropic'
75
- },
76
- model: {
77
- type: 'string',
78
- enum: ['claude-sonnet-4-0', 'claude-3-7-sonnet-latest', 'claude-3-5-haiku-latest']
79
- }
80
- },
81
- required: ['kind', 'resource', 'model']
82
- }
83
- ]
50
+ format: 'ai-provider'
84
51
  },
85
52
  user_message: {
86
53
  type: 'string'
@@ -94,6 +61,11 @@ export async function loadSchemaFromModule(module) {
94
61
  temperature: {
95
62
  type: 'number',
96
63
  description: 'Controls randomness in text generation. Range: 0.0 (deterministic) to 2.0 (random).'
64
+ },
65
+ output_schema: {
66
+ type: 'object',
67
+ description: 'JSON schema that the AI agent will follow for its response format',
68
+ format: 'json-schema'
97
69
  }
98
70
  },
99
71
  required: ['provider', 'model', 'user_message'],
@@ -104,7 +76,8 @@ export async function loadSchemaFromModule(module) {
104
76
  'user_message',
105
77
  'system_prompt',
106
78
  'max_completion_tokens',
107
- 'temperature'
79
+ 'temperature',
80
+ 'output_schema'
108
81
  ]
109
82
  };
110
83
  let input_transforms = mod.input_transforms ?? {};
@@ -6,7 +6,51 @@ export declare const importFlowStore: import("svelte/store").Writable<Flow | und
6
6
  export declare function initFlow(flow: Flow, flowStore: StateStore<Flow>, flowStateStore: StateStore<FlowState>): Promise<void>;
7
7
  export declare function copyFirstStepSchema(flowState: FlowState, flowStore: StateStore<OpenFlow>): Promise<void>;
8
8
  export declare function getFirstStepSchema(flowState: FlowState, flow: OpenFlow): Promise<{
9
- schema: import("../../common").Schema | undefined;
9
+ schema: {
10
+ $schema: string | undefined;
11
+ type: string;
12
+ properties: {
13
+ [x: string]: {
14
+ type: string | undefined;
15
+ description?: string | undefined;
16
+ pattern?: string | undefined;
17
+ default?: any;
18
+ enum?: string[] | undefined;
19
+ contentEncoding?: "base64" | "binary" | undefined;
20
+ format?: string | undefined;
21
+ items?: {
22
+ type?: "string" | "number" | "bytes" | "object" | "resource" | undefined;
23
+ contentEncoding?: "base64" | undefined;
24
+ enum?: string[] | undefined;
25
+ resourceType?: string | undefined;
26
+ properties?: {
27
+ [x: string]: /*elided*/ any;
28
+ } | undefined;
29
+ } | undefined;
30
+ min?: number | undefined;
31
+ max?: number | undefined;
32
+ currency?: string | undefined;
33
+ currencyLocale?: string | undefined;
34
+ multiselect?: boolean | undefined;
35
+ customErrorMessage?: string | undefined;
36
+ properties?: {
37
+ [x: string]: /*elided*/ any;
38
+ } | undefined;
39
+ required?: string[] | undefined;
40
+ showExpr?: string | undefined;
41
+ password?: boolean | undefined;
42
+ order?: string[] | undefined;
43
+ nullable?: boolean | undefined;
44
+ dateFormat?: string | undefined;
45
+ title?: string | undefined;
46
+ placeholder?: string | undefined;
47
+ oneOf?: /*elided*/ any[] | undefined;
48
+ originalType?: string | undefined;
49
+ };
50
+ };
51
+ order?: string[] | undefined;
52
+ required: string[];
53
+ } | undefined;
10
54
  mod: {
11
55
  id: string;
12
56
  summary: string | undefined;
@@ -29,7 +29,7 @@ export async function getFirstStepSchema(flowState, flow) {
29
29
  if (!firstModuleId || !flowState[firstModuleId]) {
30
30
  throw new Error('no first step found');
31
31
  }
32
- const schema = structuredClone(flowState[firstModuleId].schema);
32
+ const schema = $state.snapshot(flowState[firstModuleId].schema);
33
33
  const v = flow.value.modules[0].value;
34
34
  if (v.type !== 'rawscript' && v.type !== 'script') {
35
35
  throw new Error('only scripts can be used as a input schema');
@@ -106,7 +106,7 @@ $effect(() => {
106
106
  </MeltButton>
107
107
  {/snippet}
108
108
 
109
- {#snippet children({ item })}
109
+ {#snippet children({ item: childrenItem })}
110
110
  <div class="flex flex-col px-1">
111
111
  <input type="number" bind:value={filter} onkeydown={onKeydown} />
112
112
 
@@ -115,7 +115,7 @@ $effect(() => {
115
115
  <VirtualList height={300} width="100%" itemCount={items.length} itemSize={24}>
116
116
  {#snippet header()}{/snippet}
117
117
  {#snippet footer()}{/snippet}
118
- {#snippet children({ index: idx, style })}
118
+ {#snippet item({ index: idx, style })}
119
119
  <div {style}>
120
120
  <MenuItem
121
121
  class={twMerge(
@@ -133,7 +133,7 @@ $effect(() => {
133
133
  })
134
134
  menu?.close()
135
135
  }}
136
- {item}
136
+ item={childrenItem}
137
137
  >
138
138
  #{items[idx].index + 1}
139
139
  </MenuItem>
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">import { preventDefault, stopPropagation } from 'svelte/legacy';
2
2
  import Popover from '../../Popover.svelte';
3
3
  import { classNames } from '../../../utils';
4
- import { AlertTriangle, Bed, Database, Gauge, Move, PhoneIncoming, Repeat, Square, SkipForward, Pin, X, Play, Loader2 } from 'lucide-svelte';
4
+ import { Bed, Database, Gauge, Move, PhoneIncoming, Repeat, Square, SkipForward, Pin, X, Play, Loader2, TriangleAlert } from 'lucide-svelte';
5
5
  import { createEventDispatcher, getContext } from 'svelte';
6
6
  import { fade } from 'svelte/transition';
7
7
  import { twMerge } from 'tailwind-merge';
@@ -336,60 +336,67 @@ let historyOpen = $derived.by(() => outputPickerInner?.getHistoryOpen?.() ?? fal
336
336
  </div>
337
337
 
338
338
  {#if deletable && !action}
339
- <button
340
- class="absolute -top-[10px] -right-[10px] rounded-full h-[20px] w-[20px] trash center-center text-secondary
341
- outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration-0 hover:bg-red-400 hover:text-white
342
- {hover || selected ? '' : '!hidden'}"
343
- title="Delete"
344
- onclick={stopPropagation(
345
- preventDefault((event) => dispatch('delete', { id, type: modType }))
346
- )}
347
- onpointerdown={stopPropagation(preventDefault(() => {}))}
339
+ <div
340
+ class="absolute -translate-y-[100%] top-2 -right-2 flex flex-row gap-1 p-1 min-w-[52px] h-7 group justify-end"
348
341
  >
349
- <X class="mx-[3px]" size={12} strokeWidth={2} />
350
- </button>
351
-
352
- {#if id !== 'preprocessor'}
342
+ {#if id !== 'preprocessor'}
343
+ <button
344
+ class={twMerge(
345
+ 'trash center-center p-1 text-secondary shadow-sm bg-surface duration-0 hover:bg-blue-400 hover:text-white',
346
+ hover ? 'block' : '!hidden',
347
+ 'shadow-md rounded-md',
348
+ 'group-hover:block'
349
+ )}
350
+ onclick={stopPropagation(preventDefault((event) => dispatch('move')))}
351
+ title="Move"
352
+ >
353
+ <Move size={12} />
354
+ </button>
355
+ {/if}
353
356
  <button
354
- class="absolute -top-[10px] right-[60px] rounded-full h-[20px] w-[20px] trash center-center text-secondary
355
- outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration-0 hover:bg-blue-400 hover:text-white
356
- {hover ? '' : '!hidden'}"
357
- onclick={stopPropagation(preventDefault((event) => dispatch('move')))}
358
- title="Move"
357
+ class={twMerge(
358
+ 'trash center-center text-secondary shadow-sm bg-surface duration-0 hover:bg-red-400 hover:text-white p-1',
359
+ selected || hover ? 'block' : '!hidden',
360
+ 'group-hover:block',
361
+ 'shadow-md rounded-md'
362
+ )}
363
+ title="Delete"
364
+ onclick={stopPropagation(
365
+ preventDefault((event) => dispatch('delete', { id, type: modType }))
366
+ )}
367
+ onpointerdown={stopPropagation(preventDefault(() => {}))}
359
368
  >
360
- <Move class="mx-[3px]" size={12} strokeWidth={2} />
369
+ <X size={12} />
361
370
  </button>
362
- {/if}
371
+ </div>
363
372
 
364
373
  {#if (id && Object.values($flowInputsStore?.[id]?.flowStepWarnings || {}).length > 0) || Boolean(warningMessage)}
365
- <div class="absolute -top-[10px] -left-[10px]">
366
- <Popover>
367
- {#snippet text()}
368
- <ul class="list-disc px-2">
369
- {#if id}
370
- {#each Object.values($flowInputsStore?.[id]?.flowStepWarnings || {}) as m}
371
- <li>
372
- {m.message}
373
- </li>
374
- {/each}
375
- {/if}
376
- </ul>
377
- {/snippet}
378
- <div
379
- class={twMerge(
380
- 'flex items-center justify-center h-full w-full rounded-md p-0.5 border duration-0 ',
381
- id &&
382
- Object.values($flowInputsStore?.[id]?.flowStepWarnings || {})?.some(
383
- (x) => x.type === 'error'
384
- )
385
- ? 'border-red-600 text-red-600 bg-red-100 hover:bg-red-300'
386
- : 'border-yellow-600 text-yellow-600 bg-yellow-100 hover:bg-yellow-300'
387
- )}
388
- >
389
- <AlertTriangle size={14} strokeWidth={2} />
390
- </div>
391
- </Popover>
392
- </div>
374
+ <Popover
375
+ class={twMerge(
376
+ 'absolute -translate-y-[100%] top-1 -left-1',
377
+ 'flex items-center justify-center rounded-b-none rounded-md p-1 shadow-md duration-0 ',
378
+ id &&
379
+ Object.values($flowInputsStore?.[id]?.flowStepWarnings || {})?.some(
380
+ (x) => x.type === 'error'
381
+ )
382
+ ? 'border-red-600 text-red-600 bg-red-100 hover:bg-red-300'
383
+ : ' text-yellow-600 bg-yellow-100 hover:bg-yellow-300'
384
+ )}
385
+ >
386
+ {#snippet text()}
387
+ <ul class="list-disc px-2">
388
+ {#if id}
389
+ {#each Object.values($flowInputsStore?.[id]?.flowStepWarnings || {}) as m}
390
+ <li>
391
+ {m.message}
392
+ </li>
393
+ {/each}
394
+ {/if}
395
+ </ul>
396
+ {/snippet}
397
+
398
+ <TriangleAlert size={12} strokeWidth={2} />
399
+ </Popover>
393
400
  {/if}
394
401
  {/if}
395
402
  </div>
@@ -397,7 +404,7 @@ outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration
397
404
  {#if editMode && enableTestRun && flowJob?.type !== 'QueuedJob'}
398
405
  <!-- svelte-ignore a11y_no_static_element_interactions -->
399
406
  <div
400
- class="absolute top-1/2 -translate-y-1/2 -translate-x-[100%] -left-[0] flex items-center w-fit px-2 h-9 min-w-14"
407
+ class="absolute top-1/2 -translate-y-1/2 -translate-x-[100%] -left-[0] flex items-center w-fit px-1 h-9 min-w-9"
401
408
  onmouseenter={() => (hover = true)}
402
409
  onmouseleave={() => (hover = false)}
403
410
  >
@@ -405,11 +412,11 @@ outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration
405
412
  <div transition:fade={{ duration: 100 }}>
406
413
  {#if !testIsLoading}
407
414
  <Button
408
- size="sm"
415
+ size="xs"
409
416
  color="light"
410
417
  title="Run"
411
418
  variant="border"
412
- btnClasses="p-1.5"
419
+ btnClasses="px-1 py-1.5"
413
420
  on:click={() => {
414
421
  outputPicker?.toggleOpen(true)
415
422
  moduleTest?.loadArgsAndRunTest()
@@ -424,7 +431,7 @@ outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration
424
431
  }
425
432
  }
426
433
  ]}
427
- dropdownBtnClasses="!w-4 px-1"
434
+ dropdownBtnClasses="!w-3 px-0.5"
428
435
  bind:dropdownOpen={testRunDropdownOpen}
429
436
  >
430
437
  {#if testIsLoading}
@@ -438,7 +445,7 @@ outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration
438
445
  size="xs"
439
446
  color="red"
440
447
  variant="contained"
441
- btnClasses="!h-[25.5px] !w-[44.5px] !p-1.5 gap-0.5"
448
+ btnClasses="!h-[25.5px] !w-[36px] !p-1.5 gap-0.5"
442
449
  on:click={async () => {
443
450
  moduleTest?.cancelJob()
444
451
  }}
@@ -60,8 +60,8 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
60
60
  declare const FlowModuleSchemaItem: $$__sveltets_2_IsomorphicComponent<Props, {
61
61
  changeId: CustomEvent<any>;
62
62
  pointerdown: CustomEvent<any>;
63
- delete: CustomEvent<any>;
64
63
  move: CustomEvent<any>;
64
+ delete: CustomEvent<any>;
65
65
  } & {
66
66
  [evt: string]: CustomEvent<any>;
67
67
  }, {}, {}, "">;
@@ -55,7 +55,7 @@ hover:border-blue-700 hover:!visible {hover ? '' : '!hidden'}"
55
55
  onclick?.()
56
56
  })
57
57
  )}
58
- title="Edit Id"><Pencil size={14} /></button
58
+ title="Edit Id"><Pencil size={12} /></button
59
59
  >
60
60
  {/if}
61
61
  {:else if id?.startsWith('subflow:')}
@@ -75,6 +75,7 @@ shouldUsePortal={true} -->
75
75
  on:new
76
76
  on:pickFlow
77
77
  on:pickScript
78
+ allowTrigger={index == 0}
78
79
  {kind}
79
80
  />
80
81
  {/snippet}
@@ -5,21 +5,18 @@ import ToggleHubWorkspaceQuick from '../../ToggleHubWorkspaceQuick.svelte';
5
5
  import TopLevelNode from '../pickers/TopLevelNode.svelte';
6
6
  // import type { Writable } from 'svelte/store'
7
7
  const dispatch = createEventDispatcher();
8
- export let stop = false;
9
- export let funcDesc = '';
10
- export let disableAi = false;
11
- export let kind = 'script';
12
- export let allowTrigger = true;
13
- export let scriptOnly = false;
8
+ let { stop = false, funcDesc = $bindable(''), disableAi = false, kind = 'script', allowTrigger = true, scriptOnly = false } = $props();
14
9
  let customUi = getContext('customUi');
15
- let selectedKind = kind;
16
- let preFilter = 'all';
17
- let loading = false;
18
- let small = false;
19
- let width = 0;
20
- let height = 0;
21
- $: displayPath = width > 650 || height > 400;
22
- $: small = kind === 'preprocessor' || kind === 'failure';
10
+ let selectedKind = $state(kind);
11
+ let preFilter = $state('all');
12
+ let loading = $state(false);
13
+ let small = $state(false);
14
+ let width = $state(0);
15
+ let height = $state(0);
16
+ let displayPath = $derived(width > 650 || height > 400);
17
+ $effect(() => {
18
+ small = kind === 'preprocessor' || kind === 'failure';
19
+ });
23
20
  </script>
24
21
 
25
22
  <!-- <Menu transitionDuration={0} pointerDown bind:show={open} noMinW {placement} let:close> -->
@@ -37,7 +34,7 @@ shouldUsePortal={true} -->
37
34
  : 'w-[650px]'} pt-1 pr-1 pl-1 gap-1.5 resize overflow-auto {small
38
35
  ? 'min-w-[450px]'
39
36
  : 'min-w-[650px]'} min-h-[400px]"
40
- on:wheel={(e) => {
37
+ onwheel={(e) => {
41
38
  e.stopPropagation()
42
39
  }}
43
40
  role="none"
@@ -1,3 +1,11 @@
1
+ interface Props {
2
+ stop?: boolean;
3
+ funcDesc?: string;
4
+ disableAi?: boolean;
5
+ kind?: 'script' | 'trigger' | 'preprocessor' | 'failure';
6
+ allowTrigger?: boolean;
7
+ scriptOnly?: boolean;
8
+ }
1
9
  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> {
2
10
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
11
  $$bindings?: Bindings;
@@ -11,14 +19,7 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
11
19
  };
12
20
  z_$$bindings?: Bindings;
13
21
  }
14
- declare const InsertModuleInner: $$__sveltets_2_IsomorphicComponent<{
15
- stop?: boolean;
16
- funcDesc?: string;
17
- disableAi?: boolean;
18
- kind?: "script" | "trigger" | "preprocessor" | "failure";
19
- allowTrigger?: boolean;
20
- scriptOnly?: boolean;
21
- }, {
22
+ declare const InsertModuleInner: $$__sveltets_2_IsomorphicComponent<Props, {
22
23
  insert: CustomEvent<any>;
23
24
  new: CustomEvent<any>;
24
25
  pickScript: CustomEvent<any>;
@@ -26,6 +27,6 @@ declare const InsertModuleInner: $$__sveltets_2_IsomorphicComponent<{
26
27
  close: CustomEvent<any>;
27
28
  } & {
28
29
  [evt: string]: CustomEvent<any>;
29
- }, {}, {}, string>;
30
+ }, {}, {}, "funcDesc">;
30
31
  type InsertModuleInner = InstanceType<typeof InsertModuleInner>;
31
32
  export default InsertModuleInner;
@@ -47,6 +47,6 @@ declare const OutputPickerInner: import("svelte").Component<Props, {
47
47
  getPreview: () => "job" | "mock" | undefined;
48
48
  getHistoryOpen: () => boolean;
49
49
  getSelectedJob: () => OutputViewerJob;
50
- }, "mock" | "isLoading">;
50
+ }, "isLoading" | "mock">;
51
51
  type OutputPickerInner = ReturnType<typeof OutputPickerInner>;
52
52
  export default OutputPickerInner;