windmill-components 1.677.1 → 1.687.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 (354) hide show
  1. package/package/components/AppConnectInner.svelte +6 -0
  2. package/package/components/CiTestResults.svelte +64 -0
  3. package/package/components/CiTestResults.svelte.d.ts +7 -0
  4. package/package/components/CompareWorkspaces.svelte +626 -418
  5. package/package/components/DBManager.svelte +35 -4
  6. package/package/components/DBManager.svelte.d.ts +2 -0
  7. package/package/components/DBManagerContent.svelte +3 -1
  8. package/package/components/DBManagerContent.svelte.d.ts +3 -0
  9. package/package/components/DBManagerDrawer.svelte +145 -3
  10. package/package/components/DBTableEditor.svelte +14 -4
  11. package/package/components/DatatablePicker.svelte +2 -5
  12. package/package/components/DatatableSchemaDiff.svelte +531 -0
  13. package/package/components/DatatableSchemaDiff.svelte.d.ts +29 -0
  14. package/package/components/DedicatedWorkersSelector.svelte +4 -2
  15. package/package/components/DefaultTagsInner.svelte +42 -2
  16. package/package/components/DeployWorkspaceDrawer.svelte +1 -1
  17. package/package/components/Dev.svelte +20 -3
  18. package/package/components/Editor.svelte +1 -1
  19. package/package/components/EditorBar.svelte +1 -1
  20. package/package/components/EditorBar.svelte.d.ts +1 -1
  21. package/package/components/FlowStatusViewerInner.svelte +269 -220
  22. package/package/components/FlowTimeline.svelte +1 -1
  23. package/package/components/FolderEditor.svelte +189 -4
  24. package/package/components/ForkWorkspaceBanner.svelte +82 -11
  25. package/package/components/GlobalUserOffboardingModal.svelte +293 -0
  26. package/package/components/GlobalUserOffboardingModal.svelte.d.ts +10 -0
  27. package/package/components/InstanceSettings.svelte +22 -3
  28. package/package/components/Login.svelte +22 -10
  29. package/package/components/ModuleTest.svelte +2 -1
  30. package/package/components/NoMainFuncBadge.svelte +1 -1
  31. package/package/components/OffboardItemsBox.svelte +56 -0
  32. package/package/components/OffboardItemsBox.svelte.d.ts +12 -0
  33. package/package/components/OffboardReassignControls.svelte +47 -0
  34. package/package/components/OffboardReassignControls.svelte.d.ts +20 -0
  35. package/package/components/OffboardWorkspaceSection.svelte +110 -0
  36. package/package/components/OffboardWorkspaceSection.svelte.d.ts +24 -0
  37. package/package/components/OnBehalfOfSelector.svelte +21 -3
  38. package/package/components/OnBehalfOfSelector.svelte.d.ts +7 -0
  39. package/package/components/QueueAlerts.svelte +10 -10
  40. package/package/components/ResourcePicker.svelte +2 -2
  41. package/package/components/ScriptBuilder.svelte +52 -11
  42. package/package/components/ScriptEditor.svelte +1 -3
  43. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  44. package/package/components/ShareModal.svelte +236 -98
  45. package/package/components/SuperadminSettingsInner.svelte +362 -315
  46. package/package/components/UserOffboardingModal.svelte +238 -0
  47. package/package/components/UserOffboardingModal.svelte.d.ts +10 -0
  48. package/package/components/WorkspaceDeployLayout.svelte +3 -3
  49. package/package/components/WorkspaceDeployLayout.svelte.d.ts +1 -0
  50. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +4 -2
  51. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +12 -0
  52. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  53. package/package/components/common/confirmationModal/ConfirmationModal.svelte +1 -1
  54. package/package/components/common/table/AppRow.svelte +3 -3
  55. package/package/components/common/table/FlowRow.svelte +3 -3
  56. package/package/components/common/table/RawAppRow.svelte +4 -4
  57. package/package/components/common/table/Row.svelte +6 -2
  58. package/package/components/common/table/ScriptRow.svelte +11 -3
  59. package/package/components/copilot/chat/AIChatManager.svelte.js +2 -2
  60. package/package/components/copilot/chat/anthropic.d.ts +7 -1
  61. package/package/components/copilot/chat/anthropic.js +5 -2
  62. package/package/components/copilot/chat/app/core.js +129 -1
  63. package/package/components/copilot/chat/app/core.test.js +192 -0
  64. package/package/components/copilot/chat/chatLoop.d.ts +3 -0
  65. package/package/components/copilot/chat/chatLoop.js +13 -5
  66. package/package/components/copilot/chat/flow/FlowAIChat.svelte +55 -76
  67. package/package/components/copilot/chat/flow/core.d.ts +13 -3
  68. package/package/components/copilot/chat/flow/core.js +467 -116
  69. package/package/components/copilot/chat/flow/helperUtils.d.ts +19 -0
  70. package/package/components/copilot/chat/flow/helperUtils.js +68 -0
  71. package/package/components/copilot/chat/flow/helperUtils.test.js +116 -0
  72. package/package/components/copilot/chat/flow/inlineScriptsUtils.d.ts +5 -24
  73. package/package/components/copilot/chat/flow/inlineScriptsUtils.js +30 -55
  74. package/package/components/copilot/chat/flow/utils.test.js +59 -0
  75. package/package/components/copilot/chat/openai-responses.d.ts +7 -1
  76. package/package/components/copilot/chat/openai-responses.js +5 -2
  77. package/package/components/copilot/chat/shared.d.ts +1 -2
  78. package/package/components/copilot/chat/shared.js +94 -52
  79. package/package/components/copilot/chat/tokenUsage.d.ts +23 -0
  80. package/package/components/copilot/chat/tokenUsage.js +42 -0
  81. package/package/components/copilot/lib.d.ts +5 -1
  82. package/package/components/copilot/lib.js +21 -5
  83. package/package/components/deploymentRequest/DeploymentRequestPanel.svelte +337 -0
  84. package/package/components/deploymentRequest/DeploymentRequestPanel.svelte.d.ts +15 -0
  85. package/package/components/details/CopyableCodeBlock.svelte +18 -8
  86. package/package/components/details/CopyableCodeBlock.svelte.d.ts +1 -0
  87. package/package/components/flows/FlowAssetsHandler.svelte +19 -21
  88. package/package/components/flows/agentToolTree.d.ts +17 -0
  89. package/package/components/flows/agentToolTree.js +114 -0
  90. package/package/components/flows/agentToolTree.test.d.ts +1 -0
  91. package/package/components/flows/agentToolTree.test.js +86 -0
  92. package/package/components/flows/agentToolUtils.d.ts +0 -5
  93. package/package/components/flows/agentToolUtils.js +0 -49
  94. package/package/components/flows/content/FlowLoop.svelte +7 -4
  95. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +15 -7
  96. package/package/components/flows/content/FlowSettings.svelte +29 -0
  97. package/package/components/flows/dfs.d.ts +6 -2
  98. package/package/components/flows/dfs.js +19 -11
  99. package/package/components/flows/flowDeleteController.d.ts +32 -0
  100. package/package/components/flows/flowDeleteController.js +54 -0
  101. package/package/components/flows/flowDeleteController.test.d.ts +1 -0
  102. package/package/components/flows/flowDeleteController.test.js +121 -0
  103. package/package/components/flows/flowDeleteUtils.d.ts +48 -0
  104. package/package/components/flows/flowDeleteUtils.js +150 -0
  105. package/package/components/flows/flowDeleteUtils.test.d.ts +1 -0
  106. package/package/components/flows/flowDeleteUtils.test.js +131 -0
  107. package/package/components/flows/flowDiff.d.ts +2 -47
  108. package/package/components/flows/flowDiff.js +16 -293
  109. package/package/components/flows/flowDiff.testUtils.d.ts +8 -0
  110. package/package/components/flows/flowDiff.testUtils.js +26 -0
  111. package/package/components/flows/flowDiffManager.svelte.js +20 -75
  112. package/package/components/flows/flowDiffManager.svelte.test.js +103 -2
  113. package/package/components/flows/flowExplorer.d.ts +4 -0
  114. package/package/components/flows/flowExplorer.js +7 -30
  115. package/package/components/flows/flowState.d.ts +1 -0
  116. package/package/components/flows/flowStateUtils.svelte.js +6 -1
  117. package/package/components/flows/flowTree.d.ts +91 -0
  118. package/package/components/flows/flowTree.js +326 -0
  119. package/package/components/flows/flowTree.test.d.ts +1 -0
  120. package/package/components/flows/flowTree.test.js +236 -0
  121. package/package/components/flows/map/FlowJobsMenu.svelte +36 -30
  122. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
  123. package/package/components/flows/map/FlowModuleSchemaMap.svelte +70 -227
  124. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +0 -2
  125. package/package/components/flows/pickers/PickHubScriptQuick.svelte +2 -2
  126. package/package/components/flows/previousResults.js +13 -41
  127. package/package/components/flows/previousResults.test.d.ts +1 -0
  128. package/package/components/flows/previousResults.test.js +65 -0
  129. package/package/components/flows/propPicker/OutputPicker.svelte +2 -1
  130. package/package/components/flows/propPicker/OutputPickerInner.svelte +41 -4
  131. package/package/components/flows/propPicker/StepHistory.svelte +9 -1
  132. package/package/components/git_sync/GitSyncContext.svelte.js +11 -5
  133. package/package/components/git_sync/GitSyncRepositoryCard.svelte +2 -29
  134. package/package/components/git_sync/PullWorkspaceModal.svelte +6 -7
  135. package/package/components/graph/FlowGraphV2.svelte +2 -2
  136. package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
  137. package/package/components/graph/groupedModulesProxy.svelte.d.ts +10 -0
  138. package/package/components/graph/groupedModulesProxy.svelte.js +17 -1
  139. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +5 -2
  140. package/package/components/home/HomeConnectDrawer.svelte +125 -0
  141. package/package/components/home/HomeConnectDrawer.svelte.d.ts +5 -0
  142. package/package/components/icons/GithubIcon.svelte +4 -4
  143. package/package/components/icons/GithubIcon.svelte.d.ts +5 -2
  144. package/package/components/instanceSettings/ExternalJwtTokens.svelte +85 -0
  145. package/package/components/instanceSettings/ExternalJwtTokens.svelte.d.ts +12 -0
  146. package/package/components/instanceSettings/GhesAppSettings.svelte +17 -0
  147. package/package/components/instanceSettings/IndexerMemorySettings.svelte +56 -29
  148. package/package/components/instanceSettings/SecretBackendConfig.svelte +9 -2
  149. package/package/components/instanceSettings.d.ts +1 -0
  150. package/package/components/instanceSettings.js +42 -8
  151. package/package/components/offboarding-utils.d.ts +11 -0
  152. package/package/components/offboarding-utils.js +100 -0
  153. package/package/components/raw_apps/RawAppDataTableDrawer.svelte +1 -1
  154. package/package/components/raw_apps/RawAppEditor.svelte +27 -0
  155. package/package/components/raw_apps/RawAppEditorHeader.svelte +6 -1
  156. package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +1 -0
  157. package/package/components/raw_apps/RawAppYamlEditor.svelte +81 -0
  158. package/package/components/raw_apps/RawAppYamlEditor.svelte.d.ts +20 -0
  159. package/package/components/raw_apps/datatableUtils.svelte.js +1 -1
  160. package/package/components/runs/runsFilter.d.ts +1 -1
  161. package/package/components/script_builder.d.ts +1 -1
  162. package/package/components/select/Select.svelte +2 -1
  163. package/package/components/select/Select.svelte.d.ts +1 -0
  164. package/package/components/settings/CreateToken.svelte +113 -64
  165. package/package/components/settings/CreateToken.svelte.d.ts +3 -0
  166. package/package/components/settings/WorkspaceUserSettings.svelte +34 -28
  167. package/package/components/sidebar/SidebarContent.svelte +58 -2
  168. package/package/components/sidebar/WorkspaceMenu.svelte +8 -4
  169. package/package/components/triggers/AddTriggersButton.svelte +11 -0
  170. package/package/components/triggers/PermissionedAsLine.svelte +37 -3
  171. package/package/components/triggers/PermissionedAsLine.svelte.d.ts +6 -0
  172. package/package/components/triggers/TriggersEditor.svelte +5 -1
  173. package/package/components/triggers/TriggersWrapper.svelte +10 -0
  174. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +13 -11
  175. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +13 -11
  176. package/package/components/triggers/http/RouteEditorConfigSection.svelte +15 -7
  177. package/package/components/triggers/http/RouteEditorInner.svelte +14 -14
  178. package/package/components/triggers/http/RoutesGenerator.svelte +6 -1
  179. package/package/components/triggers/http/RoutesPanel.svelte +1 -1
  180. package/package/components/triggers/http/utils.d.ts +1 -1
  181. package/package/components/triggers/http/utils.js +2 -2
  182. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +13 -11
  183. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +13 -11
  184. package/package/components/triggers/native/NativeTriggerEditor.svelte +3 -0
  185. package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte +118 -0
  186. package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte.d.ts +17 -0
  187. package/package/components/triggers/native/utils.js +14 -0
  188. package/package/components/triggers/nats/NatsTriggerEditor.svelte.d.ts +4 -3
  189. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +13 -11
  190. package/package/components/triggers/postgres/PostgresTriggerEditor.svelte.d.ts +4 -3
  191. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +13 -11
  192. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +13 -11
  193. package/package/components/triggers/sqs/SqsTriggerEditor.svelte.d.ts +4 -3
  194. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +13 -11
  195. package/package/components/triggers/triggers.svelte.js +1 -0
  196. package/package/components/triggers/utils.js +27 -6
  197. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +13 -11
  198. package/package/components/triggers.d.ts +1 -1
  199. package/package/components/useFolderDefaultPermissionedAs.svelte.d.ts +13 -0
  200. package/package/components/useFolderDefaultPermissionedAs.svelte.js +63 -0
  201. package/package/components/workspaceSettings/CreateWorkspace.svelte +16 -677
  202. package/package/components/workspaceSettings/CreateWorkspaceInner.svelte +604 -0
  203. package/package/components/workspaceSettings/CreateWorkspaceInner.svelte.d.ts +7 -0
  204. package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +27 -25
  205. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +46 -8
  206. package/package/components/workspaceSettings/DataTableSettings.svelte +27 -22
  207. package/package/components/workspaceSettings/DucklakeSettings.svelte +1 -1
  208. package/package/components/workspaceSettings/ForkDatatableSection.svelte +228 -0
  209. package/package/components/workspaceSettings/ForkDatatableSection.svelte.d.ts +28 -0
  210. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +8 -2
  211. package/package/components/workspaceSettings/RulesetEditor.svelte +27 -2
  212. package/package/components/workspaceSettings/VolumeStorageSettings.svelte +1 -1
  213. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +17 -1
  214. package/package/consts.d.ts +3 -0
  215. package/package/consts.js +10 -0
  216. package/package/gen/core/OpenAPI.js +1 -1
  217. package/package/gen/schemas.gen.d.ts +485 -19
  218. package/package/gen/schemas.gen.js +489 -20
  219. package/package/gen/services.gen.d.ts +229 -2
  220. package/package/gen/services.gen.js +463 -1
  221. package/package/gen/types.gen.d.ts +866 -29
  222. package/package/githubApp.js +5 -1
  223. package/package/hubPaths.json +1 -4
  224. package/package/infer.js +13 -1
  225. package/package/infer.svelte.js +10 -1
  226. package/package/monaco_workers/sqlTypePlugin.worker.d.ts +10 -0
  227. package/package/monaco_workers/sqlTypePlugin.worker.js +39 -0
  228. package/package/script_helpers.d.ts +8 -2
  229. package/package/script_helpers.js +14 -0
  230. package/package/stores.d.ts +4 -0
  231. package/package/stores.js +1 -0
  232. package/package/system_prompts/prompts.d.ts +4 -3
  233. package/package/system_prompts/prompts.js +270 -20
  234. package/package/templates/ci_test_bun.ts.template +19 -0
  235. package/package/templates/ci_test_python.py.template +18 -0
  236. package/package/utils_workspace_deploy.d.ts +8 -8
  237. package/package/utils_workspace_deploy.js +86 -420
  238. package/package.json +3 -3
  239. package/package/components/copilot/chat/__tests__/app/appChat.eval.test.js +0 -153
  240. package/package/components/copilot/chat/__tests__/app/appEvalComparison.d.ts +0 -21
  241. package/package/components/copilot/chat/__tests__/app/appEvalComparison.js +0 -136
  242. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.d.ts +0 -15
  243. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +0 -107
  244. package/package/components/copilot/chat/__tests__/app/appEvalRunner.d.ts +0 -50
  245. package/package/components/copilot/chat/__tests__/app/appEvalRunner.js +0 -93
  246. package/package/components/copilot/chat/__tests__/app/appFixtureLoader.d.ts +0 -29
  247. package/package/components/copilot/chat/__tests__/app/appFixtureLoader.js +0 -134
  248. package/package/components/copilot/chat/__tests__/app/appResultsWriter.d.ts +0 -30
  249. package/package/components/copilot/chat/__tests__/app/appResultsWriter.js +0 -197
  250. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.d.ts +0 -10
  251. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.js +0 -9
  252. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/meta.json +0 -4
  253. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.d.ts +0 -6
  254. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.js +0 -5
  255. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/meta.json +0 -4
  256. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.d.ts +0 -12
  257. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.js +0 -14
  258. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/meta.json +0 -4
  259. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.d.ts +0 -8
  260. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.js +0 -25
  261. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/meta.json +0 -4
  262. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.d.ts +0 -7
  263. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.js +0 -5
  264. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/meta.json +0 -4
  265. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.d.ts +0 -8
  266. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.js +0 -5
  267. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/meta.json +0 -4
  268. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.d.ts +0 -10
  269. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.tsx +0 -26
  270. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.d.ts +0 -10
  271. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.tsx +0 -79
  272. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.d.ts +0 -10
  273. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.tsx +0 -46
  274. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.d.ts +0 -10
  275. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.tsx +0 -56
  276. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.d.ts +0 -6
  277. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.tsx +0 -59
  278. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.d.ts +0 -16
  279. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.tsx +0 -119
  280. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.d.ts +0 -15
  281. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.js +0 -14
  282. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/meta.json +0 -4
  283. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.d.ts +0 -14
  284. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.js +0 -5
  285. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/meta.json +0 -4
  286. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.d.ts +0 -6
  287. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.js +0 -41
  288. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/meta.json +0 -4
  289. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.d.ts +0 -15
  290. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.js +0 -3
  291. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/meta.json +0 -4
  292. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.d.ts +0 -9
  293. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.tsx +0 -51
  294. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.d.ts +0 -8
  295. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.tsx +0 -27
  296. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.d.ts +0 -8
  297. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.tsx +0 -18
  298. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.d.ts +0 -12
  299. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.tsx +0 -81
  300. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.d.ts +0 -3
  301. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.js +0 -3
  302. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/meta.json +0 -4
  303. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.d.ts +0 -3
  304. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.js +0 -3
  305. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/meta.json +0 -4
  306. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.d.ts +0 -2
  307. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.tsx +0 -38
  308. package/package/components/copilot/chat/__tests__/app/variants/baseline.d.ts +0 -6
  309. package/package/components/copilot/chat/__tests__/app/variants/baseline.js +0 -10
  310. package/package/components/copilot/chat/__tests__/app/variants/index.d.ts +0 -3
  311. package/package/components/copilot/chat/__tests__/app/variants/index.js +0 -3
  312. package/package/components/copilot/chat/__tests__/app/variants/streamlined.d.ts +0 -6
  313. package/package/components/copilot/chat/__tests__/app/variants/streamlined.js +0 -137
  314. package/package/components/copilot/chat/__tests__/flow/expected/test1.json +0 -134
  315. package/package/components/copilot/chat/__tests__/flow/expected/test2.json +0 -183
  316. package/package/components/copilot/chat/__tests__/flow/expected/test3.json +0 -204
  317. package/package/components/copilot/chat/__tests__/flow/expected/test4.json +0 -175
  318. package/package/components/copilot/chat/__tests__/flow/expected/test5_modify_simple.json +0 -68
  319. package/package/components/copilot/chat/__tests__/flow/expected/test6_modify_medium.json +0 -142
  320. package/package/components/copilot/chat/__tests__/flow/expected/test7_modify_complex.json +0 -136
  321. package/package/components/copilot/chat/__tests__/flow/flowChat.eval.test.js +0 -294
  322. package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.d.ts +0 -17
  323. package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.js +0 -49
  324. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.d.ts +0 -12
  325. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +0 -79
  326. package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.d.ts +0 -50
  327. package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.js +0 -102
  328. package/package/components/copilot/chat/__tests__/flow/initial/test5_initial.json +0 -53
  329. package/package/components/copilot/chat/__tests__/flow/initial/test6_initial.json +0 -68
  330. package/package/components/copilot/chat/__tests__/flow/initial/test7_initial.json +0 -120
  331. package/package/components/copilot/chat/__tests__/flow/variants/baseline.d.ts +0 -6
  332. package/package/components/copilot/chat/__tests__/flow/variants/baseline.js +0 -10
  333. package/package/components/copilot/chat/__tests__/flow/variants/index.d.ts +0 -3
  334. package/package/components/copilot/chat/__tests__/flow/variants/index.js +0 -3
  335. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.d.ts +0 -15
  336. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.js +0 -388
  337. package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.d.ts +0 -45
  338. package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.js +0 -121
  339. package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.d.ts +0 -28
  340. package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.js +0 -96
  341. package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.d.ts +0 -32
  342. package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.js +0 -130
  343. package/package/components/copilot/chat/__tests__/shared/baseVariants.d.ts +0 -45
  344. package/package/components/copilot/chat/__tests__/shared/baseVariants.js +0 -57
  345. package/package/components/copilot/chat/__tests__/shared/index.d.ts +0 -10
  346. package/package/components/copilot/chat/__tests__/shared/index.js +0 -5
  347. package/package/components/copilot/chat/__tests__/shared/types.d.ts +0 -105
  348. package/package/components/copilot/chat/__tests__/shared/types.js +0 -9
  349. package/package/components/copilot/chat/flow/utils.d.ts +0 -14
  350. package/package/components/copilot/chat/flow/utils.js +0 -108
  351. package/package/components/flows/agentToolUtils.test.js +0 -55
  352. /package/package/components/copilot/chat/{__tests__/app/appChat.eval.test.d.ts → app/core.test.d.ts} +0 -0
  353. /package/package/components/copilot/chat/{__tests__/flow/flowChat.eval.test.d.ts → flow/helperUtils.test.d.ts} +0 -0
  354. /package/package/components/{flows/agentToolUtils.test.d.ts → copilot/chat/flow/utils.test.d.ts} +0 -0
@@ -0,0 +1,604 @@
1
+ <script lang="ts">import { run } from 'svelte/legacy';
2
+ import { JobService, ResourceService, SettingService, UserService, VariableService, WorkspaceService } from '../../gen';
3
+ import { validateUsername } from '../../utils';
4
+ import { logoutWithRedirect } from '../../logoutKit';
5
+ import { page } from '$app/state';
6
+ import { usersWorkspaceStore, workspaceStore } from '../../stores';
7
+ import { Button } from '../common';
8
+ import Toggle from '../Toggle.svelte';
9
+ import Tooltip from '../Tooltip.svelte';
10
+ import { onMount } from 'svelte';
11
+ import { sendUserToast } from '../../toast';
12
+ import TestAIKey from '../copilot/TestAIKey.svelte';
13
+ import { switchWorkspace } from '../../storeUtils';
14
+ import { isCloudHosted } from '../../cloud';
15
+ import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
16
+ import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
17
+ import { AI_PROVIDERS } from '../copilot/lib';
18
+ import { LoaderCircle } from 'lucide-svelte';
19
+ import PrefixedInput from '../PrefixedInput.svelte';
20
+ import TextInput from '../text_input/TextInput.svelte';
21
+ import { jobManager } from '../../services/JobManager';
22
+ import Alert from '../common/alert/Alert.svelte';
23
+ import { base } from '../../base';
24
+ import Label from '../Label.svelte';
25
+ import ForkDatatableSection from './ForkDatatableSection.svelte';
26
+ let { isFork = false, onFinish } = $props();
27
+ let id = $state('');
28
+ let name = $state('');
29
+ let username = $state('');
30
+ let errorId = $state('');
31
+ let errorUser = $state('');
32
+ let aiKey = $state('');
33
+ let codeCompletionEnabled = $state(true);
34
+ let checking = $state(false);
35
+ let forkDatatableSection = $state(undefined);
36
+ let workspaceColor = $state(undefined);
37
+ let colorEnabled = $state(false);
38
+ function generateRandomColor() {
39
+ const randomColor = '#' +
40
+ Math.floor(Math.random() * 16777215)
41
+ .toString(16)
42
+ .padStart(6, '0');
43
+ workspaceColor = randomColor;
44
+ }
45
+ async function validateName(id) {
46
+ checking = true;
47
+ let exists = await WorkspaceService.existsWorkspace({ requestBody: { id } });
48
+ if (exists) {
49
+ errorId = 'ID already exists';
50
+ }
51
+ else if (id != '' && !/^\w+(-\w+)*$/.test(id)) {
52
+ errorId = 'ID can only contain letters, numbers and dashes and must not finish by a dash';
53
+ }
54
+ else {
55
+ errorId = '';
56
+ }
57
+ checking = false;
58
+ }
59
+ const WM_FORK_PREFIX = 'wm-fork-';
60
+ let forkCreationLoading = $state(false);
61
+ let forkCreationError = $state('');
62
+ let errorMsgs = $state([]);
63
+ let failedSyncJobs = $state([]);
64
+ async function fetchFailedSyncJobs(jobs) {
65
+ let ret = [];
66
+ for (const job of jobs) {
67
+ let j = await JobService.getCompletedJob({
68
+ id: job,
69
+ workspace: $workspaceStore
70
+ });
71
+ ret.push(j);
72
+ }
73
+ return ret;
74
+ }
75
+ function isPathVersionLessThan(path, version) {
76
+ if (!path || !path.startsWith('hub/')) {
77
+ return false;
78
+ }
79
+ const parts = path.split('/');
80
+ if (parts.length < 2) {
81
+ return false;
82
+ }
83
+ const embeddedVersion = parseInt(parts[1], 10);
84
+ if (isNaN(embeddedVersion)) {
85
+ return false;
86
+ }
87
+ return embeddedVersion < version;
88
+ }
89
+ async function createOrForkWorkspace() {
90
+ const prefixed_id = `${WM_FORK_PREFIX}${id}`;
91
+ if (isFork) {
92
+ await forkWorkspace(prefixed_id);
93
+ }
94
+ else {
95
+ await createWorkspace();
96
+ }
97
+ }
98
+ async function forkWorkspace(prefixed_id) {
99
+ if ($workspaceStore) {
100
+ forkCreationLoading = true;
101
+ errorMsgs = [];
102
+ failedSyncJobs = [];
103
+ forkCreationError = '';
104
+ // Clone datatables BEFORE creating the workspace fork
105
+ if (forkDatatableSection) {
106
+ const queue = forkDatatableSection.buildCloneQueue(prefixed_id);
107
+ if (queue.length > 0) {
108
+ forkDatatableSection.startCloning(queue);
109
+ return;
110
+ }
111
+ }
112
+ await completeFork(prefixed_id);
113
+ }
114
+ else {
115
+ sendUserToast('No workspace selected, cannot fork non-existent workspace', true);
116
+ }
117
+ }
118
+ async function completeFork(prefixed_id) {
119
+ let gitSyncJobIds = await WorkspaceService.createWorkspaceForkGitBranch({
120
+ workspace: $workspaceStore,
121
+ requestBody: {
122
+ id: prefixed_id,
123
+ name,
124
+ color: colorEnabled && workspaceColor ? workspaceColor : undefined
125
+ }
126
+ });
127
+ try {
128
+ await Promise.all(gitSyncJobIds.map((jobId) => jobManager.runWithProgress(() => Promise.resolve(jobId), {
129
+ workspace: $workspaceStore,
130
+ timeout: 60000,
131
+ timeoutMessage: `Deploy fork job timed out after 60s`,
132
+ onProgress: (status) => {
133
+ if (status.status === 'failure') {
134
+ errorMsgs.push(status.error ?? 'Deploy fork job failed');
135
+ failedSyncJobs.push(jobId);
136
+ }
137
+ }
138
+ })));
139
+ }
140
+ catch (error) {
141
+ forkCreationLoading = false;
142
+ sendUserToast(`Could not fork workspace ${$workspaceStore} because branch creation failed: ${errorMsgs} - ${error}`, true);
143
+ return;
144
+ }
145
+ if (errorMsgs.length != 0) {
146
+ forkCreationError = 'Failed to create a branch for this fork on the git sync repo(s)';
147
+ forkCreationLoading = false;
148
+ sendUserToast(`Could not fork workspace ${$workspaceStore} because branch creation failed: ${errorMsgs}`, true);
149
+ return;
150
+ }
151
+ // Build forked_datatables info from completed clone jobs
152
+ const forkedDatatables = forkDatatableSection
153
+ ? forkDatatableSection.getCompletedCloneJobs().map((job) => ({
154
+ name: job.name,
155
+ new_dbname: job._newDbName
156
+ }))
157
+ : [];
158
+ try {
159
+ await WorkspaceService.createWorkspaceFork({
160
+ workspace: $workspaceStore,
161
+ requestBody: {
162
+ id: prefixed_id,
163
+ name,
164
+ color: colorEnabled && workspaceColor ? workspaceColor : undefined,
165
+ forked_datatables: forkedDatatables
166
+ }
167
+ });
168
+ }
169
+ catch (e) {
170
+ forkCreationError = `Failed to create fork '${prefixed_id}'`;
171
+ errorMsgs.push(e?.body ?? e ?? 'Unknown error');
172
+ forkCreationLoading = false;
173
+ sendUserToast(`Could not create fork '${prefixed_id}' ${e}`, true);
174
+ return;
175
+ }
176
+ forkCreationLoading = false;
177
+ sendUserToast(`Successfully forked workspace ${$workspaceStore} as: wm-fork-${id}`);
178
+ usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
179
+ switchWorkspace(prefixed_id);
180
+ onFinish?.();
181
+ }
182
+ async function createWorkspace() {
183
+ await WorkspaceService.createWorkspace({
184
+ requestBody: {
185
+ id,
186
+ name,
187
+ color: colorEnabled && workspaceColor ? workspaceColor : undefined,
188
+ username: automateUsernameCreation ? undefined : username
189
+ }
190
+ });
191
+ if (auto_invite) {
192
+ await WorkspaceService.editAutoInvite({
193
+ workspace: id,
194
+ requestBody: { operator: operatorOnly, invite_all: !isCloudHosted(), auto_add: autoAdd }
195
+ });
196
+ }
197
+ if (aiKey != '') {
198
+ let actualUsername = username;
199
+ if (automateUsernameCreation) {
200
+ const user = await UserService.whoami({
201
+ workspace: id
202
+ });
203
+ actualUsername = user.username;
204
+ }
205
+ let path = `u/${actualUsername}/${selected}_windmill_codegen`;
206
+ await VariableService.createVariable({
207
+ workspace: id,
208
+ requestBody: {
209
+ path,
210
+ value: aiKey,
211
+ is_secret: true,
212
+ description: 'Ai token'
213
+ }
214
+ });
215
+ await ResourceService.createResource({
216
+ workspace: id,
217
+ requestBody: {
218
+ path,
219
+ value: {
220
+ api_key: '$var:' + path
221
+ },
222
+ resource_type: selected
223
+ }
224
+ });
225
+ await WorkspaceService.editCopilotConfig({
226
+ workspace: id,
227
+ requestBody: aiKey
228
+ ? {
229
+ providers: {
230
+ [selected]: {
231
+ resource_path: path,
232
+ models: [AI_PROVIDERS[selected].defaultModels[0]]
233
+ }
234
+ },
235
+ default_model: {
236
+ model: AI_PROVIDERS[selected].defaultModels[0],
237
+ provider: selected
238
+ },
239
+ code_completion_model: codeCompletionEnabled
240
+ ? { model: AI_PROVIDERS[selected].defaultModels[0], provider: selected }
241
+ : undefined
242
+ }
243
+ : {}
244
+ });
245
+ usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
246
+ switchWorkspace(id);
247
+ }
248
+ sendUserToast(`Created workspace id: ${id}`);
249
+ usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
250
+ switchWorkspace(id);
251
+ onFinish?.();
252
+ }
253
+ function handleKeyUp(event) {
254
+ const key = event.key;
255
+ if (key === 'Enter') {
256
+ event.preventDefault();
257
+ createWorkspace();
258
+ }
259
+ }
260
+ async function loadWorkspaces() {
261
+ if (!$usersWorkspaceStore) {
262
+ try {
263
+ usersWorkspaceStore.set(await WorkspaceService.listUserWorkspaces());
264
+ }
265
+ catch { }
266
+ }
267
+ if (!$usersWorkspaceStore) {
268
+ const url = page.url;
269
+ console.log('logout 2');
270
+ await logoutWithRedirect(url.href.replace(url.origin, ''));
271
+ }
272
+ }
273
+ let automateUsernameCreation = $state(true);
274
+ async function getAutomateUsernameCreationSetting() {
275
+ automateUsernameCreation =
276
+ (await SettingService.getGlobal({ key: 'automate_username_creation' })) ?? true;
277
+ if (!automateUsernameCreation) {
278
+ UserService.globalWhoami().then((x) => {
279
+ let uname = '';
280
+ if (x.name) {
281
+ uname = x.name.split(' ')[0];
282
+ }
283
+ else {
284
+ uname = x.email.split('@')[0];
285
+ }
286
+ uname = uname.replace(/\./gi, '');
287
+ username = uname.toLowerCase();
288
+ });
289
+ }
290
+ }
291
+ getAutomateUsernameCreationSetting();
292
+ onMount(() => {
293
+ loadWorkspaces();
294
+ WorkspaceService.isDomainAllowed().then((x) => {
295
+ isDomainAllowed = x;
296
+ });
297
+ });
298
+ let isDomainAllowed = $state(undefined);
299
+ let auto_invite = $state(false);
300
+ let operatorOnly = $state(false);
301
+ let autoAdd = $state(true);
302
+ let selected = $state('openai');
303
+ run(() => {
304
+ id = name.toLowerCase().replace(/\s/gi, '-');
305
+ });
306
+ run(() => {
307
+ validateName(id);
308
+ });
309
+ run(() => {
310
+ errorUser = validateUsername(username);
311
+ });
312
+ run(() => {
313
+ colorEnabled && !workspaceColor && generateRandomColor();
314
+ });
315
+ let domain = $derived($usersWorkspaceStore?.email.split('@')[1]);
316
+ </script>
317
+
318
+ <div class="flex flex-col flex-1">
319
+ <div class="flex-1 relative min-h-[32rem]">
320
+ <div class="flex flex-col gap-8 absolute inset-0 overflow-y-auto">
321
+ {#if errorMsgs.length != 0}
322
+ <Alert class="p-2" title={forkCreationError} type="error">
323
+ <ul class="pl-2 pr-4 break-words pb-5">
324
+ {#each errorMsgs as errorMsg}
325
+ <li><pre class="whitespace-pre-wrap">- {errorMsg}</pre></li>
326
+ {/each}
327
+ </ul>
328
+ {#if failedSyncJobs.length != 0}
329
+ More details on the jobs that failed:
330
+ {#await fetchFailedSyncJobs(failedSyncJobs)}
331
+ <LoaderCircle class="animate-spin" />
332
+ {:then failedJobs}
333
+ <ul class="pl-2 pr-4 break-words">
334
+ {#each failedJobs as job}
335
+ <li>
336
+ -
337
+ <a
338
+ target="_blank"
339
+ class="underline"
340
+ href={`/run/${job.id}?workspace=${$workspaceStore}`}
341
+ >
342
+ {job.id}
343
+ </a>
344
+ </li>
345
+ <!-- This 28073 is the version where git sync on fork was introduced -->
346
+ {#if isPathVersionLessThan(job.script_path, 28073)}
347
+ <div class="font-bold">
348
+ This job was not running the latest version of the git sync script available
349
+ on the hub. You might be able to solve this issue by going to `Workspace
350
+ Settings` -> `Git Sync` and updating the script.
351
+ </div>
352
+ {/if}
353
+ {/each}
354
+ </ul>
355
+ {:catch error}
356
+ Tried to fetch jobs to get more information, but failed: {error}. Here are the failed
357
+ job ids:
358
+ <ul class="pl-2 pr-4 break-words">
359
+ {#each failedSyncJobs as jobId}
360
+ <li>
361
+ -
362
+ <a
363
+ target="_blank"
364
+ class="underline"
365
+ href={`/run/${jobId}?workspace=${$workspaceStore}`}
366
+ >
367
+ {jobId}
368
+ </a>
369
+ </li>
370
+ {/each}
371
+ </ul>
372
+ {/await}
373
+ {/if}
374
+ </Alert>
375
+ {/if}
376
+ <label class="flex flex-col gap-1">
377
+ {#if isFork}
378
+ <span class="text-xs font-semibold text-emphasis">Fork name</span>
379
+ <span class="text-xs text-secondary">Displayable name of the forked workspace</span>
380
+ {:else}
381
+ <span class="text-xs font-semibold text-emphasis">Workspace name</span>
382
+ <span class="text-xs text-secondary">Displayable name</span>
383
+ {/if}
384
+ <!-- svelte-ignore a11y_autofocus -->
385
+ <TextInput inputProps={{ autofocus: true }} bind:value={name} />
386
+ </label>
387
+ <label class="flex flex-col gap-1">
388
+ <span class="text-xs font-semibold text-emphasis">Workspace ID</span>
389
+ {#if isFork}
390
+ <span class="text-xs text-secondary"
391
+ >Slug to uniquely identify your fork (this will also set the branch name)</span
392
+ >
393
+ {:else}
394
+ <span class="text-xs text-secondary">Slug to uniquely identify your workspace</span>
395
+ {/if}
396
+
397
+ {#if isFork}
398
+ <PrefixedInput
399
+ prefix={WM_FORK_PREFIX}
400
+ type="text"
401
+ bind:value={id}
402
+ placeholder="example.com"
403
+ class={errorId != '' ? 'input-error' : ''}
404
+ />
405
+ {:else}
406
+ <TextInput bind:value={id} error={errorId} />
407
+ {/if}
408
+ {#if errorId}
409
+ <span class="text-red-500 text-2xs font-normal">{errorId}</span>
410
+ {/if}
411
+ </label>
412
+ <Label label="Workspace color">
413
+ <span class="text-xs text-secondary">
414
+ Color to identify the current workspace in the list of workspaces
415
+ </span>
416
+ <div class="flex items-center gap-4">
417
+ <Toggle bind:checked={colorEnabled} options={{ right: 'Enable' }} />
418
+ {#if colorEnabled}
419
+ <div class="flex items-center gap-1 grow">
420
+ <input
421
+ class="grow min-w-10"
422
+ type="color"
423
+ bind:value={workspaceColor}
424
+ disabled={!colorEnabled}
425
+ />
426
+
427
+ <TextInput
428
+ class="w-24"
429
+ bind:value={workspaceColor}
430
+ inputProps={{ disabled: !colorEnabled }}
431
+ />
432
+ <Button
433
+ on:click={generateRandomColor}
434
+ size="xs"
435
+ variant="default"
436
+ disabled={!colorEnabled}>Random</Button
437
+ >
438
+ </div>
439
+ {/if}
440
+ </div>
441
+ </Label>
442
+ {#if isFork}
443
+ <ForkDatatableSection
444
+ bind:this={forkDatatableSection}
445
+ onAllDone={() => {
446
+ completeFork(`${WM_FORK_PREFIX}${id}`)
447
+ }}
448
+ onCanceled={() => {
449
+ forkCreationLoading = false
450
+ }}
451
+ />
452
+ {/if}
453
+ {#if !automateUsernameCreation}
454
+ <Label label="Your username in that workspace">
455
+ <TextInput
456
+ bind:value={username}
457
+ inputProps={{ onkeyup: handleKeyUp }}
458
+ error={errorUser}
459
+ />
460
+ {#if errorUser}
461
+ <span class="text-red-500 text-2xs">{errorUser}</span>
462
+ {/if}
463
+ </Label>
464
+ {/if}
465
+ {#if !isFork}
466
+ <div class="block">
467
+ <div class="flex flex-col gap-1">
468
+ <label for="ai-key" class="flex flex-row gap-2">
469
+ <span class="text-xs font-semibold text-emphasis">
470
+ AI key for Windmill AI
471
+ <Tooltip>
472
+ Find out how it can help you <a
473
+ href="https://www.windmill.dev/docs/core_concepts/ai_generation"
474
+ target="_blank"
475
+ rel="noopener noreferrer">in the docs</a
476
+ >
477
+ </Tooltip>
478
+ </span>
479
+ <span class="text-2xs text-secondary">(optional but recommended)</span>
480
+ </label>
481
+
482
+ <ToggleButtonGroup bind:selected>
483
+ {#snippet children({ item })}
484
+ <ToggleButton value="openai" label="OpenAI" {item} />
485
+ <ToggleButton value="anthropic" label="Anthropic" {item} />
486
+ <ToggleButton value="mistral" label="Mistral" {item} />
487
+ <ToggleButton value="deepseek" label="DeepSeek" {item} />
488
+ {/snippet}
489
+ </ToggleButtonGroup>
490
+ <div class="flex flex-row gap-1">
491
+ <input
492
+ id="ai-key"
493
+ type="password"
494
+ autocomplete="new-password"
495
+ bind:value={aiKey}
496
+ onkeyup={handleKeyUp}
497
+ />
498
+ <TestAIKey
499
+ apiKey={aiKey}
500
+ disabled={!aiKey}
501
+ aiProvider={selected}
502
+ model={AI_PROVIDERS[selected].defaultModels[0]}
503
+ />
504
+ </div>
505
+ </div>
506
+
507
+ {#if aiKey}
508
+ <div class="flex flex-col gap-2 mt-2">
509
+ <Toggle
510
+ disabled={!aiKey}
511
+ bind:checked={codeCompletionEnabled}
512
+ options={{ right: 'Enable code completion' }}
513
+ />
514
+ </div>
515
+ {/if}
516
+ </div>
517
+ <div class="flex flex-col gap-1">
518
+ <label for="auto-invite" class="text-xs font-semibold text-emphasis"
519
+ >{isCloudHosted()
520
+ ? `Auto-${autoAdd ? 'add' : 'invite'} anyone from ${domain}`
521
+ : `Auto-${autoAdd ? 'add' : 'invite'} anyone joining the instance`}</label
522
+ >
523
+ <Toggle
524
+ id="auto-invite"
525
+ disabled={isCloudHosted() && !isDomainAllowed}
526
+ bind:checked={auto_invite}
527
+ />
528
+ {#if isCloudHosted() && isDomainAllowed == false}
529
+ <div class="text-secondary text-2xs">{domain} domain not allowed for auto-invite</div>
530
+ {/if}
531
+
532
+ {#if auto_invite}
533
+ <div class="bg-surface-tertiary p-4 rounded-md flex flex-col gap-8">
534
+ <!-- svelte-ignore a11y_label_has_associated_control -->
535
+ {#if isCloudHosted()}
536
+ <label class="flex flex-col gap-1">
537
+ <span class="text-xs font-semibold text-emphasis">Mode</span>
538
+ <span class="text-xs text-secondary font-normal"
539
+ >Whether to invite or add users directly to the workspace.</span
540
+ >
541
+ <ToggleButtonGroup
542
+ selected={autoAdd ? 'add' : 'invite'}
543
+ on:selected={async (e) => {
544
+ autoAdd = e.detail === 'add'
545
+ }}
546
+ >
547
+ {#snippet children({ item })}
548
+ <ToggleButton value="invite" label="Auto-invite" {item} />
549
+ <ToggleButton value="add" label="Auto-add" {item} />
550
+ {/snippet}
551
+ </ToggleButtonGroup>
552
+ </label>
553
+ {/if}
554
+
555
+ <label class="font-semibold flex flex-col gap-1">
556
+ <span class="text-xs font-semibold text-emphasis">Role</span>
557
+ <span class="text-xs text-secondary font-normal"
558
+ >Role of the auto-invited users</span
559
+ >
560
+ <ToggleButtonGroup
561
+ selected={operatorOnly ? 'operator' : 'developer'}
562
+ on:selected={(e) => {
563
+ operatorOnly = e.detail == 'operator'
564
+ }}
565
+ >
566
+ {#snippet children({ item })}
567
+ <ToggleButton value="operator" label="Operator" {item} />
568
+ <ToggleButton value="developer" label="Developer" {item} />
569
+ {/snippet}
570
+ </ToggleButtonGroup>
571
+ </label>
572
+ </div>
573
+ {/if}
574
+ </div>
575
+ {/if}
576
+ </div>
577
+ </div>
578
+ <div class="flex flex-wrap flex-row justify-between gap-4 pt-4">
579
+ <Button disabled={forkCreationLoading} variant="default" size="sm" href="{base}/user/workspaces"
580
+ >&leftarrow; Back to workspaces</Button
581
+ >
582
+ {#if !forkCreationLoading}
583
+ <Button
584
+ variant="accent"
585
+ disabled={checking ||
586
+ errorId != '' ||
587
+ !name ||
588
+ (!automateUsernameCreation && (errorUser != '' || !username)) ||
589
+ !id}
590
+ on:click={createOrForkWorkspace}
591
+ >
592
+ {#if isFork}
593
+ Fork workspace
594
+ {:else}
595
+ Create workspace
596
+ {/if}
597
+ </Button>
598
+ {:else}
599
+ <Button variant="accent" disabled={true}>
600
+ <LoaderCircle class="animate-spin" /> Creating branch
601
+ </Button>
602
+ {/if}
603
+ </div>
604
+ </div>
@@ -0,0 +1,7 @@
1
+ interface Props {
2
+ isFork?: boolean;
3
+ onFinish?: () => void;
4
+ }
5
+ declare const CreateWorkspaceInner: import("svelte").Component<Props, {}, "">;
6
+ type CreateWorkspaceInner = ReturnType<typeof CreateWorkspaceInner>;
7
+ export default CreateWorkspaceInner;
@@ -5,17 +5,17 @@ import Button from '../common/button/Button.svelte';
5
5
  import CustomInstanceDbWizardModal from './CustomInstanceDbWizardModal.svelte';
6
6
  import { ArrowRight, TriangleAlert } from 'lucide-svelte';
7
7
  let { value = $bindable(), customInstanceDbs, confirmationModal, wizardBottomHint, class: className, tag } = $props();
8
- let openedDbNameWizard = $state(false);
9
- let status = $derived(customInstanceDbs.current?.[value ?? '']);
8
+ let openedDbNameWizard = $state(undefined);
10
9
  let onlySelectedTags = $derived(safeSelectItems(Object.entries(customInstanceDbs.current ?? {})
11
10
  .filter(([_, db]) => !tag || db.tag === tag)
12
11
  .map(([name, _]) => name)));
13
- let currentIsAlreadyUsedElsewhere = $derived(tag && status && status.tag !== tag);
12
+ let open = $state(false);
14
13
  </script>
15
14
 
16
15
  <div class="flex relative items-center {className}">
17
16
  <Select
18
17
  class="flex-1"
18
+ bind:open
19
19
  bind:value
20
20
  onCreateItem={(i) => (value = i)}
21
21
  placeholder="Search or create..."
@@ -25,27 +25,40 @@ let currentIsAlreadyUsedElsewhere = $derived(tag && status && status.tag !== tag
25
25
  disabled={!$isCustomInstanceDbEnabled}
26
26
  >
27
27
  {#snippet endSnippet({ item })}
28
- {#if !customInstanceDbs.current?.[item.value]?.success}
29
- <div class="w-1.5 h-1.5 rounded-full bg-red-400"></div>
30
- {:else}
31
- <div class="w-1.5 h-1.5 rounded-full bg-green-400"></div>
32
- {/if}
28
+ {@render customInstanceDbWizardButton(item.value)}
33
29
  {/snippet}
34
30
  </Select>
31
+ {#if value}
32
+ {@render customInstanceDbWizardButton(value, 'absolute right-1.5')}
33
+ {/if}
34
+ </div>
35
+
36
+ <CustomInstanceDbWizardModal
37
+ {customInstanceDbs}
38
+ {confirmationModal}
39
+ {tag}
40
+ bottomHint={wizardBottomHint}
41
+ bind:opened={
42
+ () =>
43
+ openedDbNameWizard
44
+ ? { dbname: openedDbNameWizard, status: customInstanceDbs.current?.[openedDbNameWizard] }
45
+ : undefined,
46
+ (v) => !v && (openedDbNameWizard = undefined)
47
+ }
48
+ />
35
49
 
50
+ {#snippet customInstanceDbWizardButton(dbname: string, clazz: string = '')}
51
+ {@const status = customInstanceDbs.current?.[dbname]}
36
52
  <Button
37
53
  spacingSize="xs2"
38
54
  variant="default"
39
- wrapperClasses={'absolute right-1.5 h-6 bg-surface-input'}
40
- onClick={() => (openedDbNameWizard = true)}
41
- disabled={currentIsAlreadyUsedElsewhere}
55
+ wrapperClasses="bg-surface-input h-6 -my-2 {clazz}"
56
+ onClick={() => ((openedDbNameWizard = dbname), (open = false))}
42
57
  >
43
58
  {#if !status}
44
59
  <span class="text-yellow-600 dark:text-yellow-400">
45
60
  Setup <ArrowRight class="inline" size={14} />
46
61
  </span>
47
- {:else if currentIsAlreadyUsedElsewhere}
48
- <span class="text-red-400 flex gap-1">Already used as {status.tag}</span>
49
62
  {:else if !status.success}
50
63
  <span class="text-red-400 flex gap-1">
51
64
  Error <TriangleAlert class="inline" size={16} />
@@ -54,15 +67,4 @@ let currentIsAlreadyUsedElsewhere = $derived(tag && status && status.tag !== tag
54
67
  <div class="w-1.5 h-1.5 rounded-full bg-green-400"></div>
55
68
  {/if}
56
69
  </Button>
57
- </div>
58
-
59
- <CustomInstanceDbWizardModal
60
- {customInstanceDbs}
61
- {confirmationModal}
62
- {tag}
63
- bottomHint={wizardBottomHint}
64
- bind:opened={
65
- () => (openedDbNameWizard ? { dbname: value ?? '', status: status! } : undefined),
66
- (v) => !v && (openedDbNameWizard = false)
67
- }
68
- />
70
+ {/snippet}