windmill-components 1.511.1 → 1.522.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 (232) hide show
  1. package/package/components/AppConnectInner.svelte.d.ts +1 -1
  2. package/package/components/ArgInput.svelte +42 -14
  3. package/package/components/ArgInput.svelte.d.ts +2 -10
  4. package/package/components/AssignableTagsInner.svelte +5 -0
  5. package/package/components/AuthSettings.svelte +4 -2
  6. package/package/components/AuthSettings.svelte.d.ts +1 -0
  7. package/package/components/DBManagerDrawer.svelte +154 -151
  8. package/package/components/DBManagerDrawer.svelte.d.ts +2 -2
  9. package/package/components/DBTable.svelte +3 -3
  10. package/package/components/DBTable.svelte.d.ts +1 -0
  11. package/package/components/DBTableEditor.svelte +7 -7
  12. package/package/components/DBTableEditor.svelte.d.ts +1 -1
  13. package/package/components/DeployWorkspace.svelte +1 -1
  14. package/package/components/DisplayResult.svelte +34 -8
  15. package/package/components/DisplayResult.svelte.d.ts +4 -1
  16. package/package/components/DynSelect.svelte +58 -34
  17. package/package/components/DynSelect.svelte.d.ts +3 -11
  18. package/package/components/EditableSchemaForm.svelte +126 -6
  19. package/package/components/EditableSchemaForm.svelte.d.ts +5 -1
  20. package/package/components/Editor.svelte +1 -1
  21. package/package/components/EditorBar.svelte +82 -4
  22. package/package/components/ErrorOrRecoveryHandler.svelte +76 -8
  23. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +2 -1
  24. package/package/components/ExploreAssetButton.svelte +14 -4
  25. package/package/components/ExploreAssetButton.svelte.d.ts +1 -0
  26. package/package/components/FlowJobResult.svelte +3 -3
  27. package/package/components/FlowJobResult.svelte.d.ts +1 -0
  28. package/package/components/FlowPreviewContent.svelte +9 -1
  29. package/package/components/FlowPreviewResult.svelte +4 -1
  30. package/package/components/FlowPreviewResult.svelte.d.ts +1 -0
  31. package/package/components/FlowStatusViewerInner.svelte +21 -3
  32. package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -1
  33. package/package/components/FolderEditor.svelte +1 -1
  34. package/package/components/GitDiffPreview.svelte +14 -18
  35. package/package/components/GitDiffPreview.svelte.d.ts +2 -8
  36. package/package/components/GitHubAppIntegration.svelte +3 -1
  37. package/package/components/IdEditorInput.svelte +25 -22
  38. package/package/components/IdEditorInput.svelte.d.ts +11 -23
  39. package/package/components/InstanceSetting.svelte +7 -2
  40. package/package/components/InstanceSettings.svelte +1 -0
  41. package/package/components/JobLoader.svelte +48 -5
  42. package/package/components/JobLoader.svelte.d.ts +7 -2
  43. package/package/components/Login.svelte +8 -2
  44. package/package/components/MemoryFootprintViewer.svelte +1 -1
  45. package/package/components/ModulePreviewResultViewer.svelte +2 -2
  46. package/package/components/MoveDrawer.svelte.d.ts +2 -2
  47. package/package/components/NextcloudSetting.svelte +84 -0
  48. package/package/components/NextcloudSetting.svelte.d.ts +7 -0
  49. package/package/components/ObjectResourceInput.svelte +3 -2
  50. package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
  51. package/package/components/ParqetCsvTableRenderer.svelte +1 -1
  52. package/package/components/ResourceEditor.svelte +1 -1
  53. package/package/components/ResourcePicker.svelte +8 -1
  54. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  55. package/package/components/ResultStreamDisplay.svelte +5 -0
  56. package/package/components/ResultStreamDisplay.svelte.d.ts +5 -0
  57. package/package/components/RunForm.svelte +9 -1
  58. package/package/components/SchemaForm.svelte +2 -2
  59. package/package/components/SchemaForm.svelte.d.ts +2 -10
  60. package/package/components/ScriptBuilder.svelte +13 -8
  61. package/package/components/ScriptBuilder.svelte.d.ts +1 -1
  62. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  63. package/package/components/ScriptWrapper.svelte +1 -1
  64. package/package/components/ShareModal.svelte.d.ts +1 -1
  65. package/package/components/SimpleAgTable.svelte +2 -0
  66. package/package/components/SimpleAgTable.svelte.d.ts +2 -0
  67. package/package/components/SqlRepl.svelte +21 -7
  68. package/package/components/SqlRepl.svelte.d.ts +2 -2
  69. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  70. package/package/components/WorkerTagSelect.svelte +70 -1
  71. package/package/components/apps/components/display/AppDisplayComponent.svelte +13 -1
  72. package/package/components/apps/components/display/AppText.svelte +2 -2
  73. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +8 -1
  74. package/package/components/apps/components/display/dbtable/InsertRow.svelte +5 -4
  75. package/package/components/apps/components/display/dbtable/queries/count.js +11 -1
  76. package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
  77. package/package/components/apps/components/display/dbtable/queries/createTable.js +3 -3
  78. package/package/components/apps/components/display/dbtable/queries/delete.js +7 -0
  79. package/package/components/apps/components/display/dbtable/queries/insert.js +2 -0
  80. package/package/components/apps/components/display/dbtable/queries/select.js +14 -0
  81. package/package/components/apps/components/display/dbtable/queries/update.js +7 -0
  82. package/package/components/apps/components/display/dbtable/utils.d.ts +6 -5
  83. package/package/components/apps/components/display/dbtable/utils.js +52 -28
  84. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +1 -1
  85. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
  86. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -0
  87. package/package/components/apps/components/display/table/AppAggridTable.svelte +5 -4
  88. package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
  89. package/package/components/apps/components/display/table/utils.js +7 -4
  90. package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -2
  91. package/package/components/apps/components/helpers/RunnableComponent.svelte +4 -1
  92. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
  93. package/package/components/apps/components/inputs/AppS3FileInput.svelte +2 -2
  94. package/package/components/apps/components/layout/AppDecisionTree.svelte +1 -1
  95. package/package/components/apps/components/layout/AppStepper.svelte +1 -1
  96. package/package/components/apps/components/layout/AppTabs.svelte +1 -1
  97. package/package/components/apps/editor/AppEditorHeader.svelte +13 -2
  98. package/package/components/apps/editor/GridViewer.svelte +1 -0
  99. package/package/components/apps/editor/RunnableJobPanelInner.svelte +2 -1
  100. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +7 -7
  101. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +7 -19
  102. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +8 -12
  103. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  104. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  105. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  106. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +3 -3
  107. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +1 -3
  108. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  109. package/package/components/assets/JobAssetsViewer.svelte +2 -2
  110. package/package/components/assets/lib.js +4 -0
  111. package/package/components/auditLogs/AuditLogsFilters.svelte +7 -9
  112. package/package/components/common/button/Button.svelte +4 -3
  113. package/package/components/common/button/Button.svelte.d.ts +1 -0
  114. package/package/components/common/confirmationModal/ConfirmationModal.svelte +6 -5
  115. package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +6 -11
  116. package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.d.ts +26 -0
  117. package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.js +50 -0
  118. package/package/components/common/modal/Modal.svelte +2 -5
  119. package/package/components/common/tabs/TabsV2.svelte +2 -1
  120. package/package/components/common/tabs/TabsV2.svelte.d.ts +1 -0
  121. package/package/components/copilot/chat/AIChatManager.svelte.js +61 -7
  122. package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
  123. package/package/components/copilot/chat/script/core.js +28 -29
  124. package/package/components/copilot/chat/shared.d.ts +1 -1
  125. package/package/components/copilot/chat/shared.js +8 -2
  126. package/package/components/custom_ui.d.ts +2 -0
  127. package/package/components/dbOps.d.ts +20 -8
  128. package/package/components/dbOps.js +85 -40
  129. package/package/components/details/DetailPageHeader.svelte +0 -2
  130. package/package/components/flows/content/FlowInput.svelte +5 -0
  131. package/package/components/flows/content/FlowModuleScript.svelte +0 -1
  132. package/package/components/flows/idUtils.js +2 -1
  133. package/package/components/flows/map/FlowModuleSchemaItem.svelte +3 -3
  134. package/package/components/flows/map/FlowModuleSchemaMap.svelte +5 -0
  135. package/package/components/flows/map/InsertModuleButton.svelte +4 -1
  136. package/package/components/flows/propPicker/OutputBadge.svelte +5 -1
  137. package/package/components/flows/propPicker/OutputPickerInner.svelte +9 -5
  138. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +6 -2
  139. package/package/components/flows/propPicker/StepHistory.svelte +4 -1
  140. package/package/components/git_sync/DetectionFlow.svelte +202 -0
  141. package/package/components/git_sync/DetectionFlow.svelte.d.ts +6 -0
  142. package/package/components/git_sync/GitSyncContext.svelte.d.ts +82 -0
  143. package/package/components/git_sync/GitSyncContext.svelte.js +461 -0
  144. package/package/components/git_sync/GitSyncModalManager.svelte +99 -0
  145. package/package/components/git_sync/GitSyncModalManager.svelte.d.ts +18 -0
  146. package/package/components/git_sync/GitSyncRepositoryCard.svelte +339 -0
  147. package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +6 -0
  148. package/package/components/git_sync/GitSyncRepositoryList.svelte +17 -0
  149. package/package/components/git_sync/GitSyncRepositoryList.svelte.d.ts +18 -0
  150. package/package/components/git_sync/GitSyncSection.svelte +89 -0
  151. package/package/components/git_sync/GitSyncSection.svelte.d.ts +3 -0
  152. package/package/components/git_sync/GitSyncSuccessModal.svelte +58 -0
  153. package/package/components/git_sync/GitSyncSuccessModal.svelte.d.ts +7 -0
  154. package/package/components/git_sync/PullWorkspaceModal.svelte +575 -0
  155. package/package/components/git_sync/PullWorkspaceModal.svelte.d.ts +15 -0
  156. package/package/components/git_sync/PushWorkspaceModal.svelte +320 -0
  157. package/package/components/git_sync/PushWorkspaceModal.svelte.d.ts +12 -0
  158. package/package/components/graph/FlowGraphV2.svelte +5 -1
  159. package/package/components/graph/graphBuilder.svelte.js +1 -1
  160. package/package/components/graph/renderers/nodes/AssetNode.svelte +4 -4
  161. package/package/components/icons/AssetDucklakeIcon.svelte +28 -0
  162. package/package/components/icons/AssetDucklakeIcon.svelte.d.ts +9 -0
  163. package/package/components/icons/AssetGenericIcon.svelte +3 -0
  164. package/package/components/icons/DucklakeIcon.svelte +18 -0
  165. package/package/components/icons/DucklakeIcon.svelte.d.ts +6 -0
  166. package/package/components/instanceSettings.js +11 -3
  167. package/package/components/runs/JobPreview.svelte +2 -2
  168. package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
  169. package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
  170. package/package/components/schema/FlowPropertyEditor.svelte +3 -2
  171. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  172. package/package/components/schema/PropertyEditor.svelte +0 -2
  173. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  174. package/package/components/schema/SchemaFormDND.svelte +2 -1
  175. package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -0
  176. package/package/components/scriptEditor/LogPanel.svelte +5 -3
  177. package/package/components/scriptEditor/LogPanel.svelte.d.ts +5 -1
  178. package/package/components/select/Select.svelte +7 -4
  179. package/package/components/select/Select.svelte.d.ts +5 -0
  180. package/package/components/select/SelectDropdown.svelte +2 -1
  181. package/package/components/select/SelectDropdown.svelte.d.ts +3 -0
  182. package/package/components/sidebar/changelogs.js +5 -0
  183. package/package/components/table/AutoDataTable.svelte +6 -4
  184. package/package/components/table/AutoDataTable.svelte.d.ts +1 -0
  185. package/package/components/table/DataTable.svelte +12 -10
  186. package/package/components/table/DataTable.svelte.d.ts +1 -0
  187. package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +2 -2
  188. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
  189. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
  190. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +50 -11
  191. package/package/components/triggers/gcp/utils.js +1 -0
  192. package/package/components/triggers/http/utils.js +1 -1
  193. package/package/components/triggers/kafka/utils.js +1 -1
  194. package/package/components/triggers/mqtt/utils.js +1 -1
  195. package/package/components/triggers/nats/utils.js +1 -1
  196. package/package/components/triggers/postgres/utils.js +1 -1
  197. package/package/components/triggers/sqs/utils.js +1 -1
  198. package/package/components/triggers/utils.js +2 -1
  199. package/package/components/triggers/webhook/WebhooksConfigSection.svelte +24 -26
  200. package/package/components/triggers/webhook/WebhooksPanel.svelte +1 -15
  201. package/package/components/triggers/websocket/utils.js +1 -1
  202. package/package/components/workspaceSettings/AISettings.svelte +52 -36
  203. package/package/components/workspaceSettings/DucklakeSettings.svelte +321 -0
  204. package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +23 -0
  205. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +122 -499
  206. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +8 -10
  207. package/package/consts.js +2 -1
  208. package/package/gen/core/OpenAPI.js +1 -1
  209. package/package/gen/schemas.gen.d.ts +7 -6
  210. package/package/gen/schemas.gen.js +7 -6
  211. package/package/gen/services.gen.d.ts +19 -1
  212. package/package/gen/services.gen.js +38 -0
  213. package/package/gen/types.gen.d.ts +78 -3
  214. package/package/git-sync.d.ts +36 -0
  215. package/package/git-sync.js +1 -0
  216. package/package/hub.d.ts +1 -0
  217. package/package/hubPaths.json +5 -2
  218. package/package/infer.js +3 -2
  219. package/package/script_helpers.d.ts +2 -2
  220. package/package/script_helpers.js +29 -11
  221. package/package/services/JobManager.d.ts +28 -0
  222. package/package/services/JobManager.js +114 -0
  223. package/package/stores.d.ts +1 -1
  224. package/package/utils.d.ts +18 -1
  225. package/package/utils.js +55 -2
  226. package/package.json +5 -4
  227. package/package/components/InitGitRepoPopover.svelte +0 -410
  228. package/package/components/InitGitRepoPopover.svelte.d.ts +0 -13
  229. package/package/components/PullGitRepoPopover.svelte +0 -355
  230. package/package/components/PullGitRepoPopover.svelte.d.ts +0 -18
  231. package/package/inferArgSig.d.ts +0 -42
  232. package/package/inferArgSig.js +0 -198
@@ -1,30 +1,18 @@
1
- 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
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const IdEditorInput: $$__sveltets_2_IsomorphicComponent<{
1
+ interface Props {
15
2
  initialId: string;
16
3
  reservedIds?: string[];
4
+ reservedPrefixes?: string[];
17
5
  label?: string;
18
- value?: string;
6
+ value?: any;
19
7
  buttonText?: string;
20
8
  btnClasses?: string;
21
9
  acceptUnderScores?: boolean;
22
- }, {
23
- keypress: KeyboardEvent;
24
- save: CustomEvent<any>;
25
- close: CustomEvent<any>;
26
- } & {
27
- [evt: string]: CustomEvent<any>;
28
- }, {}, {}, string>;
29
- type IdEditorInput = InstanceType<typeof IdEditorInput>;
10
+ onSave: ({ oldId, newId }: {
11
+ oldId: string;
12
+ newId: string;
13
+ }) => void;
14
+ onClose?: () => void;
15
+ }
16
+ declare const IdEditorInput: import("svelte").Component<Props, {}, "value">;
17
+ type IdEditorInput = ReturnType<typeof IdEditorInput>;
30
18
  export default IdEditorInput;
@@ -44,6 +44,11 @@ let to = $state('');
44
44
  async function reloadKeyrenewalAttemptInfo() {
45
45
  latestKeyRenewalAttempt = await SettingService.getLatestKeyRenewalAttempt();
46
46
  }
47
+ async function reloadLicenseKey() {
48
+ $values['license_key'] = await SettingService.getGlobal({
49
+ key: 'license_key'
50
+ });
51
+ }
47
52
  if (setting.key == 'license_key') {
48
53
  reloadKeyrenewalAttemptInfo();
49
54
  }
@@ -54,13 +59,13 @@ export async function renewLicenseKey() {
54
59
  licenseKey: $values['license_key'] || undefined
55
60
  });
56
61
  sendUserToast('Key renewal successful');
57
- reloadKeyrenewalAttemptInfo();
62
+ reloadLicenseKey();
58
63
  }
59
64
  catch (err) {
60
- latestKeyRenewalAttempt = await SettingService.getLatestKeyRenewalAttempt();
61
65
  throw err;
62
66
  }
63
67
  finally {
68
+ reloadKeyrenewalAttemptInfo();
64
69
  renewing = false;
65
70
  }
66
71
  }
@@ -294,6 +294,7 @@ function isValidTeamsChannel(value) {
294
294
  bind:oauths
295
295
  bind:snowflakeAccountIdentifier
296
296
  bind:requirePreexistingUserForOauth
297
+ baseUrl={$values?.base_url}
297
298
  >
298
299
  {#snippet scim()}
299
300
  <div class="flex-col flex gap-2 pb-4">
@@ -3,7 +3,7 @@ import { workspaceStore } from '../stores';
3
3
  import { onDestroy, tick, untrack } from 'svelte';
4
4
  import { sendUserToast } from '../toast';
5
5
  import { isScriptPreview } from '../utils';
6
- let { isLoading = $bindable(false), job = $bindable(undefined), noCode = false, allowConcurentRequests = false, workspaceOverride = undefined, notfound = $bindable(false), jobUpdateLastFetch = $bindable(undefined), toastError = false, lazyLogs = false, onlyResult = false, scriptProgress = $bindable(undefined), noLogs = false, children } = $props();
6
+ let { isLoading = $bindable(false), job = $bindable(undefined), noCode = false, allowConcurentRequests = false, workspaceOverride = undefined, notfound = $bindable(false), jobUpdateLastFetch = $bindable(undefined), toastError = false, onlyResult = false, scriptProgress = $bindable(undefined), noLogs = false, children } = $props();
7
7
  /// Last time asked for job progress
8
8
  let lastTimeCheckedProgress = undefined;
9
9
  /// Will try to poll progress every 5s and if once progress returned was not undefined, will be ignored
@@ -15,6 +15,7 @@ let workspace = $derived(workspaceOverride ?? $workspaceStore);
15
15
  let syncIteration = 0;
16
16
  let errorIteration = 0;
17
17
  let logOffset = 0;
18
+ let resultStreamOffset = 0;
18
19
  let lastCallbacks = undefined;
19
20
  let finished = [];
20
21
  let ITERATIONS_BEFORE_SLOW_REFRESH = 10;
@@ -104,6 +105,9 @@ function refreshLogOffset() {
104
105
  if (logOffset == 0) {
105
106
  logOffset = job?.logs?.length ? job.logs?.length + 1 : 0;
106
107
  }
108
+ if (resultStreamOffset == 0) {
109
+ resultStreamOffset = job?.result_stream?.length ? job.result_stream?.length + 1 : 0;
110
+ }
107
111
  }
108
112
  export async function getLogs() {
109
113
  if (job) {
@@ -176,6 +180,7 @@ function supportsSSE() {
176
180
  let startedWatchingJob = undefined;
177
181
  export async function watchJob(testId, callbacks) {
178
182
  logOffset = 0;
183
+ resultStreamOffset = 0;
179
184
  syncIteration = 0;
180
185
  errorIteration = 0;
181
186
  currentId = testId;
@@ -237,9 +242,24 @@ function updateJobFromProgress(previewJobUpdates, job, callbacks) {
237
242
  job.logs = (job?.logs ?? '').concat(previewJobUpdates.new_logs);
238
243
  }
239
244
  }
245
+ if (previewJobUpdates.new_result_stream) {
246
+ if (!job.result_stream) {
247
+ job.result_stream = previewJobUpdates.new_result_stream;
248
+ }
249
+ else {
250
+ job.result_stream = job.result_stream.concat(previewJobUpdates.new_result_stream);
251
+ }
252
+ callbacks?.resultStreamUpdate?.({
253
+ id: job.id,
254
+ result_stream: job.result_stream
255
+ });
256
+ }
240
257
  if (previewJobUpdates.log_offset) {
241
258
  logOffset = previewJobUpdates.log_offset ?? 0;
242
259
  }
260
+ if (previewJobUpdates.stream_offset) {
261
+ resultStreamOffset = previewJobUpdates.stream_offset ?? 0;
262
+ }
243
263
  if (previewJobUpdates.flow_status) {
244
264
  job.flow_status = previewJobUpdates.flow_status;
245
265
  }
@@ -252,9 +272,10 @@ function updateJobFromProgress(previewJobUpdates, job, callbacks) {
252
272
  if (job &&
253
273
  (previewJobUpdates.running ||
254
274
  previewJobUpdates.progress ||
255
- previewJobUpdates.new_logs ||
275
+ previewJobUpdates.log_offset ||
256
276
  previewJobUpdates.flow_status ||
257
- previewJobUpdates.mem_peak)) {
277
+ previewJobUpdates.mem_peak ||
278
+ previewJobUpdates.stream_offset)) {
258
279
  callbacks?.change?.(job);
259
280
  }
260
281
  }
@@ -288,7 +309,7 @@ async function loadTestJob(id, callbacks) {
288
309
  job = await JobService.getJob({
289
310
  workspace: workspace,
290
311
  id,
291
- noLogs: lazyLogs || onlyResult || noLogs,
312
+ noLogs: onlyResult || noLogs,
292
313
  noCode
293
314
  });
294
315
  }
@@ -364,6 +385,7 @@ function isCurrentJob(id) {
364
385
  }
365
386
  async function loadTestJobWithSSE(id, attempt, callbacks) {
366
387
  let isCompleted = false;
388
+ let resultOnlyResultStream = '';
367
389
  if (isCurrentJob(id)) {
368
390
  try {
369
391
  // First load the job to get initial state
@@ -371,10 +393,16 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
371
393
  job = await JobService.getJob({
372
394
  workspace: workspace,
373
395
  id,
374
- noLogs: lazyLogs || noLogs,
396
+ noLogs: noLogs,
375
397
  noCode
376
398
  });
377
399
  }
400
+ if (!onlyResult) {
401
+ callbacks?.resultStreamUpdate?.({
402
+ id,
403
+ result_stream: undefined
404
+ });
405
+ }
378
406
  // If job is already completed, don't start SSE
379
407
  if (job?.type === 'CompletedJob') {
380
408
  isCompleted = true;
@@ -411,6 +439,12 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
411
439
  if (startedWatchingJob && startedWatchingJob > Date.now() - 5000) {
412
440
  params.set('fast', 'true');
413
441
  }
442
+ if (noLogs) {
443
+ params.set('no_logs', 'true');
444
+ }
445
+ if (resultStreamOffset) {
446
+ params.set('stream_offset', resultStreamOffset.toString());
447
+ }
414
448
  const sseUrl = `/api/w/${workspace}/jobs_u/getupdate_sse/${id}?${params.toString()}`;
415
449
  currentEventSource = new EventSource(sseUrl);
416
450
  setNoPingTimeout(id, attempt, callbacks);
@@ -452,6 +486,14 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
452
486
  else if (onlyResult && callbacks?.running && previewJobUpdates.running) {
453
487
  callbacks?.running?.({ id });
454
488
  }
489
+ if (onlyResult && previewJobUpdates.new_result_stream) {
490
+ resultOnlyResultStream = resultOnlyResultStream.concat(previewJobUpdates.new_result_stream);
491
+ // console.log('resultOnlyResultStream', resultOnlyResultStream)
492
+ callbacks?.resultStreamUpdate?.({
493
+ id,
494
+ result_stream: resultOnlyResultStream
495
+ });
496
+ }
455
497
  // Check if job is completed
456
498
  if (previewJobUpdates.completed) {
457
499
  currentEventSource?.close();
@@ -468,6 +510,7 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
468
510
  else {
469
511
  const njob = previewJobUpdates.job;
470
512
  njob.logs = job?.logs ?? '';
513
+ njob.result_stream = job?.result_stream ?? '';
471
514
  job = njob;
472
515
  onJobCompleted(id, job, callbacks);
473
516
  }
@@ -22,10 +22,16 @@ export type Callbacks = {
22
22
  running?: ({ id }: {
23
23
  id: string;
24
24
  }) => void;
25
+ resultStreamUpdate?: ({ id, result_stream }: {
26
+ id: string;
27
+ result_stream?: string;
28
+ }) => void;
25
29
  };
26
30
  interface Props {
27
31
  isLoading?: boolean;
28
- job?: Job | undefined;
32
+ job?: (Job & {
33
+ result_stream?: string;
34
+ }) | undefined;
29
35
  noCode?: boolean;
30
36
  noLogs?: boolean;
31
37
  workspaceOverride?: string | undefined;
@@ -33,7 +39,6 @@ interface Props {
33
39
  allowConcurentRequests?: boolean;
34
40
  jobUpdateLastFetch?: Date | undefined;
35
41
  toastError?: boolean;
36
- lazyLogs?: boolean;
37
42
  onlyResult?: boolean;
38
43
  scriptProgress?: number | undefined;
39
44
  children?: import('svelte').Snippet<[any]>;
@@ -5,9 +5,10 @@ import Google from './icons/brands/Google.svelte';
5
5
  import Microsoft from './icons/brands/Microsoft.svelte';
6
6
  import Okta from './icons/brands/Okta.svelte';
7
7
  import Auth0 from './icons/brands/Auth0.svelte';
8
+ import NextcloudIcon from './icons/NextcloudIcon.svelte';
8
9
  import { OauthService, UserService, WorkspaceService } from '../gen';
9
10
  import { usersWorkspaceStore, workspaceStore, userStore } from '../stores';
10
- import { classNames, emptyString, parseQueryParams } from '../utils';
11
+ import { classNames, emptyString, escapeHtml, parseQueryParams } from '../utils';
11
12
  import { base } from '../base';
12
13
  import { getUserExt } from '../user';
13
14
  import { sendUserToast } from '../toast';
@@ -47,6 +48,11 @@ const providers = [
47
48
  type: 'auth0',
48
49
  name: 'Auth0',
49
50
  icon: Auth0
51
+ },
52
+ {
53
+ type: 'nextcloud',
54
+ name: 'Nextcloud',
55
+ icon: NextcloudIcon
50
56
  }
51
57
  ];
52
58
  const providersType = providers.map((p) => p.type);
@@ -227,7 +233,7 @@ function storeRedirect(provider) {
227
233
  }
228
234
  }
229
235
  $effect(() => {
230
- error && sendUserToast(error, true);
236
+ error && sendUserToast(escapeHtml(error), true);
231
237
  });
232
238
  </script>
233
239
 
@@ -49,7 +49,7 @@ $: jobUpdateLastFetch && loadMetricsData();
49
49
 
50
50
  <div class="relative max-h-100">
51
51
  {#if !$enterpriseLicense}
52
- <Alert type="error" title="Enterprise Edition only feature">
52
+ <Alert type="warning" title="Enterprise Edition only feature">
53
53
  Job metrics are only available on Windmill Enterprise Edition.
54
54
  </Alert>
55
55
  {:else if (jobMemoryStats?.length ?? 0) === 0}
@@ -15,7 +15,7 @@ const logJob = $derived(testJob ?? selectedJob);
15
15
  </script>
16
16
 
17
17
  <Splitpanes horizontal>
18
- <Pane size={50} minSize={10} class="text-sm text-tertiary">
18
+ <Pane size={65} minSize={10} class="text-sm text-tertiary">
19
19
  {#if scriptProgress}
20
20
  <JobProgressBar
21
21
  job={testJob}
@@ -50,7 +50,7 @@ const logJob = $derived(testJob ?? selectedJob);
50
50
  {/snippet}
51
51
  </OutputPickerInner>
52
52
  </Pane>
53
- <Pane size={50} minSize={10}>
53
+ <Pane size={35} minSize={10}>
54
54
  {#if (mod.mock?.enabled && preview != 'job') || preview == 'mock'}
55
55
  <LogViewer
56
56
  small
@@ -12,13 +12,13 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
12
12
  z_$$bindings?: Bindings;
13
13
  }
14
14
  declare const MoveDrawer: $$__sveltets_2_IsomorphicComponent<{
15
- openDrawer?: (initialPath_l: string, summary_l: string | undefined, kind_l: "resource" | "script" | "flow" | "schedule" | "app" | "variable" | "raw_app") => Promise<void>;
15
+ openDrawer?: (initialPath_l: string, summary_l: string | undefined, kind_l: "resource" | "script" | "flow" | "app" | "variable" | "schedule" | "raw_app") => Promise<void>;
16
16
  }, {
17
17
  update: CustomEvent<any>;
18
18
  } & {
19
19
  [evt: string]: CustomEvent<any>;
20
20
  }, {}, {
21
- openDrawer: (initialPath_l: string, summary_l: string | undefined, kind_l: "resource" | "script" | "flow" | "schedule" | "app" | "variable" | "raw_app") => Promise<void>;
21
+ openDrawer: (initialPath_l: string, summary_l: string | undefined, kind_l: "resource" | "script" | "flow" | "app" | "variable" | "schedule" | "raw_app") => Promise<void>;
22
22
  }, string>;
23
23
  type MoveDrawer = InstanceType<typeof MoveDrawer>;
24
24
  export default MoveDrawer;
@@ -0,0 +1,84 @@
1
+ <script lang="ts">import CollapseLink from './CollapseLink.svelte';
2
+ import IconedResourceType from './IconedResourceType.svelte';
3
+ import Toggle from './Toggle.svelte';
4
+ import Tooltip from './Tooltip.svelte';
5
+ let { value = $bindable(), baseUrl } = $props();
6
+ function changeDomain(domain) {
7
+ if (value && domain) {
8
+ // Remove http:// or https:// if user included it
9
+ const cleanDomain = domain.replace(/^https?:\/\//, '');
10
+ let baseUrl = `https://${cleanDomain}`;
11
+ value = {
12
+ ...value,
13
+ login_config: {
14
+ auth_url: `${baseUrl}/apps/oauth2/authorize`,
15
+ token_url: `${baseUrl}/apps/oauth2/api/v1/token`,
16
+ userinfo_url: `${baseUrl}/ocs/v2.php/cloud/user?format=json`,
17
+ scopes: []
18
+ },
19
+ connect_config: {
20
+ auth_url: `${baseUrl}/apps/oauth2/authorize`,
21
+ token_url: `${baseUrl}/apps/oauth2/api/v1/token`,
22
+ scopes: []
23
+ }
24
+ };
25
+ }
26
+ }
27
+ let enabled = $derived(value != undefined);
28
+ $effect(() => {
29
+ changeDomain(value?.['domain']);
30
+ });
31
+ </script>
32
+
33
+ <div class="flex flex-col gap-1">
34
+ <!-- svelte-ignore a11y_label_has_associated_control -->
35
+ <label class="text-sm font-medium text-primary flex gap-4 items-center"
36
+ ><div class="w-[120px]"><IconedResourceType name="nextcloud" after={true} /></div><Toggle
37
+ checked={enabled}
38
+ on:change={(e) => {
39
+ if (e.detail) {
40
+ value = { id: '', secret: '', domain: '' }
41
+ } else {
42
+ value = undefined
43
+ }
44
+ }}
45
+ /></label
46
+ >
47
+ {#if enabled}
48
+ <div class="p-2 rounded border">
49
+ <label class="block pb-2">
50
+ <span class="text-primary font-semibold text-sm">Nextcloud Instance Domain</span>
51
+ <input type="text" placeholder="example.nextcloud.com" bind:value={value['domain']} />
52
+ </label>
53
+ <label class="block pb-2">
54
+ <span class="text-primary font-semibold text-sm">Custom Name</span>
55
+ <input type="text" placeholder="Custom Name" bind:value={value['display_name']} />
56
+ </label>
57
+ <label class="block pb-2">
58
+ <span class="text-primary font-semibold text-sm"
59
+ >Client Id <Tooltip
60
+ >Client ID from your Nextcloud OAuth2 app configuration</Tooltip
61
+ ></span
62
+ >
63
+ <input type="text" placeholder="Client Id" bind:value={value['id']} />
64
+ </label>
65
+ <label class="block pb-2">
66
+ <span class="text-primary font-semibold text-sm"
67
+ >Client Secret <Tooltip
68
+ >Client Secret from your Nextcloud OAuth2 app configuration</Tooltip
69
+ ></span
70
+ >
71
+ <input type="text" placeholder="Client Secret" bind:value={value['secret']} />
72
+ </label>
73
+ <CollapseLink text="Instructions">
74
+ <div class="text-sm text-secondary border p-2">
75
+ 1. Go to your Nextcloud instance as an administrator<br />
76
+ 2. Navigate to <strong>Administration settings → Security → OAuth 2.0 clients</strong><br />
77
+ 3. Click "Add client" to create a new OAuth2 application<br />
78
+ 4. Set the redirect URI to your Windmill instance's <code>{baseUrl || 'BASE_URL'}/user/login_callback/nextcloud</code><br />
79
+ 5. Copy the Client ID and Client Secret to the fields above<br />
80
+ </div>
81
+ </CollapseLink>
82
+ </div>
83
+ {/if}
84
+ </div>
@@ -0,0 +1,7 @@
1
+ interface Props {
2
+ value: any;
3
+ baseUrl?: string;
4
+ }
5
+ declare const NextcloudSetting: import("svelte").Component<Props, {}, "value">;
6
+ type NextcloudSetting = ReturnType<typeof NextcloudSetting>;
7
+ export default NextcloudSetting;
@@ -4,7 +4,7 @@ import S3ObjectPicker from './S3ObjectPicker.svelte';
4
4
  function isString(value) {
5
5
  return typeof value === 'string' || value instanceof String;
6
6
  }
7
- let { format, value = $bindable(), disablePortal = false, showSchemaExplorer = false, selectFirst = false, defaultValue, editor = $bindable(undefined), onClear = undefined } = $props();
7
+ let { format, value = $bindable(), disablePortal = false, showSchemaExplorer = false, selectFirst = false, defaultValue, editor = $bindable(undefined), disabled = false, onClear = undefined } = $props();
8
8
  function isResource() {
9
9
  return isString(value) && value.length >= '$res:'.length;
10
10
  }
@@ -21,6 +21,7 @@ function valueToPath() {
21
21
  <S3ObjectPicker bind:value />
22
22
  {:else if value == undefined || typeof value === 'string'}
23
23
  <ResourcePicker
24
+ {disabled}
24
25
  {selectFirst}
25
26
  {disablePortal}
26
27
  {onClear}
@@ -44,7 +45,7 @@ function valueToPath() {
44
45
  {#await import('./JsonEditor.svelte')}
45
46
  <Loader2 class="animate-spin" />
46
47
  {:then Module}
47
- <Module.default bind:editor code={JSON.stringify(value, null, 2)} bind:value />
48
+ <Module.default {disabled} bind:editor code={JSON.stringify(value, null, 2)} bind:value />
48
49
  {/await}
49
50
  {/if}
50
51
  </div>
@@ -8,6 +8,7 @@ interface Props {
8
8
  defaultValue: any;
9
9
  editor?: SimpleEditor | undefined;
10
10
  path?: string;
11
+ disabled?: boolean;
11
12
  onClear?: () => void;
12
13
  }
13
14
  declare const ObjectResourceInput: import("svelte").Component<Props, {}, "value" | "editor">;
@@ -1,4 +1,4 @@
1
- <script lang="ts">import { GridApi, createGrid } from 'ag-grid-community';
1
+ <script lang="ts">import { createGrid } from 'ag-grid-community';
2
2
  import 'ag-grid-community/styles/ag-grid.css';
3
3
  import 'ag-grid-community/styles/ag-theme-alpine.css';
4
4
  import { twMerge } from 'tailwind-merge';
@@ -225,7 +225,7 @@ run(() => {
225
225
  {:else}
226
226
  <TestConnection resourceType={resourceToEdit?.resource_type} {args} />
227
227
  {/if}
228
- {#if resource_type === 'git_repository' && $workspaceStore && $userStore?.is_admin}
228
+ {#if resource_type === 'git_repository' && $workspaceStore && ($userStore?.is_admin || $userStore?.is_super_admin)}
229
229
  <GitHubAppIntegration
230
230
  resourceType={resource_type}
231
231
  {args}
@@ -9,7 +9,7 @@ import { sendUserToast } from '../toast';
9
9
  import Select from './select/Select.svelte';
10
10
  import DbManagerDrawer from './DBManagerDrawer.svelte';
11
11
  import ExploreAssetButton, { assetCanBeExplored } from './ExploreAssetButton.svelte';
12
- let { initialValue = $bindable(undefined), value = $bindable(undefined), valueType = $bindable(undefined), resourceType = undefined, disabled = false, disablePortal = false, showSchemaExplorer = false, selectFirst = false, expressOAuthSetup = false, defaultValues = undefined, placeholder = undefined, onClear = undefined } = $props();
12
+ let { initialValue = $bindable(undefined), value = $bindable(undefined), valueType = $bindable(undefined), resourceType = undefined, disabled = false, disablePortal = false, showSchemaExplorer = false, selectFirst = false, expressOAuthSetup = false, defaultValues = undefined, placeholder = undefined, onClear = undefined, excludedValues = undefined } = $props();
13
13
  if (initialValue && value == undefined) {
14
14
  console.log('initialValue', initialValue);
15
15
  value = initialValue;
@@ -62,6 +62,7 @@ async function loadResources(resourceType) {
62
62
  const nc = resources
63
63
  .flat()
64
64
  .filter((x) => x.resource_type != 'state' && x.resource_type != 'cache')
65
+ .filter((x) => !excludedValues || !excludedValues.includes(x.path))
65
66
  .map((x) => ({
66
67
  value: x.path,
67
68
  label: x.path,
@@ -95,6 +96,12 @@ $effect(() => {
95
96
  });
96
97
  untrack(() => loadResources(resourceType));
97
98
  });
99
+ $effect(() => {
100
+ excludedValues;
101
+ if ($workspaceStore && resourceType && !disabled) {
102
+ untrack(() => loadResources(resourceType));
103
+ }
104
+ });
98
105
  let appConnect = $state();
99
106
  let resourceEditor = $state();
100
107
  let dbManagerDrawer = $state();
@@ -11,6 +11,7 @@ interface Props {
11
11
  defaultValues?: Record<string, any> | undefined;
12
12
  placeholder?: string | undefined;
13
13
  onClear?: () => void;
14
+ excludedValues?: string[];
14
15
  }
15
16
  declare const ResourcePicker: import("svelte").Component<Props, {
16
17
  askNewResource: () => Promise<void>;
@@ -0,0 +1,5 @@
1
+ <script lang="ts">"use strict";
2
+ let { result_stream } = $props();
3
+ </script>
4
+
5
+ <pre class="text-xs">{result_stream}</pre>
@@ -0,0 +1,5 @@
1
+ declare const ResultStreamDisplay: import("svelte").Component<{
2
+ result_stream: any;
3
+ }, {}, "">;
4
+ type ResultStreamDisplay = ReturnType<typeof ResultStreamDisplay>;
5
+ export default ResultStreamDisplay;
@@ -12,6 +12,7 @@ import JsonInputs from './JsonInputs.svelte';
12
12
  import { triggerableByAI } from '../actions/triggerableByAI.svelte';
13
13
  import InputSelectedBadge from './schema/InputSelectedBadge.svelte';
14
14
  import { untrack } from 'svelte';
15
+ import {} from '../gen';
15
16
  let reloadArgs = $state(0);
16
17
  let jsonEditor = $state(undefined);
17
18
  let schemaHeight = $state(0);
@@ -190,7 +191,14 @@ $effect(() => {
190
191
  type: 'hash',
191
192
  hash: runnable.hash
192
193
  }
193
- : undefined}
194
+ : runnable.schema?.['x-windmill-dyn-select-code'] &&
195
+ runnable.schema?.['x-windmill-dyn-select-lang']
196
+ ? {
197
+ type: 'inline',
198
+ code: runnable.schema['x-windmill-dyn-select-code'] as string,
199
+ lang: runnable.schema['x-windmill-dyn-select-lang'] as ScriptLang
200
+ }
201
+ : undefined}
194
202
  prettifyHeader
195
203
  {noVariablePicker}
196
204
  {autofocus}
@@ -203,7 +203,7 @@ const actions_render = $derived(actions);
203
203
  title={formerProperty?.title}
204
204
  placeholder={formerProperty?.placeholder}
205
205
  orderEditable={dndConfig != undefined}
206
- otherArgs={args}
206
+ otherArgs={{ ...args, [argName]: undefined }}
207
207
  {helperScript}
208
208
  {lightHeader}
209
209
  hideNested={typeof diff[argName].diff === 'object'}
@@ -276,7 +276,7 @@ const actions_render = $derived(actions);
276
276
  title={schema.properties[argName].title}
277
277
  placeholder={schema.properties[argName].placeholder}
278
278
  orderEditable={dndConfig != undefined}
279
- otherArgs={args}
279
+ otherArgs={{ ...args, [argName]: undefined }}
280
280
  {helperScript}
281
281
  {lightHeader}
282
282
  diffStatus={diff[argName] ?? undefined}
@@ -1,5 +1,5 @@
1
1
  import type { Schema } from '../common';
2
- import { type Script } from '../gen';
2
+ import { type DynamicSelect } from '../utils';
3
3
  import { type Options as DndOptions } from '@windmill-labs/svelte-dnd-action';
4
4
  import type { SchemaDiff } from './schema/schemaUtils.svelte';
5
5
  import type { ComponentCustomCSS } from './apps/types';
@@ -30,15 +30,7 @@ interface Props {
30
30
  id: string;
31
31
  value: string;
32
32
  }[] | undefined;
33
- helperScript?: {
34
- type: 'inline';
35
- path?: string;
36
- lang: Script['language'];
37
- code: string;
38
- } | {
39
- type: 'hash';
40
- hash: string;
41
- } | undefined;
33
+ helperScript?: DynamicSelect.HelperScript;
42
34
  lightHeader?: boolean;
43
35
  diff?: Record<string, SchemaDiff>;
44
36
  nestedParent?: {
@@ -5,7 +5,7 @@ import { inferArgs } from '../infer';
5
5
  import { initialCode } from '../script_helpers';
6
6
  import AIFormSettings from './copilot/AIFormSettings.svelte';
7
7
  import { defaultScripts, enterpriseLicense, usedTriggerKinds, userStore, workerTags, workspaceStore } from '../stores';
8
- import { cleanValueProperties, emptySchema, emptyString, encodeState, generateRandomString, orderedJsonStringify, replaceFalseWithUndefined } from '../utils';
8
+ import { cleanValueProperties, emptySchema, emptyString, encodeState, generateRandomString, orderedJsonStringify, readFieldsRecursively, replaceFalseWithUndefined } from '../utils';
9
9
  import Path from './Path.svelte';
10
10
  import ScriptEditor from './ScriptEditor.svelte';
11
11
  import { Alert, Badge, Button, Drawer, SecondsInput, Tab, TabContent, Tabs } from './common';
@@ -41,7 +41,7 @@ import { deployTriggers, filterDraftTriggers, handleSelectTriggerFromKind } from
41
41
  import DraftTriggersConfirmationModal from './common/confirmationModal/DraftTriggersConfirmationModal.svelte';
42
42
  import { Triggers } from './triggers/triggers.svelte';
43
43
  import WorkerTagSelect from './WorkerTagSelect.svelte';
44
- let { script, fullyLoaded = true, initialPath = $bindable(''), template = $bindable('script'), initialArgs = {}, lockedLanguage = false, showMeta = false, neverShowMeta = false, diffDrawer = undefined, savedScript = $bindable(undefined), searchParams = new URLSearchParams(), disableHistoryChange = false, replaceStateFn = (url) => window.history.replaceState(null, '', url), customUi = {}, savedPrimarySchedule = undefined, functionExports = undefined, children, onDeploy, onDeployError, onSaveInitial, onSeeDetails, onSaveDraftError, onSaveDraft, disableAi } = $props();
44
+ let { script = $bindable(), fullyLoaded = true, initialPath = $bindable(''), template = $bindable('script'), initialArgs = {}, lockedLanguage = false, showMeta = false, neverShowMeta = false, diffDrawer = undefined, savedScript = $bindable(undefined), searchParams = new URLSearchParams(), disableHistoryChange = false, replaceStateFn = (url) => window.history.replaceState(null, '', url), customUi = {}, savedPrimarySchedule = undefined, functionExports = undefined, children, onDeploy, onDeployError, onSaveInitial, onSeeDetails, onSaveDraftError, onSaveDraft, disableAi } = $props();
45
45
  export function getInitialAndModifiedValues() {
46
46
  return {
47
47
  savedValue: savedScript,
@@ -186,12 +186,16 @@ const scriptKindOptions = [
186
186
  let pathError = $state('');
187
187
  let loadingSave = $state(false);
188
188
  let loadingDraft = $state(false);
189
+ let timeout2 = undefined;
189
190
  function encodeScriptState(script) {
190
- replaceStateFn('#' +
191
- encodeState({
192
- ...script,
193
- draft_triggers: structuredClone(triggersState.getDraftTriggersSnapshot())
194
- }));
191
+ untrack(() => timeout2 && clearTimeout(timeout2));
192
+ timeout2 = setTimeout(() => {
193
+ replaceStateFn('#' +
194
+ encodeState({
195
+ ...script,
196
+ draft_triggers: structuredClone(triggersState.getDraftTriggersSnapshot())
197
+ }));
198
+ }, 500);
195
199
  }
196
200
  let timeout = undefined;
197
201
  function saveSessionDraft() {
@@ -715,7 +719,8 @@ $effect(() => {
715
719
  });
716
720
  });
717
721
  $effect(() => {
718
- !disableHistoryChange && untrack(() => encodeScriptState(script));
722
+ readFieldsRecursively(script);
723
+ !disableHistoryChange && encodeScriptState(script);
719
724
  });
720
725
  loadWorkerTags();
721
726
  async function loadWorkerTags() {
@@ -7,6 +7,6 @@ declare const ScriptBuilder: import("svelte").Component<ScriptBuilderProps, {
7
7
  setPrimarySchedule: (schedule: ScheduleTrigger | undefined | false) => void;
8
8
  setDraftTriggers: (triggers: Trigger[] | undefined) => void;
9
9
  setCode: (code: string) => void;
10
- }, "template" | "initialPath" | "savedScript">;
10
+ }, "script" | "template" | "initialPath" | "savedScript">;
11
11
  type ScriptBuilder = ReturnType<typeof ScriptBuilder>;
12
12
  export default ScriptBuilder;