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.
- package/package/common.d.ts +4 -1
- package/package/components/AIAgentLogViewer.svelte +1 -1
- package/package/components/ArgEnum.svelte +14 -5
- package/package/components/ArgInput.svelte +23 -15
- package/package/components/ArgInput.svelte.d.ts +1 -1
- package/package/components/ChannelSelector.svelte +92 -18
- package/package/components/ChannelSelector.svelte.d.ts +2 -0
- package/package/components/ConnectionSection.svelte +12 -1
- package/package/components/Dev.svelte +18 -5
- package/package/components/Dev.svelte.d.ts +23 -1
- package/package/components/DisplayResult.svelte +36 -23
- package/package/components/DropdownV2.svelte +8 -2
- package/package/components/DropdownV2.svelte.d.ts +1 -0
- package/package/components/DynamicInput.svelte +10 -10
- package/package/components/EditableSchemaForm.svelte +21 -7
- package/package/components/EditorSettings.svelte +11 -9
- package/package/components/ErrorOrRecoveryHandler.svelte +14 -20
- package/package/components/FlowHistoryJobPicker.svelte +3 -0
- package/package/components/FlowHistoryJobPicker.svelte.d.ts +1 -0
- package/package/components/FlowJobResult.svelte +5 -5
- package/package/components/FlowLogRow.svelte +2 -2
- package/package/components/FlowLogViewer.svelte +228 -57
- package/package/components/FlowLogViewer.svelte.d.ts +16 -5
- package/package/components/FlowLogViewerWrapper.svelte +56 -3
- package/package/components/FlowLogViewerWrapper.svelte.d.ts +4 -3
- package/package/components/FlowLoopIterationPreview.svelte +4 -4
- package/package/components/FlowMetadata.svelte +3 -4
- package/package/components/FlowMetadata.svelte.d.ts +4 -18
- package/package/components/FlowPreviewContent.svelte +9 -3
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/package/components/FlowStatusViewer.svelte +62 -59
- package/package/components/FlowStatusViewer.svelte.d.ts +2 -2
- package/package/components/FlowStatusViewerInner.svelte +186 -94
- package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -3
- package/package/components/FlowTimeline.svelte +110 -131
- package/package/components/FlowTimeline.svelte.d.ts +13 -4
- package/package/components/FlowTimelineBar.svelte +227 -0
- package/package/components/FlowTimelineBar.svelte.d.ts +24 -0
- package/package/components/InputTransformForm.svelte +119 -3
- package/package/components/InputTransformForm.svelte.d.ts +3 -0
- package/package/components/InputTransformSchemaForm.svelte +5 -1
- package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
- package/package/components/InstanceSetting.svelte +17 -42
- package/package/components/InstanceSettings.svelte +12 -21
- package/package/components/JobArgs.svelte +15 -16
- package/package/components/JobArgs.svelte.d.ts +4 -18
- package/package/components/JobLoader.svelte +23 -42
- package/package/components/JobLoader.svelte.d.ts +2 -0
- package/package/components/JobStatus.svelte +1 -1
- package/package/components/JobStatus.svelte.d.ts +4 -18
- package/package/components/ModulePreviewResultViewer.svelte +1 -7
- package/package/components/NextcloudSetting.svelte +6 -1
- package/package/components/Password.svelte +7 -11
- package/package/components/Password.svelte.d.ts +5 -20
- package/package/components/PasswordArgInput.svelte +35 -15
- package/package/components/PasswordArgInput.svelte.d.ts +4 -18
- package/package/components/QueuePosition.svelte +6 -2
- package/package/components/RunForm.svelte +5 -14
- package/package/components/S3ArrayHelperButton.svelte +12 -0
- package/package/components/S3ArrayHelperButton.svelte.d.ts +8 -0
- package/package/components/ScriptEditor.svelte +5 -6
- package/package/components/StringTypeNarrowing.svelte +39 -24
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/TeamSelector.svelte +83 -37
- package/package/components/TeamSelector.svelte.d.ts +0 -1
- package/package/components/apps/components/buttons/AppButton.svelte +11 -1
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +13 -4
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +2 -2
- package/package/components/apps/components/display/table/utils.js +1 -1
- package/package/components/apps/components/helpers/RefreshButton.svelte +5 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +0 -2
- package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
- package/package/components/apps/components/layout/AppTabs.svelte +116 -71
- package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
- package/package/components/apps/editor/component/ComponentInner.svelte +1 -0
- package/package/components/apps/editor/component/components.d.ts +16 -1
- package/package/components/apps/editor/component/components.js +22 -2
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +2 -0
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +19 -1
- package/package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +3 -1
- package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte +52 -0
- package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte.d.ts +9 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte +6 -0
- package/package/components/auditLogs/AuditLogsTable.svelte +17 -7
- package/package/components/auditLogs/AuditLogsTable.svelte.d.ts +1 -0
- package/package/components/common/CloseButton.svelte +2 -2
- package/package/components/common/CloseButton.svelte.d.ts +1 -0
- package/package/components/common/layout/List.svelte +3 -7
- package/package/components/common/layout/List.svelte.d.ts +7 -29
- package/package/components/common/popup/PopupV2.svelte +8 -25
- package/package/components/common/popup/PopupV2.svelte.d.ts +4 -2
- package/package/components/common/table/ScriptRow.svelte +22 -2
- package/package/components/copilot/FlowCopilotInputsModal.svelte +26 -23
- package/package/components/copilot/chat/AIChatManager.svelte.js +3 -2
- package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -2
- package/package/components/copilot/chat/script/core.d.ts +4 -4
- package/package/components/copilot/chat/script/core.js +93 -34
- package/package/components/copilot/lib.d.ts +1 -0
- package/package/components/copilot/lib.js +6 -3
- package/package/components/custom_ui.d.ts +2 -0
- package/package/components/flows/FlowProgressBar.svelte +16 -16
- package/package/components/flows/FlowProgressBar.svelte.d.ts +7 -22
- package/package/components/flows/content/FlowInputsQuick.svelte +3 -2
- package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +24 -1
- package/package/components/flows/flowInfers.js +34 -8
- package/package/components/flows/flowStore.d.ts +4 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
- package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -1
- package/package/components/flows/map/InsertModuleButton.svelte +4 -14
- package/package/components/flows/map/InsertModuleButton.svelte.d.ts +0 -1
- package/package/components/flows/map/InsertModuleInner.svelte +17 -20
- package/package/components/flows/map/MapItem.svelte +1 -1
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +38 -52
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -0
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +27 -15
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +1 -0
- package/package/components/flows/propPicker/OutputPicker.svelte +2 -0
- package/package/components/git_sync/DetectionFlow.svelte +33 -44
- package/package/components/git_sync/DetectionFlow.svelte.d.ts +1 -0
- package/package/components/git_sync/GitSyncContext.svelte.d.ts +22 -0
- package/package/components/git_sync/GitSyncContext.svelte.js +145 -5
- package/package/components/git_sync/GitSyncModeDisplay.svelte +14 -0
- package/package/components/git_sync/GitSyncModeDisplay.svelte.d.ts +9 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +365 -253
- package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +10 -1
- package/package/components/git_sync/GitSyncSection.svelte +134 -14
- package/package/components/git_sync/PullWorkspaceModal.svelte +24 -32
- package/package/components/git_sync/PushWorkspaceModal.svelte +24 -32
- package/package/components/graph/model.d.ts +5 -5
- package/package/components/graph/renderers/edges/EmptyEdge.svelte +3 -10
- package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +4 -18
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +2 -2
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +5 -10
- package/package/components/home/ItemsList.svelte +1 -1
- package/package/components/jobs/JobProgressBar.svelte +27 -21
- package/package/components/jobs/JobProgressBar.svelte.d.ts +9 -24
- package/package/components/meltComponents/MenuSingleItem.svelte +3 -8
- package/package/components/meltComponents/MenuSingleItem.svelte.d.ts +0 -3
- package/package/components/meltComponents/Popover.svelte +3 -2
- package/package/components/meltComponents/Popover.svelte.d.ts +1 -0
- package/package/components/meltComponents/Tooltip.svelte +1 -1
- package/package/components/progressBar/ProgressBar.svelte +39 -53
- package/package/components/progressBar/ProgressBar.svelte.d.ts +11 -26
- package/package/components/runs/JobsLoader.svelte +1 -1
- package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
- package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -1
- package/package/components/schema/AddPropertyV2.svelte +7 -4
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/select/MultiSelect.svelte +2 -2
- package/package/components/select/MultiSelect.svelte.d.ts +1 -0
- package/package/components/settings/WorkspaceUserSettings.svelte +92 -1
- package/package/components/sidebar/MenuLink.svelte +2 -1
- package/package/components/sidebar/MenuLink.svelte.d.ts +1 -0
- package/package/components/sidebar/SidebarContent.svelte +27 -27
- package/package/components/table/Cell.svelte +7 -14
- package/package/components/table/Cell.svelte.d.ts +13 -35
- package/package/components/triggers/AddTriggersButton.svelte +1 -0
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +28 -5
- package/package/components/triggers/gcp/utils.js +1 -0
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +1 -0
- package/package/components/triggers/webhook/WebhooksConfigSection.svelte +143 -63
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +22 -0
- package/package/components/triggers/websocket/utils.js +1 -0
- package/package/components/workspaceSettings/AISettings.svelte +8 -2
- package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
- package/package/components/workspaceSettings/ModelTokenLimits.svelte +165 -0
- package/package/components/workspaceSettings/ModelTokenLimits.svelte.d.ts +8 -0
- package/package/components/workspaceSettings/StorageSettings.svelte +123 -51
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +141 -16
- package/package/gen/schemas.gen.js +144 -16
- package/package/gen/services.gen.d.ts +62 -42
- package/package/gen/services.gen.js +131 -82
- package/package/gen/types.gen.d.ts +218 -144
- package/package/hubPaths.json +2 -1
- package/package/services/JobManager.js +10 -7
- package/package/stores.d.ts +1 -0
- package/package/stores.js +6 -3
- package/package/timelineCompute.svelte.d.ts +21 -0
- package/package/timelineCompute.svelte.js +113 -0
- package/package/utils.d.ts +15 -8
- package/package/utils.js +62 -12
- package/package/workspace_settings.d.ts +13 -8
- package/package/workspace_settings.js +46 -11
- package/package.json +2 -2
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
<script lang="ts">import FlowLogViewer from './FlowLogViewer.svelte';
|
|
2
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
5
|
+
localDurationStatuses?: Record<string, DurationStatus>;
|
|
6
6
|
workspaceId: string | undefined;
|
|
7
7
|
render: boolean;
|
|
8
|
-
|
|
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
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
|
74
|
+
<!-- svelte-ignore a11y_invalid_attribute -->
|
|
76
75
|
<a
|
|
77
76
|
href="#"
|
|
78
77
|
class="break-words text-blue-600 font-normal"
|
|
79
|
-
|
|
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
|
|
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
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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:
|
|
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" | "
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
lastScriptPath
|
|
55
|
-
|
|
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
|
-
|
|
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" | "
|
|
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;
|