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
@@ -7,12 +7,13 @@ import Button from '../common/button/Button.svelte';
7
7
  import { sendUserToast } from '../../toast';
8
8
  import { isCustomInstanceDbEnabled } from './utils.svelte';
9
9
  import ExploreAssetButton from '../ExploreAssetButton.svelte';
10
- import { ArrowRight, InfoIcon } from 'lucide-svelte';
10
+ import { ArrowRight, InfoIcon, Trash2 } from 'lucide-svelte';
11
11
  import { truncate } from '../../utils';
12
12
  import Tooltip from '../meltComponents/Tooltip.svelte';
13
13
  import { superadmin } from '../../stores';
14
14
  let { customInstanceDbs, confirmationModal, bottomHint, opened = $bindable(), tag } = $props();
15
15
  let customInstanceDbSetupIsRunning = $state(false);
16
+ let dropIsRunning = $state(false);
16
17
  let preventClose = false;
17
18
  </script>
18
19
 
@@ -45,13 +46,50 @@ let preventClose = false;
45
46
  {@render bottomHint()}
46
47
  </div>
47
48
  {/if}
48
- <ExploreAssetButton
49
- class="flex-1"
50
- asset={{ kind: 'resource', path: 'CUSTOM_INSTANCE_DB/' + dbname }}
51
- _resourceMetadata={{ resource_type: 'postgresql' }}
52
- disabled={!$isCustomInstanceDbEnabled || !enableManageButton}
53
- onClick={() => (opened = undefined)}
54
- />
49
+ <div class="flex gap-2">
50
+ <ExploreAssetButton
51
+ class="flex-1"
52
+ asset={{ kind: 'resource', path: 'CUSTOM_INSTANCE_DB/' + dbname }}
53
+ _resourceMetadata={{ resource_type: 'postgresql' }}
54
+ disabled={!$isCustomInstanceDbEnabled || !enableManageButton}
55
+ onClick={() => (opened = undefined)}
56
+ />
57
+ {#if $superadmin}
58
+ <Button
59
+ size="sm"
60
+ destructive
61
+ iconOnly
62
+ variant="accent"
63
+ startIcon={{ icon: Trash2 }}
64
+ loading={dropIsRunning}
65
+ onClick={async () => {
66
+ preventClose = true
67
+ let confirm = await confirmationModal.ask({
68
+ title: 'Drop database',
69
+ children: `This will permanently drop the database "${dbname}". All data will be lost. This action is irreversible.`,
70
+ confirmationText: 'Drop database'
71
+ })
72
+ preventClose = false
73
+ if (!confirm) return
74
+
75
+ try {
76
+ dropIsRunning = true
77
+ await SettingService.dropCustomInstanceDb({ name: dbname })
78
+ await customInstanceDbs.refetch()
79
+ sendUserToast(`Database "${dbname}" dropped successfully`)
80
+ opened = undefined
81
+ } catch (e) {
82
+ sendUserToast(`Failed to drop database: ${e}`, true)
83
+ console.error('Error dropping custom instance database', e)
84
+ } finally {
85
+ dropIsRunning = false
86
+ }
87
+ }}
88
+ >
89
+ Drop database
90
+ </Button>
91
+ {/if}
92
+ </div>
55
93
  </div>
56
94
  </div>
57
95
  <div class="flex-1 shrink-0 flex flex-col pl-4 gap-2">
@@ -2,7 +2,10 @@
2
2
  const s = { dataTables: [] };
3
3
  if (settings?.datatables) {
4
4
  for (const [name, rest] of Object.entries(settings.datatables)) {
5
- s.dataTables.push({ name, ...rest });
5
+ s.dataTables.push({
6
+ name,
7
+ ...rest
8
+ });
6
9
  }
7
10
  }
8
11
  return s;
@@ -77,7 +80,7 @@ function onNewDataTable() {
77
80
  }
78
81
  });
79
82
  }
80
- const customInstanceDbs = resource([], SettingService.listCustomInstanceDbs);
83
+ const customInstanceDbs = resource([() => $workspaceStore], SettingService.listCustomInstanceDbs);
81
84
  async function onSave() {
82
85
  try {
83
86
  if ($isCustomInstanceDbEnabled &&
@@ -213,27 +216,29 @@ let hasUnsavedChanges = $derived.by(() => {
213
216
  </div>
214
217
  </div>
215
218
  </Cell>
219
+
216
220
  <Cell class="w-12">
217
- {#if dirtyMap[dataTable.name]}
218
- <Popover
219
- openOnHover
220
- contentClasses="p-2 text-sm text-secondary italic"
221
- class="cursor-not-allowed"
222
- >
223
- {#snippet trigger()}
224
- <ExploreAssetButton
225
- class="h-9"
226
- asset={{ kind: 'datatable', path: dataTable.name }}
227
- disabled
228
- />
229
- {/snippet}
230
- {#snippet content()}
231
- Please save settings first
232
- {/snippet}
233
- </Popover>
234
- {:else}
235
- <ExploreAssetButton class="h-9" asset={{ kind: 'datatable', path: dataTable.name }} />
236
- {/if}
221
+ <div class="flex gap-2">
222
+ {#if dirtyMap[dataTable.name]}
223
+ <Popover
224
+ openOnHover
225
+ contentClasses="p-2 text-sm text-secondary italic"
226
+ class="cursor-not-allowed"
227
+ >
228
+ {#snippet trigger()}
229
+ <ExploreAssetButton
230
+ asset={{ kind: 'datatable', path: dataTable.name }}
231
+ disabled
232
+ />
233
+ {/snippet}
234
+ {#snippet content()}
235
+ Please save settings first
236
+ {/snippet}
237
+ </Popover>
238
+ {:else}
239
+ <ExploreAssetButton asset={{ kind: 'datatable', path: dataTable.name }} />
240
+ {/if}
241
+ </div>
237
242
  </Cell>
238
243
  <Cell class="w-12">
239
244
  <CloseButton small on:close={() => removeDataTable(dataTableIndex)} />
@@ -85,7 +85,7 @@ const ducklakeIsDirty = $derived(Object.fromEntries(ducklakeSettings.ducklakes.m
85
85
  })));
86
86
  let hasUnsavedChanges = $derived(ducklakeSavedSettings.ducklakes.length !== ducklakeSettings.ducklakes.length ||
87
87
  !Object.values(ducklakeIsDirty).every((v) => v === false));
88
- const customInstanceDbs = resource([], SettingService.listCustomInstanceDbs);
88
+ const customInstanceDbs = resource([() => $workspaceStore], SettingService.listCustomInstanceDbs);
89
89
  async function onSave() {
90
90
  try {
91
91
  if ($isCustomInstanceDbEnabled &&
@@ -0,0 +1,228 @@
1
+ <script module lang="ts">export {};
2
+ </script>
3
+
4
+ <script lang="ts">import { WorkspaceService } from '../../gen';
5
+ import { workspaceStore, userStore } from '../../stores';
6
+ import { isCloudHosted } from '../../cloud';
7
+ import { resource } from 'runed';
8
+ import Select from '../select/Select.svelte';
9
+ import Label from '../Label.svelte';
10
+ import Alert from '../common/alert/Alert.svelte';
11
+ import ConfirmationModal from '../common/confirmationModal/ConfirmationModal.svelte';
12
+ import { Check, X, Loader2 } from 'lucide-svelte';
13
+ let { onAllDone, onCanceled } = $props();
14
+ let allDatatables = resource([], async () => $workspaceStore
15
+ ? WorkspaceService.listDataTables({ workspace: $workspaceStore ?? '' })
16
+ : undefined);
17
+ let datatableBehaviors = $state({});
18
+ let cloneModalOpen = $state(false);
19
+ let currentCloneJob = $state(undefined);
20
+ let cloneQueue = $state([]);
21
+ let cloneRunning = $state(false);
22
+ export function hasDatatables() {
23
+ return (allDatatables.current?.length ?? 0) > 0;
24
+ }
25
+ export function buildCloneQueue(targetWorkspaceId) {
26
+ return (allDatatables.current ?? [])
27
+ .filter((dt) => {
28
+ const behavior = datatableBehaviors[dt.name] ?? 'keep_original';
29
+ return behavior !== 'keep_original';
30
+ })
31
+ .map((dt) => {
32
+ const behavior = datatableBehaviors[dt.name];
33
+ const isInstance = dt.resource_type === 'instance';
34
+ const newDbName = `${targetWorkspaceId.replace(/-/g, '_')}__${dt.name}`;
35
+ const steps = [
36
+ {
37
+ label: `CREATE DATABASE "${newDbName}"`,
38
+ status: 'pending'
39
+ },
40
+ {
41
+ label: `pg_dump → pg_import (${behavior === 'schema_only' ? 'schema only' : 'schema + data'})`,
42
+ status: 'pending'
43
+ }
44
+ ];
45
+ return {
46
+ name: dt.name,
47
+ resourceType: dt.resource_type,
48
+ behavior,
49
+ steps,
50
+ _newDbName: newDbName,
51
+ _isInstance: isInstance,
52
+ _sourceWorkspace: $workspaceStore,
53
+ _targetWorkspace: targetWorkspaceId,
54
+ _resourcePath: dt.resource_path
55
+ };
56
+ });
57
+ }
58
+ let completedJobs = $state([]);
59
+ export function startCloning(queue) {
60
+ completedJobs = [];
61
+ cloneQueue = queue;
62
+ currentCloneJob = cloneQueue[0];
63
+ cloneModalOpen = true;
64
+ }
65
+ export function getCompletedCloneJobs() {
66
+ return completedJobs;
67
+ }
68
+ async function executeCloneJob(job) {
69
+ cloneRunning = true;
70
+ let stepIdx = 0;
71
+ // Step 1: Create the database
72
+ job.steps[stepIdx].status = 'running';
73
+ try {
74
+ await WorkspaceService.createPgDatabase({
75
+ workspace: job._sourceWorkspace,
76
+ requestBody: {
77
+ source: `datatable://${job.name}`,
78
+ target_dbname: job._newDbName
79
+ }
80
+ });
81
+ job.steps[stepIdx].status = 'done';
82
+ }
83
+ catch (e) {
84
+ job.steps[stepIdx].status = 'error';
85
+ job.steps[stepIdx].error = e?.body ?? e?.message ?? String(e);
86
+ cloneRunning = false;
87
+ return;
88
+ }
89
+ stepIdx++;
90
+ // Step 2: Import data
91
+ job.steps[stepIdx].status = 'running';
92
+ try {
93
+ await WorkspaceService.importPgDatabase({
94
+ workspace: job._sourceWorkspace,
95
+ requestBody: {
96
+ source: `datatable://${job.name}`,
97
+ target: `datatable://${job.name}`,
98
+ target_dbname_override: job._newDbName,
99
+ fork_behavior: job.behavior
100
+ }
101
+ });
102
+ job.steps[stepIdx].status = 'done';
103
+ }
104
+ catch (e) {
105
+ job.steps[stepIdx].status = 'error';
106
+ job.steps[stepIdx].error = e?.body ?? e?.message ?? String(e);
107
+ cloneRunning = false;
108
+ return;
109
+ }
110
+ stepIdx++;
111
+ cloneRunning = false;
112
+ }
113
+ function advanceCloneQueue() {
114
+ if (currentCloneJob) {
115
+ completedJobs.push(currentCloneJob);
116
+ }
117
+ const idx = cloneQueue.indexOf(currentCloneJob);
118
+ if (idx < cloneQueue.length - 1) {
119
+ currentCloneJob = cloneQueue[idx + 1];
120
+ }
121
+ else {
122
+ cloneModalOpen = false;
123
+ currentCloneJob = undefined;
124
+ cloneQueue = [];
125
+ onAllDone?.();
126
+ }
127
+ }
128
+ </script>
129
+
130
+ {#if allDatatables.current && allDatatables.current.length > 0}
131
+ <Label label="Data table behavior">
132
+ <span class="text-xs text-secondary"> Choose how to handle each datatable when forking </span>
133
+ <div class="border rounded-md divide-y">
134
+ {#each allDatatables.current as dt}
135
+ <div class="flex items-center gap-2 justify-between px-4 py-1.5">
136
+ <div class="flex flex-col">
137
+ <span class="text-xs font-medium">{dt.name}</span>
138
+ <span class="text-2xs text-tertiary"
139
+ >{dt.resource_type === 'instance' ? 'Instance DB' : 'Resource DB'}</span
140
+ >
141
+ </div>
142
+ <Select
143
+ dropdownClass="max-w-96"
144
+ bind:value={
145
+ () => datatableBehaviors[dt.name] ?? 'keep_original',
146
+ (v) => (datatableBehaviors[dt.name] = v)
147
+ }
148
+ items={[
149
+ { value: 'keep_original', label: 'Keep original' },
150
+ { value: 'schema_only', label: 'Clone schema only' },
151
+ ...(!isCloudHosted() && $userStore?.is_admin
152
+ ? [{ value: 'schema_and_data', label: 'Clone schema and data' }]
153
+ : [])
154
+ ]}
155
+ />
156
+ </div>
157
+ {/each}
158
+ </div>
159
+ </Label>
160
+ {/if}
161
+
162
+ {#if cloneModalOpen && currentCloneJob}
163
+ <ConfirmationModal
164
+ title="Clone datatable: {currentCloneJob.name}"
165
+ confirmationText={cloneRunning ? 'Running...' : 'Start'}
166
+ open={cloneModalOpen}
167
+ loading={cloneRunning}
168
+ onConfirmed={async () => {
169
+ await executeCloneJob(currentCloneJob!)
170
+ advanceCloneQueue()
171
+ }}
172
+ onCanceled={() => {
173
+ cloneModalOpen = false
174
+ currentCloneJob = undefined
175
+ cloneQueue = []
176
+ onCanceled?.()
177
+ }}
178
+ >
179
+ {#if currentCloneJob.behavior === 'schema_and_data'}
180
+ <Alert type="error" title="Heavy operation">
181
+ This will copy the <b>entire database</b> including all data. The pg_dump output is temporarily
182
+ stored on disk and may consume significant server disk space during the operation.
183
+ </Alert>
184
+ {:else}
185
+ <Alert type="info" title="Schema only">
186
+ This will copy the database schema only. All tables will be empty. This is a lightweight
187
+ operation.
188
+ </Alert>
189
+ {/if}
190
+
191
+ {#if currentCloneJob.resourceType === 'instance'}
192
+ <p class="text-xs text-secondary mt-2">
193
+ This will run <code
194
+ >CREATE DATABASE {currentCloneJob.steps[0]?.label.match(/"([^"]+)"/)?.[1] ?? ''}</code
195
+ > on the Windmill PostgreSQL instance.
196
+ </p>
197
+ {:else}
198
+ <p class="text-xs text-secondary mt-2">
199
+ This will run <code>CREATE DATABASE</code> on the resource's PostgreSQL server.
200
+ </p>
201
+ {/if}
202
+
203
+ <div class="mt-4 flex flex-col gap-2">
204
+ {#each currentCloneJob.steps as step}
205
+ <div class="flex items-center gap-2 text-xs">
206
+ {#if step.status === 'done'}
207
+ <Check class="w-4 h-4 shrink-0 text-green-500" />
208
+ {:else if step.status === 'running'}
209
+ <Loader2 class="w-4 h-4 shrink-0 animate-spin text-blue-500" />
210
+ {:else if step.status === 'error'}
211
+ <X class="w-4 h-4 shrink-0 text-red-500" />
212
+ {:else}
213
+ <div class="w-4 h-4 shrink-0 rounded-full border border-gray-300"></div>
214
+ {/if}
215
+ <span
216
+ class:text-tertiary={step.status === 'pending'}
217
+ class:font-medium={step.status === 'running'}
218
+ >
219
+ {step.label}
220
+ </span>
221
+ </div>
222
+ {#if step.error}
223
+ <p class="text-2xs text-red-500 ml-6">{step.error}</p>
224
+ {/if}
225
+ {/each}
226
+ </div>
227
+ </ConfirmationModal>
228
+ {/if}
@@ -0,0 +1,28 @@
1
+ export type ForkStep = {
2
+ label: string;
3
+ status: 'pending' | 'running' | 'done' | 'error';
4
+ error?: string;
5
+ };
6
+ export type DatatableCloneJob = {
7
+ name: string;
8
+ resourceType: string;
9
+ behavior: 'schema_only' | 'schema_and_data';
10
+ steps: ForkStep[];
11
+ _newDbName: string;
12
+ _isInstance: boolean;
13
+ _sourceWorkspace: string;
14
+ _targetWorkspace: string;
15
+ _resourcePath: string;
16
+ };
17
+ interface Props {
18
+ onAllDone?: () => void;
19
+ onCanceled?: () => void;
20
+ }
21
+ declare const ForkDatatableSection: import("svelte").Component<Props, {
22
+ hasDatatables: () => boolean;
23
+ buildCloneQueue: (targetWorkspaceId: string) => DatatableCloneJob[];
24
+ startCloning: (queue: DatatableCloneJob[]) => void;
25
+ getCompletedCloneJobs: () => DatatableCloneJob[];
26
+ }, "">;
27
+ type ForkDatatableSection = ReturnType<typeof ForkDatatableSection>;
28
+ export default ForkDatatableSection;
@@ -6,7 +6,13 @@ import { Tabs, Tab, Button, Section } from '../common';
6
6
  import { workspaceStore } from '../../stores';
7
7
  import { twMerge } from 'tailwind-merge';
8
8
  import { slide } from 'svelte/transition';
9
- 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();
9
+ let { git_repo_resource_path = $bindable(''), include_path = $bindable(['f/**']), include_type = $bindable([
10
+ 'script',
11
+ 'flow',
12
+ 'app',
13
+ 'folder',
14
+ 'workspacedependencies'
15
+ ]), exclude_types_override = $bindable([]), isLegacyRepo = false, excludes = $bindable([]), extraIncludes = $bindable([]), isInitialSetup = false, requiresMigration = false, actions = undefined, useIndividualBranch = false } = $props();
10
16
  // Component state
11
17
  let collapsed = $state(false);
12
18
  // Determine if component should be editable or read-only
@@ -381,7 +387,7 @@ git push
381
387
  > file:</div
382
388
  >
383
389
  <pre class="text-xs bg-surface p-2 rounded mt-2 overflow-x-auto"
384
- >gitBranches:
390
+ >workspaces:
385
391
  main:
386
392
  promotionOverrides:
387
393
  # Add your promotion-specific settings here</pre
@@ -19,12 +19,14 @@ const hasRule = (ruleKind) => rule?.rules?.includes(ruleKind) ?? false;
19
19
  let name = $state(untrack(() => rule)?.name ?? '');
20
20
  let disableDirectDeployment = $state(hasRule('DisableDirectDeployment'));
21
21
  let disableFork = $state(hasRule('DisableWorkspaceForking'));
22
+ let restrictDeployToDeployers = $state(hasRule('RestrictDeployToDeployers'));
22
23
  let selectedGroups = $state(untrack(() => rule)?.bypass_groups?.map((g) => g.replace('g/', '')) ?? []);
23
24
  let selectedUsers = $state(untrack(() => rule)?.bypass_users?.map((u) => u.replace('u/', '')) ?? []);
24
25
  // Initial state for unsaved changes tracking
25
26
  let initialName = $state(untrack(() => rule)?.name ?? '');
26
27
  let initialDisableDirectDeployment = $state(hasRule('DisableDirectDeployment'));
27
28
  let initialDisableFork = $state(hasRule('DisableWorkspaceForking'));
29
+ let initialRestrictDeployToDeployers = $state(hasRule('RestrictDeployToDeployers'));
28
30
  let initialSelectedGroups = $state(untrack(() => rule)?.bypass_groups
29
31
  ? untrack(() => rule).bypass_groups.map((g) => g.replace('g/', ''))
30
32
  : []);
@@ -77,11 +79,13 @@ const hasUnsavedChanges = $derived(isCreateMode
77
79
  ? name.trim() !== '' ||
78
80
  disableDirectDeployment ||
79
81
  disableFork ||
82
+ restrictDeployToDeployers ||
80
83
  selectedGroups.length > 0 ||
81
84
  selectedUsers.length > 0
82
85
  : name !== initialName ||
83
86
  disableDirectDeployment !== initialDisableDirectDeployment ||
84
87
  disableFork !== initialDisableFork ||
88
+ restrictDeployToDeployers !== initialRestrictDeployToDeployers ||
85
89
  JSON.stringify([...selectedGroups].sort()) !==
86
90
  JSON.stringify([...initialSelectedGroups].sort()) ||
87
91
  JSON.stringify([...selectedUsers].sort()) !==
@@ -116,7 +120,10 @@ async function create() {
116
120
  name,
117
121
  rules: [
118
122
  ...(disableDirectDeployment ? ['DisableDirectDeployment'] : []),
119
- ...(disableFork ? ['DisableWorkspaceForking'] : [])
123
+ ...(disableFork ? ['DisableWorkspaceForking'] : []),
124
+ ...(restrictDeployToDeployers
125
+ ? ['RestrictDeployToDeployers']
126
+ : [])
120
127
  ],
121
128
  bypass_groups: selectedGroups,
122
129
  bypass_users: selectedUsers
@@ -140,7 +147,10 @@ async function save() {
140
147
  requestBody: {
141
148
  rules: [
142
149
  ...(disableDirectDeployment ? ['DisableDirectDeployment'] : []),
143
- ...(disableFork ? ['DisableWorkspaceForking'] : [])
150
+ ...(disableFork ? ['DisableWorkspaceForking'] : []),
151
+ ...(restrictDeployToDeployers
152
+ ? ['RestrictDeployToDeployers']
153
+ : [])
144
154
  ],
145
155
  bypass_groups: selectedGroups,
146
156
  bypass_users: selectedUsers
@@ -151,6 +161,7 @@ async function save() {
151
161
  initialName = name;
152
162
  initialDisableDirectDeployment = disableDirectDeployment;
153
163
  initialDisableFork = disableFork;
164
+ initialRestrictDeployToDeployers = restrictDeployToDeployers;
154
165
  initialSelectedGroups = clone(selectedGroups);
155
166
  initialSelectedUsers = clone(selectedUsers);
156
167
  onUpdate?.();
@@ -270,6 +281,20 @@ async function save() {
270
281
  />
271
282
  <div class="text-xs text-secondary ml-6">Users cannot create forks of this workspace.</div>
272
283
  </div>
284
+
285
+ <!-- Restrict deploy to deployers -->
286
+ <div class="flex flex-col gap-2">
287
+ <Toggle
288
+ bind:checked={restrictDeployToDeployers}
289
+ options={{
290
+ right: 'Restrict deployment to wm_deployers'
291
+ }}
292
+ />
293
+ <div class="text-xs text-secondary ml-6">
294
+ Only workspace admins and members of <code>wm_deployers</code> can deploy to this workspace.
295
+ Non-deployers can still fork, browse, and request a review.
296
+ </div>
297
+ </div>
273
298
  </div>
274
299
  </Section>
275
300
 
@@ -45,7 +45,7 @@ function goToStorageSettings() {
45
45
  <SettingsPageHeader
46
46
  title="Volume storage"
47
47
  description="Select which storage volumes should use. If disabled, scripts with volumes will fail with an error."
48
- link="https://www.windmill.dev/docs/core_concepts/persistent_storage/volumes"
48
+ link="https://www.windmill.dev/docs/core_concepts/volumes"
49
49
  />
50
50
  {#if s3ResourceSettings}
51
51
  {#if hasAvailableStorage}
@@ -4,7 +4,7 @@ import { Button, Alert } from '../common';
4
4
  import Skeleton from '../common/skeleton/Skeleton.svelte';
5
5
  import SettingsPageHeader from '../settings/SettingsPageHeader.svelte';
6
6
  import { Check, X, ExternalLink, Cog, Plug } from 'lucide-svelte';
7
- import { NextcloudIcon } from '../icons';
7
+ import { NextcloudIcon, GithubIcon } from '../icons';
8
8
  import GoogleIcon from '../icons/GoogleIcon.svelte';
9
9
  import { WorkspaceIntegrationService } from '../../gen';
10
10
  import ClipboardPanel from '../details/ClipboardPanel.svelte';
@@ -43,6 +43,22 @@ const supportedServices = {
43
43
  'Enable the <a href="https://console.cloud.google.com/apis/library/drive.googleapis.com" target="_blank" rel="noopener" class="underline">Google Drive API</a> and <a href="https://console.cloud.google.com/apis/library/calendar-json.googleapis.com" target="_blank" rel="noopener" class="underline">Google Calendar API</a> in your project',
44
44
  'Enter the client credentials below'
45
45
  ]
46
+ },
47
+ github: {
48
+ name: 'github',
49
+ displayName: 'GitHub',
50
+ description: 'Connect to GitHub for repository webhook triggers',
51
+ icon: GithubIcon,
52
+ docsUrl: 'https://www.windmill.dev/docs/core_concepts/native_triggers#github-triggers',
53
+ requiresBaseUrl: false,
54
+ clientIdPlaceholder: 'GitHub OAuth App Client ID',
55
+ clientSecretPlaceholder: 'GitHub OAuth App Client Secret',
56
+ setupInstructions: [
57
+ 'Go to <a href="https://github.com/settings/developers" target="_blank" rel="noopener" class="underline">GitHub Developer Settings</a>',
58
+ 'Create a new OAuth App (not a GitHub App)',
59
+ 'Set the "Authorization callback URL" to the redirect URI shown below',
60
+ 'Enter the Client ID and Client Secret below'
61
+ ]
46
62
  }
47
63
  };
48
64
  let integrations = $state([]);
@@ -22,6 +22,7 @@ export declare const WORKER_S3_BUCKET_SYNC_SETTING = "worker_s3_bucket_sync";
22
22
  export declare const CUSTOM_TAGS_SETTING = "custom_tags";
23
23
  export declare const DEFAULT_TAGS_PER_WORKSPACE_SETTING = "default_tags_per_workspace";
24
24
  export declare const DEFAULT_TAGS_WORKSPACES_SETTING = "default_tags_workspaces";
25
+ export declare const FORK_WORKSPACE_TAG_APPEND_FORK_SUFFIX_SETTING = "fork_workspace_tag_append_fork_suffix";
25
26
  export declare const PREVIEW_TAGS_OVERRIDE_SETTING = "preview_tags_override";
26
27
  export declare const WORKSPACE_SLACK_BOT_TOKEN_PATH = "f/slack_bot/bot_token";
27
28
  export declare const POSTGRES_TYPES: string[];
@@ -31,4 +32,6 @@ export declare const BIGQUERY_TYPES: string[];
31
32
  export declare const SNOWFLAKE_TYPES: string[];
32
33
  export declare const MSSQL_TYPES: string[];
33
34
  export declare const DUCKDB_TYPES: string[];
35
+ /** Types that are only valid for new columns (CREATE TABLE / ADD COLUMN), not for altering existing ones. */
36
+ export declare const NEW_COLUMN_ONLY_TYPES: string[];
34
37
  export declare const DB_TYPES: Record<DbType, string[]>;
package/package/consts.js CHANGED
@@ -23,6 +23,7 @@ export const WORKER_S3_BUCKET_SYNC_SETTING = 'worker_s3_bucket_sync';
23
23
  export const CUSTOM_TAGS_SETTING = 'custom_tags';
24
24
  export const DEFAULT_TAGS_PER_WORKSPACE_SETTING = 'default_tags_per_workspace';
25
25
  export const DEFAULT_TAGS_WORKSPACES_SETTING = 'default_tags_workspaces';
26
+ export const FORK_WORKSPACE_TAG_APPEND_FORK_SUFFIX_SETTING = 'fork_workspace_tag_append_fork_suffix';
26
27
  export const PREVIEW_TAGS_OVERRIDE_SETTING = 'preview_tags_override';
27
28
  export const WORKSPACE_SLACK_BOT_TOKEN_PATH = 'f/slack_bot/bot_token';
28
29
  export const POSTGRES_TYPES = [
@@ -231,6 +232,15 @@ export const DUCKDB_TYPES = [
231
232
  'TEXT',
232
233
  'STRING'
233
234
  ];
235
+ /** Types that are only valid for new columns (CREATE TABLE / ADD COLUMN), not for altering existing ones. */
236
+ export const NEW_COLUMN_ONLY_TYPES = [
237
+ 'SMALLSERIAL',
238
+ 'SMALLSERIAL[]',
239
+ 'SERIAL',
240
+ 'SERIAL[]',
241
+ 'BIGSERIAL',
242
+ 'BIGSERIAL[]'
243
+ ];
234
244
  export const DB_TYPES = {
235
245
  bigquery: BIGQUERY_TYPES,
236
246
  ms_sql_server: MSSQL_TYPES,
@@ -21,7 +21,7 @@ export const OpenAPI = {
21
21
  PASSWORD: undefined,
22
22
  TOKEN: undefined,
23
23
  USERNAME: undefined,
24
- VERSION: '1.677.0',
24
+ VERSION: '1.687.0',
25
25
  WITH_CREDENTIALS: false,
26
26
  interceptors: {
27
27
  request: new Interceptors(),