windmill-components 1.542.5 → 1.550.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 (188) hide show
  1. package/package/common.d.ts +4 -1
  2. package/package/components/AIAgentLogViewer.svelte +1 -1
  3. package/package/components/ArgEnum.svelte +14 -5
  4. package/package/components/ArgInput.svelte +23 -15
  5. package/package/components/ArgInput.svelte.d.ts +1 -1
  6. package/package/components/ChannelSelector.svelte +92 -18
  7. package/package/components/ChannelSelector.svelte.d.ts +2 -0
  8. package/package/components/ConnectionSection.svelte +12 -1
  9. package/package/components/Dev.svelte +18 -5
  10. package/package/components/Dev.svelte.d.ts +23 -1
  11. package/package/components/DisplayResult.svelte +36 -23
  12. package/package/components/DropdownV2.svelte +8 -2
  13. package/package/components/DropdownV2.svelte.d.ts +1 -0
  14. package/package/components/DynamicInput.svelte +10 -10
  15. package/package/components/EditableSchemaForm.svelte +21 -7
  16. package/package/components/ErrorOrRecoveryHandler.svelte +14 -20
  17. package/package/components/FlowHistoryJobPicker.svelte +3 -0
  18. package/package/components/FlowHistoryJobPicker.svelte.d.ts +1 -0
  19. package/package/components/FlowJobResult.svelte +5 -5
  20. package/package/components/FlowLogRow.svelte +2 -2
  21. package/package/components/FlowLogViewer.svelte +228 -57
  22. package/package/components/FlowLogViewer.svelte.d.ts +16 -5
  23. package/package/components/FlowLogViewerWrapper.svelte +56 -3
  24. package/package/components/FlowLogViewerWrapper.svelte.d.ts +4 -3
  25. package/package/components/FlowLoopIterationPreview.svelte +4 -4
  26. package/package/components/FlowMetadata.svelte +3 -4
  27. package/package/components/FlowMetadata.svelte.d.ts +4 -18
  28. package/package/components/FlowPreviewContent.svelte +9 -3
  29. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  30. package/package/components/FlowStatusViewer.svelte +62 -59
  31. package/package/components/FlowStatusViewer.svelte.d.ts +2 -2
  32. package/package/components/FlowStatusViewerInner.svelte +186 -94
  33. package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -3
  34. package/package/components/FlowTimeline.svelte +110 -131
  35. package/package/components/FlowTimeline.svelte.d.ts +13 -4
  36. package/package/components/FlowTimelineBar.svelte +227 -0
  37. package/package/components/FlowTimelineBar.svelte.d.ts +24 -0
  38. package/package/components/InputTransformForm.svelte +119 -3
  39. package/package/components/InputTransformForm.svelte.d.ts +3 -0
  40. package/package/components/InputTransformSchemaForm.svelte +5 -1
  41. package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
  42. package/package/components/InstanceSetting.svelte +17 -42
  43. package/package/components/InstanceSettings.svelte +12 -21
  44. package/package/components/JobArgs.svelte +15 -16
  45. package/package/components/JobArgs.svelte.d.ts +4 -18
  46. package/package/components/JobLoader.svelte +23 -42
  47. package/package/components/JobLoader.svelte.d.ts +2 -0
  48. package/package/components/JobStatus.svelte +1 -1
  49. package/package/components/JobStatus.svelte.d.ts +4 -18
  50. package/package/components/ModulePreviewResultViewer.svelte +1 -7
  51. package/package/components/NextcloudSetting.svelte +6 -1
  52. package/package/components/Password.svelte +7 -11
  53. package/package/components/Password.svelte.d.ts +5 -20
  54. package/package/components/PasswordArgInput.svelte +35 -15
  55. package/package/components/PasswordArgInput.svelte.d.ts +4 -18
  56. package/package/components/QueuePosition.svelte +6 -2
  57. package/package/components/RunForm.svelte +5 -14
  58. package/package/components/S3ArrayHelperButton.svelte +12 -0
  59. package/package/components/S3ArrayHelperButton.svelte.d.ts +8 -0
  60. package/package/components/ScriptEditor.svelte +5 -6
  61. package/package/components/StringTypeNarrowing.svelte +39 -24
  62. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  63. package/package/components/TeamSelector.svelte +83 -37
  64. package/package/components/TeamSelector.svelte.d.ts +0 -1
  65. package/package/components/apps/components/buttons/AppButton.svelte +11 -1
  66. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +13 -4
  67. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +2 -2
  68. package/package/components/apps/components/display/table/utils.js +1 -1
  69. package/package/components/apps/components/helpers/RefreshButton.svelte +5 -1
  70. package/package/components/apps/components/helpers/RunnableComponent.svelte +0 -2
  71. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  72. package/package/components/apps/components/layout/AppTabs.svelte +116 -71
  73. package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
  74. package/package/components/apps/editor/component/ComponentInner.svelte +1 -0
  75. package/package/components/apps/editor/component/components.d.ts +16 -1
  76. package/package/components/apps/editor/component/components.js +22 -2
  77. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +2 -0
  78. package/package/components/apps/editor/settingsPanel/GridTab.svelte +19 -1
  79. package/package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +3 -1
  80. package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte +52 -0
  81. package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte.d.ts +9 -0
  82. package/package/components/auditLogs/AuditLogsFilters.svelte +6 -0
  83. package/package/components/auditLogs/AuditLogsTable.svelte +17 -7
  84. package/package/components/auditLogs/AuditLogsTable.svelte.d.ts +1 -0
  85. package/package/components/common/CloseButton.svelte +2 -2
  86. package/package/components/common/CloseButton.svelte.d.ts +1 -0
  87. package/package/components/common/layout/List.svelte +3 -7
  88. package/package/components/common/layout/List.svelte.d.ts +7 -29
  89. package/package/components/common/popup/PopupV2.svelte +8 -25
  90. package/package/components/common/popup/PopupV2.svelte.d.ts +4 -2
  91. package/package/components/common/table/ScriptRow.svelte +22 -2
  92. package/package/components/copilot/FlowCopilotInputsModal.svelte +26 -23
  93. package/package/components/copilot/chat/AIChatManager.svelte.js +3 -2
  94. package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
  95. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -2
  96. package/package/components/copilot/chat/script/core.d.ts +4 -4
  97. package/package/components/copilot/chat/script/core.js +93 -34
  98. package/package/components/copilot/lib.d.ts +1 -0
  99. package/package/components/copilot/lib.js +6 -3
  100. package/package/components/custom_ui.d.ts +1 -0
  101. package/package/components/flows/FlowProgressBar.svelte +16 -16
  102. package/package/components/flows/FlowProgressBar.svelte.d.ts +7 -22
  103. package/package/components/flows/content/FlowInputsQuick.svelte +3 -2
  104. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +1 -0
  105. package/package/components/flows/content/FlowModuleComponent.svelte +24 -1
  106. package/package/components/flows/flowInfers.js +34 -8
  107. package/package/components/flows/flowStore.d.ts +4 -1
  108. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  109. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -1
  110. package/package/components/flows/map/InsertModuleButton.svelte +4 -14
  111. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +0 -1
  112. package/package/components/flows/map/InsertModuleInner.svelte +17 -20
  113. package/package/components/flows/map/MapItem.svelte +1 -1
  114. package/package/components/flows/pickers/PickHubScriptQuick.svelte +38 -52
  115. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -0
  116. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +27 -15
  117. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +1 -0
  118. package/package/components/flows/propPicker/OutputPicker.svelte +2 -0
  119. package/package/components/git_sync/DetectionFlow.svelte +33 -44
  120. package/package/components/git_sync/DetectionFlow.svelte.d.ts +1 -0
  121. package/package/components/git_sync/GitSyncContext.svelte.d.ts +22 -0
  122. package/package/components/git_sync/GitSyncContext.svelte.js +145 -5
  123. package/package/components/git_sync/GitSyncModeDisplay.svelte +14 -0
  124. package/package/components/git_sync/GitSyncModeDisplay.svelte.d.ts +9 -0
  125. package/package/components/git_sync/GitSyncRepositoryCard.svelte +365 -253
  126. package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +10 -1
  127. package/package/components/git_sync/GitSyncSection.svelte +134 -14
  128. package/package/components/git_sync/PullWorkspaceModal.svelte +24 -32
  129. package/package/components/git_sync/PushWorkspaceModal.svelte +24 -32
  130. package/package/components/graph/model.d.ts +5 -5
  131. package/package/components/graph/renderers/edges/EmptyEdge.svelte +3 -10
  132. package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +4 -18
  133. package/package/components/graph/renderers/nodes/AIToolNode.svelte +2 -2
  134. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +5 -10
  135. package/package/components/home/ItemsList.svelte +1 -1
  136. package/package/components/jobs/JobProgressBar.svelte +27 -21
  137. package/package/components/jobs/JobProgressBar.svelte.d.ts +9 -24
  138. package/package/components/meltComponents/MenuSingleItem.svelte +3 -8
  139. package/package/components/meltComponents/MenuSingleItem.svelte.d.ts +0 -3
  140. package/package/components/meltComponents/Popover.svelte +3 -2
  141. package/package/components/meltComponents/Popover.svelte.d.ts +1 -0
  142. package/package/components/meltComponents/Tooltip.svelte +1 -1
  143. package/package/components/progressBar/ProgressBar.svelte +39 -53
  144. package/package/components/progressBar/ProgressBar.svelte.d.ts +11 -26
  145. package/package/components/runs/JobsLoader.svelte +1 -1
  146. package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
  147. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -1
  148. package/package/components/schema/AddPropertyV2.svelte +7 -4
  149. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  150. package/package/components/select/MultiSelect.svelte +2 -2
  151. package/package/components/select/MultiSelect.svelte.d.ts +1 -0
  152. package/package/components/settings/WorkspaceUserSettings.svelte +92 -1
  153. package/package/components/sidebar/MenuLink.svelte +2 -1
  154. package/package/components/sidebar/MenuLink.svelte.d.ts +1 -0
  155. package/package/components/sidebar/SidebarContent.svelte +27 -27
  156. package/package/components/table/Cell.svelte +7 -14
  157. package/package/components/table/Cell.svelte.d.ts +13 -35
  158. package/package/components/triggers/AddTriggersButton.svelte +1 -0
  159. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
  160. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
  161. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +28 -5
  162. package/package/components/triggers/gcp/utils.js +1 -0
  163. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +1 -0
  164. package/package/components/triggers/webhook/WebhooksConfigSection.svelte +143 -63
  165. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +22 -0
  166. package/package/components/triggers/websocket/utils.js +1 -0
  167. package/package/components/workspaceSettings/AISettings.svelte +8 -2
  168. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  169. package/package/components/workspaceSettings/ModelTokenLimits.svelte +165 -0
  170. package/package/components/workspaceSettings/ModelTokenLimits.svelte.d.ts +8 -0
  171. package/package/components/workspaceSettings/StorageSettings.svelte +123 -51
  172. package/package/gen/core/OpenAPI.js +1 -1
  173. package/package/gen/schemas.gen.d.ts +141 -16
  174. package/package/gen/schemas.gen.js +144 -16
  175. package/package/gen/services.gen.d.ts +62 -42
  176. package/package/gen/services.gen.js +131 -82
  177. package/package/gen/types.gen.d.ts +218 -144
  178. package/package/hubPaths.json +2 -1
  179. package/package/services/JobManager.js +10 -7
  180. package/package/stores.d.ts +1 -0
  181. package/package/stores.js +6 -3
  182. package/package/timelineCompute.svelte.d.ts +21 -0
  183. package/package/timelineCompute.svelte.js +113 -0
  184. package/package/utils.d.ts +15 -8
  185. package/package/utils.js +62 -12
  186. package/package/workspace_settings.d.ts +13 -8
  187. package/package/workspace_settings.js +46 -11
  188. package/package.json +2 -2
@@ -4,17 +4,10 @@ const plimit = pLimit(5);
4
4
 
5
5
  <script lang="ts">import { JobService } from '../gen';
6
6
  import { workspaceStore } from '../stores';
7
- import { onDestroy, tick, untrack } from 'svelte';
7
+ import { getContext, onDestroy, tick, untrack } from 'svelte';
8
8
  import { sendUserToast } from '../toast';
9
- import { isScriptPreview } from '../utils';
9
+ import { DynamicInput, isScriptPreview } from '../utils';
10
10
  let { isLoading = $bindable(false), job = $bindable(undefined), noCode = false, allowConcurentRequests = false, workspaceOverride = undefined, notfound = $bindable(false), jobUpdateLastFetch = $bindable(undefined), toastError = false, onlyResult = false, loadPlaceholderJobOnStart = undefined, scriptProgress = $bindable(undefined), noLogs = false, children } = $props();
11
- /// Last time asked for job progress
12
- let lastTimeCheckedProgress = undefined;
13
- /// Will try to poll progress every 5s and if once progress returned was not undefined, will be ignored
14
- /// and getProgressRate will be used instead
15
- const getProgressRetryRate = 5000;
16
- /// How often loader poll progress
17
- const getProgressRate = 1000;
18
11
  let workspace = $derived(workspaceOverride ?? $workspaceStore);
19
12
  let syncIteration = 0;
20
13
  let errorIteration = 0;
@@ -29,6 +22,7 @@ let currentId = $state(undefined);
29
22
  let noPingTimeout = undefined;
30
23
  let lastNoLogs = $state(noLogs);
31
24
  let lastCompletedJobId = $state(undefined);
25
+ let token = getContext('AuthToken');
32
26
  $effect(() => {
33
27
  let newIsLoading = currentId !== undefined;
34
28
  untrack(() => {
@@ -73,6 +67,7 @@ function clearCurrentId() {
73
67
  export async function abstractRun(fn, callbacks) {
74
68
  try {
75
69
  isLoading = true;
70
+ scriptProgress = undefined;
76
71
  lastCompletedJobId = undefined;
77
72
  clearCurrentJob();
78
73
  lastCallbacks = callbacks;
@@ -145,9 +140,6 @@ function refreshLogOffset() {
145
140
  if (logOffset == 0) {
146
141
  logOffset = job?.logs?.length ? job.logs?.length + 1 : 0;
147
142
  }
148
- if (resultStreamOffset == 0) {
149
- resultStreamOffset = job?.result_stream?.length ? job.result_stream?.length + 1 : 0;
150
- }
151
143
  }
152
144
  export async function getLogs() {
153
145
  if (job) {
@@ -164,10 +156,13 @@ export async function getLogs() {
164
156
  }
165
157
  }
166
158
  }
159
+ export async function runDynamicInputScript(entrypoint_function, runnable_ref, args, callbacks) {
160
+ return abstractRun(() => JobService.runDynamicSelect({
161
+ workspace: $workspaceStore,
162
+ requestBody: { entrypoint_function, args, runnable_ref }
163
+ }), callbacks);
164
+ }
167
165
  export async function runPreview(path, code, lang, args, tag, lock, hash, callbacks) {
168
- // Reset in case we rerun job without reloading
169
- scriptProgress = undefined;
170
- lastTimeCheckedProgress = undefined;
171
166
  return abstractRun(() => JobService.runScriptPreview({
172
167
  workspace: $workspaceStore,
173
168
  requestBody: {
@@ -222,6 +217,7 @@ export async function watchJob(testId, callbacks) {
222
217
  syncIteration = 0;
223
218
  errorIteration = 0;
224
219
  currentId = testId;
220
+ scriptProgress = undefined;
225
221
  if (loadPlaceholderJobOnStart) {
226
222
  job = structuredClone(loadPlaceholderJobOnStart);
227
223
  }
@@ -241,30 +237,6 @@ export async function watchJob(testId, callbacks) {
241
237
  syncer(testId, callbacks);
242
238
  }
243
239
  }
244
- function setJobProgress(job) {
245
- let getProgress = undefined;
246
- // We only pull individual job progress this way
247
- // Flow's progress we are getting from FlowStatusModule of flow job
248
- if (job.job_kind == 'script' || isScriptPreview(job.job_kind)) {
249
- // First time, before running job, lastTimeCheckedProgress is always undefined
250
- if (lastTimeCheckedProgress) {
251
- const lastTimeCheckedMs = Date.now() - lastTimeCheckedProgress;
252
- // Ask for progress if the last time we asked is >5s OR the progress was once not undefined
253
- if (lastTimeCheckedMs > getProgressRetryRate ||
254
- (scriptProgress != undefined && lastTimeCheckedMs > getProgressRate)) {
255
- lastTimeCheckedProgress = Date.now();
256
- getProgress = true;
257
- }
258
- }
259
- else {
260
- // Make it think we asked for progress, but in reality we didnt. First 5s we want to wait without putting extra work on db
261
- // 99.99% of the jobs won't have progress be set so we have to do a balance between having low-latency for jobs that use it and job that don't
262
- // we would usually not care to have progress the first 5s and jobs that are less than 5s
263
- lastTimeCheckedProgress = Date.now();
264
- }
265
- }
266
- return getProgress;
267
- }
268
240
  const clamp = (num, min, max) => Math.min(Math.max(num, min), max);
269
241
  function updateJobFromProgress(previewJobUpdates, job, callbacks) {
270
242
  // Clamp number between two values with the following line:
@@ -275,6 +247,7 @@ function updateJobFromProgress(previewJobUpdates, job, callbacks) {
275
247
  }
276
248
  }
277
249
  if (previewJobUpdates.progress) {
250
+ console.log('progress', previewJobUpdates.progress);
278
251
  // Progress cannot go back and cannot be set to 100
279
252
  scriptProgress = clamp(previewJobUpdates.progress, scriptProgress ?? 0, 99);
280
253
  }
@@ -329,14 +302,14 @@ async function loadTestJob(id, callbacks) {
329
302
  try {
330
303
  if (job && `running` in job) {
331
304
  callbacks?.running?.({ id });
332
- let getProgress = setJobProgress(job);
333
305
  refreshLogOffset();
334
306
  let previewJobUpdates = await JobService.getJobUpdates({
335
307
  workspace: workspace,
336
308
  id,
337
309
  running: job.running,
338
310
  logOffset: logOffset,
339
- getProgress: getProgress
311
+ streamOffset: resultStreamOffset,
312
+ getProgress: false
340
313
  });
341
314
  if ((previewJobUpdates.running ?? false) || (previewJobUpdates.completed ?? false)) {
342
315
  job = await JobService.getJob({
@@ -464,7 +437,9 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
464
437
  job.running = true;
465
438
  }
466
439
  }
467
- let getProgress = onlyResult || !job ? undefined : setJobProgress(job);
440
+ let getProgress = onlyResult || !job
441
+ ? undefined
442
+ : job.job_kind == 'script' || isScriptPreview(job.job_kind);
468
443
  refreshLogOffset();
469
444
  // Build SSE URL with query parameters
470
445
  const params = new URLSearchParams({
@@ -491,6 +466,12 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
491
466
  if (resultStreamOffset) {
492
467
  params.set('stream_offset', resultStreamOffset.toString());
493
468
  }
469
+ if (job) {
470
+ params.set('is_flow', (job.job_kind === 'flow' || job.job_kind === 'flowpreview').toString());
471
+ }
472
+ if (token?.token && token.token != '') {
473
+ params.set('token', token.token);
474
+ }
494
475
  const sseUrl = `/api/w/${workspace}/jobs_u/getupdate_sse/${id}?${params.toString()}`;
495
476
  currentEventSource = new EventSource(sseUrl);
496
477
  setNoPingTimeout(id, attempt, callbacks);
@@ -1,5 +1,6 @@
1
1
  import { type Job, type OpenFlow } from '../gen';
2
2
  import type { SupportedLanguage } from '../common';
3
+ import { DynamicInput } from '../utils';
3
4
  export type Callbacks = {
4
5
  done?: (x: Job & {
5
6
  result?: any;
@@ -57,6 +58,7 @@ declare const JobLoader: import("svelte").Component<Props, {
57
58
  tag?: string;
58
59
  }, callbacks?: Callbacks) => Promise<string>;
59
60
  getLogs: () => Promise<void>;
61
+ runDynamicInputScript: (entrypoint_function: string, runnable_ref: DynamicInput.HelperScript, args: Record<string, any>, callbacks?: Callbacks) => Promise<string>;
60
62
  runPreview: (path: string | undefined, code: string, lang: SupportedLanguage | undefined, args: Record<string, any>, tag: string | undefined, lock?: string, hash?: string, callbacks?: Callbacks) => Promise<string>;
61
63
  cancelJob: () => Promise<void>;
62
64
  clearCurrentJob: () => Promise<void>;
@@ -6,7 +6,7 @@ import { Calendar, CheckCircle2, Circle, Clock, Hourglass, Play, XCircle } from
6
6
  import NoWorkerWithTagWarning from './runs/NoWorkerWithTagWarning.svelte';
7
7
  import QueuePosition from './QueuePosition.svelte';
8
8
  const SMALL_ICON_SIZE = 12;
9
- export let job;
9
+ let { job } = $props();
10
10
  </script>
11
11
 
12
12
  {#if job && 'success' in job && job.success}
@@ -1,21 +1,7 @@
1
1
  import type { CompletedJob, QueuedJob } 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 JobStatus: $$__sveltets_2_IsomorphicComponent<{
2
+ interface Props {
16
3
  job: QueuedJob | CompletedJob | undefined;
17
- }, {
18
- [evt: string]: CustomEvent<any>;
19
- }, {}, {}, string>;
20
- type JobStatus = InstanceType<typeof JobStatus>;
4
+ }
5
+ declare const JobStatus: import("svelte").Component<Props, {}, "">;
6
+ type JobStatus = ReturnType<typeof JobStatus>;
21
7
  export default JobStatus;
@@ -9,7 +9,6 @@ import { getStringError } from './copilot/chat/utils';
9
9
  import AiAgentLogViewer from './AIAgentLogViewer.svelte';
10
10
  let { lang, editor, diffEditor, loopStatus = undefined, scriptProgress = $bindable(undefined), testJob = undefined, mod, testIsLoading = false, disableMock = false, disableHistory = false, onUpdateMock, loadingJob = false, tagLabel = undefined } = $props();
11
11
  const { stepsInputArgs } = getContext('FlowEditorContext');
12
- let jobProgressReset = $state(() => { });
13
12
  let outputPickerInner = $state(undefined);
14
13
  export function getOutputPickerInner() {
15
14
  return outputPickerInner;
@@ -22,12 +21,7 @@ const preview = $derived.by(() => outputPickerInner?.getPreview?.());
22
21
  <Splitpanes horizontal>
23
22
  <Pane size={65} minSize={10} class="text-sm text-tertiary">
24
23
  {#if scriptProgress}
25
- <JobProgressBar
26
- job={testJob}
27
- bind:scriptProgress
28
- bind:reset={jobProgressReset}
29
- compact={true}
30
- />
24
+ <JobProgressBar job={testJob} {scriptProgress} compact={true} />
31
25
  {/if}
32
26
 
33
27
  <OutputPickerInner
@@ -25,8 +25,13 @@ function changeDomain(domain) {
25
25
  }
26
26
  }
27
27
  let enabled = $derived(value != undefined);
28
+ let lastDomain = $state(value?.['domain']);
28
29
  $effect(() => {
29
- changeDomain(value?.['domain']);
30
+ const currentDomain = value?.['domain'];
31
+ if (currentDomain && currentDomain !== lastDomain) {
32
+ lastDomain = currentDomain;
33
+ changeDomain(currentDomain);
34
+ }
30
35
  });
31
36
  </script>
32
37
 
@@ -1,12 +1,8 @@
1
- <script lang="ts">// @ts-nocheck
2
- import { onMount } from 'svelte';
3
- export let password;
4
- export let placeholder = '******';
5
- export let disabled = false;
6
- export let required = false;
7
- export let small = false;
8
- $: red = required && (password == '' || password == undefined);
9
- let hideValue = true;
1
+ <script lang="ts">import { createBubbler } from 'svelte/legacy';
2
+ const bubble = createBubbler();
3
+ let { password = $bindable(), placeholder = '******', disabled = false, required = false, small = false, onKeyDown } = $props();
4
+ let red = $derived(required && (password == '' || password == undefined));
5
+ let hideValue = $state(true);
10
6
  let randomId = (Math.random() * 10e15).toString(16);
11
7
  </script>
12
8
 
@@ -25,7 +21,7 @@ let randomId = (Math.random() * 10e15).toString(16);
25
21
  : ''} text-sm h-9"
26
22
  type="password"
27
23
  bind:value={password}
28
- on:keydown
24
+ onkeydown={onKeyDown}
29
25
  autocomplete="new-password"
30
26
  {placeholder}
31
27
  {disabled}
@@ -37,7 +33,7 @@ let randomId = (Math.random() * 10e15).toString(16);
37
33
  : ''} text-sm h-9"
38
34
  type="text"
39
35
  bind:value={password}
40
- on:keydown
36
+ onkeydown={bubble('keydown')}
41
37
  autocomplete="new-password"
42
38
  {placeholder}
43
39
  {disabled}
@@ -1,26 +1,11 @@
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 Password: $$__sveltets_2_IsomorphicComponent<{
1
+ interface Props {
15
2
  password: string | undefined;
16
3
  placeholder?: string;
17
4
  disabled?: boolean;
18
5
  required?: boolean;
19
6
  small?: boolean;
20
- }, {
21
- keydown: KeyboardEvent;
22
- } & {
23
- [evt: string]: CustomEvent<any>;
24
- }, {}, {}, string>;
25
- type Password = InstanceType<typeof Password>;
7
+ onKeyDown?: (event: KeyboardEvent) => void;
8
+ }
9
+ declare const Password: import("svelte").Component<Props, {}, "password">;
10
+ type Password = ReturnType<typeof Password>;
26
11
  export default Password;
@@ -1,21 +1,20 @@
1
1
  <script lang="ts">import { VariableService } from '../gen';
2
2
  import { userStore, workspaceStore } from '../stores';
3
3
  import { generateRandomString } from '../utils';
4
+ import { Button } from './common';
4
5
  import Password from './Password.svelte';
5
- export let value = undefined;
6
- export let disabled;
7
- let path = '';
8
- let password = value && typeof value === 'string' && !value.startsWith('$var:') ? value : '';
6
+ import { untrack } from 'svelte';
7
+ let { value = $bindable(undefined), disabled } = $props();
8
+ let path = $state('');
9
+ let password = $state(value && typeof value === 'string' && !value.startsWith('$var:') ? value : '');
9
10
  let isGenerating = false;
11
+ let userPrefix = $derived('u/' + ($userStore?.username ?? $userStore?.email)?.split('@')[0] + '/secret_arg/');
10
12
  async function generateValue() {
11
13
  if (isGenerating)
12
14
  return;
13
15
  isGenerating = true;
14
16
  try {
15
- let npath = 'u/' +
16
- ($userStore?.username ?? $userStore?.email)?.split('@')[0] +
17
- '/secret_arg/' +
18
- generateRandomString(12);
17
+ let npath = userPrefix + generateRandomString(12);
19
18
  let nvalue = '$var:' + npath;
20
19
  await VariableService.createVariable({
21
20
  workspace: $workspaceStore,
@@ -28,6 +27,7 @@ async function generateValue() {
28
27
  }
29
28
  });
30
29
  path = npath;
30
+ console.log('generated', nvalue);
31
31
  value = nvalue;
32
32
  debouncedUpdate();
33
33
  }
@@ -54,12 +54,32 @@ function debouncedUpdate() {
54
54
  timeout && clearTimeout(timeout);
55
55
  timeout = setTimeout(updateValue, 500);
56
56
  }
57
- $: password && debouncedUpdate();
58
- $: $workspaceStore &&
59
- ($userStore?.username || $userStore?.email) &&
60
- path == '' &&
61
- password != '' &&
62
- generateValue();
57
+ $effect(() => {
58
+ password && untrack(() => debouncedUpdate());
59
+ });
60
+ $effect(() => {
61
+ $workspaceStore &&
62
+ ($userStore?.username || $userStore?.email) &&
63
+ path == '' &&
64
+ password != '' &&
65
+ untrack(() => generateValue());
66
+ });
63
67
  </script>
64
68
 
65
- <Password {disabled} bind:password />
69
+ {#if value?.startsWith('$var:') && !value.startsWith('$var:' + userPrefix)}
70
+ <div class="flex items-center gap-2 text-sm text-tertiary">
71
+ Linked to static variable
72
+ <Button
73
+ color="light"
74
+ size="xs"
75
+ variant="border"
76
+ onclick={() => {
77
+ value = ''
78
+ }}
79
+ >
80
+ Reset variable link
81
+ </Button>
82
+ </div>
83
+ {:else}
84
+ <Password {disabled} bind:password />
85
+ {/if}
@@ -1,21 +1,7 @@
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 PasswordArgInput: $$__sveltets_2_IsomorphicComponent<{
1
+ interface Props {
15
2
  value?: string | undefined;
16
3
  disabled: boolean;
17
- }, {
18
- [evt: string]: CustomEvent<any>;
19
- }, {}, {}, string>;
20
- type PasswordArgInput = InstanceType<typeof PasswordArgInput>;
4
+ }
5
+ declare const PasswordArgInput: import("svelte").Component<Props, {}, "value">;
6
+ type PasswordArgInput = ReturnType<typeof PasswordArgInput>;
21
7
  export default PasswordArgInput;
@@ -16,8 +16,12 @@ $effect(() => {
16
16
  JobService.getScheduledFor({
17
17
  workspace: workspace,
18
18
  id: jobId
19
- }).then((response) => {
19
+ })
20
+ .then((response) => {
20
21
  scheduledFor = response;
22
+ })
23
+ .catch((error) => {
24
+ console.error('Failed to fetch scheduled for:', error);
21
25
  });
22
26
  }
23
27
  catch (error) {
@@ -45,8 +49,8 @@ $effect(() => {
45
49
  queueState = undefined;
46
50
  }
47
51
  return () => {
52
+ scheduledForTimeout && clearTimeout(scheduledForTimeout);
48
53
  if (queuePositionInterval) {
49
- scheduledForTimeout && clearTimeout(scheduledForTimeout);
50
54
  clearInterval(queuePositionInterval);
51
55
  }
52
56
  };
@@ -12,7 +12,6 @@ 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';
16
15
  let reloadArgs = $state(0);
17
16
  let jsonEditor = $state(undefined);
18
17
  let schemaHeight = $state(0);
@@ -186,19 +185,11 @@ $effect(() => {
186
185
  {#key reloadArgs}
187
186
  <div bind:clientHeight={schemaHeight}>
188
187
  <SchemaForm
189
- helperScript={runnable.hash
190
- ? {
191
- type: 'hash',
192
- hash: runnable.hash
193
- }
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}
188
+ helperScript={{
189
+ source: 'deployed',
190
+ path: runnable.path!,
191
+ runnable_kind: runnable.hash ? 'script' : 'flow'
192
+ }}
202
193
  prettifyHeader
203
194
  {noVariablePicker}
204
195
  {autofocus}
@@ -0,0 +1,12 @@
1
+ <script lang="ts">import { Button } from './common';
2
+ import { Plug } from 'lucide-svelte';
3
+ let { label = 'Add object from an expression', onClick, connecting = false } = $props();
4
+ </script>
5
+
6
+ {#if !connecting}
7
+ <div class="mt-2 mb-2">
8
+ <Button variant="border" color="light" size="xs" startIcon={{ icon: Plug }} onclick={onClick}>
9
+ {label}
10
+ </Button>
11
+ </div>
12
+ {/if}
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ label?: string;
3
+ onClick: () => void;
4
+ connecting?: boolean;
5
+ }
6
+ declare const S3ArrayHelperButton: import("svelte").Component<Props, {}, "">;
7
+ type S3ArrayHelperButton = ReturnType<typeof S3ArrayHelperButton>;
8
+ export default S3ArrayHelperButton;
@@ -43,7 +43,7 @@ $effect.pre(() => {
43
43
  }
44
44
  });
45
45
  let showHistoryDrawer = $state(false);
46
- let jobProgressReset = $state(undefined);
46
+ let jobProgressBar = $state(undefined);
47
47
  let diffMode = $state(false);
48
48
  let websocketAlive = $state({
49
49
  pyright: false,
@@ -109,8 +109,7 @@ export function setArgs(nargs) {
109
109
  }
110
110
  export async function runTest() {
111
111
  // Not defined if JobProgressBar not loaded
112
- if (jobProgressReset)
113
- jobProgressReset();
112
+ jobProgressBar?.reset();
114
113
  //@ts-ignore
115
114
  let job = await jobLoader.runPreview(path, code, lang, selectedTab === 'preprocessor' || kind === 'preprocessor'
116
115
  ? { _ENTRYPOINT_OVERRIDE: 'preprocessor', ...(args ?? {}) }
@@ -615,7 +614,7 @@ $effect(() => {
615
614
  {#key argsRender}
616
615
  <SchemaForm
617
616
  helperScript={{
618
- type: 'inline',
617
+ source: 'inline',
619
618
  code,
620
619
  //@ts-ignore
621
620
  lang
@@ -648,8 +647,8 @@ $effect(() => {
648
647
  <!-- Put to the slot in logpanel -->
649
648
  <JobProgressBar
650
649
  job={testJob}
651
- bind:scriptProgress
652
- bind:reset={jobProgressReset}
650
+ {scriptProgress}
651
+ bind:this={jobProgressBar}
653
652
  compact={true}
654
653
  />
655
654
  {/if}
@@ -57,7 +57,7 @@ function add() {
57
57
  }
58
58
  function remove(item) {
59
59
  enum_ = (enum_ || []).filter((el) => el !== item);
60
- if (enum_.length == 0) {
60
+ if (enum_?.length == 0) {
61
61
  enum_ = undefined;
62
62
  }
63
63
  if (enumLabels !== undefined) {
@@ -181,34 +181,49 @@ function onEnumKeyChange(oldKey, newKey) {
181
181
  <div class="flex flex-col gap-1">
182
182
  {#if enum_}
183
183
  {#each enum_ as _, i}
184
- <div class="flex flex-row w-full gap-2 pt-2">
185
- <input
186
- id="input"
187
- type="text"
188
- bind:value={enum_[i]}
189
- oninput={(event) => enum_ && onEnumKeyChange(event?.currentTarget.value, enum_[i])}
190
- />
191
- {#if enumLabels !== undefined}
184
+ {#if typeof enum_[i] === 'string'}
185
+ <div class="flex flex-row w-full gap-2 pt-2">
192
186
  <input
193
187
  id="input"
194
188
  type="text"
195
- bind:value={enumLabels[enum_[i]]}
196
- placeholder="Optional title..."
197
- oninput={(event) => {
198
- if (event?.currentTarget.value === '') {
199
- if (enumLabels === undefined) {
200
- enumLabels = {}
201
- }
202
- enum_ && delete enumLabels[enum_[i]]
203
- }
204
- }}
189
+ bind:value={enum_[i]}
190
+ oninput={(event) =>
191
+ enum_ &&
192
+ typeof enum_[i] === 'string' &&
193
+ onEnumKeyChange(event?.currentTarget.value, enum_[i])}
205
194
  />
206
- {/if}
195
+ {#if enumLabels !== undefined}
196
+ <input
197
+ id="input"
198
+ type="text"
199
+ bind:value={enumLabels[enum_[i]]}
200
+ placeholder="Optional title..."
201
+ oninput={(event) => {
202
+ if (event?.currentTarget.value === '') {
203
+ if (enumLabels === undefined) {
204
+ enumLabels = {}
205
+ }
206
+ if (typeof enum_?.[i] === 'string') {
207
+ enum_ && delete enumLabels[enum_[i]]
208
+ }
209
+ }
210
+ }}
211
+ />
212
+ {/if}
207
213
 
208
- {#if allowKindChange}
209
- <Button size="sm" on:click={() => enum_ && remove(enum_[i])}>-</Button>
210
- {/if}
211
- </div>
214
+ {#if allowKindChange}
215
+ <Button
216
+ size="sm"
217
+ on:click={() => enum_ && typeof enum_[i] === 'string' && remove(enum_[i])}
218
+ >-</Button
219
+ >
220
+ {/if}
221
+ </div>
222
+ {:else}
223
+ <div class="flex flex-row w-full gap-2 pt-2">
224
+ {JSON.stringify(enum_[i])} is not a string, remove it
225
+ </div>
226
+ {/if}
212
227
  {/each}
213
228
  {/if}
214
229
  </div>
@@ -15,6 +15,6 @@ interface Props {
15
15
  overrideAllowKindChange?: boolean;
16
16
  originalType?: string | undefined;
17
17
  }
18
- declare const StringTypeNarrowing: import("svelte").Component<Props, {}, "password" | "disableCreate" | "pattern" | "format" | "enum_" | "enumLabels" | "contentEncoding" | "customErrorMessage" | "minRows" | "disableVariablePicker" | "dateFormat">;
18
+ declare const StringTypeNarrowing: import("svelte").Component<Props, {}, "password" | "pattern" | "disableCreate" | "format" | "enum_" | "enumLabels" | "contentEncoding" | "customErrorMessage" | "minRows" | "disableVariablePicker" | "dateFormat">;
19
19
  type StringTypeNarrowing = ReturnType<typeof StringTypeNarrowing>;
20
20
  export default StringTypeNarrowing;