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
|
@@ -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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
36
|
+
onkeydown={bubble('keydown')}
|
|
41
37
|
autocomplete="new-password"
|
|
42
38
|
{placeholder}
|
|
43
39
|
{disabled}
|
|
@@ -1,26 +1,11 @@
|
|
|
1
|
-
interface
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
6
|
-
|
|
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 =
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
})
|
|
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={
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
652
|
-
bind:
|
|
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_
|
|
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
|
-
|
|
185
|
-
<
|
|
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={
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
-
|
|
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
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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" | "
|
|
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;
|