windmill-components 1.394.7 → 1.405.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/package/ata/edgeCases.d.ts +0 -1
  2. package/package/ata/edgeCases.js +2 -8
  3. package/package/ata/index.js +4 -3
  4. package/package/common.d.ts +1 -1
  5. package/package/common.js +2 -2
  6. package/package/components/ApiConnectForm.svelte +33 -7
  7. package/package/components/ArgInput.svelte +4 -2
  8. package/package/components/CenteredModal.svelte +4 -1
  9. package/package/components/CenteredModal.svelte.d.ts +1 -0
  10. package/package/components/DateInput.svelte +2 -0
  11. package/package/components/DateInput.svelte.d.ts +1 -0
  12. package/package/components/DefaultScripts.svelte +8 -3
  13. package/package/components/DefaultScripts.svelte.d.ts +5 -1
  14. package/package/components/DefaultScriptsInner.svelte +16 -7
  15. package/package/components/DefaultScriptsInner.svelte.d.ts +3 -1
  16. package/package/components/Dev.svelte +68 -11
  17. package/package/components/DropdownV2.svelte.d.ts +3 -3
  18. package/package/components/DropdownV2Inner.svelte.d.ts +3 -3
  19. package/package/components/EditableSchemaForm.svelte +1 -0
  20. package/package/components/Editor.svelte +3 -2
  21. package/package/components/Editor.svelte.d.ts +1 -1
  22. package/package/components/ExecutionDuration.svelte +44 -0
  23. package/package/components/ExecutionDuration.svelte.d.ts +24 -0
  24. package/package/components/FlowBuilder.svelte +20 -12
  25. package/package/components/FlowGraphViewer.svelte +9 -2
  26. package/package/components/FlowGraphViewerStep.svelte +23 -10
  27. package/package/components/FlowJobResult.svelte +0 -1
  28. package/package/components/FlowStatusViewerInner.svelte +17 -4
  29. package/package/components/FlowTimeline.svelte +3 -3
  30. package/package/components/HighlightCode.svelte +3 -0
  31. package/package/components/IconedResourceType.svelte +17 -10
  32. package/package/components/IconedResourceType.svelte.d.ts +2 -0
  33. package/package/components/IdEditorInput.svelte +0 -1
  34. package/package/components/InstanceSettings.svelte +247 -129
  35. package/package/components/InstanceSettings.svelte.d.ts +2 -0
  36. package/package/components/JobArgs.svelte +3 -1
  37. package/package/components/LightweightArgInput.svelte +35 -10
  38. package/package/components/LightweightArgInput.svelte.d.ts +1 -0
  39. package/package/components/LightweightObjectResourceInput.svelte +2 -0
  40. package/package/components/LightweightObjectResourceInput.svelte.d.ts +1 -0
  41. package/package/components/LightweightSchemaForm.svelte +2 -0
  42. package/package/components/LightweightSchemaForm.svelte.d.ts +1 -0
  43. package/package/components/Login.svelte +10 -5
  44. package/package/components/Login.svelte.d.ts +1 -0
  45. package/package/components/ModulePreview.svelte +21 -2
  46. package/package/components/ModuleStatus.svelte +3 -0
  47. package/package/components/ModuleStatus.svelte.d.ts +1 -0
  48. package/package/components/OAuthSetting.svelte +40 -15
  49. package/package/components/ObjectStoreConfigSettings.svelte +78 -76
  50. package/package/components/ParqetCsvTableRenderer.svelte +25 -3
  51. package/package/components/Password.svelte.d.ts +1 -1
  52. package/package/components/Path.svelte +74 -54
  53. package/package/components/Path.svelte.d.ts +2 -1
  54. package/package/components/ResourceEditor.svelte +38 -9
  55. package/package/components/ResultJobLoader.svelte +6 -3
  56. package/package/components/ResultJobLoader.svelte.d.ts +1 -1
  57. package/package/components/ScheduleEditorInner.svelte +2 -2
  58. package/package/components/SchemaForm.svelte +6 -1
  59. package/package/components/ScriptBuilder.svelte +12 -5
  60. package/package/components/ScriptEditor.svelte +33 -3
  61. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  62. package/package/components/Scrollable.svelte +47 -0
  63. package/package/components/Scrollable.svelte.d.ts +21 -0
  64. package/package/components/ShareModal.svelte.d.ts +2 -2
  65. package/package/components/SuperadminSettings.svelte +5 -7
  66. package/package/components/TestJobLoader.svelte +46 -5
  67. package/package/components/TestJobLoader.svelte.d.ts +2 -1
  68. package/package/components/ToggleHubWorkspaceQuick.svelte +14 -0
  69. package/package/components/ToggleHubWorkspaceQuick.svelte.d.ts +16 -0
  70. package/package/components/WorkspaceGroup.svelte +3 -2
  71. package/package/components/apps/components/helpers/DebouncedInput.svelte +9 -1
  72. package/package/components/apps/components/inputs/AppSelect.svelte +1 -1
  73. package/package/components/apps/editor/component/components.d.ts +79 -79
  74. package/package/components/apps/svelte-select/lib/Select.svelte +1 -1
  75. package/package/components/common/fileUpload/FileUpload.svelte +1 -1
  76. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  77. package/package/components/common/menu/Menu.svelte +2 -1
  78. package/package/components/common/menu/MenuV2.svelte +3 -1
  79. package/package/components/common/menu/MenuV2.svelte.d.ts +1 -0
  80. package/package/components/common/popup/Popup.svelte +22 -12
  81. package/package/components/common/popup/Popup.svelte.d.ts +2 -0
  82. package/package/components/common/popup/PopupV2.svelte +58 -0
  83. package/package/components/common/popup/PopupV2.svelte.d.ts +27 -0
  84. package/package/components/copilot/CronGen.svelte +1 -1
  85. package/package/components/copilot/RegexGen.svelte +4 -4
  86. package/package/components/copilot/StepGen.svelte +6 -6
  87. package/package/components/copilot/StepGenQuick.svelte +57 -0
  88. package/package/components/copilot/StepGenQuick.svelte.d.ts +23 -0
  89. package/package/components/copilot/flow.d.ts +2 -0
  90. package/package/components/copilot/flow.js +55 -0
  91. package/package/components/details/DetailPageDetailPanel.svelte +9 -1
  92. package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
  93. package/package/components/details/DetailPageLayout.svelte +2 -0
  94. package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
  95. package/package/components/details/utils.d.ts +0 -1
  96. package/package/components/details/utils.js +1 -12
  97. package/package/components/flows/FlowEditor.svelte +2 -1
  98. package/package/components/flows/FlowProgressBar.svelte +16 -1
  99. package/package/components/flows/FlowProgressBar.svelte.d.ts +1 -0
  100. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +8 -0
  101. package/package/components/flows/content/FlowBranchesAllWrapper.svelte.d.ts +1 -0
  102. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +8 -0
  103. package/package/components/flows/content/FlowBranchesOneWrapper.svelte.d.ts +1 -0
  104. package/package/components/flows/content/FlowConstants.svelte +1 -1
  105. package/package/components/flows/content/FlowEditorPanel.svelte +3 -0
  106. package/package/components/flows/content/FlowInputs.svelte +7 -6
  107. package/package/components/flows/content/FlowInputs.svelte.d.ts +1 -0
  108. package/package/components/flows/content/FlowInputsFlowQuick.svelte +65 -0
  109. package/package/components/flows/content/FlowInputsFlowQuick.svelte.d.ts +19 -0
  110. package/package/components/flows/content/FlowInputsQuick.svelte +419 -0
  111. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +33 -0
  112. package/package/components/flows/content/FlowLoop.svelte +7 -1
  113. package/package/components/flows/content/FlowModuleComponent.svelte +12 -3
  114. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  115. package/package/components/flows/content/FlowModuleSkip.svelte +69 -0
  116. package/package/components/flows/content/FlowModuleSkip.svelte.d.ts +20 -0
  117. package/package/components/flows/content/FlowModuleWrapper.svelte +17 -4
  118. package/package/components/flows/content/FlowPreprocessorModule.svelte +16 -0
  119. package/package/components/flows/content/FlowPreprocessorModule.svelte.d.ts +16 -0
  120. package/package/components/flows/content/FlowWhileLoop.svelte +9 -0
  121. package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +1 -0
  122. package/package/components/flows/content/GenAiQuick.svelte +30 -0
  123. package/package/components/flows/content/GenAiQuick.svelte.d.ts +20 -0
  124. package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -2
  125. package/package/components/flows/flowInfers.js +1 -1
  126. package/package/components/flows/header/FlowPreviewButtons.svelte +1 -0
  127. package/package/components/flows/idUtils.js +3 -1
  128. package/package/components/flows/map/FlowCopilotButton.svelte +55 -0
  129. package/package/components/flows/map/FlowCopilotButton.svelte.d.ts +16 -0
  130. package/package/components/flows/map/FlowErrorHandlerItem.svelte +77 -47
  131. package/package/components/flows/map/FlowJobsMenu.svelte +1 -1
  132. package/package/components/flows/map/FlowModuleSchemaItem.svelte +25 -12
  133. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  134. package/package/components/flows/map/FlowModuleSchemaMap.svelte +61 -18
  135. package/package/components/flows/map/InsertModuleButton.svelte +161 -138
  136. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +7 -4
  137. package/package/components/flows/map/MapItem.svelte +11 -0
  138. package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
  139. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte +48 -0
  140. package/package/components/flows/pickers/FlowScriptPickerQuick.svelte.d.ts +23 -0
  141. package/package/components/flows/pickers/FlowToplevelNode.svelte +19 -0
  142. package/package/components/flows/pickers/FlowToplevelNode.svelte.d.ts +19 -0
  143. package/package/components/flows/pickers/PickHubScriptQuick.svelte +138 -0
  144. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +33 -0
  145. package/package/components/flows/pickers/TopLevelNode.svelte +58 -0
  146. package/package/components/flows/pickers/TopLevelNode.svelte.d.ts +21 -0
  147. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +120 -0
  148. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +35 -0
  149. package/package/components/flows/types.d.ts +1 -0
  150. package/package/components/graph/FlowGraphV2.svelte +93 -58
  151. package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -1
  152. package/package/components/graph/graphBuilder.d.ts +2 -1
  153. package/package/components/graph/graphBuilder.js +345 -280
  154. package/package/components/graph/model.d.ts +1 -0
  155. package/package/components/graph/renderers/edges/BaseEdge.svelte +36 -14
  156. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  157. package/package/components/graph/renderers/nodes/InputNode.svelte +31 -51
  158. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +6 -1
  159. package/package/components/graph/renderers/nodes/ModuleNode.svelte +2 -1
  160. package/package/components/graph/util.d.ts +1 -1
  161. package/package/components/graph/util.js +7 -2
  162. package/package/components/home/ListFiltersQuick.svelte +51 -0
  163. package/package/components/home/ListFiltersQuick.svelte.d.ts +23 -0
  164. package/package/components/icons/AnsibleIcon.svelte +42 -0
  165. package/package/components/icons/AnsibleIcon.svelte.d.ts +25 -0
  166. package/package/components/icons/WindmillIcon2.svelte +141 -0
  167. package/package/components/icons/WindmillIcon2.svelte.d.ts +20 -0
  168. package/package/components/icons/index.d.ts +2 -1
  169. package/package/components/icons/index.js +2 -1
  170. package/package/components/instanceSettings.d.ts +2 -2
  171. package/package/components/instanceSettings.js +25 -58
  172. package/package/components/jobs/JobProgressBar.svelte +52 -0
  173. package/package/components/jobs/JobProgressBar.svelte.d.ts +23 -0
  174. package/package/components/progressBar/ProgressBar.svelte +18 -1
  175. package/package/components/progressBar/ProgressBar.svelte.d.ts +3 -0
  176. package/package/components/runs/JobPreview.svelte +1 -0
  177. package/package/components/runs/PreprocessedArgsDisplay.svelte +71 -0
  178. package/package/components/runs/PreprocessedArgsDisplay.svelte.d.ts +16 -0
  179. package/package/components/schema/AddProperty.svelte +1 -0
  180. package/package/components/schema/EditableSchemaWrapper.svelte +142 -19
  181. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +1 -0
  182. package/package/components/schema/FlowPropertyEditor.svelte +12 -0
  183. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -0
  184. package/package/components/scriptEditor/LogPanel.svelte +1 -0
  185. package/package/components/scriptEditor/LogPanel.svelte.d.ts +3 -1
  186. package/package/components/search/GlobalSearchModal.svelte +2 -1
  187. package/package/components/sidebar/SidebarContent.svelte +69 -8
  188. package/package/components/sidebar/changelogs.js +10 -0
  189. package/package/components/triggers/RouteEditor.svelte +19 -0
  190. package/package/components/triggers/RouteEditor.svelte.d.ts +21 -0
  191. package/package/components/triggers/RouteEditorInner.svelte +327 -0
  192. package/package/components/triggers/RouteEditorInner.svelte.d.ts +21 -0
  193. package/package/components/triggers/RoutesPanel.svelte +74 -0
  194. package/package/components/triggers/RoutesPanel.svelte.d.ts +17 -0
  195. package/package/editorUtils.js +2 -0
  196. package/package/gen/core/OpenAPI.js +1 -1
  197. package/package/gen/schemas.gen.d.ts +159 -8
  198. package/package/gen/schemas.gen.js +161 -8
  199. package/package/gen/services.gen.d.ts +139 -1
  200. package/package/gen/services.gen.js +282 -1
  201. package/package/gen/types.gen.d.ts +455 -12
  202. package/package/hubPaths.json +6 -8
  203. package/package/infer.d.ts +4 -2
  204. package/package/infer.js +25 -23
  205. package/package/inferArgSig.js +8 -2
  206. package/package/monaco_workers/build_workers.js +8 -13
  207. package/package/monaco_workers/graphql.worker.bundle.js +45440 -174
  208. package/package/relative_imports.d.ts +3 -0
  209. package/package/relative_imports.js +25 -0
  210. package/package/script_helpers.d.ts +7 -2
  211. package/package/script_helpers.js +151 -3
  212. package/package/scripts.d.ts +1 -1
  213. package/package/scripts.js +5 -1
  214. package/package/stores.d.ts +1 -0
  215. package/package/stores.js +1 -0
  216. package/package/utils.d.ts +1 -0
  217. package/package/utils.js +4 -0
  218. package/package.json +16 -7
  219. package/package/components/flows/map/InsertTriggerButton.svelte +0 -48
  220. package/package/components/flows/map/InsertTriggerButton.svelte.d.ts +0 -24
  221. package/package/monaco_workers/cssWorker-es.js +0 -43763
  222. package/package/monaco_workers/editorWorker-es.d.ts +0 -2
  223. package/package/monaco_workers/editorWorker-es.js +0 -8066
  224. package/package/monaco_workers/htmlWorker-es.js +0 -21551
  225. package/package/monaco_workers/jsonWorker-es.js +0 -13523
  226. package/package/monaco_workers/tsWorker-es.d.ts +0 -103
  227. package/package/monaco_workers/tsWorker-es.js +0 -212193
@@ -53,11 +53,11 @@ async function createModuleFromScript(path, summary, kind, hash) {
53
53
  {#if flowModule.value.type === 'forloopflow'}
54
54
  <FlowLoop {noEditor} bind:mod={flowModule} {parentModule} {previousModule} {enableAi} />
55
55
  {:else if flowModule.value.type === 'whileloopflow'}
56
- <FlowWhileLoop {noEditor} bind:mod={flowModule} {previousModule} />
56
+ <FlowWhileLoop {noEditor} bind:mod={flowModule} {previousModule} {parentModule} />
57
57
  {:else if flowModule.value.type === 'branchone'}
58
- <FlowBranchesOneWrapper {noEditor} {previousModule} bind:flowModule {enableAi} />
58
+ <FlowBranchesOneWrapper {noEditor} {previousModule} {parentModule} bind:flowModule {enableAi} />
59
59
  {:else if flowModule.value.type === 'branchall'}
60
- <FlowBranchesAllWrapper {noEditor} {previousModule} bind:flowModule />
60
+ <FlowBranchesAllWrapper {noEditor} {previousModule} {parentModule} bind:flowModule />
61
61
  {:else if flowModule.value.type === 'identity'}
62
62
  {#if $selectedId == 'failure'}
63
63
  <div class="p-4">
@@ -65,6 +65,16 @@ async function createModuleFromScript(path, summary, kind, hash) {
65
65
  If defined, the error handler will take the error as input.
66
66
  </Alert>
67
67
  </div>
68
+ {:else if $selectedId == 'preprocessor'}
69
+ <div class="p-4">
70
+ <Alert
71
+ type="info"
72
+ title="Preprocessor is called when the flow is triggered by API or email"
73
+ >
74
+ It prepares arguments for the flow. Besides request arguments, the preprocessor receives a
75
+ `wm_trigger` argument with trigger details.
76
+ </Alert>
77
+ </div>
68
78
  {/if}
69
79
 
70
80
  {#if flowModule.value.flow}
@@ -83,7 +93,8 @@ async function createModuleFromScript(path, summary, kind, hash) {
83
93
  summary={flowModule.summary}
84
94
  shouldDisableTriggerScripts={parentModule !== undefined ||
85
95
  previousModule !== undefined ||
86
- $selectedId == 'failure'}
96
+ $selectedId == 'failure' ||
97
+ $selectedId == 'preprocessor'}
87
98
  on:pick={async ({ detail }) => {
88
99
  const { path, summary, kind, hash } = detail
89
100
  createModuleFromScript(path, summary, kind, hash)
@@ -131,6 +142,7 @@ async function createModuleFromScript(path, summary, kind, hash) {
131
142
  }
132
143
  }}
133
144
  failureModule={$selectedId === 'failure'}
145
+ preprocessorModule={$selectedId === 'preprocessor'}
134
146
  />
135
147
  {/if}
136
148
  {:else if flowModule.value.type === 'rawscript' || flowModule.value.type === 'script' || flowModule.value.type === 'flow'}
@@ -140,6 +152,7 @@ async function createModuleFromScript(path, summary, kind, hash) {
140
152
  {parentModule}
141
153
  {previousModule}
142
154
  failureModule={$selectedId === 'failure'}
155
+ preprocessorModule={$selectedId === 'preprocessor'}
143
156
  {scriptKind}
144
157
  {scriptTemplate}
145
158
  {enableAi}
@@ -0,0 +1,16 @@
1
+ <script>import { getContext } from 'svelte';
2
+ import FlowModuleWrapper from './FlowModuleWrapper.svelte';
3
+ export let noEditor = false;
4
+ const { flowStore } = getContext('FlowEditorContext');
5
+ </script>
6
+
7
+ {#if $flowStore.value.preprocessor_module}
8
+ <FlowModuleWrapper
9
+ {noEditor}
10
+ bind:flowModule={$flowStore.value.preprocessor_module}
11
+ on:delete={() => {
12
+ $flowStore.value.preprocessor_module = undefined
13
+ }}
14
+ previousModule={undefined}
15
+ />
16
+ {/if}
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ noEditor?: boolean | undefined;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type FlowPreprocessorModuleProps = typeof __propDef.props;
12
+ export type FlowPreprocessorModuleEvents = typeof __propDef.events;
13
+ export type FlowPreprocessorModuleSlots = typeof __propDef.slots;
14
+ export default class FlowPreprocessorModule extends SvelteComponent<FlowPreprocessorModuleProps, FlowPreprocessorModuleEvents, FlowPreprocessorModuleSlots> {
15
+ }
16
+ export {};
@@ -13,9 +13,11 @@ import FlowModuleMock from './FlowModuleMock.svelte';
13
13
  import { Play } from 'lucide-svelte';
14
14
  import FlowLoopIterationPreview from '../../FlowLoopIterationPreview.svelte';
15
15
  import FlowModuleDeleteAfterUse from './FlowModuleDeleteAfterUse.svelte';
16
+ import FlowModuleSkip from './FlowModuleSkip.svelte';
16
17
  const { flowStateStore } = getContext('FlowEditorContext');
17
18
  export let mod;
18
19
  export let previousModule;
20
+ export let parentModule;
19
21
  export let noEditor;
20
22
  let selected = 'early-stop';
21
23
  let previewOpen = false;
@@ -96,6 +98,7 @@ $: previewIterationArgs = $flowStateStore[mod.id]?.previewArgs ?? {};
96
98
  <Tabs bind:selected>
97
99
  <!-- <Tab value="retries">Retries</Tab> -->
98
100
  <Tab value="early-stop">Early Stop/Break</Tab>
101
+ <Tab value="skip">Skip</Tab>
99
102
  <Tab value="suspend">Suspend/Approval/Prompt</Tab>
100
103
  <Tab value="sleep">Sleep</Tab>
101
104
  <Tab value="mock">Mock</Tab>
@@ -115,6 +118,12 @@ $: previewIterationArgs = $flowStateStore[mod.id]?.previewArgs ?? {};
115
118
  </div>
116
119
  </TabContent>
117
120
 
121
+ <TabContent value="skip" class="flex flex-col flex-1 h-full">
122
+ <div class="p-4 overflow-y-auto">
123
+ <FlowModuleSkip bind:flowModule={mod} {parentModule} {previousModule} />
124
+ </div>
125
+ </TabContent>
126
+
118
127
  <TabContent value="suspend" class="flex flex-col flex-1 h-full">
119
128
  <div class="p-4 overflow-y-auto">
120
129
  <FlowModuleSuspend previousModuleId={previousModule?.id} bind:flowModule={mod} />
@@ -4,6 +4,7 @@ declare const __propDef: {
4
4
  props: {
5
5
  mod: FlowModule;
6
6
  previousModule: FlowModule | undefined;
7
+ parentModule: FlowModule | undefined;
7
8
  noEditor: boolean;
8
9
  };
9
10
  events: {
@@ -0,0 +1,30 @@
1
+ <script>import { Wand2 } from 'lucide-svelte';
2
+ import { createEventDispatcher } from 'svelte';
3
+ export let funcDesc;
4
+ export let selected;
5
+ export let lang;
6
+ const dispatch = createEventDispatcher();
7
+ const onKeyDown = (e) => {
8
+ if (selected && e.key === 'Enter') {
9
+ e.preventDefault();
10
+ dispatch('click');
11
+ }
12
+ };
13
+ </script>
14
+
15
+ <svelte:window on:keydown={onKeyDown} />
16
+ <button
17
+ class="px-3 py-2 gap-2 w-full text-left hover:bg-surface-hover flex flex-row items-center transition-all rounded-md {selected
18
+ ? 'bg-surface-hover'
19
+ : ''}"
20
+ on:click
21
+ >
22
+ <Wand2 size={14} class="text-violet-800 dark:text-violet-400" />
23
+
24
+ <span class="grow truncate text-left text-2xs text-primary font-normal">
25
+ Generate "{funcDesc}" in {lang}
26
+ </span>
27
+ {#if selected}
28
+ <kbd class="!text-xs">&crarr;</kbd>
29
+ {/if}
30
+ </button>
@@ -0,0 +1,20 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ funcDesc: string;
5
+ selected: boolean;
6
+ lang: string;
7
+ };
8
+ events: {
9
+ click: CustomEvent<any>;
10
+ } & {
11
+ [evt: string]: CustomEvent<any>;
12
+ };
13
+ slots: {};
14
+ };
15
+ export type GenAiQuickProps = typeof __propDef.props;
16
+ export type GenAiQuickEvents = typeof __propDef.events;
17
+ export type GenAiQuickSlots = typeof __propDef.slots;
18
+ export default class GenAiQuick extends SvelteComponent<GenAiQuickProps, GenAiQuickEvents, GenAiQuickSlots> {
19
+ }
20
+ export {};
@@ -29,8 +29,9 @@ async function saveScript() {
29
29
  try {
30
30
  script.schema = script.schema ?? emptySchema();
31
31
  try {
32
- const noMainFunc = await inferArgs(script.language, script.content, script.schema);
33
- script.no_main_func = noMainFunc || undefined;
32
+ const result = await inferArgs(script.language, script.content, script.schema);
33
+ script.no_main_func = result?.no_main_func || undefined;
34
+ script.has_preprocessor = result?.has_preprocessor || undefined;
34
35
  }
35
36
  catch (error) {
36
37
  sendUserToast(`Could not parse code, are you sure it is valid?`, true);
@@ -7,7 +7,7 @@ export async function loadSchemaFromModule(module) {
7
7
  let schema;
8
8
  if (mod.type === 'rawscript') {
9
9
  schema = emptySchema();
10
- await inferArgs(mod.language, mod.content ?? '', schema);
10
+ await inferArgs(mod.language, mod.content ?? '', schema, module.id === 'preprocessor' ? 'preprocessor' : undefined);
11
11
  }
12
12
  else if (mod.type == 'script' && mod.path && mod.path != '') {
13
13
  schema = await loadSchemaFromPath(mod.path, mod.hash);
@@ -35,6 +35,7 @@ $: upToDisabled =
35
35
  'inputs',
36
36
  'schedules',
37
37
  'failure',
38
+ 'preprocessor',
38
39
  'constants',
39
40
  'Result',
40
41
  'Input'
@@ -10,7 +10,9 @@ export const forbiddenIds = [
10
10
  'delete',
11
11
  'while',
12
12
  'new',
13
- 'in'
13
+ 'in',
14
+ 'failure',
15
+ 'preprocessor'
14
16
  ];
15
17
  export function numberToChars(n) {
16
18
  if (n < 0) {
@@ -0,0 +1,55 @@
1
+ <script>import Menu from '../../common/menu/Menu.svelte';
2
+ import Popover from '../../Popover.svelte';
3
+ import { getContext } from 'svelte';
4
+ import { copilotInfo } from '../../../stores';
5
+ import { ExternalLink, Wand2 } from 'lucide-svelte';
6
+ import { base } from '../../../base';
7
+ import { twMerge } from 'tailwind-merge';
8
+ let openNoCopilot = false;
9
+ export let className = '';
10
+ const { drawerStore: copilotDrawerStore } = getContext('FlowCopilotContext') || {};
11
+ </script>
12
+
13
+ <div class={twMerge('absolute left-1/2 transform -translate-x-1/2 z-10', className)}>
14
+ <Popover>
15
+ <div class={openNoCopilot ? 'z-10' : ''}>
16
+ <Menu pointerDown noMinW placement="bottom-center" let:close bind:show={openNoCopilot}>
17
+ <button
18
+ title="AI Flow Builder"
19
+ on:pointerdown={$copilotInfo.exists_openai_resource_path
20
+ ? (ev) => {
21
+ ev.preventDefault()
22
+ ev.stopPropagation()
23
+ $copilotDrawerStore?.openDrawer()
24
+ }
25
+ : undefined}
26
+ slot="trigger"
27
+ type="button"
28
+ class=" bg-surface text-violet-800 dark:text-violet-400 border mx-0.5 focus:outline-none hover:bg-surface-hover focus:ring-4 focus:ring-gray-200 font-medium rounded-full text-sm w-7 h-7 flex items-center justify-center"
29
+ >
30
+ <Wand2 size={12} />
31
+ </button>
32
+ {#if !$copilotInfo.exists_openai_resource_path}
33
+ <div class="text-primary p-4">
34
+ <p class="text-sm w-80">
35
+ Enable Windmill AI in the
36
+ <a
37
+ href="{base}/workspace_settings?tab=openai"
38
+ target="_blank"
39
+ class="inline-flex flex-row items-center gap-1"
40
+ on:click={() => {
41
+ close()
42
+ }}
43
+ >
44
+ workspace settings
45
+ <ExternalLink size={16} />
46
+ </a>
47
+ </p>
48
+ </div>
49
+ {/if}
50
+ </Menu>
51
+ </div>
52
+
53
+ <svelte:fragment slot="text">AI Flow builder</svelte:fragment>
54
+ </Popover>
55
+ </div>
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ className?: string | undefined;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type FlowCopilotButtonProps = typeof __propDef.props;
12
+ export type FlowCopilotButtonEvents = typeof __propDef.events;
13
+ export type FlowCopilotButtonSlots = typeof __propDef.slots;
14
+ export default class FlowCopilotButton extends SvelteComponent<FlowCopilotButtonProps, FlowCopilotButtonEvents, FlowCopilotButtonSlots> {
15
+ }
16
+ export {};
@@ -1,75 +1,105 @@
1
1
  <script>import { getContext } from 'svelte';
2
2
  import { classNames, emptySchema } from '../../../utils';
3
- import Toggle from '../../Toggle.svelte';
4
3
  import { NEVER_TESTED_THIS_FAR } from '../models';
5
4
  import { fade } from 'svelte/transition';
6
- import { Bug } from 'lucide-svelte';
5
+ import { Bug, X } from 'lucide-svelte';
6
+ import InsertModuleButton from './InsertModuleButton.svelte';
7
+ import { createInlineScriptModule, pickScript } from '../flowStateUtils';
8
+ import { twMerge } from 'tailwind-merge';
7
9
  export let small;
8
10
  const { selectedId, flowStateStore, flowStore } = getContext('FlowEditorContext');
9
- function onToggle() {
10
- if ($flowStore?.value?.failure_module) {
11
- $flowStore.value.failure_module = undefined;
12
- // By default, we return to settings when disabling the failure module
13
- $selectedId = 'settings-metadata';
11
+ async function insertNewFailureModule(inlineScript, wsScript) {
12
+ var module = {
13
+ id: 'failure',
14
+ value: { type: 'identity' }
15
+ };
16
+ var state = {
17
+ schema: emptySchema(),
18
+ previewResult: NEVER_TESTED_THIS_FAR
19
+ };
20
+ if (inlineScript) {
21
+ ;
22
+ [module, state] = await createInlineScriptModule(inlineScript.language, 'failure', inlineScript.subkind, 'failure');
14
23
  }
15
- else {
16
- const failureModule = {
17
- schema: emptySchema(),
18
- previewResult: NEVER_TESTED_THIS_FAR
19
- };
20
- $flowStore.value.failure_module = {
21
- id: 'failure',
22
- value: { type: 'identity' }
23
- };
24
- $flowStateStore['failure'] = failureModule;
25
- $selectedId = 'failure';
26
- $flowStore = $flowStore;
24
+ else if (wsScript) {
25
+ ;
26
+ [module, state] = await pickScript(wsScript.path, wsScript.summary, module.id, wsScript.hash);
27
27
  }
28
+ $flowStore.value.failure_module = module;
29
+ $flowStateStore[module.id] = state;
30
+ $selectedId = 'failure';
31
+ $flowStore = $flowStore;
28
32
  }
29
33
  const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotContext') || {};
30
34
  </script>
31
35
 
32
36
  <!-- svelte-ignore a11y-click-events-have-key-events -->
33
37
  <!-- svelte-ignore a11y-no-static-element-interactions -->
38
+
34
39
  <div
40
+ class={classNames(
41
+ 'z-10',
42
+ $copilotCurrentStepStore !== undefined ? 'border-gray-500/75' : 'cursor-pointer',
43
+ 'border transition-colors duration-[400ms] ease-linear rounded-sm px-2 py-1 gap-2 bg-surface text-sm flex items-center flex-row',
44
+ $selectedId?.includes('failure')
45
+ ? 'outline outline-offset-1 outline-2 outline-slate-900 dark:outline-slate-900/0 dark:bg-surface-secondary dark:border-gray-400'
46
+ : ''
47
+ )}
48
+ style="min-width: {small ? '200px' : '230px'}; max-width: 275px;"
35
49
  on:click={() => {
36
50
  if ($copilotCurrentStepStore !== undefined) return
37
51
  if ($flowStore?.value?.failure_module) {
38
52
  $selectedId = 'failure'
39
- } else {
40
- onToggle()
41
53
  }
42
54
  }}
43
- class={classNames(
44
- 'z-10',
45
- $copilotCurrentStepStore !== undefined ? 'border-gray-500/75' : 'cursor-pointer',
46
- 'border transition-colors duration-[400ms] ease-linear rounded-sm px-2 py-1 bg-surface text-sm flex justify-between items-center flex-row overflow-x-hidden relative',
47
- $selectedId?.includes('failure') ? 'outline outline-offset-1 outline-2 outline-slate-900 dark:outline-slate-900/0 dark:bg-surface-secondary dark:border-gray-400' : ''
48
- )}
49
- style={small ? 'min-width: 200px' : 'min-width: 275px'}
50
55
  >
51
56
  {#if $copilotCurrentStepStore !== undefined}
52
57
  <div transition:fade class="absolute inset-0 bg-gray-500 bg-opacity-75 z-[900]" />
53
58
  {/if}
54
- <div class=" flex justify-between items-center flex-wrap gap-2">
55
- <Bug size={16} />
56
- <span class="font-bold text-xs">Error Handler</span>
59
+ <div class="flex items-center grow-0 min-w-0 gap-2">
60
+ <Bug size={16} color={$flowStore?.value?.failure_module ? '#3b82f6' : '#9CA3AF'} />
57
61
  </div>
58
62
 
59
- <div class=" items-center truncate flex text-xs">
60
- {#if Boolean($flowStore?.value?.failure_module)}
61
- <span>
62
- {$flowStore.value.failure_module?.summary ||
63
- ($flowStore.value.failure_module?.value.type === 'rawscript'
64
- ? `${$flowStore.value.failure_module?.value.language}`
65
- : 'TBD')}
66
- </span>
67
- {/if}
68
- </div>
69
- <Toggle
70
- size={small ? 'xs' : 'sm'}
71
- checked={Boolean($flowStore?.value?.failure_module)}
72
- on:change={onToggle}
73
- id="error-handler-toggle"
74
- />
63
+ {#if !$flowStore?.value?.failure_module}
64
+ <div class="grow text-center font-bold text-xs">Error Handler</div>
65
+ {:else}
66
+ <div class="truncate grow min-w-0 text-center text-xs">
67
+ {$flowStore.value.failure_module?.summary ||
68
+ ($flowStore.value.failure_module?.value.type === 'rawscript'
69
+ ? `${$flowStore.value.failure_module?.value.language}`
70
+ : 'TBD')}
71
+ </div>
72
+ {/if}
73
+
74
+ {#if !$flowStore?.value?.failure_module}
75
+ <InsertModuleButton
76
+ disableAi={false}
77
+ index={0}
78
+ placement={'top-center'}
79
+ on:new={(e) => {
80
+ insertNewFailureModule(e.detail.inlineScript)
81
+ }}
82
+ on:pickScript={(e) => {
83
+ insertNewFailureModule(undefined, e.detail)
84
+ }}
85
+ kind="failure"
86
+ />
87
+ {:else}
88
+ <button
89
+ title="Delete failure script"
90
+ type="button"
91
+ class={twMerge(
92
+ 'w-5 h-5 flex items-center justify-center grow-0 shrink-0',
93
+ 'outline-[1px] outline dark:outline-gray-500 outline-gray-300',
94
+ 'text-secondary',
95
+ 'bg-surface focus:outline-none hover:bg-surface-hover rounded '
96
+ )}
97
+ on:click={() => {
98
+ $flowStore.value.failure_module = undefined
99
+ $selectedId = 'settings-metadata'
100
+ }}
101
+ >
102
+ <X size={12} />
103
+ </button>
104
+ {/if}
75
105
  </div>
@@ -20,7 +20,7 @@ function onKeydown(event) {
20
20
  }
21
21
  </script>
22
22
 
23
- <Menu>
23
+ <Menu maxHeight={300}>
24
24
  <div slot="trigger">
25
25
  <button
26
26
  title="Pick an iteration"
@@ -1,7 +1,7 @@
1
1
  <script>import Badge from '../../common/badge/Badge.svelte';
2
2
  import Popover from '../../Popover.svelte';
3
3
  import { classNames } from '../../../utils';
4
- import { AlertTriangle, Bed, Database, Gauge, Move, Pencil, PhoneIncoming, Repeat, Square, Voicemail, X } from 'lucide-svelte';
4
+ import { AlertTriangle, Bed, Database, Gauge, Move, Pencil, PhoneIncoming, Repeat, Square, SkipForward, Voicemail, X } from 'lucide-svelte';
5
5
  import { createEventDispatcher, getContext } from 'svelte';
6
6
  import { fade } from 'svelte/transition';
7
7
  import { get } from 'svelte/store';
@@ -17,6 +17,7 @@ export let deletable = false;
17
17
  export let retry = false;
18
18
  export let cache = false;
19
19
  export let earlyStop = false;
20
+ export let skip = false;
20
21
  export let suspend = false;
21
22
  export let sleep = false;
22
23
  export let mock = false;
@@ -156,6 +157,17 @@ let hover = false;
156
157
  <svelte:fragment slot="text">Early stop/break</svelte:fragment>
157
158
  </Popover>
158
159
  {/if}
160
+ {#if skip}
161
+ <Popover notClickable>
162
+ <div
163
+ transition:fade|local={{ duration: 200 }}
164
+ class="center-center bg-surface rounded border border-gray-400 text-secondary px-1 py-0.5"
165
+ >
166
+ <SkipForward size={12} />
167
+ </div>
168
+ <svelte:fragment slot="text">Skip</svelte:fragment>
169
+ </Popover>
170
+ {/if}
159
171
  {#if suspend}
160
172
  <Popover notClickable>
161
173
  <div
@@ -199,13 +211,12 @@ let hover = false;
199
211
  <slot name="icon" />
200
212
  {/if}
201
213
  <div class="truncate" class:font-bold={bold}>{label}</div>
202
- <div class="flex items-center relative">
203
- {#if id}
214
+ <div class="flex items-center space-x-2 relative">
215
+ {#if id && id !== 'preprocessor' && !id.startsWith('failure')}
204
216
  <Badge color="indigo">{id}</Badge>
205
-
206
217
  {#if deletable}
207
218
  <button
208
- class="absolute -left-[20px] z-10 h-[20px] rounded-l rounded-t rounded-s w-[20px] trash center-center text-secondary bg-surface duration-150 hover:bg-blue-400 {editId
219
+ class="absolute -left-[28px] z-10 h-[20px] rounded-l rounded-t rounded-s w-[20px] trash center-center text-secondary bg-surface duration-150 hover:bg-blue-400 {editId
209
220
  ? '!bg-blue-400'
210
221
  : ''} hover:text-white
211
222
  hover:border-blue-700 hover:!visible {hover ? '' : '!hidden'}"
@@ -228,15 +239,17 @@ hover:border-blue-700 hover:!visible {hover ? '' : '!hidden'}"
228
239
  <X class="mx-[3px]" size={12} strokeWidth={2} />
229
240
  </button>
230
241
 
231
- <button
232
- class="absolute -top-[10px] right-[60px] rounded-full h-[20px] w-[20px] trash center-center text-secondary
242
+ {#if id !== 'preprocessor'}
243
+ <button
244
+ class="absolute -top-[10px] right-[60px] rounded-full h-[20px] w-[20px] trash center-center text-secondary
233
245
  outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration-150 hover:bg-blue-400 hover:text-white
234
246
  {hover ? '' : '!hidden'}"
235
- on:click|preventDefault|stopPropagation={(event) => dispatch('move')}
236
- title="Move"
237
- >
238
- <Move class="mx-[3px]" size={12} strokeWidth={2} />
239
- </button>
247
+ on:click|preventDefault|stopPropagation={(event) => dispatch('move')}
248
+ title="Move"
249
+ >
250
+ <Move class="mx-[3px]" size={12} strokeWidth={2} />
251
+ </button>
252
+ {/if}
240
253
 
241
254
  {#if (id && Object.values($flowInputsStore?.[id]?.flowStepWarnings || {}).length > 0) || Boolean(warningMessage)}
242
255
  <div class="absolute -top-[10px] -left-[10px]">
@@ -6,6 +6,7 @@ declare const __propDef: {
6
6
  retry?: boolean | undefined;
7
7
  cache?: boolean | undefined;
8
8
  earlyStop?: boolean | undefined;
9
+ skip?: boolean | undefined;
9
10
  suspend?: boolean | undefined;
10
11
  sleep?: boolean | undefined;
11
12
  mock?: boolean | undefined;