windmill-components 1.542.5 → 1.550.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/package/common.d.ts +4 -1
  2. package/package/components/AIAgentLogViewer.svelte +1 -1
  3. package/package/components/ArgEnum.svelte +14 -5
  4. package/package/components/ArgInput.svelte +23 -15
  5. package/package/components/ArgInput.svelte.d.ts +1 -1
  6. package/package/components/ChannelSelector.svelte +92 -18
  7. package/package/components/ChannelSelector.svelte.d.ts +2 -0
  8. package/package/components/ConnectionSection.svelte +12 -1
  9. package/package/components/Dev.svelte +18 -5
  10. package/package/components/Dev.svelte.d.ts +23 -1
  11. package/package/components/DisplayResult.svelte +36 -23
  12. package/package/components/DropdownV2.svelte +8 -2
  13. package/package/components/DropdownV2.svelte.d.ts +1 -0
  14. package/package/components/DynamicInput.svelte +10 -10
  15. package/package/components/EditableSchemaForm.svelte +21 -7
  16. package/package/components/ErrorOrRecoveryHandler.svelte +14 -20
  17. package/package/components/FlowHistoryJobPicker.svelte +3 -0
  18. package/package/components/FlowHistoryJobPicker.svelte.d.ts +1 -0
  19. package/package/components/FlowJobResult.svelte +5 -5
  20. package/package/components/FlowLogRow.svelte +2 -2
  21. package/package/components/FlowLogViewer.svelte +228 -57
  22. package/package/components/FlowLogViewer.svelte.d.ts +16 -5
  23. package/package/components/FlowLogViewerWrapper.svelte +56 -3
  24. package/package/components/FlowLogViewerWrapper.svelte.d.ts +4 -3
  25. package/package/components/FlowLoopIterationPreview.svelte +4 -4
  26. package/package/components/FlowMetadata.svelte +3 -4
  27. package/package/components/FlowMetadata.svelte.d.ts +4 -18
  28. package/package/components/FlowPreviewContent.svelte +9 -3
  29. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  30. package/package/components/FlowStatusViewer.svelte +62 -59
  31. package/package/components/FlowStatusViewer.svelte.d.ts +2 -2
  32. package/package/components/FlowStatusViewerInner.svelte +186 -94
  33. package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -3
  34. package/package/components/FlowTimeline.svelte +110 -131
  35. package/package/components/FlowTimeline.svelte.d.ts +13 -4
  36. package/package/components/FlowTimelineBar.svelte +227 -0
  37. package/package/components/FlowTimelineBar.svelte.d.ts +24 -0
  38. package/package/components/InputTransformForm.svelte +119 -3
  39. package/package/components/InputTransformForm.svelte.d.ts +3 -0
  40. package/package/components/InputTransformSchemaForm.svelte +5 -1
  41. package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
  42. package/package/components/InstanceSetting.svelte +17 -42
  43. package/package/components/InstanceSettings.svelte +12 -21
  44. package/package/components/JobArgs.svelte +15 -16
  45. package/package/components/JobArgs.svelte.d.ts +4 -18
  46. package/package/components/JobLoader.svelte +23 -42
  47. package/package/components/JobLoader.svelte.d.ts +2 -0
  48. package/package/components/JobStatus.svelte +1 -1
  49. package/package/components/JobStatus.svelte.d.ts +4 -18
  50. package/package/components/ModulePreviewResultViewer.svelte +1 -7
  51. package/package/components/NextcloudSetting.svelte +6 -1
  52. package/package/components/Password.svelte +7 -11
  53. package/package/components/Password.svelte.d.ts +5 -20
  54. package/package/components/PasswordArgInput.svelte +35 -15
  55. package/package/components/PasswordArgInput.svelte.d.ts +4 -18
  56. package/package/components/QueuePosition.svelte +6 -2
  57. package/package/components/RunForm.svelte +5 -14
  58. package/package/components/S3ArrayHelperButton.svelte +12 -0
  59. package/package/components/S3ArrayHelperButton.svelte.d.ts +8 -0
  60. package/package/components/ScriptEditor.svelte +5 -6
  61. package/package/components/StringTypeNarrowing.svelte +39 -24
  62. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  63. package/package/components/TeamSelector.svelte +83 -37
  64. package/package/components/TeamSelector.svelte.d.ts +0 -1
  65. package/package/components/apps/components/buttons/AppButton.svelte +11 -1
  66. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +13 -4
  67. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +2 -2
  68. package/package/components/apps/components/display/table/utils.js +1 -1
  69. package/package/components/apps/components/helpers/RefreshButton.svelte +5 -1
  70. package/package/components/apps/components/helpers/RunnableComponent.svelte +0 -2
  71. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  72. package/package/components/apps/components/layout/AppTabs.svelte +116 -71
  73. package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
  74. package/package/components/apps/editor/component/ComponentInner.svelte +1 -0
  75. package/package/components/apps/editor/component/components.d.ts +16 -1
  76. package/package/components/apps/editor/component/components.js +22 -2
  77. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +2 -0
  78. package/package/components/apps/editor/settingsPanel/GridTab.svelte +19 -1
  79. package/package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +3 -1
  80. package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte +52 -0
  81. package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte.d.ts +9 -0
  82. package/package/components/auditLogs/AuditLogsFilters.svelte +6 -0
  83. package/package/components/auditLogs/AuditLogsTable.svelte +17 -7
  84. package/package/components/auditLogs/AuditLogsTable.svelte.d.ts +1 -0
  85. package/package/components/common/CloseButton.svelte +2 -2
  86. package/package/components/common/CloseButton.svelte.d.ts +1 -0
  87. package/package/components/common/layout/List.svelte +3 -7
  88. package/package/components/common/layout/List.svelte.d.ts +7 -29
  89. package/package/components/common/popup/PopupV2.svelte +8 -25
  90. package/package/components/common/popup/PopupV2.svelte.d.ts +4 -2
  91. package/package/components/common/table/ScriptRow.svelte +22 -2
  92. package/package/components/copilot/FlowCopilotInputsModal.svelte +26 -23
  93. package/package/components/copilot/chat/AIChatManager.svelte.js +3 -2
  94. package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
  95. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -2
  96. package/package/components/copilot/chat/script/core.d.ts +4 -4
  97. package/package/components/copilot/chat/script/core.js +93 -34
  98. package/package/components/copilot/lib.d.ts +1 -0
  99. package/package/components/copilot/lib.js +6 -3
  100. package/package/components/custom_ui.d.ts +1 -0
  101. package/package/components/flows/FlowProgressBar.svelte +16 -16
  102. package/package/components/flows/FlowProgressBar.svelte.d.ts +7 -22
  103. package/package/components/flows/content/FlowInputsQuick.svelte +3 -2
  104. package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +1 -0
  105. package/package/components/flows/content/FlowModuleComponent.svelte +24 -1
  106. package/package/components/flows/flowInfers.js +34 -8
  107. package/package/components/flows/flowStore.d.ts +4 -1
  108. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  109. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -1
  110. package/package/components/flows/map/InsertModuleButton.svelte +4 -14
  111. package/package/components/flows/map/InsertModuleButton.svelte.d.ts +0 -1
  112. package/package/components/flows/map/InsertModuleInner.svelte +17 -20
  113. package/package/components/flows/map/MapItem.svelte +1 -1
  114. package/package/components/flows/pickers/PickHubScriptQuick.svelte +38 -52
  115. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -0
  116. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +27 -15
  117. package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +1 -0
  118. package/package/components/flows/propPicker/OutputPicker.svelte +2 -0
  119. package/package/components/git_sync/DetectionFlow.svelte +33 -44
  120. package/package/components/git_sync/DetectionFlow.svelte.d.ts +1 -0
  121. package/package/components/git_sync/GitSyncContext.svelte.d.ts +22 -0
  122. package/package/components/git_sync/GitSyncContext.svelte.js +145 -5
  123. package/package/components/git_sync/GitSyncModeDisplay.svelte +14 -0
  124. package/package/components/git_sync/GitSyncModeDisplay.svelte.d.ts +9 -0
  125. package/package/components/git_sync/GitSyncRepositoryCard.svelte +365 -253
  126. package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +10 -1
  127. package/package/components/git_sync/GitSyncSection.svelte +134 -14
  128. package/package/components/git_sync/PullWorkspaceModal.svelte +24 -32
  129. package/package/components/git_sync/PushWorkspaceModal.svelte +24 -32
  130. package/package/components/graph/model.d.ts +5 -5
  131. package/package/components/graph/renderers/edges/EmptyEdge.svelte +3 -10
  132. package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +4 -18
  133. package/package/components/graph/renderers/nodes/AIToolNode.svelte +2 -2
  134. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +5 -10
  135. package/package/components/home/ItemsList.svelte +1 -1
  136. package/package/components/jobs/JobProgressBar.svelte +27 -21
  137. package/package/components/jobs/JobProgressBar.svelte.d.ts +9 -24
  138. package/package/components/meltComponents/MenuSingleItem.svelte +3 -8
  139. package/package/components/meltComponents/MenuSingleItem.svelte.d.ts +0 -3
  140. package/package/components/meltComponents/Popover.svelte +3 -2
  141. package/package/components/meltComponents/Popover.svelte.d.ts +1 -0
  142. package/package/components/meltComponents/Tooltip.svelte +1 -1
  143. package/package/components/progressBar/ProgressBar.svelte +39 -53
  144. package/package/components/progressBar/ProgressBar.svelte.d.ts +11 -26
  145. package/package/components/runs/JobsLoader.svelte +1 -1
  146. package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
  147. package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -1
  148. package/package/components/schema/AddPropertyV2.svelte +7 -4
  149. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  150. package/package/components/select/MultiSelect.svelte +2 -2
  151. package/package/components/select/MultiSelect.svelte.d.ts +1 -0
  152. package/package/components/settings/WorkspaceUserSettings.svelte +92 -1
  153. package/package/components/sidebar/MenuLink.svelte +2 -1
  154. package/package/components/sidebar/MenuLink.svelte.d.ts +1 -0
  155. package/package/components/sidebar/SidebarContent.svelte +27 -27
  156. package/package/components/table/Cell.svelte +7 -14
  157. package/package/components/table/Cell.svelte.d.ts +13 -35
  158. package/package/components/triggers/AddTriggersButton.svelte +1 -0
  159. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
  160. package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
  161. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +28 -5
  162. package/package/components/triggers/gcp/utils.js +1 -0
  163. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +1 -0
  164. package/package/components/triggers/webhook/WebhooksConfigSection.svelte +143 -63
  165. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +22 -0
  166. package/package/components/triggers/websocket/utils.js +1 -0
  167. package/package/components/workspaceSettings/AISettings.svelte +8 -2
  168. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  169. package/package/components/workspaceSettings/ModelTokenLimits.svelte +165 -0
  170. package/package/components/workspaceSettings/ModelTokenLimits.svelte.d.ts +8 -0
  171. package/package/components/workspaceSettings/StorageSettings.svelte +123 -51
  172. package/package/gen/core/OpenAPI.js +1 -1
  173. package/package/gen/schemas.gen.d.ts +141 -16
  174. package/package/gen/schemas.gen.js +144 -16
  175. package/package/gen/services.gen.d.ts +62 -42
  176. package/package/gen/services.gen.js +131 -82
  177. package/package/gen/types.gen.d.ts +218 -144
  178. package/package/hubPaths.json +2 -1
  179. package/package/services/JobManager.js +10 -7
  180. package/package/stores.d.ts +1 -0
  181. package/package/stores.js +6 -3
  182. package/package/timelineCompute.svelte.d.ts +21 -0
  183. package/package/timelineCompute.svelte.js +113 -0
  184. package/package/utils.d.ts +15 -8
  185. package/package/utils.js +62 -12
  186. package/package/workspace_settings.d.ts +13 -8
  187. package/package/workspace_settings.js +46 -11
  188. package/package.json +2 -2
@@ -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
- { resourcePath: '', resourceType: 's3', publicResource: false }
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-[40rem]">
221
- {#if storage.resourceType == 's3'}
222
- <div class="flex flex-col mt-5 mb-1 gap-1">
223
- <!-- this can be removed once parent moves to runes -->
224
- <!-- svelte-ignore binding_property_non_reactive -->
225
- <Toggle
226
- disabled={emptyString(storage.resourcePath)}
227
- bind:checked={storage.publicResource}
228
- options={{
229
- right:
230
- 'S3 resource details and content can be accessed by all users of this workspace',
231
- rightTooltip:
232
- '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.'
233
- }}
234
- />
235
- {#if storage.publicResource === true}
236
- <div class="pt-2"></div>
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
- <Alert type="warning" title="S3 bucket content and resource details are shared">
239
- S3 resource public access is ON, which means that the entire content of the S3
240
- bucket will be accessible to all the users of this workspace regardless of whether
241
- they have access the resource or not. Similarly, certain Windmill SDK endpoints can
242
- be used in scripts to access the resource details, including public and private
243
- keys.
244
- </Alert>
245
- {/if}
246
- </div>
247
- {:else}
248
- <div class="flex flex-col mt-5 mb-1 gap-1">
249
- <!-- this can be removed once parent moves to runes -->
250
- <!-- svelte-ignore binding_property_non_reactive -->
251
- <Toggle
252
- disabled={emptyString(storage.resourcePath)}
253
- bind:checked={storage.publicResource}
254
- options={{
255
- right: 'object storage content can be accessed by all users of this workspace',
256
- rightTooltip:
257
- 'If set, all users of this workspace will have access the to entire content of the object storage.'
258
- }}
259
- />
260
- {#if storage.publicResource === true}
261
- <div class="pt-2"></div>
262
- <Alert type="warning" title="object content">
263
- object public access is ON, which means that the entire content of the object store
264
- will be accessible to all the users of this workspace regardless of whether they
265
- have access the resource or not.
266
- </Alert>
267
- {/if}
268
- </div>
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}
@@ -21,7 +21,7 @@ export const OpenAPI = {
21
21
  PASSWORD: undefined,
22
22
  TOKEN: undefined,
23
23
  USERNAME: undefined,
24
- VERSION: '1.542.0',
24
+ VERSION: '1.549.1',
25
25
  WITH_CREDENTIALS: false,
26
26
  interceptors: {
27
27
  request: new Interceptors(),
@@ -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: {