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
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
<script lang="ts">import { getModelMaxTokens } from '../copilot/lib';
|
|
2
|
+
import { ChevronDown, ChevronUp } from 'lucide-svelte';
|
|
3
|
+
import { slide } from 'svelte/transition';
|
|
4
|
+
const MAX_TOKENS_LIMIT = 2000000;
|
|
5
|
+
let { aiProviders, maxTokensPerModel = $bindable() } = $props();
|
|
6
|
+
let errors = $state({});
|
|
7
|
+
let collapsedProviders = $state({});
|
|
8
|
+
// Group available models by provider
|
|
9
|
+
const modelsByProvider = $derived(Object.entries(aiProviders).reduce((acc, [provider, config]) => {
|
|
10
|
+
acc[provider] = config.models.map((model) => ({
|
|
11
|
+
provider: provider,
|
|
12
|
+
model
|
|
13
|
+
}));
|
|
14
|
+
return acc;
|
|
15
|
+
}, {}));
|
|
16
|
+
function getModelKey(provider, model) {
|
|
17
|
+
return `${provider}:${model}`;
|
|
18
|
+
}
|
|
19
|
+
function getDefaultTokensForModel(provider, model) {
|
|
20
|
+
return getModelMaxTokens(provider, model);
|
|
21
|
+
}
|
|
22
|
+
function getCurrentTokensForModel(provider, model) {
|
|
23
|
+
const modelKey = getModelKey(provider, model);
|
|
24
|
+
return maxTokensPerModel[modelKey] ?? getDefaultTokensForModel(provider, model);
|
|
25
|
+
}
|
|
26
|
+
function updateTokensForModel(provider, model, tokens) {
|
|
27
|
+
const modelKey = getModelKey(provider, model);
|
|
28
|
+
if (tokens < 1 || tokens > MAX_TOKENS_LIMIT) {
|
|
29
|
+
errors[modelKey] = 'Token limit must be between 1 and ' + MAX_TOKENS_LIMIT;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const defaultTokens = getDefaultTokensForModel(provider, model);
|
|
33
|
+
if (tokens === defaultTokens) {
|
|
34
|
+
// Remove from object if it's the default value
|
|
35
|
+
const newSettings = { ...maxTokensPerModel };
|
|
36
|
+
delete newSettings[modelKey];
|
|
37
|
+
maxTokensPerModel = newSettings;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
maxTokensPerModel = {
|
|
41
|
+
...maxTokensPerModel,
|
|
42
|
+
[modelKey]: tokens
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
errors[modelKey] = '';
|
|
46
|
+
}
|
|
47
|
+
function resetModelToDefault(provider, model) {
|
|
48
|
+
const modelKey = getModelKey(provider, model);
|
|
49
|
+
const newSettings = { ...maxTokensPerModel };
|
|
50
|
+
delete newSettings[modelKey];
|
|
51
|
+
maxTokensPerModel = newSettings;
|
|
52
|
+
}
|
|
53
|
+
function isModelAtDefault(provider, model) {
|
|
54
|
+
const currentTokens = getCurrentTokensForModel(provider, model);
|
|
55
|
+
const defaultTokens = getDefaultTokensForModel(provider, model);
|
|
56
|
+
return currentTokens === defaultTokens;
|
|
57
|
+
}
|
|
58
|
+
function toggleProvider(provider) {
|
|
59
|
+
collapsedProviders[provider] = !collapsedProviders[provider];
|
|
60
|
+
}
|
|
61
|
+
function hasCustomSettings(provider, models) {
|
|
62
|
+
return models.some((m) => !isModelAtDefault(provider, m.model));
|
|
63
|
+
}
|
|
64
|
+
$effect(() => {
|
|
65
|
+
// Initialize collapsedProviders to true for all providers
|
|
66
|
+
collapsedProviders = {
|
|
67
|
+
...Object.fromEntries(Object.keys(aiProviders).map((provider) => [provider, true]))
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
</script>
|
|
71
|
+
|
|
72
|
+
{#if Object.keys(aiProviders).length > 0}
|
|
73
|
+
<div class="flex flex-col gap-4">
|
|
74
|
+
<div class="flex flex-col gap-1">
|
|
75
|
+
<p class="font-semibold">Model Output Limits</p>
|
|
76
|
+
<p class="text-xs text-secondary">
|
|
77
|
+
Configure maximum token limits for each model. These limits apply to all AI chat
|
|
78
|
+
interactions in the workspace.
|
|
79
|
+
</p>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<div class="flex flex-col gap-3">
|
|
83
|
+
{#each Object.entries(modelsByProvider).filter(([provider, models]) => models.length > 0) as [provider, models]}
|
|
84
|
+
{@const isExpanded = !collapsedProviders[provider]}
|
|
85
|
+
{@const hasCustom = hasCustomSettings(provider, models)}
|
|
86
|
+
<div class="border border-gray-200 dark:border-gray-700 rounded-md">
|
|
87
|
+
<button
|
|
88
|
+
type="button"
|
|
89
|
+
onclick={() => toggleProvider(provider)}
|
|
90
|
+
class="w-full px-4 py-3 flex items-center justify-between bg-surface-secondary hover:bg-surface-hover transition-colors rounded-md"
|
|
91
|
+
>
|
|
92
|
+
<div class="flex items-center gap-2">
|
|
93
|
+
<h4 class="font-medium text-sm capitalize">{provider}</h4>
|
|
94
|
+
{#if hasCustom}
|
|
95
|
+
<span
|
|
96
|
+
class="text-xs px-2 py-0.5 bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300 rounded"
|
|
97
|
+
>
|
|
98
|
+
Modified
|
|
99
|
+
</span>
|
|
100
|
+
{/if}
|
|
101
|
+
</div>
|
|
102
|
+
{#if isExpanded}
|
|
103
|
+
<ChevronUp size={16} class="text-gray-500" />
|
|
104
|
+
{:else}
|
|
105
|
+
<ChevronDown size={16} class="text-gray-500" />
|
|
106
|
+
{/if}
|
|
107
|
+
</button>
|
|
108
|
+
|
|
109
|
+
{#if isExpanded}
|
|
110
|
+
<div transition:slide|local={{ duration: 200 }} class="p-3">
|
|
111
|
+
<div class="space-y-3">
|
|
112
|
+
{#each models as { model }}
|
|
113
|
+
{@const currentTokens = getCurrentTokensForModel(provider as AIProvider, model)}
|
|
114
|
+
{@const defaultTokens = getDefaultTokensForModel(provider as AIProvider, model)}
|
|
115
|
+
{@const isAtDefault = isModelAtDefault(provider as AIProvider, model)}
|
|
116
|
+
<div class="flex flex-col gap-1">
|
|
117
|
+
<div class="flex items-center gap-3">
|
|
118
|
+
<div class="flex-1 min-w-0">
|
|
119
|
+
<span class="text-sm text-primary truncate block">{model}</span>
|
|
120
|
+
</div>
|
|
121
|
+
<div class="flex items-center gap-2">
|
|
122
|
+
<input
|
|
123
|
+
type="number"
|
|
124
|
+
min="1"
|
|
125
|
+
max={MAX_TOKENS_LIMIT}
|
|
126
|
+
value={currentTokens}
|
|
127
|
+
oninput={(e) => {
|
|
128
|
+
const value = parseInt(e.currentTarget.value)
|
|
129
|
+
if (!isNaN(value)) {
|
|
130
|
+
updateTokensForModel(provider as AIProvider, model, value)
|
|
131
|
+
}
|
|
132
|
+
}}
|
|
133
|
+
class="w-20 px-2 py-1 text-xs text-center border border-gray-200 dark:border-gray-700 rounded bg-surface focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"
|
|
134
|
+
/>
|
|
135
|
+
<span class="text-xs text-secondary whitespace-nowrap">tokens</span>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
{#if !isAtDefault}
|
|
139
|
+
<div class="text-xs text-tertiary flex flex-row items-center gap-1">
|
|
140
|
+
<span>Default: {defaultTokens} tokens</span>
|
|
141
|
+
<button
|
|
142
|
+
type="button"
|
|
143
|
+
onclick={() => resetModelToDefault(provider as AIProvider, model)}
|
|
144
|
+
class="text-xs text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300 whitespace-nowrap"
|
|
145
|
+
title="Reset to default ({defaultTokens})"
|
|
146
|
+
>
|
|
147
|
+
Reset
|
|
148
|
+
</button>
|
|
149
|
+
</div>
|
|
150
|
+
{#if errors[getModelKey(provider as AIProvider, model)]}
|
|
151
|
+
<div class="text-xs text-red-500"
|
|
152
|
+
>{errors[getModelKey(provider as AIProvider, model)]}</div
|
|
153
|
+
>
|
|
154
|
+
{/if}
|
|
155
|
+
{/if}
|
|
156
|
+
</div>
|
|
157
|
+
{/each}
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
{/if}
|
|
161
|
+
</div>
|
|
162
|
+
{/each}
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
{/if}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AIConfig } from '../../gen';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
aiProviders: Exclude<AIConfig['providers'], undefined>;
|
|
4
|
+
maxTokensPerModel: Record<string, number>;
|
|
5
|
+
};
|
|
6
|
+
declare const ModelTokenLimits: import("svelte").Component<$$ComponentProps, {}, "maxTokensPerModel">;
|
|
7
|
+
type ModelTokenLimits = ReturnType<typeof ModelTokenLimits>;
|
|
8
|
+
export default ModelTokenLimits;
|
|
@@ -9,12 +9,15 @@ import Description from '../Description.svelte';
|
|
|
9
9
|
import ResourcePicker from '../ResourcePicker.svelte';
|
|
10
10
|
import Toggle from '../Toggle.svelte';
|
|
11
11
|
import Tooltip from '../Tooltip.svelte';
|
|
12
|
-
import { convertFrontendToBackendSetting } from '../../workspace_settings';
|
|
12
|
+
import { convertFrontendToBackendSetting, defaultS3AdvancedPermissions } from '../../workspace_settings';
|
|
13
13
|
import { WorkspaceService } from '../../gen';
|
|
14
14
|
import S3FilePicker from '../S3FilePicker.svelte';
|
|
15
15
|
import Portal from '../Portal.svelte';
|
|
16
16
|
import { fade } from 'svelte/transition';
|
|
17
17
|
import Popover from '../meltComponents/Popover.svelte';
|
|
18
|
+
import ClearableInput from '../common/clearableInput/ClearableInput.svelte';
|
|
19
|
+
import MultiSelect from '../select/MultiSelect.svelte';
|
|
20
|
+
import CloseButton from '../common/CloseButton.svelte';
|
|
18
21
|
let { s3ResourceSettings = $bindable() } = $props();
|
|
19
22
|
let s3FileViewer = $state();
|
|
20
23
|
async function editWindmillLFSSettings() {
|
|
@@ -186,7 +189,12 @@ async function editWindmillLFSSettings() {
|
|
|
186
189
|
}
|
|
187
190
|
s3ResourceSettings.secondaryStorage.push([
|
|
188
191
|
`storage_${s3ResourceSettings.secondaryStorage.length + 1}`,
|
|
189
|
-
{
|
|
192
|
+
{
|
|
193
|
+
resourcePath: '',
|
|
194
|
+
resourceType: 's3',
|
|
195
|
+
publicResource: false,
|
|
196
|
+
advancedPermissions: defaultS3AdvancedPermissions(!!$enterpriseLicense)
|
|
197
|
+
}
|
|
190
198
|
])
|
|
191
199
|
s3ResourceSettings.secondaryStorage = s3ResourceSettings.secondaryStorage
|
|
192
200
|
}}><Plus size={14} />Add secondary storage</Button
|
|
@@ -210,64 +218,128 @@ async function editWindmillLFSSettings() {
|
|
|
210
218
|
{/if}
|
|
211
219
|
|
|
212
220
|
{#snippet permissionBtn(storage: NonNullable<S3ResourceSettings['secondaryStorage']>[number][1])}
|
|
213
|
-
<Popover closeOnOtherPopoverOpen>
|
|
221
|
+
<Popover closeOnOtherPopoverOpen placement="left">
|
|
214
222
|
<svelte:fragment slot="trigger">
|
|
215
223
|
<Button variant="border" btnClasses="px-2.5" color="dark" size="sm">
|
|
216
224
|
<Shield size={16} /> Permissions <ChevronDown size={14} />
|
|
217
225
|
</Button>
|
|
218
226
|
</svelte:fragment>
|
|
219
227
|
<svelte:fragment slot="content">
|
|
220
|
-
<div class="flex flex-col gap-3 mx-4 pb-4 w-[
|
|
221
|
-
{#if
|
|
222
|
-
<
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
228
|
+
<div class="flex flex-col gap-3 mx-4 pb-4 pt-5 w-[48rem]">
|
|
229
|
+
{#if !$enterpriseLicense}
|
|
230
|
+
<Alert
|
|
231
|
+
type={storage.advancedPermissions ? 'error' : 'info'}
|
|
232
|
+
title="Advanced permission rules are an Enterprise feature"
|
|
233
|
+
>
|
|
234
|
+
Consider upgrading to Windmill EE to use advanced permission rules to control access to
|
|
235
|
+
your object storage at a more granular level.</Alert
|
|
236
|
+
>
|
|
237
|
+
{/if}
|
|
238
|
+
<Toggle
|
|
239
|
+
bind:checked={
|
|
240
|
+
() => !!storage.advancedPermissions,
|
|
241
|
+
(v) => {
|
|
242
|
+
storage.advancedPermissions = v
|
|
243
|
+
? defaultS3AdvancedPermissions(!!$enterpriseLicense)
|
|
244
|
+
: undefined
|
|
245
|
+
if (v) storage.publicResource = false
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
options={{
|
|
249
|
+
right: 'Enable advanced permission rules',
|
|
250
|
+
rightTooltip: 'Control precisely which paths are allowed to your users.'
|
|
251
|
+
}}
|
|
252
|
+
disabled={!storage.advancedPermissions && !$enterpriseLicense}
|
|
253
|
+
/>
|
|
254
|
+
{#if storage.advancedPermissions}
|
|
255
|
+
{@render advancedPermissionsEditor(storage.advancedPermissions)}
|
|
256
|
+
{/if}
|
|
257
|
+
{#if !storage.advancedPermissions}
|
|
258
|
+
{#if storage.resourceType == 's3'}
|
|
259
|
+
<div class="flex flex-col mt-2 mb-1 gap-1">
|
|
260
|
+
<Toggle
|
|
261
|
+
disabled={emptyString(storage.resourcePath)}
|
|
262
|
+
bind:checked={storage.publicResource}
|
|
263
|
+
options={{
|
|
264
|
+
right:
|
|
265
|
+
'S3 resource details and content can be accessed by all users of this workspace',
|
|
266
|
+
rightTooltip:
|
|
267
|
+
'If set, all users of this workspace will have access the to entire content of the S3 bucket, as well as the resource details and the "open preview" button. This effectively by-pass the permissions set on the resource and makes it public to everyone.'
|
|
268
|
+
}}
|
|
269
|
+
/>
|
|
270
|
+
{#if storage.publicResource === true}
|
|
271
|
+
<div class="pt-2"></div>
|
|
237
272
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
<
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
273
|
+
<Alert
|
|
274
|
+
type="warning"
|
|
275
|
+
title="(Legacy) S3 bucket content and resource details are shared"
|
|
276
|
+
>
|
|
277
|
+
S3 resource public access is ON, which means that the entire content of the S3
|
|
278
|
+
bucket will be accessible to all the users of this workspace regardless of whether
|
|
279
|
+
they have access the resource or not. Similarly, certain Windmill SDK endpoints
|
|
280
|
+
can be used in scripts to access the resource details, including public and
|
|
281
|
+
private keys.
|
|
282
|
+
</Alert>
|
|
283
|
+
{/if}
|
|
284
|
+
</div>
|
|
285
|
+
{:else}
|
|
286
|
+
<div class="flex flex-col mt-5 mb-1 gap-1 max-w-[40rem]">
|
|
287
|
+
<Toggle
|
|
288
|
+
disabled={emptyString(storage.resourcePath)}
|
|
289
|
+
bind:checked={storage.publicResource}
|
|
290
|
+
options={{
|
|
291
|
+
right: 'object storage content can be accessed by all users of this workspace',
|
|
292
|
+
rightTooltip:
|
|
293
|
+
'If set, all users of this workspace will have access the to entire content of the object storage.'
|
|
294
|
+
}}
|
|
295
|
+
/>
|
|
296
|
+
{#if storage.publicResource === true}
|
|
297
|
+
<div class="pt-2"></div>
|
|
298
|
+
<Alert
|
|
299
|
+
type="warning"
|
|
300
|
+
title="(Legacy) Object storage content and resource details are shared"
|
|
301
|
+
>
|
|
302
|
+
object public access is ON, which means that the entire content of the object
|
|
303
|
+
store will be accessible to all the users of this workspace regardless of whether
|
|
304
|
+
they have access the resource or not.
|
|
305
|
+
</Alert>
|
|
306
|
+
{/if}
|
|
307
|
+
</div>
|
|
308
|
+
{/if}
|
|
269
309
|
{/if}
|
|
270
310
|
</div>
|
|
271
311
|
</svelte:fragment>
|
|
272
312
|
</Popover>
|
|
273
313
|
{/snippet}
|
|
314
|
+
|
|
315
|
+
{#snippet advancedPermissionsEditor(rules: S3ResourceSettingsItem['advancedPermissions'])}
|
|
316
|
+
<Alert title="Standard Unix-style glob syntax is supported">
|
|
317
|
+
The following will be interpolated :
|
|
318
|
+
<ul class="list-disc pl-6">
|
|
319
|
+
<li><code>{'{username}'}</code> : Nickname of the user doing the request</li>
|
|
320
|
+
<li><code>{'{group}'}</code> : Any group that the user belongs to</li>
|
|
321
|
+
<li><code>{'{folder_read}'}</code> : Any folder that the user has read access to</li>
|
|
322
|
+
<li><code>{'{folder_write}'}</code> : Any folder that the user has write access to</li>
|
|
323
|
+
</ul>
|
|
324
|
+
<br />
|
|
325
|
+
Note that changes may take up to 1 minute to propagate due to cache invalidation
|
|
326
|
+
</Alert>
|
|
327
|
+
{#each rules ?? [] as item, idx}
|
|
328
|
+
<div class="flex gap-2">
|
|
329
|
+
<ClearableInput bind:value={item.pattern} placeholder="Pattern" />
|
|
330
|
+
<MultiSelect
|
|
331
|
+
items={[{ value: 'read' }, { value: 'write' }, { value: 'delete' }, { value: 'list' }]}
|
|
332
|
+
bind:value={item.allow}
|
|
333
|
+
disablePortal
|
|
334
|
+
class="w-[20rem]"
|
|
335
|
+
placeholder="Deny all access"
|
|
336
|
+
hideMainClearBtn
|
|
337
|
+
/>
|
|
338
|
+
<CloseButton onClick={() => rules?.splice(idx, 1)} />
|
|
339
|
+
</div>
|
|
340
|
+
{/each}
|
|
341
|
+
<Button size="xs" variant="border" on:click={() => rules?.push({ pattern: '', allow: [] })}>
|
|
342
|
+
<Plus size={14} />
|
|
343
|
+
Add permission rule
|
|
344
|
+
</Button>
|
|
345
|
+
{/snippet}
|
|
@@ -657,6 +657,23 @@ export declare const $FlowStatusModule: {
|
|
|
657
657
|
readonly type: "boolean";
|
|
658
658
|
};
|
|
659
659
|
};
|
|
660
|
+
readonly flow_jobs_duration: {
|
|
661
|
+
readonly type: "object";
|
|
662
|
+
readonly properties: {
|
|
663
|
+
readonly started_at: {
|
|
664
|
+
readonly type: "array";
|
|
665
|
+
readonly items: {
|
|
666
|
+
readonly type: "string";
|
|
667
|
+
};
|
|
668
|
+
};
|
|
669
|
+
readonly duration_ms: {
|
|
670
|
+
readonly type: "array";
|
|
671
|
+
readonly items: {
|
|
672
|
+
readonly type: "integer";
|
|
673
|
+
};
|
|
674
|
+
};
|
|
675
|
+
};
|
|
676
|
+
};
|
|
660
677
|
readonly branch_chosen: {
|
|
661
678
|
readonly type: "object";
|
|
662
679
|
readonly properties: {
|
|
@@ -848,6 +865,14 @@ export declare const $AIConfig: {
|
|
|
848
865
|
readonly type: "string";
|
|
849
866
|
};
|
|
850
867
|
};
|
|
868
|
+
readonly max_tokens_per_model: {
|
|
869
|
+
readonly type: "object";
|
|
870
|
+
readonly additionalProperties: {
|
|
871
|
+
readonly type: "integer";
|
|
872
|
+
readonly minimum: 1;
|
|
873
|
+
readonly maximum: 2000000;
|
|
874
|
+
};
|
|
875
|
+
};
|
|
851
876
|
};
|
|
852
877
|
};
|
|
853
878
|
export declare const $Alert: {
|
|
@@ -1825,6 +1850,9 @@ export declare const $EditVariable: {
|
|
|
1825
1850
|
export declare const $AuditLog: {
|
|
1826
1851
|
readonly type: "object";
|
|
1827
1852
|
readonly properties: {
|
|
1853
|
+
readonly workspace_id: {
|
|
1854
|
+
readonly type: "string";
|
|
1855
|
+
};
|
|
1828
1856
|
readonly id: {
|
|
1829
1857
|
readonly type: "integer";
|
|
1830
1858
|
};
|
|
@@ -1853,7 +1881,7 @@ export declare const $AuditLog: {
|
|
|
1853
1881
|
readonly type: "string";
|
|
1854
1882
|
};
|
|
1855
1883
|
};
|
|
1856
|
-
readonly required: readonly ["id", "timestamp", "username", "operation", "action_kind"];
|
|
1884
|
+
readonly required: readonly ["workspace_id", "id", "timestamp", "username", "operation", "action_kind"];
|
|
1857
1885
|
};
|
|
1858
1886
|
export declare const $MainArgSignature: {
|
|
1859
1887
|
readonly type: "object";
|
|
@@ -2994,6 +3022,9 @@ export declare const $WebsocketTrigger: {
|
|
|
2994
3022
|
readonly can_return_message: {
|
|
2995
3023
|
readonly type: "boolean";
|
|
2996
3024
|
};
|
|
3025
|
+
readonly can_return_error_result: {
|
|
3026
|
+
readonly type: "boolean";
|
|
3027
|
+
};
|
|
2997
3028
|
readonly error_handler_path: {
|
|
2998
3029
|
readonly type: "string";
|
|
2999
3030
|
};
|
|
@@ -3004,7 +3035,7 @@ export declare const $WebsocketTrigger: {
|
|
|
3004
3035
|
readonly $ref: "#/components/schemas/Retry";
|
|
3005
3036
|
};
|
|
3006
3037
|
};
|
|
3007
|
-
readonly required: readonly ["url", "enabled", "filters", "can_return_message"];
|
|
3038
|
+
readonly required: readonly ["url", "enabled", "filters", "can_return_message", "can_return_error_result"];
|
|
3008
3039
|
};
|
|
3009
3040
|
export declare const $NewWebsocketTrigger: {
|
|
3010
3041
|
readonly type: "object";
|
|
@@ -3049,6 +3080,9 @@ export declare const $NewWebsocketTrigger: {
|
|
|
3049
3080
|
readonly can_return_message: {
|
|
3050
3081
|
readonly type: "boolean";
|
|
3051
3082
|
};
|
|
3083
|
+
readonly can_return_error_result: {
|
|
3084
|
+
readonly type: "boolean";
|
|
3085
|
+
};
|
|
3052
3086
|
readonly error_handler_path: {
|
|
3053
3087
|
readonly type: "string";
|
|
3054
3088
|
};
|
|
@@ -3059,7 +3093,7 @@ export declare const $NewWebsocketTrigger: {
|
|
|
3059
3093
|
readonly $ref: "#/components/schemas/Retry";
|
|
3060
3094
|
};
|
|
3061
3095
|
};
|
|
3062
|
-
readonly required: readonly ["path", "script_path", "url", "is_flow", "filters", "can_return_message"];
|
|
3096
|
+
readonly required: readonly ["path", "script_path", "url", "is_flow", "filters", "can_return_message", "can_return_error_result"];
|
|
3063
3097
|
};
|
|
3064
3098
|
export declare const $EditWebsocketTrigger: {
|
|
3065
3099
|
readonly type: "object";
|
|
@@ -3101,6 +3135,9 @@ export declare const $EditWebsocketTrigger: {
|
|
|
3101
3135
|
readonly can_return_message: {
|
|
3102
3136
|
readonly type: "boolean";
|
|
3103
3137
|
};
|
|
3138
|
+
readonly can_return_error_result: {
|
|
3139
|
+
readonly type: "boolean";
|
|
3140
|
+
};
|
|
3104
3141
|
readonly error_handler_path: {
|
|
3105
3142
|
readonly type: "string";
|
|
3106
3143
|
};
|
|
@@ -3111,7 +3148,7 @@ export declare const $EditWebsocketTrigger: {
|
|
|
3111
3148
|
readonly $ref: "#/components/schemas/Retry";
|
|
3112
3149
|
};
|
|
3113
3150
|
};
|
|
3114
|
-
readonly required: readonly ["path", "script_path", "url", "is_flow", "filters", "can_return_message"];
|
|
3151
|
+
readonly required: readonly ["path", "script_path", "url", "is_flow", "filters", "can_return_message", "can_return_error_result"];
|
|
3115
3152
|
};
|
|
3116
3153
|
export declare const $WebsocketTriggerInitialMessage: {
|
|
3117
3154
|
readonly anyOf: readonly [{
|
|
@@ -3443,6 +3480,13 @@ export declare const $GcpTriggerData: {
|
|
|
3443
3480
|
readonly auto_acknowledge_msg: {
|
|
3444
3481
|
readonly type: "boolean";
|
|
3445
3482
|
};
|
|
3483
|
+
readonly ack_deadline: {
|
|
3484
|
+
readonly type: "integer";
|
|
3485
|
+
readonly format: "int32";
|
|
3486
|
+
readonly minimum: 10;
|
|
3487
|
+
readonly maximum: 600;
|
|
3488
|
+
readonly description: "Time in seconds within which the message must be acknowledged. If not provided, defaults to the subscription's acknowledgment deadline (600 seconds).";
|
|
3489
|
+
};
|
|
3446
3490
|
readonly error_handler_path: {
|
|
3447
3491
|
readonly type: "string";
|
|
3448
3492
|
};
|
|
@@ -4439,6 +4483,31 @@ export declare const $Workspace: {
|
|
|
4439
4483
|
};
|
|
4440
4484
|
readonly required: readonly ["id", "name", "owner", "created_at"];
|
|
4441
4485
|
};
|
|
4486
|
+
export declare const $DependencyMap: {
|
|
4487
|
+
readonly type: "object";
|
|
4488
|
+
readonly properties: {
|
|
4489
|
+
readonly workspace_id: {
|
|
4490
|
+
readonly type: "string";
|
|
4491
|
+
readonly nullable: true;
|
|
4492
|
+
};
|
|
4493
|
+
readonly importer_path: {
|
|
4494
|
+
readonly type: "string";
|
|
4495
|
+
readonly nullable: true;
|
|
4496
|
+
};
|
|
4497
|
+
readonly importer_kind: {
|
|
4498
|
+
readonly type: "string";
|
|
4499
|
+
readonly nullable: true;
|
|
4500
|
+
};
|
|
4501
|
+
readonly imported_path: {
|
|
4502
|
+
readonly type: "string";
|
|
4503
|
+
readonly nullable: true;
|
|
4504
|
+
};
|
|
4505
|
+
readonly importer_node_id: {
|
|
4506
|
+
readonly type: "string";
|
|
4507
|
+
readonly nullable: true;
|
|
4508
|
+
};
|
|
4509
|
+
};
|
|
4510
|
+
};
|
|
4442
4511
|
export declare const $WorkspaceInvite: {
|
|
4443
4512
|
readonly type: "object";
|
|
4444
4513
|
readonly properties: {
|
|
@@ -4964,6 +5033,12 @@ export declare const $LargeFileStorage: {
|
|
|
4964
5033
|
readonly public_resource: {
|
|
4965
5034
|
readonly type: "boolean";
|
|
4966
5035
|
};
|
|
5036
|
+
readonly advanced_permissions: {
|
|
5037
|
+
readonly type: "array";
|
|
5038
|
+
readonly items: {
|
|
5039
|
+
readonly $ref: "#/components/schemas/S3PermissionRule";
|
|
5040
|
+
};
|
|
5041
|
+
};
|
|
4967
5042
|
readonly secondary_storage: {
|
|
4968
5043
|
readonly type: "object";
|
|
4969
5044
|
readonly additionalProperties: {
|
|
@@ -5030,6 +5105,56 @@ export declare const $DucklakeSettings: {
|
|
|
5030
5105
|
};
|
|
5031
5106
|
};
|
|
5032
5107
|
};
|
|
5108
|
+
export declare const $DynamicInputData: {
|
|
5109
|
+
readonly type: "object";
|
|
5110
|
+
readonly properties: {
|
|
5111
|
+
readonly entrypoint_function: {
|
|
5112
|
+
readonly type: "string";
|
|
5113
|
+
readonly description: "Name of the function to execute for dynamic select";
|
|
5114
|
+
};
|
|
5115
|
+
readonly args: {
|
|
5116
|
+
readonly type: "object";
|
|
5117
|
+
readonly description: "Arguments to pass to the function";
|
|
5118
|
+
};
|
|
5119
|
+
readonly runnable_ref: {
|
|
5120
|
+
readonly type: "object";
|
|
5121
|
+
readonly oneOf: readonly [{
|
|
5122
|
+
readonly type: "object";
|
|
5123
|
+
readonly properties: {
|
|
5124
|
+
readonly source: {
|
|
5125
|
+
readonly type: "string";
|
|
5126
|
+
readonly enum: readonly ["deployed"];
|
|
5127
|
+
};
|
|
5128
|
+
readonly path: {
|
|
5129
|
+
readonly type: "string";
|
|
5130
|
+
readonly description: "Path to the deployed script or flow";
|
|
5131
|
+
};
|
|
5132
|
+
readonly runnable_kind: {
|
|
5133
|
+
readonly $ref: "#/components/schemas/RunnableKind";
|
|
5134
|
+
};
|
|
5135
|
+
};
|
|
5136
|
+
readonly required: readonly ["source", "path", "runnable_kind"];
|
|
5137
|
+
}, {
|
|
5138
|
+
readonly type: "object";
|
|
5139
|
+
readonly properties: {
|
|
5140
|
+
readonly source: {
|
|
5141
|
+
readonly type: "string";
|
|
5142
|
+
readonly enum: readonly ["inline"];
|
|
5143
|
+
};
|
|
5144
|
+
readonly code: {
|
|
5145
|
+
readonly type: "string";
|
|
5146
|
+
readonly description: "Code content for inline execution";
|
|
5147
|
+
};
|
|
5148
|
+
readonly language: {
|
|
5149
|
+
readonly $ref: "#/components/schemas/ScriptLang";
|
|
5150
|
+
};
|
|
5151
|
+
};
|
|
5152
|
+
readonly required: readonly ["source", "code"];
|
|
5153
|
+
}];
|
|
5154
|
+
};
|
|
5155
|
+
};
|
|
5156
|
+
readonly required: readonly ["entrypoint_function", "runnable_ref"];
|
|
5157
|
+
};
|
|
5033
5158
|
export declare const $WindmillLargeFile: {
|
|
5034
5159
|
readonly type: "object";
|
|
5035
5160
|
readonly properties: {
|
|
@@ -5154,6 +5279,18 @@ export declare const $WorkspaceDefaultScripts: {
|
|
|
5154
5279
|
};
|
|
5155
5280
|
};
|
|
5156
5281
|
};
|
|
5282
|
+
export declare const $S3PermissionRule: {
|
|
5283
|
+
readonly type: "object";
|
|
5284
|
+
readonly properties: {
|
|
5285
|
+
readonly pattern: {
|
|
5286
|
+
readonly type: "string";
|
|
5287
|
+
};
|
|
5288
|
+
readonly allow: {
|
|
5289
|
+
readonly type: "string";
|
|
5290
|
+
};
|
|
5291
|
+
};
|
|
5292
|
+
readonly required: readonly ["pattern", "allow"];
|
|
5293
|
+
};
|
|
5157
5294
|
export declare const $GitRepositorySettings: {
|
|
5158
5295
|
readonly type: "object";
|
|
5159
5296
|
readonly properties: {
|
|
@@ -5210,18 +5347,6 @@ export declare const $GitRepositorySettings: {
|
|
|
5210
5347
|
};
|
|
5211
5348
|
readonly required: readonly ["script_path", "git_repo_resource_path"];
|
|
5212
5349
|
};
|
|
5213
|
-
export declare const $UploadFilePart: {
|
|
5214
|
-
readonly type: "object";
|
|
5215
|
-
readonly properties: {
|
|
5216
|
-
readonly part_number: {
|
|
5217
|
-
readonly type: "integer";
|
|
5218
|
-
};
|
|
5219
|
-
readonly tag: {
|
|
5220
|
-
readonly type: "string";
|
|
5221
|
-
};
|
|
5222
|
-
};
|
|
5223
|
-
readonly required: readonly ["part_number", "tag"];
|
|
5224
|
-
};
|
|
5225
5350
|
export declare const $MetricMetadata: {
|
|
5226
5351
|
readonly type: "object";
|
|
5227
5352
|
readonly properties: {
|