windmill-components 1.504.6 → 1.511.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 (233) hide show
  1. package/package/ata/index.js +1 -1
  2. package/package/components/AppConnectInner.svelte +184 -29
  3. package/package/components/ArgInput.svelte +33 -103
  4. package/package/components/AuthSettings.svelte +45 -1
  5. package/package/components/Dev.svelte +31 -24
  6. package/package/components/DisplayResult.svelte +53 -26
  7. package/package/components/DisplayResult.svelte.d.ts +1 -1
  8. package/package/components/DynSelect.svelte +3 -3
  9. package/package/components/Editor.svelte +115 -88
  10. package/package/components/Editor.svelte.d.ts +30 -55
  11. package/package/components/EditorBar.svelte +2 -2
  12. package/package/components/ErrorOrRecoveryHandler.svelte +73 -67
  13. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +8 -24
  14. package/package/components/FlowBuilder.svelte +11 -2
  15. package/package/components/FlowJobResult.svelte +12 -17
  16. package/package/components/FlowJobResult.svelte.d.ts +5 -18
  17. package/package/components/FlowPreviewContent.svelte +13 -10
  18. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  19. package/package/components/FlowPreviewResult.svelte +14 -6
  20. package/package/components/FlowStatusViewer.svelte +11 -24
  21. package/package/components/FlowStatusViewer.svelte.d.ts +19 -18
  22. package/package/components/FlowStatusViewerInner.svelte +110 -131
  23. package/package/components/FlowStatusViewerInner.svelte.d.ts +20 -18
  24. package/package/components/GitDiffPreview.svelte +55 -0
  25. package/package/components/GitDiffPreview.svelte.d.ts +13 -0
  26. package/package/components/HistoricInputs.svelte +2 -2
  27. package/package/components/HttpAgentWorkerDrawer.svelte +1 -1
  28. package/package/components/InitGitRepoPopover.svelte +410 -0
  29. package/package/components/InitGitRepoPopover.svelte.d.ts +13 -0
  30. package/package/components/InstanceSetting.svelte +21 -9
  31. package/package/components/InstanceSettings.svelte +16 -3
  32. package/package/components/JobLoader.svelte +567 -0
  33. package/package/components/JobLoader.svelte.d.ts +53 -0
  34. package/package/components/JobLogs.svelte +6 -4
  35. package/package/components/JobLogs.svelte.d.ts +5 -18
  36. package/package/components/JsonEditor.svelte +11 -11
  37. package/package/components/JsonEditor.svelte.d.ts +14 -56
  38. package/package/components/Label.svelte +6 -11
  39. package/package/components/Label.svelte.d.ts +14 -39
  40. package/package/components/LightweightResourcePicker.svelte +18 -39
  41. package/package/components/LightweightResourcePicker.svelte.d.ts +6 -22
  42. package/package/components/LogViewer.svelte +35 -41
  43. package/package/components/LogViewer.svelte.d.ts +6 -20
  44. package/package/components/ModulePreviewResultViewer.svelte +3 -1
  45. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -0
  46. package/package/components/ModuleTest.svelte +16 -11
  47. package/package/components/NumberTypeNarrowing.svelte +13 -16
  48. package/package/components/NumberTypeNarrowing.svelte.d.ts +4 -18
  49. package/package/components/PullGitRepoPopover.svelte +355 -0
  50. package/package/components/PullGitRepoPopover.svelte.d.ts +18 -0
  51. package/package/components/ResourceTypePicker.svelte +20 -17
  52. package/package/components/ResourceTypePicker.svelte.d.ts +7 -6
  53. package/package/components/S3FilePicker.svelte +5 -3
  54. package/package/components/SavedInputs.svelte +2 -2
  55. package/package/components/ScriptBuilder.svelte +4 -3
  56. package/package/components/ScriptEditor.svelte +34 -31
  57. package/package/components/ScriptEditor.svelte.d.ts +3 -3
  58. package/package/components/Section.svelte +7 -20
  59. package/package/components/Section.svelte.d.ts +20 -47
  60. package/package/components/ServiceLogsInner.svelte +2 -1
  61. package/package/components/ServiceLogsInner.svelte.d.ts +1 -0
  62. package/package/components/SimpleEditor.svelte +4 -4
  63. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  64. package/package/components/SqlRepl.svelte +0 -1
  65. package/package/components/Subsection.svelte +10 -12
  66. package/package/components/Subsection.svelte.d.ts +15 -39
  67. package/package/components/UserSettings.svelte +1 -1
  68. package/package/components/WorkerGroup.svelte +260 -165
  69. package/package/components/WorkerGroup.svelte.d.ts +2 -0
  70. package/package/components/WorkerTagPicker.svelte +3 -3
  71. package/package/components/WorkerTagSelect.svelte +33 -4
  72. package/package/components/apps/components/buttons/AppButton.svelte +7 -1
  73. package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  74. package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
  75. package/package/components/apps/components/display/AppDisplayComponentByJobId.svelte +16 -11
  76. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +13 -10
  77. package/package/components/apps/components/display/AppMenu.svelte +5 -0
  78. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +3 -3
  79. package/package/components/apps/components/display/dbtable/DeleteRow.svelte +3 -3
  80. package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +3 -3
  81. package/package/components/apps/components/display/dbtable/UpdateCell.svelte +3 -3
  82. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +3 -3
  83. package/package/components/apps/components/helpers/RunnableComponent.svelte +65 -54
  84. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -5
  85. package/package/components/apps/components/inputs/AppUserResource.svelte +26 -8
  86. package/package/components/apps/editor/AppEditorHeader.svelte +11 -5
  87. package/package/components/apps/editor/AppJobsDrawer.svelte +5 -5
  88. package/package/components/apps/editor/RunnableJobPanel.svelte +4 -4
  89. package/package/components/apps/editor/component/components.d.ts +12 -0
  90. package/package/components/apps/editor/component/components.js +19 -7
  91. package/package/components/assets/AssetButtons.svelte +38 -0
  92. package/package/components/assets/AssetButtons.svelte.d.ts +15 -0
  93. package/package/components/assets/AssetsDropdownButton.svelte +60 -72
  94. package/package/components/assets/AssetsDropdownButton.svelte.d.ts +3 -4
  95. package/package/components/assets/AssetsUsageDrawer.svelte +10 -10
  96. package/package/components/assets/JobAssetsViewer.svelte +79 -0
  97. package/package/components/assets/JobAssetsViewer.svelte.d.ts +7 -0
  98. package/package/components/assets/README_DEV.md +0 -0
  99. package/package/components/assets/lib.d.ts +9 -1
  100. package/package/components/assets/lib.js +48 -7
  101. package/package/components/common/fileUpload/FileUpload.svelte +126 -84
  102. package/package/components/common/fileUpload/FileUpload.svelte.d.ts +13 -3
  103. package/package/components/common/fileUpload/S3ArgInput.svelte +111 -0
  104. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +21 -0
  105. package/package/components/common/table/ScriptRow.svelte +3 -1
  106. package/package/components/copilot/AIFormSettings.svelte +3 -4
  107. package/package/components/copilot/AIFormSettings.svelte.d.ts +5 -19
  108. package/package/components/copilot/autocomplete/Autocompletor.d.ts +3 -1
  109. package/package/components/copilot/autocomplete/Autocompletor.js +269 -35
  110. package/package/components/copilot/autocomplete/request.d.ts +3 -0
  111. package/package/components/copilot/autocomplete/request.js +15 -7
  112. package/package/components/copilot/chat/AIChatDisplay.svelte +8 -0
  113. package/package/components/copilot/chat/AIChatManager.svelte.js +13 -8
  114. package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte +5 -5
  115. package/package/components/copilot/chat/flow/core.d.ts +1 -1
  116. package/package/components/copilot/chat/flow/core.js +2 -38
  117. package/package/components/copilot/chat/navigator/apiTools.d.ts +8 -0
  118. package/package/components/copilot/chat/navigator/apiTools.js +95 -15
  119. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  120. package/package/components/copilot/chat/navigator/core.js +2 -1
  121. package/package/components/copilot/chat/script/core.d.ts +11 -2
  122. package/package/components/copilot/chat/script/core.js +165 -23
  123. package/package/components/copilot/chat/shared.d.ts +10 -0
  124. package/package/components/copilot/chat/shared.js +56 -0
  125. package/package/components/copilot/lib.d.ts +1 -0
  126. package/package/components/copilot/lib.js +30 -9
  127. package/package/components/custom_ui.d.ts +1 -0
  128. package/package/components/flows/FlowAssetsHandler.svelte +133 -0
  129. package/package/components/flows/FlowAssetsHandler.svelte.d.ts +14 -0
  130. package/package/components/flows/content/FlowModuleCache.svelte +4 -4
  131. package/package/components/flows/content/FlowModuleCache.svelte.d.ts +4 -18
  132. package/package/components/flows/content/FlowModuleComponent.svelte +16 -19
  133. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +3 -4
  134. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte.d.ts +4 -18
  135. package/package/components/flows/content/FlowModuleSleep.svelte +6 -7
  136. package/package/components/flows/content/FlowModuleSleep.svelte.d.ts +4 -18
  137. package/package/components/flows/content/FlowModuleSuspend.svelte +19 -17
  138. package/package/components/flows/content/FlowModuleSuspend.svelte.d.ts +4 -18
  139. package/package/components/flows/content/FlowModuleTimeout.svelte +4 -4
  140. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +4 -18
  141. package/package/components/flows/flowStore.d.ts +1 -1
  142. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -0
  143. package/package/components/flows/propPicker/OutputPicker.svelte +9 -4
  144. package/package/components/flows/scheduleUtils.js +1 -1
  145. package/package/components/flows/types.d.ts +2 -1
  146. package/package/components/graph/FlowGraphV2.svelte +8 -104
  147. package/package/components/graph/FlowGraphV2.svelte.d.ts +0 -2
  148. package/package/components/graph/graphBuilder.svelte.d.ts +6 -3
  149. package/package/components/graph/graphBuilder.svelte.js +35 -9
  150. package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -5
  151. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +1 -0
  152. package/package/components/graph/renderers/nodes/AssetNode.svelte +23 -20
  153. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +5 -10
  154. package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
  155. package/package/components/graph/util.js +1 -1
  156. package/package/components/home/ItemsList.svelte +2 -0
  157. package/package/components/icons/AssetGenericIcon.svelte +0 -3
  158. package/package/components/jobs/JobPreview.svelte +10 -6
  159. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +13 -12
  160. package/package/components/runs/BatchReRunOptionsPane.svelte +5 -1
  161. package/package/components/runs/JobPreview.svelte +26 -16
  162. package/package/components/runs/{JobLoader.svelte.d.ts → JobsLoader.svelte.d.ts} +3 -3
  163. package/package/components/runs/NoWorkerWithTagWarning.svelte +2 -2
  164. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -0
  165. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  166. package/package/components/scriptEditor/LogPanel.svelte +3 -2
  167. package/package/components/script_builder.d.ts +2 -2
  168. package/package/components/settings/CreateToken.svelte +76 -41
  169. package/package/components/settings/CreateToken.svelte.d.ts +1 -1
  170. package/package/components/settings/ScopeSelector.svelte +613 -0
  171. package/package/components/settings/ScopeSelector.svelte.d.ts +8 -0
  172. package/package/components/settings/TokenDisplay.svelte +103 -0
  173. package/package/components/settings/TokenDisplay.svelte.d.ts +10 -0
  174. package/package/components/settings/TokensTable.svelte +70 -349
  175. package/package/components/sidebar/CriticalAlertModal.svelte +3 -0
  176. package/package/components/triggers/DeleteTriggerButton.svelte +1 -1
  177. package/package/components/triggers/TriggerEditorToolbar.svelte +3 -3
  178. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte +55 -0
  179. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +13 -0
  180. package/package/components/triggers/TriggersEditor.svelte +45 -3
  181. package/package/components/triggers/TriggersWrapper.svelte +2 -2
  182. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +47 -6
  183. package/package/components/triggers/gcp/utils.js +9 -1
  184. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +3 -2
  185. package/package/components/triggers/http/RouteEditorConfigSection.svelte +26 -23
  186. package/package/components/triggers/http/RouteEditorConfigSection.svelte.d.ts +5 -19
  187. package/package/components/triggers/http/RouteEditorInner.svelte +219 -175
  188. package/package/components/triggers/http/RouteEditorInner.svelte.d.ts +6 -2
  189. package/package/components/triggers/http/utils.js +9 -3
  190. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +47 -6
  191. package/package/components/triggers/kafka/utils.js +9 -1
  192. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte +4 -132
  193. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +2 -5
  194. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +182 -13
  195. package/package/components/triggers/mqtt/utils.js +9 -1
  196. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +47 -6
  197. package/package/components/triggers/nats/utils.js +9 -1
  198. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +41 -2
  199. package/package/components/triggers/postgres/utils.js +9 -1
  200. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +38 -92
  201. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +47 -6
  202. package/package/components/triggers/sqs/utils.js +9 -1
  203. package/package/components/triggers/utils.js +12 -0
  204. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +47 -6
  205. package/package/components/triggers/websocket/utils.js +11 -1
  206. package/package/components/workspaceSettings/AISettings.svelte +0 -2
  207. package/package/components/workspaceSettings/FilterList.svelte +56 -0
  208. package/package/components/workspaceSettings/FilterList.svelte.d.ts +8 -0
  209. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +785 -0
  210. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +18 -0
  211. package/package/gen/core/OpenAPI.js +1 -1
  212. package/package/gen/schemas.gen.d.ts +305 -23
  213. package/package/gen/schemas.gen.js +305 -23
  214. package/package/gen/services.gen.d.ts +33 -1
  215. package/package/gen/services.gen.js +66 -2
  216. package/package/gen/types.gen.d.ts +216 -11
  217. package/package/history.svelte.js +0 -2
  218. package/package/hub.d.ts +1 -0
  219. package/package/hubPaths.json +5 -2
  220. package/package/infer.js +16 -10
  221. package/package/svelte5Utils.svelte.d.ts +1 -0
  222. package/package/svelte5Utils.svelte.js +25 -18
  223. package/package/toast.js +10 -0
  224. package/package/utils.d.ts +3 -2
  225. package/package/utils.js +20 -5
  226. package/package.json +11 -11
  227. package/package/components/ResultJobLoader.svelte +0 -219
  228. package/package/components/ResultJobLoader.svelte.d.ts +0 -52
  229. package/package/components/TestJobLoader.svelte +0 -274
  230. package/package/components/TestJobLoader.svelte.d.ts +0 -43
  231. package/package/components/icons/AssetVarIcon.svelte +0 -31
  232. package/package/components/icons/AssetVarIcon.svelte.d.ts +0 -9
  233. /package/package/components/runs/{JobLoader.svelte → JobsLoader.svelte} +0 -0
@@ -66,6 +66,23 @@ function getModelMaxTokens(model) {
66
66
  }
67
67
  return 8192;
68
68
  }
69
+ export function getModelContextWindow(model) {
70
+ if (model.startsWith('gpt-4.1') || model.startsWith('gemini')) {
71
+ return 1000000;
72
+ }
73
+ else if (model.startsWith('gpt-4o') || model.startsWith('llama-3.3')) {
74
+ return 128000;
75
+ }
76
+ else if (model.startsWith('claude') || model.startsWith('o4-mini') || model.startsWith('o3')) {
77
+ return 200000;
78
+ }
79
+ else if (model.startsWith('codestral')) {
80
+ return 32000;
81
+ }
82
+ else {
83
+ return 128000;
84
+ }
85
+ }
69
86
  function getModelSpecificConfig(modelProvider, tools) {
70
87
  if ((modelProvider.provider === 'openai' || modelProvider.provider === 'azure_openai') &&
71
88
  modelProvider.model.startsWith('o')) {
@@ -373,6 +390,7 @@ const mistralFimResponseSchema = z.object({
373
390
  }))
374
391
  });
375
392
  export const FIM_MAX_TOKENS = 256;
393
+ const FIM_MAX_LINES = 8;
376
394
  export async function getFimCompletion(prompt, suffix, providerModel, abortController) {
377
395
  const fetchOptions = {
378
396
  signal: abortController.signal,
@@ -396,16 +414,19 @@ export async function getFimCompletion(prompt, suffix, providerModel, abortContr
396
414
  const body = await response.json();
397
415
  const parsedBody = mistralFimResponseSchema.parse(body);
398
416
  const choice = parsedBody.choices[0];
399
- if (choice) {
400
- if (choice.finish_reason === 'length' && choice.message.content) {
401
- // take all the lines before the last
402
- const lines = choice.message.content.split('\n');
403
- const joined = lines.slice(0, -1).join('\n');
404
- return joined;
405
- }
406
- else {
407
- return choice.message.content || '';
417
+ if (choice && choice.message.content !== undefined) {
418
+ let lines = choice.message.content.split('\n');
419
+ // If finish_reason is 'length', remove the last line
420
+ if (choice.finish_reason === 'length') {
421
+ if (lines.length > 1) {
422
+ lines = lines.slice(0, -1);
423
+ }
424
+ else {
425
+ lines = [];
426
+ }
408
427
  }
428
+ lines = lines.slice(0, FIM_MAX_LINES);
429
+ return lines.join('\n');
409
430
  }
410
431
  else {
411
432
  return undefined;
@@ -53,6 +53,7 @@ export type PreviewPanelUi = {
53
53
  displayResult?: DisplayResultUi;
54
54
  disableVariablePicker?: boolean;
55
55
  disableDownload?: boolean;
56
+ tagLabel?: string;
56
57
  };
57
58
  export type EditorBarUi = {
58
59
  contextVar?: boolean;
@@ -0,0 +1,133 @@
1
+ <script lang="ts" module>export function initFlowGraphAssetsCtx({ getModules }) {
2
+ let s = $state({
3
+ val: {
4
+ selectedAsset: undefined,
5
+ dbManagerDrawer: undefined,
6
+ s3FilePicker: undefined,
7
+ resourceEditorDrawer: undefined,
8
+ resourceMetadataCache: {},
9
+ additionalAssetsMap: {},
10
+ computeAssetsCount: (asset) => {
11
+ return getAllModules(getModules())
12
+ .flatMap((m) => getFlowModuleAssets(m, s.val.additionalAssetsMap) ?? [])
13
+ .filter((a) => assetEq(asset, a)).length;
14
+ }
15
+ }
16
+ });
17
+ return s;
18
+ }
19
+ </script>
20
+
21
+ <script lang="ts">import { inferAssets } from '../../infer';
22
+ import { assetEq, getFlowModuleAssets } from '../assets/lib';
23
+ import OnChange from '../common/OnChange.svelte';
24
+ import { getAllModules } from './flowExplorer';
25
+ import { getContext, untrack } from 'svelte';
26
+ import { AssetService, ResourceService } from '../../gen';
27
+ import { deepEqual } from 'fast-equals';
28
+ import { workspaceStore } from '../../stores';
29
+ import S3FilePicker from '../S3FilePicker.svelte';
30
+ import DbManagerDrawer from '../DBManagerDrawer.svelte';
31
+ import ResourceEditorDrawer from '../ResourceEditorDrawer.svelte';
32
+ let { modules, enableParser = false, enableDbExplore = false, enablePathScriptAndFlowAssets = false } = $props();
33
+ const flowGraphAssetsCtx = getContext('FlowGraphAssetContext');
34
+ let allModules = $derived(getAllModules(modules));
35
+ // Fetch resource metadata for the ExploreAssetButton
36
+ const resMetadataCache = $derived(flowGraphAssetsCtx?.val.resourceMetadataCache);
37
+ $effect(() => {
38
+ if (!resMetadataCache || !enableDbExplore)
39
+ return;
40
+ const assets = allModules.flatMap((m) => getFlowModuleAssets(m, flowGraphAssetsCtx?.val.additionalAssetsMap) ?? []) ?? [];
41
+ for (const asset of assets) {
42
+ if (asset.kind !== 'resource' || asset.path in resMetadataCache)
43
+ continue;
44
+ resMetadataCache[asset.path] = undefined; // avoid fetching multiple times because of async
45
+ ResourceService.getResource({ path: asset.path, workspace: $workspaceStore })
46
+ .then((r) => (resMetadataCache[asset.path] = { resource_type: r.resource_type }))
47
+ .catch((err) => {
48
+ console.error("Couldn't fetch resource", asset.path, err);
49
+ });
50
+ }
51
+ });
52
+ // Fetch transitive assets (path scripts and flows)
53
+ $effect(() => {
54
+ if (!$workspaceStore || !flowGraphAssetsCtx || !enablePathScriptAndFlowAssets)
55
+ return;
56
+ let usages = [];
57
+ let modIds = [];
58
+ for (const mod of allModules) {
59
+ if (mod.id in flowGraphAssetsCtx.val.additionalAssetsMap)
60
+ continue;
61
+ flowGraphAssetsCtx.val.additionalAssetsMap[mod.id] = []; // avoid fetching multiple times because of async
62
+ if (mod.value.type === 'flow' || mod.value.type === 'script') {
63
+ usages.push({ path: mod.value.path, kind: mod.value.type });
64
+ modIds.push(mod.id);
65
+ }
66
+ }
67
+ if (usages.length) {
68
+ AssetService.listAssetsByUsage({
69
+ workspace: $workspaceStore,
70
+ requestBody: { usages }
71
+ }).then((result) => {
72
+ result.forEach((assets, idx) => {
73
+ flowGraphAssetsCtx.val.additionalAssetsMap[modIds[idx]] = assets;
74
+ });
75
+ });
76
+ }
77
+ });
78
+ // Prune all additionalAssetsMap entries from deleted modules
79
+ $effect(() => {
80
+ if (!flowGraphAssetsCtx)
81
+ return;
82
+ const modulesSet = new Set(allModules.map((m) => m.id));
83
+ for (const key of Object.keys(flowGraphAssetsCtx.val.additionalAssetsMap)) {
84
+ if (!modulesSet.has(key)) {
85
+ delete flowGraphAssetsCtx.val.additionalAssetsMap[key];
86
+ }
87
+ }
88
+ });
89
+ async function parseAndUpdateRawScriptModule(v) {
90
+ try {
91
+ let parsedAssets = await inferAssets(v.language, v.content);
92
+ for (const asset of parsedAssets) {
93
+ const old = v.assets?.find((a) => assetEq(a, asset));
94
+ if (old?.alt_access_type)
95
+ asset.alt_access_type = old.alt_access_type;
96
+ }
97
+ if (!deepEqual(v.assets, parsedAssets))
98
+ v.assets = parsedAssets;
99
+ }
100
+ catch (e) { }
101
+ }
102
+ // Check for raw script modules whose assets were not parsed. Useful for flows created
103
+ // before the assets feature was introduced.
104
+ $effect(() => {
105
+ if (!enableParser)
106
+ return;
107
+ untrack(() => {
108
+ setTimeout(() => {
109
+ for (const mod of allModules) {
110
+ if (mod.value.type === 'rawscript' && mod.value.assets === undefined) {
111
+ console.log('RawScript module', mod.id, 'without assets field, parsing');
112
+ parseAndUpdateRawScriptModule(mod.value);
113
+ }
114
+ }
115
+ }, 500); // ensure modules are loaded
116
+ });
117
+ });
118
+ </script>
119
+
120
+ {#if enableParser}
121
+ {#each allModules as mod (mod.id)}
122
+ {#if mod.value.type === 'rawscript'}
123
+ {@const v = mod.value}
124
+ <OnChange key={v.content} onChange={() => parseAndUpdateRawScriptModule(v)} />
125
+ {/if}
126
+ {/each}
127
+ {/if}
128
+
129
+ {#if flowGraphAssetsCtx}
130
+ <S3FilePicker bind:this={flowGraphAssetsCtx.val.s3FilePicker} readOnlyMode />
131
+ <DbManagerDrawer bind:this={flowGraphAssetsCtx.val.dbManagerDrawer} />
132
+ <ResourceEditorDrawer bind:this={flowGraphAssetsCtx.val.resourceEditorDrawer} />
133
+ {/if}
@@ -0,0 +1,14 @@
1
+ export declare function initFlowGraphAssetsCtx({ getModules }: {
2
+ getModules: () => FlowModule[];
3
+ }): FlowGraphAssetContext;
4
+ import type { FlowGraphAssetContext } from './types';
5
+ import { type FlowModule } from '../../gen';
6
+ type $$ComponentProps = {
7
+ modules: FlowModule[];
8
+ enableParser?: boolean;
9
+ enableDbExplore?: boolean;
10
+ enablePathScriptAndFlowAssets?: boolean;
11
+ };
12
+ declare const FlowAssetsHandler: import("svelte").Component<$$ComponentProps, {}, "">;
13
+ type FlowAssetsHandler = ReturnType<typeof FlowAssetsHandler>;
14
+ export default FlowAssetsHandler;
@@ -3,18 +3,18 @@ import Section from '../../Section.svelte';
3
3
  import Toggle from '../../Toggle.svelte';
4
4
  import Tooltip from '../../Tooltip.svelte';
5
5
  import { SecondsInput } from '../../common';
6
- export let flowModule;
7
- $: isCacheEnabled = Boolean(flowModule.cache_ttl);
6
+ let { flowModule = $bindable() } = $props();
7
+ let isCacheEnabled = $derived(Boolean(flowModule.cache_ttl));
8
8
  </script>
9
9
 
10
10
  <Section label="Cache" class="flex flex-col gap-4">
11
- <svelte:fragment slot="header">
11
+ {#snippet header()}
12
12
  <Tooltip documentationLink="https://www.windmill.dev/docs/flows/cache">
13
13
  If defined, the result of the step will be cached for the number of seconds defined such that
14
14
  if this step were to be re-triggered with the same input it would retrieve and return its
15
15
  cached value instead of recomputing it.
16
16
  </Tooltip>
17
- </svelte:fragment>
17
+ {/snippet}
18
18
 
19
19
  {#if flowModule.value.type != 'rawscript'}
20
20
  <p
@@ -1,21 +1,7 @@
1
1
  import type { FlowModule } from '../../../gen';
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports & {
10
- $set?: any;
11
- $on?: any;
12
- };
13
- z_$$bindings?: Bindings;
14
- }
15
- declare const FlowModuleCache: $$__sveltets_2_IsomorphicComponent<{
2
+ interface Props {
16
3
  flowModule: FlowModule;
17
- }, {
18
- [evt: string]: CustomEvent<any>;
19
- }, {}, {}, string>;
20
- type FlowModuleCache = InstanceType<typeof FlowModuleCache>;
4
+ }
5
+ declare const FlowModuleCache: import("svelte").Component<Props, {}, "flowModule">;
6
+ type FlowModuleCache = ReturnType<typeof FlowModuleCache>;
21
7
  export default FlowModuleCache;
@@ -45,10 +45,9 @@ import { JobService } from '../../../gen';
45
45
  import { workspaceStore } from '../../../stores';
46
46
  import { checkIfParentLoop } from '../utils';
47
47
  import ModulePreviewResultViewer from '../../ModulePreviewResultViewer.svelte';
48
- import { refreshStateStore, usePromise } from '../../../svelte5Utils.svelte';
48
+ import { refreshStateStore } from '../../../svelte5Utils.svelte';
49
49
  import { getStepHistoryLoaderContext } from '../../stepHistoryLoader.svelte';
50
50
  import AssetsDropdownButton from '../../assets/AssetsDropdownButton.svelte';
51
- import { inferAssets } from '../../../infer';
52
51
  const { selectedId, currentEditor, previewArgs, flowStateStore, flowStore, pathStore, saveDraft, customUi, executionCount } = getContext('FlowEditorContext');
53
52
  let { flowModule = $bindable(), failureModule = false, preprocessorModule = false, parentModule = $bindable(), previousModule, scriptKind = 'script', scriptTemplate = 'script', noEditor, enableAi, savedModule = undefined, forceTestTab = false, highlightArg = undefined } = $props();
54
53
  let workspaceScriptTag = $state(undefined);
@@ -74,6 +73,7 @@ let lastJob = $state(undefined);
74
73
  let testJob = $state(undefined);
75
74
  let testIsLoading = $state(false);
76
75
  let scriptProgress = $state(undefined);
76
+ let assets = $derived((flowModule.value.type === 'rawscript' && flowModule.value.assets) || []);
77
77
  function onModulesChange(savedModule, flowModule) {
78
78
  // console.log('onModulesChange', savedModule, flowModule)
79
79
  return savedModule?.value?.type === 'rawscript' &&
@@ -136,10 +136,12 @@ let forceReload = $state(0);
136
136
  let editorPanelSize = $state(noEditor ? 0 : flowModule.value.type == 'script' ? 30 : 50);
137
137
  let editorSettingsPanelSize = $state(100 - untrack(() => editorPanelSize));
138
138
  let stepHistoryLoader = getStepHistoryLoaderContext();
139
+ let lastJobId = undefined;
139
140
  function onSelectedIdChange() {
140
141
  if (!$flowStateStore?.[$selectedId]?.schema && flowModule) {
141
142
  reload(flowModule);
142
143
  }
144
+ lastJobId = undefined;
143
145
  }
144
146
  async function getLastJob() {
145
147
  if (!$flowStateStore ||
@@ -149,11 +151,19 @@ async function getLastJob() {
149
151
  !$flowStateStore[flowModule.id]?.previewWorkspaceId) {
150
152
  return;
151
153
  }
154
+ if (lastJobId == $flowStateStore[flowModule.id]?.previewJobId ||
155
+ lastJob?.id == $flowStateStore[flowModule.id]?.previewJobId ||
156
+ $flowStateStore[flowModule.id]?.previewSuccess == undefined) {
157
+ return;
158
+ }
159
+ lastJobId = $flowStateStore[flowModule.id]?.previewJobId;
152
160
  const job = await JobService.getJob({
153
161
  workspace: $flowStateStore[flowModule.id]?.previewWorkspaceId ?? '',
154
- id: $flowStateStore[flowModule.id]?.previewJobId ?? ''
162
+ id: $flowStateStore[flowModule.id]?.previewJobId ?? '',
163
+ noCode: true
155
164
  });
156
- if (job) {
165
+ if (job && job.type === 'CompletedJob') {
166
+ lastJobId = $flowStateStore[flowModule.id]?.previewJobId;
157
167
  lastJob = job;
158
168
  }
159
169
  }
@@ -222,15 +232,6 @@ $effect(() => {
222
232
  }, 100);
223
233
  }
224
234
  });
225
- let assets = usePromise(async () => flowModule.value.type === 'rawscript'
226
- ? await inferAssets(flowModule.value.language, flowModule.value.content)
227
- : undefined, { clearValueOnRefresh: false, loadInit: false });
228
- $effect(() => {
229
- if (flowModule.value.type !== 'rawscript')
230
- return;
231
- [flowModule.value.content, flowModule.value.language];
232
- untrack(() => assets.refresh());
233
- });
234
235
  let rawScriptLang = $derived(flowModule.value.type == 'rawscript' ? flowModule.value.language : undefined);
235
236
  </script>
236
237
 
@@ -339,11 +340,8 @@ let rawScriptLang = $derived(flowModule.value.type == 'rawscript' ? flowModule.v
339
340
  {#if !noEditor}
340
341
  {#key flowModule.id}
341
342
  <div class="absolute top-2 right-4 z-10 flex flex-row gap-2">
342
- {#if assets.value?.length}
343
- <AssetsDropdownButton
344
- assets={assets.value}
345
- bind:fallbackAccessTypes={flowModule.value.asset_fallback_access_types}
346
- />
343
+ {#if assets?.length}
344
+ <AssetsDropdownButton {assets} />
347
345
  {/if}
348
346
  </div>
349
347
  <Editor
@@ -354,7 +352,6 @@ let rawScriptLang = $derived(flowModule.value.type == 'rawscript' ? flowModule.v
354
352
  bind:this={editor}
355
353
  class="h-full relative"
356
354
  code={flowModule.value.content}
357
- lang={scriptLangToEditorLang(flowModule?.value?.language)}
358
355
  scriptLang={flowModule?.value?.language}
359
356
  automaticLayout={true}
360
357
  cmdEnterAction={async () => {
@@ -1,12 +1,11 @@
1
1
  <script lang="ts">import Toggle from '../../Toggle.svelte';
2
2
  import Tooltip from '../../Tooltip.svelte';
3
3
  import Section from '../../Section.svelte';
4
- export let flowModule;
5
- export let disabled = false;
4
+ let { flowModule = $bindable(), disabled = false } = $props();
6
5
  </script>
7
6
 
8
7
  <Section label="Delete after use">
9
- <svelte:fragment slot="header">
8
+ {#snippet header()}
10
9
  <Tooltip>
11
10
  The logs, arguments and results of this flow step will be completely deleted from Windmill
12
11
  once the flow is complete. They might be temporarily visible in UI while the flow is running.
@@ -21,7 +20,7 @@ export let disabled = false;
21
20
  This option is only available on Windmill Enterprise Edition.
22
21
  {/if}
23
22
  </Tooltip>
24
- </svelte:fragment>
23
+ {/snippet}
25
24
 
26
25
  <Toggle
27
26
  {disabled}
@@ -1,22 +1,8 @@
1
1
  import type { FlowModule } from '../../../gen';
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports & {
10
- $set?: any;
11
- $on?: any;
12
- };
13
- z_$$bindings?: Bindings;
14
- }
15
- declare const FlowModuleDeleteAfterUse: $$__sveltets_2_IsomorphicComponent<{
2
+ interface Props {
16
3
  flowModule: FlowModule;
17
4
  disabled?: boolean;
18
- }, {
19
- [evt: string]: CustomEvent<any>;
20
- }, {}, {}, string>;
21
- type FlowModuleDeleteAfterUse = InstanceType<typeof FlowModuleDeleteAfterUse>;
5
+ }
6
+ declare const FlowModuleDeleteAfterUse: import("svelte").Component<Props, {}, "flowModule">;
7
+ type FlowModuleDeleteAfterUse = ReturnType<typeof FlowModuleDeleteAfterUse>;
22
8
  export default FlowModuleDeleteAfterUse;
@@ -7,25 +7,24 @@ import PropPickerWrapper from '../propPicker/PropPickerWrapper.svelte';
7
7
  import { SecondsInput } from '../../common';
8
8
  import Section from '../../Section.svelte';
9
9
  import Label from '../../Label.svelte';
10
- export let flowModule;
11
- export let previousModuleId;
10
+ let { flowModule = $bindable(), previousModuleId } = $props();
12
11
  const { selectedId, flowStateStore } = getContext('FlowEditorContext');
13
- let schema = emptySchema();
12
+ let schema = $state(emptySchema());
14
13
  schema.properties['sleep'] = {
15
14
  type: 'number'
16
15
  };
17
- let editor = undefined;
16
+ let editor = $state(undefined);
18
17
  const result = $flowStateStore[$selectedId]?.previewResult ?? {};
19
- $: isSleepEnabled = Boolean(flowModule.sleep);
18
+ let isSleepEnabled = $derived(Boolean(flowModule.sleep));
20
19
  </script>
21
20
 
22
21
  <Section label="Sleep" class="w-full">
23
- <svelte:fragment slot="header">
22
+ {#snippet header()}
24
23
  <Tooltip documentationLink="https://www.windmill.dev/docs/flows/sleep">
25
24
  If defined, at the end of the step, the flow will sleep for a number of seconds before
26
25
  scheduling the next job (if any, no effect if the step is the last one).
27
26
  </Tooltip>
28
- </svelte:fragment>
27
+ {/snippet}
29
28
 
30
29
  <Toggle
31
30
  checked={isSleepEnabled}
@@ -1,22 +1,8 @@
1
1
  import type { FlowModule } from '../../../gen';
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports & {
10
- $set?: any;
11
- $on?: any;
12
- };
13
- z_$$bindings?: Bindings;
14
- }
15
- declare const FlowModuleSleep: $$__sveltets_2_IsomorphicComponent<{
2
+ interface Props {
16
3
  flowModule: FlowModule;
17
4
  previousModuleId: string | undefined;
18
- }, {
19
- [evt: string]: CustomEvent<any>;
20
- }, {}, {}, string>;
21
- type FlowModuleSleep = InstanceType<typeof FlowModuleSleep>;
5
+ }
6
+ declare const FlowModuleSleep: import("svelte").Component<Props, {}, "flowModule">;
7
+ type FlowModuleSleep = ReturnType<typeof FlowModuleSleep>;
22
8
  export default FlowModuleSleep;
@@ -1,7 +1,8 @@
1
- <script lang="ts">import Toggle from '../../Toggle.svelte';
1
+ <script lang="ts">import { run } from 'svelte/legacy';
2
+ import Toggle from '../../Toggle.svelte';
2
3
  import Tooltip from '../../Tooltip.svelte';
3
4
  import InputTransformForm from '../../InputTransformForm.svelte';
4
- import { getContext, tick } from 'svelte';
5
+ import { getContext, tick, untrack } from 'svelte';
5
6
  import { Alert, Tab, Tabs } from '../../common';
6
7
  import { GroupService } from '../../../gen';
7
8
  import { emptySchema, emptyString } from '../../../utils';
@@ -15,13 +16,12 @@ import EditableSchemaDrawer from '../../schema/EditableSchemaDrawer.svelte';
15
16
  import AddProperty from '../../schema/AddProperty.svelte';
16
17
  const { selectedId, flowStateStore } = getContext('FlowEditorContext');
17
18
  const result = $flowStateStore[$selectedId]?.previewResult ?? {};
18
- let editor = undefined;
19
- export let flowModule;
20
- export let previousModuleId;
21
- let schema = emptySchema();
22
- let allUserGroups = [];
23
- let suspendTabSelected = 'core';
24
- $: isSuspendEnabled = Boolean(flowModule.suspend);
19
+ let editor = $state(undefined);
20
+ let { flowModule = $bindable(), previousModuleId } = $props();
21
+ let schema = $state(emptySchema());
22
+ let allUserGroups = $state([]);
23
+ let suspendTabSelected = $state('core');
24
+ let isSuspendEnabled = $derived(Boolean(flowModule.suspend));
25
25
  async function loadGroups() {
26
26
  allUserGroups = await GroupService.listGroupNames({ workspace: $workspaceStore });
27
27
  schema.properties['groups'] = {
@@ -32,19 +32,21 @@ async function loadGroups() {
32
32
  }
33
33
  };
34
34
  }
35
- $: {
35
+ run(() => {
36
36
  if ($workspaceStore && allUserGroups.length === 0) {
37
- loadGroups();
37
+ untrack(() => {
38
+ loadGroups();
39
+ });
38
40
  }
39
- }
40
- let jsonView = false;
41
+ });
42
+ let jsonView = $state(false);
41
43
  </script>
42
44
 
43
45
  <Section label="Suspend/Approval/Prompt" class="w-full">
44
- <svelte:fragment slot="action">
46
+ {#snippet action()}
45
47
  <SuspendDrawer text="Approval/Prompt helpers" />
46
- </svelte:fragment>
47
- <svelte:fragment slot="header">
48
+ {/snippet}
49
+ {#snippet header()}
48
50
  <div class="flex flex-row items-center gap-2">
49
51
  <Tooltip documentationLink="https://www.windmill.dev/docs/flows/flow_approval">
50
52
  If defined, at the end of the step, the flow will be suspended until it receives external
@@ -69,7 +71,7 @@ let jsonView = false;
69
71
  }}
70
72
  />
71
73
  </div>
72
- </svelte:fragment>
74
+ {/snippet}
73
75
 
74
76
  <div class="overflow-x-auto scrollbar-hidden">
75
77
  <Tabs bind:selected={suspendTabSelected}>
@@ -1,22 +1,8 @@
1
1
  import { type FlowModule } from '../../../gen';
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports & {
10
- $set?: any;
11
- $on?: any;
12
- };
13
- z_$$bindings?: Bindings;
14
- }
15
- declare const FlowModuleSuspend: $$__sveltets_2_IsomorphicComponent<{
2
+ interface Props {
16
3
  flowModule: FlowModule;
17
4
  previousModuleId: string | undefined;
18
- }, {
19
- [evt: string]: CustomEvent<any>;
20
- }, {}, {}, string>;
21
- type FlowModuleSuspend = InstanceType<typeof FlowModuleSuspend>;
5
+ }
6
+ declare const FlowModuleSuspend: import("svelte").Component<Props, {}, "flowModule">;
7
+ type FlowModuleSuspend = ReturnType<typeof FlowModuleSuspend>;
22
8
  export default FlowModuleSuspend;
@@ -2,17 +2,17 @@
2
2
  import Toggle from '../../Toggle.svelte';
3
3
  import Tooltip from '../../Tooltip.svelte';
4
4
  import { Alert, SecondsInput } from '../../common';
5
- export let flowModule;
6
- $: istimeoutEnabled = Boolean(flowModule.timeout);
5
+ let { flowModule = $bindable() } = $props();
6
+ let istimeoutEnabled = $derived(Boolean(flowModule.timeout));
7
7
  </script>
8
8
 
9
9
  <Section label="Timeout">
10
- <svelte:fragment slot="header">
10
+ {#snippet header()}
11
11
  <Tooltip>
12
12
  If defined, the custom timeout will be used instead of the instance timeout for the step. The
13
13
  step's timeout cannot be greater than the instance timeout.
14
14
  </Tooltip>
15
- </svelte:fragment>
15
+ {/snippet}
16
16
 
17
17
  <Toggle
18
18
  checked={istimeoutEnabled}
@@ -1,21 +1,7 @@
1
1
  import type { FlowModule } from '../../../gen';
2
- 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> {
3
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
- $$bindings?: Bindings;
5
- } & Exports;
6
- (internal: unknown, props: Props & {
7
- $$events?: Events;
8
- $$slots?: Slots;
9
- }): Exports & {
10
- $set?: any;
11
- $on?: any;
12
- };
13
- z_$$bindings?: Bindings;
14
- }
15
- declare const FlowModuleTimeout: $$__sveltets_2_IsomorphicComponent<{
2
+ interface Props {
16
3
  flowModule: FlowModule;
17
- }, {
18
- [evt: string]: CustomEvent<any>;
19
- }, {}, {}, string>;
20
- type FlowModuleTimeout = InstanceType<typeof FlowModuleTimeout>;
4
+ }
5
+ declare const FlowModuleTimeout: import("svelte").Component<Props, {}, "flowModule">;
6
+ type FlowModuleTimeout = ReturnType<typeof FlowModuleTimeout>;
21
7
  export default FlowModuleTimeout;
@@ -14,7 +14,7 @@ export declare function getFirstStepSchema(flowState: FlowState, flow: OpenFlow)
14
14
  value: {
15
15
  language?: "deno" | "bun" | "python3" | "go" | "bash" | "powershell" | "postgresql" | "mysql" | "bigquery" | "snowflake" | "mssql" | "oracledb" | "graphql" | "nativets" | "php" | undefined;
16
16
  path?: string | undefined;
17
- type: "rawscript" | "script" | "flow" | "forloopflow" | "branchone" | "branchall" | "identity" | "whileloopflow";
17
+ type: "rawscript" | "script" | "flow" | "forloopflow" | "whileloopflow" | "branchone" | "branchall" | "identity";
18
18
  };
19
19
  };
20
20
  connectFirstNode: () => void;
@@ -358,6 +358,7 @@ outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration
358
358
  onclick={stopPropagation(
359
359
  preventDefault((event) => dispatch('delete', { id, type: modType }))
360
360
  )}
361
+ onpointerdown={stopPropagation(preventDefault(() => {}))}
361
362
  >
362
363
  <X class="mx-[3px]" size={12} strokeWidth={2} />
363
364
  </button>