windmill-components 1.537.1 → 1.542.4

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 (273) hide show
  1. package/package/components/AIProviderPicker.svelte +181 -0
  2. package/package/components/AIProviderPicker.svelte.d.ts +15 -0
  3. package/package/components/ArgInfo.svelte +2 -2
  4. package/package/components/ArgInput.svelte +35 -9
  5. package/package/components/ArgInput.svelte.d.ts +3 -3
  6. package/package/components/AssignableTagsInner.svelte +89 -3
  7. package/package/components/ConcurrentJobsChart.svelte +36 -48
  8. package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
  9. package/package/components/CustomPopover.svelte.d.ts +1 -1
  10. package/package/components/DropdownSelect.svelte +26 -0
  11. package/package/components/DropdownSelect.svelte.d.ts +11 -0
  12. package/package/components/DropdownV2Inner.svelte +1 -1
  13. package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
  14. package/package/components/DynamicInput.svelte.d.ts +11 -0
  15. package/package/components/EditableSchemaForm.svelte +119 -95
  16. package/package/components/EditableSchemaForm.svelte.d.ts +4 -4
  17. package/package/components/Editor.svelte +86 -93
  18. package/package/components/Editor.svelte.d.ts +4 -3
  19. package/package/components/EditorBar.svelte +2 -5
  20. package/package/components/FlowBuilder.svelte +3 -3
  21. package/package/components/FlowLogRow.svelte +64 -0
  22. package/package/components/FlowLogRow.svelte.d.ts +15 -0
  23. package/package/components/FlowLogViewer.svelte +406 -373
  24. package/package/components/FlowLogViewer.svelte.d.ts +5 -1
  25. package/package/components/FlowLogViewerWrapper.svelte +44 -1
  26. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  27. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  28. package/package/components/FlowStatusViewerInner.svelte +34 -3
  29. package/package/components/FolderPicker.svelte +1 -1
  30. package/package/components/InputTransformForm.svelte +20 -10
  31. package/package/components/JobArgs.svelte +1 -1
  32. package/package/components/JobLoader.svelte.d.ts +1 -1
  33. package/package/components/JobStatus.svelte +2 -0
  34. package/package/components/LogSnippetViewer.svelte +3 -3
  35. package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
  36. package/package/components/LogViewer.svelte +87 -71
  37. package/package/components/LogViewer.svelte.d.ts +1 -0
  38. package/package/components/Path.svelte +7 -1
  39. package/package/components/Path.svelte.d.ts +1 -1
  40. package/package/components/PrefixedInput.svelte +120 -0
  41. package/package/components/PrefixedInput.svelte.d.ts +8 -0
  42. package/package/components/QueuePosition.svelte +81 -0
  43. package/package/components/QueuePosition.svelte.d.ts +8 -0
  44. package/package/components/ResourceNarrowing.svelte +13 -0
  45. package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
  46. package/package/components/ResourceTypePicker.svelte +49 -74
  47. package/package/components/RunChart.svelte +74 -89
  48. package/package/components/RunChart.svelte.d.ts +10 -22
  49. package/package/components/S3FilePicker.svelte +1 -1
  50. package/package/components/SchemaForm.svelte.d.ts +2 -2
  51. package/package/components/ScriptBuilder.svelte +2 -1
  52. package/package/components/ScriptEditor.svelte +4 -3
  53. package/package/components/ScriptEditor.svelte.d.ts +2 -1
  54. package/package/components/ServiceLogsInner.svelte +1 -1
  55. package/package/components/ShareModal.svelte.d.ts +1 -1
  56. package/package/components/SimpleEditor.svelte +4 -67
  57. package/package/components/StringTypeNarrowing.svelte +5 -10
  58. package/package/components/TemplateEditor.svelte +2 -16
  59. package/package/components/TimeAgo.svelte +1 -1
  60. package/package/components/TimeAgo.svelte.d.ts +1 -0
  61. package/package/components/Toggle.svelte +2 -1
  62. package/package/components/Toggle.svelte.d.ts +2 -1
  63. package/package/components/WorkerRepl.svelte +1 -1
  64. package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
  65. package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
  66. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
  67. package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
  68. package/package/components/apps/components/display/table/utils.js +36 -5
  69. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
  70. package/package/components/apps/editor/AppEditor.svelte +4 -3
  71. package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
  72. package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
  73. package/package/components/apps/editor/SettingsPanel.svelte +2 -2
  74. package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  75. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  76. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  77. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  78. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +26 -3
  79. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  80. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
  81. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
  82. package/package/components/assets/JobAssetsViewer.svelte +28 -24
  83. package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
  84. package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
  85. package/package/components/common/OnChange.svelte.d.ts +11 -4
  86. package/package/components/common/badge/Badge.svelte +9 -2
  87. package/package/components/common/badge/Badge.svelte.d.ts +2 -1
  88. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
  89. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
  90. package/package/components/common/drawer/Disposable.svelte +9 -11
  91. package/package/components/common/drawer/Drawer.svelte +3 -4
  92. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  93. package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
  94. package/package/components/common/modal/Modal.svelte.d.ts +1 -1
  95. package/package/components/common/tabs/TabContent.svelte +2 -7
  96. package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
  97. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
  98. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  99. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
  100. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  101. package/package/components/copilot/MetadataGen.svelte +1 -1
  102. package/package/components/copilot/chat/AIChatManager.svelte.js +24 -102
  103. package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
  104. package/package/components/copilot/chat/anthropic.d.ts +15 -0
  105. package/package/components/copilot/chat/anthropic.js +208 -0
  106. package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
  107. package/package/components/copilot/chat/api/apiTools.js +10 -7
  108. package/package/components/copilot/chat/api/core.d.ts +1 -1
  109. package/package/components/copilot/chat/api/core.js +7 -2
  110. package/package/components/copilot/chat/ask/core.d.ts +1 -1
  111. package/package/components/copilot/chat/ask/core.js +7 -2
  112. package/package/components/copilot/chat/flow/core.d.ts +1 -1
  113. package/package/components/copilot/chat/flow/core.js +14 -4
  114. package/package/components/copilot/chat/monaco-adapter.d.ts +6 -5
  115. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  116. package/package/components/copilot/chat/navigator/core.js +7 -2
  117. package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
  118. package/package/components/copilot/chat/script/core.d.ts +5 -4
  119. package/package/components/copilot/chat/script/core.js +131 -19
  120. package/package/components/copilot/chat/shared.d.ts +7 -7
  121. package/package/components/copilot/lib.d.ts +29 -8
  122. package/package/components/copilot/lib.js +199 -24
  123. package/package/components/flows/content/FlowInput.svelte +5 -5
  124. package/package/components/flows/content/FlowModuleComponent.svelte +5 -2
  125. package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
  126. package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
  127. package/package/components/flows/content/FlowModuleSuspend.svelte +0 -1
  128. package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
  129. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
  130. package/package/components/flows/content/FlowRetries.svelte +108 -3
  131. package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
  132. package/package/components/flows/flowInfers.js +8 -35
  133. package/package/components/flows/flowStore.d.ts +45 -1
  134. package/package/components/flows/flowStore.js +1 -1
  135. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  136. package/package/components/flows/map/FlowModuleSchemaItem.svelte +61 -54
  137. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
  138. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
  139. package/package/components/flows/map/InsertModuleButton.svelte +1 -0
  140. package/package/components/flows/map/InsertModuleInner.svelte +12 -15
  141. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
  142. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  143. package/package/components/git_sync/DetectionFlow.svelte +15 -17
  144. package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
  145. package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
  146. package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
  147. package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
  148. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
  149. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
  150. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
  151. package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
  152. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
  153. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
  154. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
  155. package/package/components/home/ItemsList.svelte +17 -13
  156. package/package/components/home/TreeView.svelte +21 -27
  157. package/package/components/home/TreeView.svelte.d.ts +2 -29
  158. package/package/components/home/TreeViewRoot.svelte +11 -23
  159. package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
  160. package/package/components/icons/GitIcon.svelte +10 -2
  161. package/package/components/icons/GitIcon.svelte.d.ts +1 -0
  162. package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
  163. package/package/components/meltComponents/Popover.svelte +23 -3
  164. package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
  165. package/package/components/monacoLanguagesOptions.d.ts +3 -0
  166. package/package/components/monacoLanguagesOptions.js +109 -0
  167. package/package/components/propertyPicker/ObjectViewer.svelte +7 -2
  168. package/package/components/propertyPicker/PropPicker.svelte +1 -1
  169. package/package/components/propertyPicker/utils.js +14 -7
  170. package/package/components/runs/JobRunsPreview.svelte +212 -177
  171. package/package/components/runs/JobsLoader.svelte +2 -2
  172. package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
  173. package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
  174. package/package/components/runs/RunBadges.svelte +100 -0
  175. package/package/components/runs/RunBadges.svelte.d.ts +12 -0
  176. package/package/components/runs/RunLabels.svelte +86 -0
  177. package/package/components/runs/RunLabels.svelte.d.ts +10 -0
  178. package/package/components/runs/RunOption.svelte +20 -0
  179. package/package/components/runs/RunOption.svelte.d.ts +10 -0
  180. package/package/components/runs/RunRow.svelte +239 -151
  181. package/package/components/runs/RunRow.svelte.d.ts +12 -9
  182. package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
  183. package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
  184. package/package/components/runs/RunsFilter.svelte +369 -243
  185. package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
  186. package/package/components/runs/RunsQueue.svelte +96 -25
  187. package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
  188. package/package/components/runs/RunsTable.svelte +62 -71
  189. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  190. package/package/components/runs/runs-grid.css +95 -0
  191. package/package/components/schema/EditableSchemaDrawer.svelte +12 -12
  192. package/package/components/schema/FlowPropertyEditor.svelte +197 -206
  193. package/package/components/schema/PropertyEditor.svelte +33 -35
  194. package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -2
  195. package/package/components/search/GlobalSearchModal.svelte +8 -1
  196. package/package/components/select/DraggableTags.svelte.d.ts +17 -7
  197. package/package/components/select/MultiSelect.svelte.d.ts +21 -11
  198. package/package/components/select/Select.svelte +2 -1
  199. package/package/components/select/Select.svelte.d.ts +25 -13
  200. package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
  201. package/package/components/settings/TokenDisplay.svelte +1 -1
  202. package/package/components/sidebar/OperatorMenu.svelte +5 -0
  203. package/package/components/sidebar/SidebarContent.svelte +48 -2
  204. package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
  205. package/package/components/toast.js +6 -3
  206. package/package/components/triggers/AddTriggersButton.svelte +7 -6
  207. package/package/components/triggers/CaptureWrapper.svelte +19 -3
  208. package/package/components/triggers/TriggerLabel.svelte +8 -0
  209. package/package/components/triggers/TriggerTokens.svelte +1 -1
  210. package/package/components/triggers/TriggersEditor.svelte +9 -5
  211. package/package/components/triggers/TriggersTable.svelte +2 -2
  212. package/package/components/triggers/TriggersWrapper.svelte +16 -5
  213. package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
  214. package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
  215. package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
  216. package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
  217. package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
  218. package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
  219. package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
  220. package/package/components/triggers/email/EmailCapture.svelte +39 -0
  221. package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
  222. package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
  223. package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
  224. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
  225. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
  226. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
  227. package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
  228. package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
  229. package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
  230. package/package/components/triggers/email/utils.d.ts +4 -0
  231. package/package/components/triggers/email/utils.js +52 -0
  232. package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
  233. package/package/components/triggers/http/utils.js +1 -1
  234. package/package/components/triggers/triggers.svelte.d.ts +1 -0
  235. package/package/components/triggers/triggers.svelte.js +24 -2
  236. package/package/components/triggers/utils.js +19 -5
  237. package/package/components/triggers.d.ts +1 -1
  238. package/package/components/triggers.js +2 -0
  239. package/package/components/wizards/AgGridWizard.svelte +85 -80
  240. package/package/components/workspaceSettings/AISettings.svelte +74 -22
  241. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  242. package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
  243. package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
  244. package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
  245. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
  246. package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
  247. package/package/gen/core/OpenAPI.js +1 -1
  248. package/package/gen/schemas.gen.d.ts +142 -3
  249. package/package/gen/schemas.gen.js +144 -3
  250. package/package/gen/services.gen.d.ts +129 -1
  251. package/package/gen/services.gen.js +267 -1
  252. package/package/gen/types.gen.d.ts +434 -8
  253. package/package/hubPaths.json +4 -2
  254. package/package/infer.js +1 -1
  255. package/package/keyboardChain.d.ts +5 -0
  256. package/package/keyboardChain.js +40 -0
  257. package/package/services/JobManager.js +2 -2
  258. package/package/stores.d.ts +3 -1
  259. package/package/stores.js +8 -5
  260. package/package/utils/workspaceHierarchy.d.ts +27 -0
  261. package/package/utils/workspaceHierarchy.js +101 -0
  262. package/package/utils.d.ts +6 -3
  263. package/package/utils.js +30 -15
  264. package/package/workspace_settings.js +2 -3
  265. package/package.json +9 -11
  266. package/package/components/DynSelect.svelte.d.ts +0 -11
  267. package/package/components/ObjectTypeNarrowing.svelte +0 -18
  268. package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
  269. package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
  270. package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
  271. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
  272. package/package/components/details/EmailTriggerPanel.svelte +0 -76
  273. package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
@@ -0,0 +1,395 @@
1
+ <script lang="ts">import { run } from 'svelte/legacy';
2
+ import { goto } from '../../navigation';
3
+ import { base } from '../../base';
4
+ import { ResourceService, SettingService, UserService, VariableService, WorkspaceService } from '../../gen';
5
+ import { validateUsername } from '../../utils';
6
+ import { logoutWithRedirect } from '../../logout';
7
+ import { page } from '$app/stores';
8
+ import { usersWorkspaceStore, workspaceStore } from '../../stores';
9
+ import CenteredModal from '../CenteredModal.svelte';
10
+ import { Button } from '../common';
11
+ import Toggle from '../Toggle.svelte';
12
+ import Tooltip from '../Tooltip.svelte';
13
+ import { onMount } from 'svelte';
14
+ import { sendUserToast } from '../../toast';
15
+ import TestAIKey from '../copilot/TestAIKey.svelte';
16
+ import { switchWorkspace } from '../../storeUtils';
17
+ import { isCloudHosted } from '../../cloud';
18
+ import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
19
+ import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
20
+ import { AI_PROVIDERS } from '../copilot/lib';
21
+ import { GitFork } from 'lucide-svelte';
22
+ import PrefixedInput from '../PrefixedInput.svelte';
23
+ let { isFork = false } = $props();
24
+ const rd = $page.url.searchParams.get('rd');
25
+ let id = $state('');
26
+ let name = $state('');
27
+ let username = $state('');
28
+ let errorId = $state('');
29
+ let errorUser = $state('');
30
+ let aiKey = $state('');
31
+ let codeCompletionEnabled = $state(true);
32
+ let checking = $state(false);
33
+ let workspaceColor = $state(null);
34
+ let colorEnabled = $state(false);
35
+ function generateRandomColor() {
36
+ const randomColor = '#' +
37
+ Math.floor(Math.random() * 16777215)
38
+ .toString(16)
39
+ .padStart(6, '0');
40
+ workspaceColor = randomColor;
41
+ }
42
+ async function validateName(id) {
43
+ checking = true;
44
+ let exists = await WorkspaceService.existsWorkspace({ requestBody: { id } });
45
+ if (exists) {
46
+ errorId = 'ID already exists';
47
+ }
48
+ else if (id != '' && !/^\w+(-\w+)*$/.test(id)) {
49
+ errorId = 'ID can only contain letters, numbers and dashes and must not finish by a dash';
50
+ }
51
+ else {
52
+ errorId = '';
53
+ }
54
+ checking = false;
55
+ }
56
+ const WM_FORK_PREFIX = 'wm-fork-';
57
+ async function createOrForkWorkspace() {
58
+ const prefixed_id = `${WM_FORK_PREFIX}${id}`;
59
+ if (isFork) {
60
+ if ($workspaceStore) {
61
+ await WorkspaceService.createWorkspaceFork({
62
+ requestBody: {
63
+ id: prefixed_id,
64
+ name,
65
+ color: colorEnabled && workspaceColor ? workspaceColor : undefined,
66
+ username: automateUsernameCreation ? undefined : username,
67
+ parent_workspace_id: $workspaceStore
68
+ }
69
+ });
70
+ sendUserToast(`Successfully forked workspace ${$workspaceStore} as: wm-fork-${id}`);
71
+ }
72
+ else {
73
+ sendUserToast('No workspace selected, cannot fork non-existent workspace', true);
74
+ }
75
+ }
76
+ else {
77
+ await createWorkspace();
78
+ }
79
+ usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
80
+ switchWorkspace(isFork ? prefixed_id : id);
81
+ goto(rd ?? '/');
82
+ }
83
+ async function createWorkspace() {
84
+ await WorkspaceService.createWorkspace({
85
+ requestBody: {
86
+ id,
87
+ name,
88
+ color: colorEnabled && workspaceColor ? workspaceColor : undefined,
89
+ username: automateUsernameCreation ? undefined : username
90
+ }
91
+ });
92
+ if (auto_invite) {
93
+ await WorkspaceService.editAutoInvite({
94
+ workspace: id,
95
+ requestBody: { operator: operatorOnly, invite_all: !isCloudHosted(), auto_add: true }
96
+ });
97
+ }
98
+ if (aiKey != '') {
99
+ let actualUsername = username;
100
+ if (automateUsernameCreation) {
101
+ const user = await UserService.whoami({
102
+ workspace: id
103
+ });
104
+ actualUsername = user.username;
105
+ }
106
+ let path = `u/${actualUsername}/${selected}_windmill_codegen`;
107
+ await VariableService.createVariable({
108
+ workspace: id,
109
+ requestBody: {
110
+ path,
111
+ value: aiKey,
112
+ is_secret: true,
113
+ description: 'Ai token'
114
+ }
115
+ });
116
+ await ResourceService.createResource({
117
+ workspace: id,
118
+ requestBody: {
119
+ path,
120
+ value: {
121
+ api_key: '$var:' + path
122
+ },
123
+ resource_type: selected
124
+ }
125
+ });
126
+ await WorkspaceService.editCopilotConfig({
127
+ workspace: id,
128
+ requestBody: aiKey
129
+ ? {
130
+ providers: {
131
+ [selected]: {
132
+ resource_path: path,
133
+ models: [AI_PROVIDERS[selected].defaultModels[0]]
134
+ }
135
+ },
136
+ default_model: {
137
+ model: AI_PROVIDERS[selected].defaultModels[0],
138
+ provider: selected
139
+ },
140
+ code_completion_model: codeCompletionEnabled
141
+ ? { model: AI_PROVIDERS[selected].defaultModels[0], provider: selected }
142
+ : undefined
143
+ }
144
+ : {}
145
+ });
146
+ }
147
+ sendUserToast(`Created workspace id: ${id}`);
148
+ usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
149
+ switchWorkspace(id);
150
+ goto(rd ?? '/');
151
+ }
152
+ function handleKeyUp(event) {
153
+ const key = event.key;
154
+ if (key === 'Enter') {
155
+ event.preventDefault();
156
+ createWorkspace();
157
+ }
158
+ }
159
+ async function loadWorkspaces() {
160
+ if (!$usersWorkspaceStore) {
161
+ try {
162
+ usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
163
+ }
164
+ catch { }
165
+ }
166
+ if (!$usersWorkspaceStore) {
167
+ const url = $page.url;
168
+ console.log('logout 2');
169
+ await logoutWithRedirect(url.href.replace(url.origin, ''));
170
+ }
171
+ }
172
+ let automateUsernameCreation = $state(false);
173
+ async function getAutomateUsernameCreationSetting() {
174
+ automateUsernameCreation =
175
+ (await SettingService.getGlobal({ key: 'automate_username_creation' })) ?? false;
176
+ if (!automateUsernameCreation) {
177
+ UserService.globalWhoami().then((x) => {
178
+ let uname = '';
179
+ if (x.name) {
180
+ uname = x.name.split(' ')[0];
181
+ }
182
+ else {
183
+ uname = x.email.split('@')[0];
184
+ }
185
+ uname = uname.replace(/\./gi, '');
186
+ username = uname.toLowerCase();
187
+ });
188
+ }
189
+ }
190
+ getAutomateUsernameCreationSetting();
191
+ onMount(() => {
192
+ loadWorkspaces();
193
+ WorkspaceService.isDomainAllowed().then((x) => {
194
+ isDomainAllowed = x;
195
+ });
196
+ });
197
+ let isDomainAllowed = $state(undefined);
198
+ let auto_invite = $state(false);
199
+ let operatorOnly = $state(false);
200
+ let selected = $state('openai');
201
+ run(() => {
202
+ id = name.toLowerCase().replace(/\s/gi, '-');
203
+ });
204
+ run(() => {
205
+ validateName(id);
206
+ });
207
+ run(() => {
208
+ errorUser = validateUsername(username);
209
+ });
210
+ run(() => {
211
+ colorEnabled && !workspaceColor && generateRandomColor();
212
+ });
213
+ let domain = $derived($usersWorkspaceStore?.email.split('@')[1]);
214
+ </script>
215
+
216
+ <CenteredModal title="{isFork ? 'Forking' : 'New'} Workspace">
217
+ {#if isFork}
218
+ <div class="flex flex-block gap-2">
219
+ <GitFork />
220
+ <span class="text-secondary text-l"> Forking </span>
221
+ <span class="text-secondary font-bold text-l">
222
+ {$workspaceStore}
223
+ </span>
224
+ </div>
225
+ {/if}
226
+ <label class="block pb-4 pt-4">
227
+ {#if isFork}
228
+ <span class="text-secondary text-sm">Fork name</span>
229
+ <span class="ml-4 text-tertiary text-xs">Displayable name of the forked workspace</span>
230
+ {:else}
231
+ <span class="text-secondary text-sm">Workspace name</span>
232
+ <span class="ml-4 text-tertiary text-xs">Displayable name</span>
233
+ {/if}
234
+ <!-- svelte-ignore a11y_autofocus -->
235
+ <input autofocus type="text" bind:value={name} />
236
+ </label>
237
+ <label class="block pb-4">
238
+ <span class="text-secondary text-sm">Workspace ID</span>
239
+ {#if isFork}
240
+ <span class="ml-10 text-tertiary text-xs"
241
+ >Slug to uniquely identify your fork (this will also set the branch name)</span
242
+ >
243
+ {:else}
244
+ <span class="ml-10 text-tertiary text-xs">Slug to uniquely identify your workspace</span>
245
+ {/if}
246
+ {#if errorId}
247
+ <span class="text-red-500 text-xs">{errorId}</span>
248
+ {/if}
249
+
250
+ {#if isFork}
251
+ <PrefixedInput
252
+ prefix={WM_FORK_PREFIX}
253
+ type="text"
254
+ bind:value={id}
255
+ placeholder="example.com"
256
+ class={errorId != '' ? 'input-error' : ''}
257
+ />
258
+ {:else}
259
+ <input type="text" bind:value={id} class:input-error={errorId != ''} />
260
+ {/if}
261
+ </label>
262
+ <label class="block pb-4">
263
+ <span class="text-secondary text-sm">Workspace color</span>
264
+ <span class="ml-5 text-tertiary text-xs"
265
+ >Color to identify the current workspace in the list of workspaces</span
266
+ >
267
+ <div class="flex items-center gap-2">
268
+ <Toggle bind:checked={colorEnabled} options={{ right: 'Enable' }} />
269
+ {#if colorEnabled}<input
270
+ class="w-10"
271
+ type="color"
272
+ bind:value={workspaceColor}
273
+ disabled={!colorEnabled}
274
+ />{/if}
275
+ <input
276
+ type="text"
277
+ class="w-24 text-sm"
278
+ bind:value={workspaceColor}
279
+ disabled={!colorEnabled}
280
+ />
281
+ <Button on:click={generateRandomColor} size="xs" disabled={!colorEnabled}>Random</Button>
282
+ </div>
283
+ </label>
284
+ {#if !automateUsernameCreation}
285
+ <label class="block pb-4">
286
+ <span class="text-secondary text-sm">Your username in that workspace</span>
287
+ <input type="text" bind:value={username} onkeyup={handleKeyUp} />
288
+ {#if errorUser}
289
+ <span class="text-red-500 text-xs">{errorUser}</span>
290
+ {/if}
291
+ </label>
292
+ {/if}
293
+ {#if !isFork}
294
+ <div class="block pb-4">
295
+ <label for="ai-key" class="flex flex-col gap-1">
296
+ <span class="text-secondary text-sm">
297
+ AI key for Windmill AI
298
+ <Tooltip>
299
+ Find out how it can help you <a
300
+ href="https://www.windmill.dev/docs/core_concepts/ai_generation"
301
+ target="_blank"
302
+ rel="noopener noreferrer">in the docs</a
303
+ >
304
+ </Tooltip>
305
+ <span class="text-2xs text-tertiary ml-2">(optional but recommended)</span>
306
+ </span>
307
+
308
+ <div class="pb-2">
309
+ <ToggleButtonGroup bind:selected>
310
+ {#snippet children({ item })}
311
+ <ToggleButton value="openai" label="OpenAI" {item} />
312
+ <ToggleButton value="anthropic" label="Anthropic" {item} />
313
+ <ToggleButton value="mistral" label="Mistral" {item} />
314
+ <ToggleButton value="deepseek" label="DeepSeek" {item} />
315
+ {/snippet}
316
+ </ToggleButtonGroup>
317
+ </div>
318
+ </label>
319
+
320
+ <div class="flex flex-row gap-1 pb-4">
321
+ <input
322
+ id="ai-key"
323
+ type="password"
324
+ autocomplete="new-password"
325
+ bind:value={aiKey}
326
+ onkeyup={handleKeyUp}
327
+ />
328
+ <TestAIKey
329
+ apiKey={aiKey}
330
+ disabled={!aiKey}
331
+ aiProvider={selected}
332
+ model={AI_PROVIDERS[selected].defaultModels[0]}
333
+ />
334
+ </div>
335
+ {#if aiKey}
336
+ <Toggle
337
+ disabled={!aiKey}
338
+ bind:checked={codeCompletionEnabled}
339
+ options={{ right: 'Enable code completion' }}
340
+ />
341
+ {/if}
342
+ </div>
343
+ <Toggle
344
+ disabled={isCloudHosted() && !isDomainAllowed}
345
+ bind:checked={auto_invite}
346
+ options={{
347
+ right: isCloudHosted()
348
+ ? `Auto-invite anyone from ${domain}`
349
+ : `Auto-invite anyone joining the instance`
350
+ }}
351
+ />
352
+ {#if isCloudHosted() && isDomainAllowed == false}
353
+ <div class="text-tertiary text-sm mb-4 mt-2">{domain} domain not allowed for auto-invite</div>
354
+ {/if}
355
+ <div class={'overflow-hidden transition-all ' + (auto_invite ? 'h-36' : 'h-0')}>
356
+ <div class="text-xs mb-1 leading-6 pt-2">
357
+ Mode <Tooltip>Whether to invite or add users directly to the workspace.</Tooltip>
358
+ </div>
359
+
360
+ <div class="text-xs mb-1 leading-6 pt-2"
361
+ >Role <Tooltip>Role of the auto-invited users</Tooltip></div
362
+ >
363
+ <ToggleButtonGroup
364
+ selected={operatorOnly ? 'operator' : 'developer'}
365
+ on:selected={(e) => {
366
+ operatorOnly = e.detail == 'operator'
367
+ }}
368
+ >
369
+ {#snippet children({ item })}
370
+ <ToggleButton value="operator" size="xs" label="Operator" {item} />
371
+ <ToggleButton value="developer" size="xs" label="Developer" {item} />
372
+ {/snippet}
373
+ </ToggleButtonGroup>
374
+ </div>
375
+ {/if}
376
+ <div class="flex flex-wrap flex-row justify-between pt-10 gap-1">
377
+ <Button variant="border" size="sm" href="{base}/user/workspaces"
378
+ >&leftarrow; Back to workspaces</Button
379
+ >
380
+ <Button
381
+ disabled={checking ||
382
+ errorId != '' ||
383
+ !name ||
384
+ (!automateUsernameCreation && (errorUser != '' || !username)) ||
385
+ !id}
386
+ on:click={createOrForkWorkspace}
387
+ >
388
+ {#if isFork}
389
+ Fork workspace
390
+ {:else}
391
+ Create workspace
392
+ {/if}
393
+ </Button>
394
+ </div>
395
+ </CenteredModal>
@@ -0,0 +1,6 @@
1
+ interface Props {
2
+ isFork?: boolean;
3
+ }
4
+ declare const CreateWorkspace: import("svelte").Component<Props, {}, "">;
5
+ type CreateWorkspace = ReturnType<typeof CreateWorkspace>;
6
+ export default CreateWorkspace;
@@ -42,7 +42,9 @@ export function convertDucklakeSettingsToBackend(settings) {
42
42
  import Select from '../select/Select.svelte'
43
43
  import ResourcePicker from '../ResourcePicker.svelte'
44
44
  import { usePromise } from '../../svelte5Utils.svelte'
45
- import { SettingService, WorkspaceService, type GetSettingsResponse } from '../../gen'
45
+ import { SettingService, WorkspaceService } from '../../gen'
46
+ import { type GetSettingsResponse } from '../../gen'
47
+
46
48
  import { superadmin, workspaceStore } from '../../stores'
47
49
  import { sendUserToast } from '../../toast'
48
50
  import ExploreAssetButton from '../ExploreAssetButton.svelte'
@@ -4,7 +4,7 @@ import Tooltip from '../Tooltip.svelte';
4
4
  import FilterList from './FilterList.svelte';
5
5
  import { Tabs, Tab } from '../common';
6
6
  import { workspaceStore } from '../../stores';
7
- let { git_repo_resource_path = $bindable(''), include_path = $bindable(['f/**']), include_type = $bindable(['script', 'flow', 'app', 'folder']), exclude_types_override = $bindable([]), isLegacyRepo = false, excludes = $bindable([]), extraIncludes = $bindable([]), isInitialSetup = false, requiresMigration = false, actions = undefined, useIndividualBranch = false } = $props();
7
+ let { git_repo_resource_path = $bindable(''), include_path = $bindable(['f/**']), include_type = $bindable(['script', 'flow', 'app', 'folder']), exclude_types_override = $bindable([]), isLegacyRepo = false, excludes = $bindable([]), extraIncludes = $bindable([]), isInitialSetup = false, requiresMigration = false, actions = undefined, useIndividualBranch = false, } = $props();
8
8
  // Component state
9
9
  let collapsed = $state(false);
10
10
  let showCliInstructions = $state(false);
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">import { enterpriseLicense, workspaceStore } from '../../stores';
2
2
  import { emptyString, sendUserToast } from '../../utils';
3
- import { Plus, X } from 'lucide-svelte';
3
+ import { ChevronDown, Plus, Shield, X } from 'lucide-svelte';
4
4
  import Alert from '../common/alert/Alert.svelte';
5
5
  import Button from '../common/button/Button.svelte';
6
6
  import Tab from '../common/tabs/Tab.svelte';
@@ -14,6 +14,7 @@ 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
+ import Popover from '../meltComponents/Popover.svelte';
17
18
  let { s3ResourceSettings = $bindable() } = $props();
18
19
  let s3FileViewer = $state();
19
20
  async function editWindmillLFSSettings() {
@@ -83,6 +84,7 @@ async function editWindmillLFSSettings() {
83
84
  resourceType={s3ResourceSettings.resourceType}
84
85
  bind:value={s3ResourceSettings.resourcePath}
85
86
  />
87
+ {@render permissionBtn(s3ResourceSettings)}
86
88
  <Button
87
89
  size="sm"
88
90
  variant="contained"
@@ -96,55 +98,9 @@ async function editWindmillLFSSettings() {
96
98
  >
97
99
  </div>
98
100
  </div>
99
- {#if s3ResourceSettings.resourceType == 's3'}
100
- <div class="flex flex-col mt-5 mb-1 gap-1">
101
- <!-- this can be removed once parent moves to runes -->
102
- <!-- svelte-ignore binding_property_non_reactive -->
103
- <Toggle
104
- disabled={emptyString(s3ResourceSettings.resourcePath)}
105
- bind:checked={s3ResourceSettings.publicResource}
106
- options={{
107
- right: 'S3 resource details and content can be accessed by all users of this workspace',
108
- rightTooltip:
109
- '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.'
110
- }}
111
- />
112
- {#if s3ResourceSettings.publicResource === true}
113
- <div class="pt-2"></div>
114
101
 
115
- <Alert type="warning" title="S3 bucket content and resource details are shared">
116
- S3 resource public access is ON, which means that the entire content of the S3 bucket will
117
- be accessible to all the users of this workspace regardless of whether they have access
118
- the resource or not. Similarly, certain Windmill SDK endpoints can be used in scripts to
119
- access the resource details, including public and private keys.
120
- </Alert>
121
- {/if}
122
- </div>
123
- {:else}
124
- <div class="flex flex-col mt-5 mb-1 gap-1">
125
- <!-- this can be removed once parent moves to runes -->
126
- <!-- svelte-ignore binding_property_non_reactive -->
127
- <Toggle
128
- disabled={emptyString(s3ResourceSettings.resourcePath)}
129
- bind:checked={s3ResourceSettings.publicResource}
130
- options={{
131
- right: 'object storage content can be accessed by all users of this workspace',
132
- rightTooltip:
133
- 'If set, all users of this workspace will have access the to entire content of the object storage.'
134
- }}
135
- />
136
- {#if s3ResourceSettings.publicResource === true}
137
- <div class="pt-2"></div>
138
- <Alert type="warning" title="object content">
139
- object public access is ON, which means that the entire content of the object store will
140
- be accessible to all the users of this workspace regardless of whether they have access
141
- the resource or not.
142
- </Alert>
143
- {/if}
144
- </div>
145
- {/if}
146
102
  <div class="mt-6">
147
- <div class="flex mt-2 flex-col gap-y-4 max-w-3xl">
103
+ <div class="flex mt-2 flex-col gap-y-4 max-w-5xl">
148
104
  {#each s3ResourceSettings.secondaryStorage ?? [] as _, idx}
149
105
  <div class="flex gap-1 items-center">
150
106
  <input
@@ -175,6 +131,7 @@ async function editWindmillLFSSettings() {
175
131
  <option value="azure_blob">Azure Blob</option>
176
132
  <option value="s3_aws_oidc">AWS OIDC</option>
177
133
  <option value="azure_workload_identity">Azure Workload Identity</option>
134
+ <option value="gcloud_storage">Google Cloud Storage</option>
178
135
  </select>
179
136
  <!-- this can be removed once parent moves to runes -->
180
137
  <!-- svelte-ignore binding_property_non_reactive -->
@@ -189,6 +146,7 @@ async function editWindmillLFSSettings() {
189
146
  }
190
147
  }
191
148
  />
149
+ {@render permissionBtn(s3ResourceSettings.secondaryStorage![idx][1])}
192
150
  <Button
193
151
  size="sm"
194
152
  variant="contained"
@@ -250,3 +208,66 @@ async function editWindmillLFSSettings() {
250
208
  >
251
209
  </div>
252
210
  {/if}
211
+
212
+ {#snippet permissionBtn(storage: NonNullable<S3ResourceSettings['secondaryStorage']>[number][1])}
213
+ <Popover closeOnOtherPopoverOpen>
214
+ <svelte:fragment slot="trigger">
215
+ <Button variant="border" btnClasses="px-2.5" color="dark" size="sm">
216
+ <Shield size={16} /> Permissions <ChevronDown size={14} />
217
+ </Button>
218
+ </svelte:fragment>
219
+ <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>
237
+
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>
269
+ {/if}
270
+ </div>
271
+ </svelte:fragment>
272
+ </Popover>
273
+ {/snippet}
@@ -21,7 +21,7 @@ export const OpenAPI = {
21
21
  PASSWORD: undefined,
22
22
  TOKEN: undefined,
23
23
  USERNAME: undefined,
24
- VERSION: '1.530.0',
24
+ VERSION: '1.542.0',
25
25
  WITH_CREDENTIALS: false,
26
26
  interceptors: {
27
27
  request: new Interceptors(),