windmill-components 1.542.4 → 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 (189) 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/EditorSettings.svelte +11 -9
  17. package/package/components/ErrorOrRecoveryHandler.svelte +14 -20
  18. package/package/components/FlowHistoryJobPicker.svelte +3 -0
  19. package/package/components/FlowHistoryJobPicker.svelte.d.ts +1 -0
  20. package/package/components/FlowJobResult.svelte +5 -5
  21. package/package/components/FlowLogRow.svelte +2 -2
  22. package/package/components/FlowLogViewer.svelte +228 -57
  23. package/package/components/FlowLogViewer.svelte.d.ts +16 -5
  24. package/package/components/FlowLogViewerWrapper.svelte +56 -3
  25. package/package/components/FlowLogViewerWrapper.svelte.d.ts +4 -3
  26. package/package/components/FlowLoopIterationPreview.svelte +4 -4
  27. package/package/components/FlowMetadata.svelte +3 -4
  28. package/package/components/FlowMetadata.svelte.d.ts +4 -18
  29. package/package/components/FlowPreviewContent.svelte +9 -3
  30. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  31. package/package/components/FlowStatusViewer.svelte +62 -59
  32. package/package/components/FlowStatusViewer.svelte.d.ts +2 -2
  33. package/package/components/FlowStatusViewerInner.svelte +186 -94
  34. package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -3
  35. package/package/components/FlowTimeline.svelte +110 -131
  36. package/package/components/FlowTimeline.svelte.d.ts +13 -4
  37. package/package/components/FlowTimelineBar.svelte +227 -0
  38. package/package/components/FlowTimelineBar.svelte.d.ts +24 -0
  39. package/package/components/InputTransformForm.svelte +119 -3
  40. package/package/components/InputTransformForm.svelte.d.ts +3 -0
  41. package/package/components/InputTransformSchemaForm.svelte +5 -1
  42. package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
  43. package/package/components/InstanceSetting.svelte +17 -42
  44. package/package/components/InstanceSettings.svelte +12 -21
  45. package/package/components/JobArgs.svelte +15 -16
  46. package/package/components/JobArgs.svelte.d.ts +4 -18
  47. package/package/components/JobLoader.svelte +23 -42
  48. package/package/components/JobLoader.svelte.d.ts +2 -0
  49. package/package/components/JobStatus.svelte +1 -1
  50. package/package/components/JobStatus.svelte.d.ts +4 -18
  51. package/package/components/ModulePreviewResultViewer.svelte +1 -7
  52. package/package/components/NextcloudSetting.svelte +6 -1
  53. package/package/components/Password.svelte +7 -11
  54. package/package/components/Password.svelte.d.ts +5 -20
  55. package/package/components/PasswordArgInput.svelte +35 -15
  56. package/package/components/PasswordArgInput.svelte.d.ts +4 -18
  57. package/package/components/QueuePosition.svelte +6 -2
  58. package/package/components/RunForm.svelte +5 -14
  59. package/package/components/S3ArrayHelperButton.svelte +12 -0
  60. package/package/components/S3ArrayHelperButton.svelte.d.ts +8 -0
  61. package/package/components/ScriptEditor.svelte +5 -6
  62. package/package/components/StringTypeNarrowing.svelte +39 -24
  63. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  64. package/package/components/TeamSelector.svelte +83 -37
  65. package/package/components/TeamSelector.svelte.d.ts +0 -1
  66. package/package/components/apps/components/buttons/AppButton.svelte +11 -1
  67. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +13 -4
  68. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +2 -2
  69. package/package/components/apps/components/display/table/utils.js +1 -1
  70. package/package/components/apps/components/helpers/RefreshButton.svelte +5 -1
  71. package/package/components/apps/components/helpers/RunnableComponent.svelte +0 -2
  72. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  73. package/package/components/apps/components/layout/AppTabs.svelte +116 -71
  74. package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
  75. package/package/components/apps/editor/component/ComponentInner.svelte +1 -0
  76. package/package/components/apps/editor/component/components.d.ts +16 -1
  77. package/package/components/apps/editor/component/components.js +22 -2
  78. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +2 -0
  79. package/package/components/apps/editor/settingsPanel/GridTab.svelte +19 -1
  80. package/package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +3 -1
  81. package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte +52 -0
  82. package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte.d.ts +9 -0
  83. package/package/components/auditLogs/AuditLogsFilters.svelte +6 -0
  84. package/package/components/auditLogs/AuditLogsTable.svelte +17 -7
  85. package/package/components/auditLogs/AuditLogsTable.svelte.d.ts +1 -0
  86. package/package/components/common/CloseButton.svelte +2 -2
  87. package/package/components/common/CloseButton.svelte.d.ts +1 -0
  88. package/package/components/common/layout/List.svelte +3 -7
  89. package/package/components/common/layout/List.svelte.d.ts +7 -29
  90. package/package/components/common/popup/PopupV2.svelte +8 -25
  91. package/package/components/common/popup/PopupV2.svelte.d.ts +4 -2
  92. package/package/components/common/table/ScriptRow.svelte +22 -2
  93. package/package/components/copilot/FlowCopilotInputsModal.svelte +26 -23
  94. package/package/components/copilot/chat/AIChatManager.svelte.js +3 -2
  95. package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
  96. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -2
  97. package/package/components/copilot/chat/script/core.d.ts +4 -4
  98. package/package/components/copilot/chat/script/core.js +93 -34
  99. package/package/components/copilot/lib.d.ts +1 -0
  100. package/package/components/copilot/lib.js +6 -3
  101. package/package/components/custom_ui.d.ts +2 -0
  102. package/package/components/flows/FlowProgressBar.svelte +16 -16
  103. package/package/components/flows/FlowProgressBar.svelte.d.ts +7 -22
  104. package/package/components/flows/content/FlowInputsQuick.svelte +3 -2
  105. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +1 -0
  106. package/package/components/flows/content/FlowModuleComponent.svelte +24 -1
  107. package/package/components/flows/flowInfers.js +34 -8
  108. package/package/components/flows/flowStore.d.ts +4 -1
  109. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  110. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -1
  111. package/package/components/flows/map/InsertModuleButton.svelte +4 -14
  112. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +0 -1
  113. package/package/components/flows/map/InsertModuleInner.svelte +17 -20
  114. package/package/components/flows/map/MapItem.svelte +1 -1
  115. package/package/components/flows/pickers/PickHubScriptQuick.svelte +38 -52
  116. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -0
  117. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +27 -15
  118. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +1 -0
  119. package/package/components/flows/propPicker/OutputPicker.svelte +2 -0
  120. package/package/components/git_sync/DetectionFlow.svelte +33 -44
  121. package/package/components/git_sync/DetectionFlow.svelte.d.ts +1 -0
  122. package/package/components/git_sync/GitSyncContext.svelte.d.ts +22 -0
  123. package/package/components/git_sync/GitSyncContext.svelte.js +145 -5
  124. package/package/components/git_sync/GitSyncModeDisplay.svelte +14 -0
  125. package/package/components/git_sync/GitSyncModeDisplay.svelte.d.ts +9 -0
  126. package/package/components/git_sync/GitSyncRepositoryCard.svelte +365 -253
  127. package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +10 -1
  128. package/package/components/git_sync/GitSyncSection.svelte +134 -14
  129. package/package/components/git_sync/PullWorkspaceModal.svelte +24 -32
  130. package/package/components/git_sync/PushWorkspaceModal.svelte +24 -32
  131. package/package/components/graph/model.d.ts +5 -5
  132. package/package/components/graph/renderers/edges/EmptyEdge.svelte +3 -10
  133. package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +4 -18
  134. package/package/components/graph/renderers/nodes/AIToolNode.svelte +2 -2
  135. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +5 -10
  136. package/package/components/home/ItemsList.svelte +1 -1
  137. package/package/components/jobs/JobProgressBar.svelte +27 -21
  138. package/package/components/jobs/JobProgressBar.svelte.d.ts +9 -24
  139. package/package/components/meltComponents/MenuSingleItem.svelte +3 -8
  140. package/package/components/meltComponents/MenuSingleItem.svelte.d.ts +0 -3
  141. package/package/components/meltComponents/Popover.svelte +3 -2
  142. package/package/components/meltComponents/Popover.svelte.d.ts +1 -0
  143. package/package/components/meltComponents/Tooltip.svelte +1 -1
  144. package/package/components/progressBar/ProgressBar.svelte +39 -53
  145. package/package/components/progressBar/ProgressBar.svelte.d.ts +11 -26
  146. package/package/components/runs/JobsLoader.svelte +1 -1
  147. package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
  148. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -1
  149. package/package/components/schema/AddPropertyV2.svelte +7 -4
  150. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  151. package/package/components/select/MultiSelect.svelte +2 -2
  152. package/package/components/select/MultiSelect.svelte.d.ts +1 -0
  153. package/package/components/settings/WorkspaceUserSettings.svelte +92 -1
  154. package/package/components/sidebar/MenuLink.svelte +2 -1
  155. package/package/components/sidebar/MenuLink.svelte.d.ts +1 -0
  156. package/package/components/sidebar/SidebarContent.svelte +27 -27
  157. package/package/components/table/Cell.svelte +7 -14
  158. package/package/components/table/Cell.svelte.d.ts +13 -35
  159. package/package/components/triggers/AddTriggersButton.svelte +1 -0
  160. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
  161. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
  162. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +28 -5
  163. package/package/components/triggers/gcp/utils.js +1 -0
  164. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +1 -0
  165. package/package/components/triggers/webhook/WebhooksConfigSection.svelte +143 -63
  166. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +22 -0
  167. package/package/components/triggers/websocket/utils.js +1 -0
  168. package/package/components/workspaceSettings/AISettings.svelte +8 -2
  169. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  170. package/package/components/workspaceSettings/ModelTokenLimits.svelte +165 -0
  171. package/package/components/workspaceSettings/ModelTokenLimits.svelte.d.ts +8 -0
  172. package/package/components/workspaceSettings/StorageSettings.svelte +123 -51
  173. package/package/gen/core/OpenAPI.js +1 -1
  174. package/package/gen/schemas.gen.d.ts +141 -16
  175. package/package/gen/schemas.gen.js +144 -16
  176. package/package/gen/services.gen.d.ts +62 -42
  177. package/package/gen/services.gen.js +131 -82
  178. package/package/gen/types.gen.d.ts +218 -144
  179. package/package/hubPaths.json +2 -1
  180. package/package/services/JobManager.js +10 -7
  181. package/package/stores.d.ts +1 -0
  182. package/package/stores.js +6 -3
  183. package/package/timelineCompute.svelte.d.ts +21 -0
  184. package/package/timelineCompute.svelte.js +113 -0
  185. package/package/utils.d.ts +15 -8
  186. package/package/utils.js +62 -12
  187. package/package/workspace_settings.d.ts +13 -8
  188. package/package/workspace_settings.js +46 -11
  189. package/package.json +2 -2
@@ -1,8 +1,10 @@
1
1
  <script lang="ts">import FlowLogViewer from './FlowLogViewer.svelte';
2
- import { untrack } from 'svelte';
2
+ import { TimelineCompute } from '../timelineCompute.svelte';
3
+ import { onMount, untrack } from 'svelte';
3
4
  import { ChangeTracker } from '../svelte5Utils.svelte';
4
5
  import { readFieldsRecursively } from '../utils';
5
- let { job, localModuleStates, workspaceId, render, onSelectedIteration, mode = 'flow' } = $props();
6
+ import OnChange from './common/OnChange.svelte';
7
+ let { job, localModuleStates, localDurationStatuses, workspaceId, render, onSelectedIteration, mode = 'flow' } = $props();
6
8
  // State for tracking expanded rows - using Record to allow explicit control
7
9
  let expandedRows = $state({});
8
10
  let allExpanded = $state(false);
@@ -10,6 +12,19 @@ let showResultsInputs = $state(true);
10
12
  // Keyboard navigation state - incremental like expandedRows
11
13
  let currentId = $state('flow-root');
12
14
  let navigationChain = $state({});
15
+ // Timeline state
16
+ let timelineCompute = $state(undefined);
17
+ onMount(() => {
18
+ timelineCompute = new TimelineCompute(modules.map((m) => m.id), localDurationStatuses ?? {}, job.type === 'CompletedJob');
19
+ return () => {
20
+ timelineCompute?.destroy();
21
+ };
22
+ });
23
+ // Derived timeline values
24
+ const timelineMin = $derived(timelineCompute?.min ?? undefined);
25
+ const timelineTotal = $derived(timelineCompute?.total ?? undefined);
26
+ const timelineItems = $derived(timelineCompute?.items ?? undefined);
27
+ const timelineNow = $derived(timelineCompute?.now ?? Date.now());
13
28
  let moduleTracker = new ChangeTracker($state.snapshot(job.raw_flow?.modules ?? []));
14
29
  $effect(() => {
15
30
  readFieldsRecursively(job.raw_flow?.modules ?? []);
@@ -64,8 +79,41 @@ function handleKeydown(event) {
64
79
  function select(id) {
65
80
  currentId = id;
66
81
  }
82
+ let timelineAvailableWidths = $state({});
83
+ let lastJobId = $state(job.id);
84
+ const timelinelWidth = $derived.by(() => {
85
+ const widths = Object.values(timelineAvailableWidths);
86
+ return widths.length > 0 ? Math.max(Math.min(...widths) - 12, 0) : 0;
87
+ });
88
+ function updateJobId() {
89
+ if (job.id !== lastJobId) {
90
+ lastJobId = job.id;
91
+ navigationChain = {};
92
+ timelineAvailableWidths = {};
93
+ currentId = 'flow-root';
94
+ showResultsInputs = true;
95
+ timelineCompute?.reset();
96
+ }
97
+ }
98
+ $effect.pre(() => {
99
+ job.id;
100
+ untrack(() => {
101
+ job.id && updateJobId();
102
+ });
103
+ });
67
104
  </script>
68
105
 
106
+ <OnChange
107
+ key={localDurationStatuses}
108
+ onChange={() => {
109
+ timelineCompute?.updateInputs(
110
+ modules.map((m) => m.id),
111
+ localDurationStatuses ?? {},
112
+ job.type === 'CompletedJob'
113
+ )
114
+ }}
115
+ />
116
+
69
117
  <div
70
118
  class="w-full rounded-md overflow-hidden border focus:border-gray-400 dark:focus:border-gray-400"
71
119
  role="tree"
@@ -86,10 +134,15 @@ function select(id) {
86
134
  {render}
87
135
  {getSelectedIteration}
88
136
  flowId="root"
89
- flowStatus={undefined}
90
137
  {mode}
91
138
  {currentId}
92
139
  bind:navigationChain
93
140
  {select}
141
+ {timelineMin}
142
+ {timelineTotal}
143
+ {timelineItems}
144
+ {timelineNow}
145
+ bind:timelineAvailableWidths
146
+ {timelinelWidth}
94
147
  />
95
148
  </div>
@@ -1,11 +1,12 @@
1
1
  import type { Job } from '../gen';
2
- import type { GraphModuleState } from './graph';
2
+ import type { DurationStatus, GraphModuleState } from './graph';
3
3
  interface Props {
4
4
  job: Partial<Job>;
5
- localModuleStates: Record<string, GraphModuleState>;
5
+ localDurationStatuses?: Record<string, DurationStatus>;
6
6
  workspaceId: string | undefined;
7
7
  render: boolean;
8
- onSelectedIteration: (detail: {
8
+ localModuleStates: Record<string, GraphModuleState>;
9
+ onSelectedIteration?: (detail: {
9
10
  id: string;
10
11
  index: number;
11
12
  manuallySet: true;
@@ -43,14 +43,14 @@ export const whileLoopSchema = {
43
43
  };
44
44
  let selectedJobStep = $state(undefined);
45
45
  let isRunning = $state(false);
46
- let jobProgressReset = $state(undefined);
46
+ let progressBar = $state(undefined);
47
47
  export function test() {
48
48
  runPreview(previewArgs, undefined);
49
49
  }
50
50
  const { flowStateStore, pathStore } = getContext('FlowEditorContext');
51
51
  const dispatch = createEventDispatcher();
52
52
  export async function runPreview(args, restartedFrom) {
53
- jobProgressReset?.();
53
+ progressBar?.reset();
54
54
  const newFlow = { value: { modules }, summary: '' };
55
55
  jobId = await runFlowPreview(args, newFlow, $pathStore, restartedFrom);
56
56
  isRunning = true;
@@ -129,7 +129,7 @@ $effect(() => {
129
129
  <div></div>
130
130
  </div>
131
131
  <div class="w-full flex flex-col gap-y-1">
132
- <FlowProgressBar {job} bind:reset={jobProgressReset} />
132
+ <FlowProgressBar {job} bind:this={progressBar} />
133
133
  </div>
134
134
  <div class="overflow-y-auto grow pr-4">
135
135
  <div class="max-h-1/2 overflow-auto border-b">
@@ -144,7 +144,7 @@ $effect(() => {
144
144
  <div class="pt-4 grow">
145
145
  {#if jobId}
146
146
  <FlowStatusViewer
147
- bind:flowStateStore={flowStateStore.val}
147
+ bind:flowState={flowStateStore.val}
148
148
  {jobId}
149
149
  onJobsLoaded={({ job: newJob }) => {
150
150
  job = newJob
@@ -8,9 +8,8 @@ import { workspaceStore } from '../stores';
8
8
  import Tooltip from './Tooltip.svelte';
9
9
  import { Clock, MemoryStick, Calendar, Bot, User, Code2 } from 'lucide-svelte';
10
10
  import BarsStaggered from './icons/BarsStaggered.svelte';
11
- export let job;
12
11
  const SMALL_ICON_SIZE = 14;
13
- export let scheduleEditor;
12
+ let { job, scheduleEditor } = $props();
14
13
  </script>
15
14
 
16
15
  <div
@@ -72,11 +71,11 @@ export let scheduleEditor;
72
71
  <Calendar size={SMALL_ICON_SIZE} class="text-secondary min-w-3.5" />
73
72
  <span class="whitespace-nowrap">
74
73
  Schedule:
75
- <!-- svelte-ignore a11y-invalid-attribute -->
74
+ <!-- svelte-ignore a11y_invalid_attribute -->
76
75
  <a
77
76
  href="#"
78
77
  class="break-words text-blue-600 font-normal"
79
- on:click={() =>
78
+ onclick={() =>
80
79
  scheduleEditor?.openEdit(job.schedule_path ?? '', job.job_kind == 'flow')}
81
80
  >
82
81
  {truncateRev(job.schedule_path, 40)}
@@ -1,23 +1,9 @@
1
1
  import { type Job } from '../gen';
2
2
  import ScheduleEditor from './triggers/schedules/ScheduleEditor.svelte';
3
- 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> {
4
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
5
- $$bindings?: Bindings;
6
- } & Exports;
7
- (internal: unknown, props: Props & {
8
- $$events?: Events;
9
- $$slots?: Slots;
10
- }): Exports & {
11
- $set?: any;
12
- $on?: any;
13
- };
14
- z_$$bindings?: Bindings;
15
- }
16
- declare const FlowMetadata: $$__sveltets_2_IsomorphicComponent<{
3
+ interface Props {
17
4
  job: Job;
18
5
  scheduleEditor: ScheduleEditor;
19
- }, {
20
- [evt: string]: CustomEvent<any>;
21
- }, {}, {}, string>;
22
- type FlowMetadata = InstanceType<typeof FlowMetadata>;
6
+ }
7
+ declare const FlowMetadata: import("svelte").Component<Props, {}, "">;
8
+ type FlowMetadata = ReturnType<typeof FlowMetadata>;
23
9
  export default FlowMetadata;
@@ -9,7 +9,7 @@ import SchemaForm from './SchemaForm.svelte';
9
9
  import SchemaFormWithArgPicker from './SchemaFormWithArgPicker.svelte';
10
10
  import FlowStatusViewer from '../components/FlowStatusViewer.svelte';
11
11
  import FlowProgressBar from './flows/FlowProgressBar.svelte';
12
- import { AlertTriangle, ArrowRight, CornerDownLeft, Play, RefreshCw, X } from 'lucide-svelte';
12
+ import { AlertTriangle, ArrowRight, CornerDownLeft, Loader2, Play, RefreshCw, X } from 'lucide-svelte';
13
13
  import { emptyString, sendUserToast } from '../utils';
14
14
  import { dfs } from './flows/dfs';
15
15
  import { sliceModules } from './flows/flowStateUtils.svelte';
@@ -40,6 +40,7 @@ let schemaFormWithArgPicker = $state(undefined);
40
40
  let currentJobId = $state(undefined);
41
41
  let stepHistoryLoader = getStepHistoryLoaderContext();
42
42
  let flowProgressBar = $state(undefined);
43
+ let loadingHistory = $state(false);
43
44
  function extractFlow(previewMode) {
44
45
  const previewFlow = aiChatManager.flowAiChatHelpers?.getPreviewFlow();
45
46
  if (previewMode === 'whole') {
@@ -429,7 +430,7 @@ export function flowHasChanged() {
429
430
  helperScript={flowStore.val.schema?.['x-windmill-dyn-select-code'] &&
430
431
  flowStore.val.schema?.['x-windmill-dyn-select-lang']
431
432
  ? {
432
- type: 'inline',
433
+ source: 'inline',
433
434
  code: flowStore.val.schema['x-windmill-dyn-select-code'] as string,
434
435
  lang: flowStore.val.schema['x-windmill-dyn-select-lang'] as ScriptLang
435
436
  }
@@ -463,6 +464,7 @@ export function flowHasChanged() {
463
464
  currentJobId = undefined
464
465
  }}
465
466
  path={$initialPathStore == '' ? $pathStore : $initialPathStore}
467
+ bind:loading={loadingHistory}
466
468
  />
467
469
  {/if}
468
470
  </div>
@@ -490,7 +492,7 @@ export function flowHasChanged() {
490
492
  bind:suspendStatus
491
493
  hideDownloadInGraph={customUi?.downloadLogs === false}
492
494
  wideResults
493
- bind:flowStateStore={flowStateStore.val}
495
+ bind:flowState={flowStateStore.val}
494
496
  {jobId}
495
497
  onDone={() => {
496
498
  isRunning = false
@@ -503,6 +505,10 @@ export function flowHasChanged() {
503
505
  {render}
504
506
  {customUi}
505
507
  />
508
+ {:else if loadingHistory}
509
+ <div class="italic text-tertiary h-full grow mx-auto flex flex-row items-center gap-2">
510
+ <Loader2 class="animate-spin" /> <span> Loading history... </span>
511
+ </div>
506
512
  {:else}
507
513
  <div class="italic text-tertiary h-full grow"> Flow status will be displayed here </div>
508
514
  {/if}
@@ -57,6 +57,6 @@ declare const FlowPreviewContent: $$__sveltets_2_IsomorphicComponent<Props, {
57
57
  getIsOwner: () => boolean;
58
58
  getJob: () => Job | undefined;
59
59
  flowHasChanged: () => boolean;
60
- }, "initial" | "preventEscape" | "job" | "scrollTop" | "jobId" | "localModuleStates" | "rightColumnSelect" | "localDurationStatuses" | "selectedJobStep" | "previewMode" | "selectedJobStepIsTopLevel" | "selectedJobStepType" | "branchOrIterationN">;
60
+ }, "initial" | "preventEscape" | "job" | "scrollTop" | "jobId" | "localModuleStates" | "localDurationStatuses" | "rightColumnSelect" | "selectedJobStep" | "previewMode" | "selectedJobStepIsTopLevel" | "selectedJobStepType" | "branchOrIterationN">;
61
61
  type FlowPreviewContent = InstanceType<typeof FlowPreviewContent>;
62
62
  export default FlowPreviewContent;
@@ -2,13 +2,12 @@
2
2
  import { setContext, untrack } from 'svelte';
3
3
  import { isOwner as loadIsOwner } from '../utils';
4
4
  import { userStore, workspaceStore } from '../stores';
5
- let { jobId, initialJob = undefined, workspaceId = undefined, flowStateStore = $bindable({}), selectedJobStep = $bindable(undefined), hideFlowResult = false, hideTimeline = false, hideDownloadInGraph = false, hideNodeDefinition = false, hideJobId = false, hideDownloadLogs = false, rightColumnSelect = $bindable('timeline'), isOwner = $bindable(false), wideResults = false, localModuleStates = $bindable({}), localDurationStatuses = $bindable({}), job = $bindable(undefined), render = true, suspendStatus = $bindable({ val: {} }), customUi, onStart, onJobsLoaded, onDone } = $props();
5
+ let { jobId, initialJob = undefined, workspaceId = undefined, flowState = $bindable({}), selectedJobStep = $bindable(undefined), hideFlowResult = false, hideTimeline = false, hideDownloadInGraph = false, hideNodeDefinition = false, hideJobId = false, hideDownloadLogs = false, rightColumnSelect = $bindable('timeline'), isOwner = $bindable(false), wideResults = false, localModuleStates = $bindable({}), localDurationStatuses = $bindable({}), job = $bindable(undefined), render = true, suspendStatus = $bindable({ val: {} }), customUi, onStart, onJobsLoaded, onDone } = $props();
6
6
  let lastJobId = jobId;
7
7
  let retryStatus = $state({ val: {} });
8
8
  let globalRefreshes = $state({});
9
- let globalIterationBounds = $state({});
10
9
  setContext('FlowStatusViewer', {
11
- flowStateStore,
10
+ flowState: flowState,
12
11
  suspendStatus,
13
12
  retryStatus,
14
13
  hideDownloadInGraph,
@@ -22,11 +21,14 @@ function loadOwner(path) {
22
21
  }
23
22
  async function updateJobId() {
24
23
  if (jobId !== lastJobId) {
24
+ console.log('updateJobId 3', jobId);
25
25
  lastJobId = jobId;
26
26
  retryStatus.val = {};
27
27
  suspendStatus.val = {};
28
28
  globalRefreshes = {};
29
- globalIterationBounds = {};
29
+ flowState = {};
30
+ localDurationStatuses = {};
31
+ localModuleStates = {};
30
32
  }
31
33
  }
32
34
  let lastScriptPath = $state(undefined);
@@ -47,59 +49,60 @@ let storedToolCallJobs = $state({});
47
49
  let toolCallIndicesToLoad = $state([]);
48
50
  </script>
49
51
 
50
- <FlowStatusViewerInner
51
- {hideFlowResult}
52
- onJobsLoaded={({ job, force }) => {
53
- if (job.script_path != lastScriptPath && job.script_path) {
54
- lastScriptPath = job.script_path
55
- loadOwner(lastScriptPath ?? '')
56
- }
57
- onJobsLoaded?.({ job, force })
58
- }}
59
- globalModuleStates={[]}
60
- {globalIterationBounds}
61
- bind:localModuleStates
62
- bind:selectedNode={selectedJobStep}
63
- bind:localDurationStatuses
64
- {onStart}
65
- {onDone}
66
- bind:job
67
- {initialJob}
68
- {jobId}
69
- {workspaceId}
70
- {isOwner}
71
- {wideResults}
72
- bind:rightColumnSelect
73
- {render}
74
- {customUi}
75
- graphTabOpen={true}
76
- isNodeSelected={true}
77
- {refreshGlobal}
78
- {updateGlobalRefresh}
79
- toolCallStore={{
80
- getStoredToolCallJob: (storeKey: string) => storedToolCallJobs[storeKey],
81
- setStoredToolCallJob: (storeKey: string, job: Job) => {
82
- storedToolCallJobs[storeKey] = job
83
- },
84
- getLocalToolCallJobs: (prefix: string) => {
85
- // we return a map from tool call index to job
86
- // to do so, we filter the storedToolCallJobs object by the prefix and we make sure what's left in the key is a tool call index: 2 part of format agentModuleId-toolCallIndex
87
- // and not a further nested tool call index
88
- return Object.fromEntries(
89
- Object.entries(storedToolCallJobs)
90
- .filter(
91
- ([key]) => key.startsWith(prefix) && key.replace(prefix, '').split('-').length === 2
92
- )
93
- .map(([key, job]) => [Number(key.replace(prefix, '').split('-').pop()), job])
94
- )
95
- },
96
- isToolCallToBeLoaded: (storeKey: string) => {
97
- return toolCallIndicesToLoad.includes(storeKey)
98
- },
99
- addToolCallToLoad: (storeKey: string) => {
100
- if (!toolCallIndicesToLoad.includes(storeKey)) {
101
- toolCallIndicesToLoad.push(storeKey)
52
+ {#key jobId}
53
+ <FlowStatusViewerInner
54
+ {hideFlowResult}
55
+ onJobsLoaded={({ job, force }) => {
56
+ if (job.script_path != lastScriptPath && job.script_path) {
57
+ lastScriptPath = job.script_path
58
+ loadOwner(lastScriptPath ?? '')
102
59
  }
103
- }
104
- }}
105
- />
60
+ onJobsLoaded?.({ job, force })
61
+ }}
62
+ globalModuleStates={[]}
63
+ bind:localModuleStates
64
+ bind:selectedNode={selectedJobStep}
65
+ bind:localDurationStatuses
66
+ {onStart}
67
+ {onDone}
68
+ bind:job
69
+ {initialJob}
70
+ {jobId}
71
+ {workspaceId}
72
+ {isOwner}
73
+ {wideResults}
74
+ bind:rightColumnSelect
75
+ {render}
76
+ {customUi}
77
+ graphTabOpen={true}
78
+ isNodeSelected={true}
79
+ {refreshGlobal}
80
+ {updateGlobalRefresh}
81
+ toolCallStore={{
82
+ getStoredToolCallJob: (storeKey: string) => storedToolCallJobs[storeKey],
83
+ setStoredToolCallJob: (storeKey: string, job: Job) => {
84
+ storedToolCallJobs[storeKey] = job
85
+ },
86
+ getLocalToolCallJobs: (prefix: string) => {
87
+ // we return a map from tool call index to job
88
+ // to do so, we filter the storedToolCallJobs object by the prefix and we make sure what's left in the key is a tool call index: 2 part of format agentModuleId-toolCallIndex
89
+ // and not a further nested tool call index
90
+ return Object.fromEntries(
91
+ Object.entries(storedToolCallJobs)
92
+ .filter(
93
+ ([key]) => key.startsWith(prefix) && key.replace(prefix, '').split('-').length === 2
94
+ )
95
+ .map(([key, job]) => [Number(key.replace(prefix, '').split('-').pop()), job])
96
+ )
97
+ },
98
+ isToolCallToBeLoaded: (storeKey: string) => {
99
+ return toolCallIndicesToLoad.includes(storeKey)
100
+ },
101
+ addToolCallToLoad: (storeKey: string) => {
102
+ if (!toolCallIndicesToLoad.includes(storeKey)) {
103
+ toolCallIndicesToLoad.push(storeKey)
104
+ }
105
+ }
106
+ }}
107
+ />
108
+ {/key}
@@ -6,7 +6,7 @@ interface Props {
6
6
  jobId: string;
7
7
  initialJob?: Job | undefined;
8
8
  workspaceId?: string | undefined;
9
- flowStateStore?: FlowState;
9
+ flowState?: FlowState;
10
10
  selectedJobStep?: string | undefined;
11
11
  hideFlowResult?: boolean;
12
12
  hideTimeline?: boolean;
@@ -37,6 +37,6 @@ interface Props {
37
37
  job: CompletedJob;
38
38
  }) => void;
39
39
  }
40
- declare const FlowStatusViewer: import("svelte").Component<Props, {}, "job" | "isOwner" | "suspendStatus" | "localModuleStates" | "flowStateStore" | "rightColumnSelect" | "localDurationStatuses" | "selectedJobStep">;
40
+ declare const FlowStatusViewer: import("svelte").Component<Props, {}, "job" | "isOwner" | "suspendStatus" | "localModuleStates" | "localDurationStatuses" | "flowState" | "rightColumnSelect" | "selectedJobStep">;
41
41
  type FlowStatusViewer = ReturnType<typeof FlowStatusViewer>;
42
42
  export default FlowStatusViewer;