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
@@ -132,12 +132,13 @@ export async function saveSettings() {
132
132
  return false;
133
133
  });
134
134
  let shouldReloadPage = false;
135
+ let willRestart = false;
135
136
  if ($values) {
136
137
  // Trim license key before saving
137
138
  if ($values['license_key'] && typeof $values['license_key'] === 'string') {
138
139
  $values['license_key'] = $values['license_key'].trim();
139
140
  }
140
- // Check which settings require a page reload
141
+ // Check which settings require a page reload or server restart
141
142
  const allSettings = [...Object.values(settings), scimSamlSetting].flat();
142
143
  let licenseKeySet = false;
143
144
  for (const s of allSettings) {
@@ -148,6 +149,9 @@ export async function saveSettings() {
148
149
  if (s.requiresReloadOnChange) {
149
150
  shouldReloadPage = true;
150
151
  }
152
+ if (s.triggersRestart) {
153
+ willRestart = true;
154
+ }
151
155
  }
152
156
  }
153
157
  // Build the full global_settings object for the bulk PUT
@@ -181,6 +185,10 @@ export async function saveSettings() {
181
185
  await sleep(1000);
182
186
  window.location.reload();
183
187
  }
188
+ else if (willRestart) {
189
+ sendUserToast('Settings updated. Servers are restarting and changes may take up to a minute to fully propagate.', false, [], undefined, 8000);
190
+ dispatch('saved');
191
+ }
184
192
  else {
185
193
  sendUserToast('Settings updated');
186
194
  dispatch('saved');
@@ -437,6 +445,7 @@ export async function saveCategorySettings(category) {
437
445
  $values['license_key'] = $values['license_key'].trim();
438
446
  }
439
447
  let shouldReloadPage = false;
448
+ let willRestart = false;
440
449
  const categorySettings = getSettingsForCategory(category);
441
450
  let licenseKeySet = false;
442
451
  await Promise.all(categorySettings
@@ -452,6 +461,8 @@ export async function saveCategorySettings(category) {
452
461
  licenseKeySet = true;
453
462
  if (x.requiresReloadOnChange)
454
463
  shouldReloadPage = true;
464
+ if (x.triggersRestart)
465
+ willRestart = true;
455
466
  let value = $values?.[x.key];
456
467
  if (x.fieldType === 'codearea' && typeof value === 'string' && value.trim() === '') {
457
468
  value = undefined;
@@ -505,6 +516,10 @@ export async function saveCategorySettings(category) {
505
516
  await sleep(1000);
506
517
  window.location.reload();
507
518
  }
519
+ else if (willRestart) {
520
+ sendUserToast('Settings updated. Servers are restarting and changes may take up to a minute to fully propagate.', false, [], undefined, 8000);
521
+ dispatch('saved');
522
+ }
508
523
  else {
509
524
  sendUserToast('Settings updated');
510
525
  dispatch('saved');
@@ -525,8 +540,12 @@ const sensitiveKeys = new Set([
525
540
  'jwt_secret',
526
541
  'workspace_registries'
527
542
  ]);
528
- // Settings that should never appear in YAML export/import
529
- const excludedKeys = new Set([]);
543
+ // Settings that should never appear in YAML export/import.
544
+ // `worker_configs` is a legacy ghost key: worker configs live in the `config`
545
+ // table (managed from /workers), not in `global_settings`. Older DBs may
546
+ // still carry a stale `global_settings.worker_configs` row; filter it here
547
+ // so it never round-trips through this editor.
548
+ const excludedKeys = new Set(['worker_configs']);
530
549
  // Nested fields inside object-valued settings that contain secrets.
531
550
  // Each entry maps a top-level key to its sensitive sub-field names.
532
551
  const nestedSensitiveFields = {
@@ -68,6 +68,7 @@ let showPassword = $state(false);
68
68
  let logins = $state(undefined);
69
69
  let saml = $state(undefined);
70
70
  let smtpConfigured = $state(undefined);
71
+ let disablePasswordLogin = $state(false);
71
72
  async function login() {
72
73
  if (!email || !password) {
73
74
  sendUserToast('Please fill in both email and password', true);
@@ -155,21 +156,32 @@ async function redirectUser() {
155
156
  }
156
157
  }
157
158
  async function loadLogins() {
158
- try {
159
- const allLogins = await OauthService.listOauthLogins();
160
- logins = allLogins.oauth.map((login) => ({
159
+ const [loginsResult, disabledResult] = await Promise.allSettled([
160
+ OauthService.listOauthLogins(),
161
+ UserService.isPasswordLoginDisabled()
162
+ ]);
163
+ if (disabledResult.status === 'fulfilled') {
164
+ disablePasswordLogin = disabledResult.value ?? false;
165
+ }
166
+ else {
167
+ disablePasswordLogin = false;
168
+ console.error('Could not load password login setting', disabledResult.reason);
169
+ }
170
+ if (loginsResult.status === 'fulfilled') {
171
+ logins = loginsResult.value.oauth.map((login) => ({
161
172
  type: login.type,
162
173
  displayName: login.display_name || login.type
163
174
  }));
164
- saml = allLogins.saml;
165
- showPassword = (logins.length == 0 && !saml) || (email != undefined && email.length > 0);
175
+ saml = loginsResult.value.saml;
166
176
  }
167
- catch (e) {
177
+ else {
168
178
  logins = [];
169
179
  saml = undefined;
170
- showPassword = true;
171
- console.error('Could not load logins', e);
180
+ console.error('Could not load logins', loginsResult.reason);
172
181
  }
182
+ showPassword =
183
+ !disablePasswordLogin &&
184
+ ((logins?.length === 0 && !saml) || (email != undefined && email.length > 0));
173
185
  }
174
186
  loadLogins();
175
187
  $effect(() => {
@@ -323,7 +335,7 @@ $effect(() => {
323
335
  </Button>
324
336
  {/if}
325
337
  </div>
326
- {#if saml || (logins && logins.length > 0)}
338
+ {#if !disablePasswordLogin && (saml || (logins && logins.length > 0))}
327
339
  <div class={classNames('center-center', logins && logins.length > 0 ? 'mt-6' : '')}>
328
340
  <Button
329
341
  size="xs"
@@ -337,7 +349,7 @@ $effect(() => {
337
349
  </div>
338
350
  {/if}
339
351
 
340
- {#if showPassword}
352
+ {#if showPassword && !disablePasswordLogin}
341
353
  <div>
342
354
  {#if firstTime}
343
355
  <p class="text-xs text-center w-full pb-4 text-secondary">
@@ -85,7 +85,8 @@ function jobDone(testJob) {
85
85
  ...flowStateStore.val[mod.id],
86
86
  previewResult: testJob.result,
87
87
  previewSuccess: testJob.success,
88
- previewJobId: testJob.id
88
+ previewJobId: testJob.id,
89
+ previewLogs: testJob['logs']
89
90
  };
90
91
  }
91
92
  stepHistoryLoader?.resetInitial(mod.id);
@@ -6,5 +6,5 @@ import { Badge } from './common';
6
6
  {#snippet text()}
7
7
  Library script (no exported main function)
8
8
  {/snippet}
9
- <Badge small color="yellow" baseClass="border border-indigo-200">Library</Badge>
9
+ <Badge small color="yellow" baseClass="border">Library</Badge>
10
10
  </Popover>
@@ -0,0 +1,56 @@
1
+ <script lang="ts">import { ChevronDown, ChevronRight } from 'lucide-svelte';
2
+ import { flattenPaths, itemHref, kindLabel } from './offboarding-utils';
3
+ let { title, paths, variant = 'default', description, headerExtra } = $props();
4
+ let expanded = $state(false);
5
+ let isWarning = $derived(variant === 'warning');
6
+ </script>
7
+
8
+ <div
9
+ class={isWarning
10
+ ? 'bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-700/40 rounded-md p-3'
11
+ : 'bg-surface-secondary rounded-md p-3'}
12
+ >
13
+ <div class="flex items-center justify-between gap-2">
14
+ <button class="flex items-center gap-1 text-left" onclick={() => (expanded = !expanded)}>
15
+ {#if expanded}<ChevronDown size={14} />{:else}<ChevronRight size={14} />{/if}
16
+ <span
17
+ class={isWarning
18
+ ? 'text-xs font-medium text-yellow-800 dark:text-yellow-100/90'
19
+ : 'text-xs font-medium text-primary'}>{title}</span
20
+ >
21
+ </button>
22
+ {#if headerExtra}
23
+ {@render headerExtra()}
24
+ {/if}
25
+ </div>
26
+ {#if description}
27
+ <p
28
+ class="{isWarning
29
+ ? 'text-yellow-700 dark:text-yellow-100/70'
30
+ : 'text-tertiary'} text-xs mt-1 ml-5"
31
+ >
32
+ {description}
33
+ </p>
34
+ {/if}
35
+ {#if expanded}
36
+ <ul
37
+ class="mt-1.5 ml-5 text-xs {isWarning
38
+ ? 'text-yellow-800 dark:text-yellow-100/90'
39
+ : 'text-secondary'} max-h-40 overflow-y-auto flex flex-col gap-0.5"
40
+ >
41
+ {#each flattenPaths(paths) as { kind, path }}
42
+ <li class="flex gap-1.5"
43
+ ><span
44
+ class="{isWarning
45
+ ? 'text-yellow-600 dark:text-yellow-300'
46
+ : 'text-tertiary'} w-24 shrink-0">{kindLabel(kind)}</span
47
+ >{#if itemHref(kind, path)}<a
48
+ href={itemHref(kind, path)}
49
+ target="_blank"
50
+ class="truncate hover:underline text-blue-500 dark:text-blue-400">{path}</a
51
+ >{:else}<span class="truncate">{path}</span>{/if}</li
52
+ >
53
+ {/each}
54
+ </ul>
55
+ {/if}
56
+ </div>
@@ -0,0 +1,12 @@
1
+ import type { OffboardAffectedPaths } from '../gen';
2
+ import type { Snippet } from 'svelte';
3
+ type Props = {
4
+ title: string;
5
+ paths: OffboardAffectedPaths;
6
+ variant?: 'default' | 'warning';
7
+ description?: string;
8
+ headerExtra?: Snippet;
9
+ };
10
+ declare const OffboardItemsBox: import("svelte").Component<Props, {}, "">;
11
+ type OffboardItemsBox = ReturnType<typeof OffboardItemsBox>;
12
+ export default OffboardItemsBox;
@@ -0,0 +1,47 @@
1
+ <script lang="ts">import Select from './select/Select.svelte';
2
+ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
3
+ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
4
+ let { username, targetKind = $bindable(), selectedUser = $bindable(), selectedFolder = $bindable(), selectedOperator = $bindable(), users, folders, showTargetSelector = true, size = 'md' } = $props();
5
+ $effect(() => {
6
+ if (targetKind === 'user' && selectedUser && !selectedOperator) {
7
+ selectedOperator = selectedUser;
8
+ }
9
+ });
10
+ </script>
11
+
12
+ {#if showTargetSelector}
13
+ <div class={size === 'sm' ? 'mb-2' : ''}>
14
+ <span
15
+ class={size === 'sm'
16
+ ? 'text-xs font-medium text-secondary block mb-1'
17
+ : 'text-sm font-medium text-primary block mb-1.5'}>Move u/{username}/* items to</span
18
+ >
19
+ <ToggleButtonGroup
20
+ selected={targetKind}
21
+ onSelected={(value) => {
22
+ targetKind = value
23
+ }}
24
+ class={size === 'sm' ? 'mb-1.5' : 'mb-2'}
25
+ >
26
+ {#snippet children({ item })}
27
+ <ToggleButton value="user" label="User" small {item} />
28
+ <ToggleButton value="folder" label="Folder" small {item} />
29
+ {/snippet}
30
+ </ToggleButtonGroup>
31
+ {#if targetKind === 'user'}
32
+ <Select items={users} bind:value={selectedUser} placeholder="Select a user..." {size} />
33
+ {:else}
34
+ <Select items={folders} bind:value={selectedFolder} placeholder="Select a folder..." {size} />
35
+ {/if}
36
+ </div>
37
+ {/if}
38
+
39
+ <div>
40
+ <span
41
+ class={size === 'sm'
42
+ ? 'text-xs font-medium text-secondary block mb-0.5'
43
+ : 'text-sm font-medium text-primary block mb-1.5'}
44
+ >Update triggers/runnables permissions to</span
45
+ >
46
+ <Select items={users} bind:value={selectedOperator} placeholder="Select a user..." {size} />
47
+ </div>
@@ -0,0 +1,20 @@
1
+ type Props = {
2
+ username: string;
3
+ targetKind: 'user' | 'folder';
4
+ selectedUser: string | undefined;
5
+ selectedFolder: string | undefined;
6
+ selectedOperator: string | undefined;
7
+ users: Array<{
8
+ label: string;
9
+ value: string;
10
+ }>;
11
+ folders: Array<{
12
+ label: string;
13
+ value: string;
14
+ }>;
15
+ showTargetSelector?: boolean;
16
+ size?: 'sm' | 'md';
17
+ };
18
+ declare const OffboardReassignControls: import("svelte").Component<Props, {}, "targetKind" | "selectedUser" | "selectedFolder" | "selectedOperator">;
19
+ type OffboardReassignControls = ReturnType<typeof OffboardReassignControls>;
20
+ export default OffboardReassignControls;
@@ -0,0 +1,110 @@
1
+ <script lang="ts">import { Alert, Button } from './common';
2
+ import { ChevronDown, ChevronRight, Download } from 'lucide-svelte';
3
+ import OffboardItemsBox from './OffboardItemsBox.svelte';
4
+ import OffboardReassignControls from './OffboardReassignControls.svelte';
5
+ import { countPaths, pl, downloadCsv, flattenPaths } from './offboarding-utils';
6
+ let { preview, username, deleteUser = true, targetKind = $bindable(), selectedUser = $bindable(), selectedFolder = $bindable(), selectedOperator = $bindable(), users, folders, size = 'md', csvFilename = `offboard-${username}.csv`, instanceLevel = false } = $props();
7
+ let ownedCount = $derived(countPaths(preview.owned));
8
+ let onBehalfCount = $derived(countPaths(preview.executing_on_behalf));
9
+ let referencingCount = $derived(countPaths(preview.referencing));
10
+ function downloadAffectedCsv() {
11
+ if (!preview.referencing)
12
+ return;
13
+ const rows = [['type', 'path']];
14
+ for (const { kind, path } of flattenPaths(preview.referencing)) {
15
+ rows.push([kind, path]);
16
+ }
17
+ downloadCsv(rows, csvFilename);
18
+ }
19
+ let tokensExpanded = $state(false);
20
+ </script>
21
+
22
+ <div class="flex flex-col gap-2">
23
+ {#if ownedCount > 0}
24
+ <OffboardItemsBox title="u/{username}/* items ({ownedCount})" paths={preview.owned} />
25
+ {/if}
26
+ {#if onBehalfCount > 0}
27
+ <OffboardItemsBox
28
+ title="Permissioned as u/{username} ({onBehalfCount})"
29
+ paths={preview.executing_on_behalf}
30
+ />
31
+ {/if}
32
+ {#if deleteUser && (!instanceLevel || (preview.tokens?.length ?? 0) > 0)}
33
+ <div
34
+ class="bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-700/40 rounded-md p-3"
35
+ >
36
+ {#if (preview.tokens?.length ?? 0) > 0}
37
+ <button
38
+ class="flex items-center gap-1 w-full text-left"
39
+ onclick={() => (tokensExpanded = !tokensExpanded)}
40
+ >
41
+ {#if tokensExpanded}<ChevronDown size={14} />{:else}<ChevronRight size={14} />{/if}
42
+ <span class="text-xs font-medium text-yellow-800 dark:text-yellow-100/90"
43
+ >Tokens ({preview.tokens?.length})</span
44
+ >
45
+ </button>
46
+ <p class="text-xs text-yellow-700 dark:text-yellow-100/70 mt-1 ml-5">
47
+ All workspace tokens for this user will be deleted. This may break webhooks and HTTP
48
+ triggers using these tokens.
49
+ </p>
50
+ {:else}
51
+ <p class="text-xs font-medium text-yellow-800 dark:text-yellow-100/90">Tokens</p>
52
+ <p class="text-xs text-yellow-700 dark:text-yellow-100/70 mt-1">
53
+ All workspace tokens for this user will be deleted. This may break webhooks and HTTP
54
+ triggers using these tokens.
55
+ </p>
56
+ {/if}
57
+ {#if tokensExpanded && (preview.tokens?.length ?? 0) > 0}
58
+ <div
59
+ class="flex flex-col gap-0.5 text-xs text-yellow-800 dark:text-yellow-100/90 mt-1.5 ml-5"
60
+ >
61
+ {#each preview.tokens ?? [] as token}
62
+ <span>{token.label || '(no label)'}: {token.scopes?.join(', ') || '(no scopes)'}</span>
63
+ {/each}
64
+ </div>
65
+ {/if}
66
+ </div>
67
+ {/if}
68
+ {#if referencingCount > 0}
69
+ <OffboardItemsBox
70
+ title="Referencing items ({referencingCount})"
71
+ paths={preview.referencing}
72
+ variant="warning"
73
+ description="These items reference u/{username}/* paths and may break after reassignment. Check them and update manually."
74
+ >
75
+ {#snippet headerExtra()}
76
+ <Button
77
+ variant="subtle"
78
+ size="xs2"
79
+ startIcon={{ icon: Download }}
80
+ onclick={downloadAffectedCsv}>CSV</Button
81
+ >
82
+ {/snippet}
83
+ </OffboardItemsBox>
84
+ {/if}
85
+ </div>
86
+
87
+ {#if preview.http_triggers > 0 || preview.email_triggers > 0}
88
+ <Alert type="warning" title="Webhook and email trigger URLs will change">
89
+ <p class="text-xs">
90
+ {#if preview.http_triggers > 0}{pl(preview.http_triggers, 'HTTP trigger')} will have new webhook
91
+ URLs.
92
+ {/if}
93
+ {#if preview.email_triggers > 0}{pl(preview.email_triggers, 'email trigger')} will have new addresses.
94
+ {/if}
95
+ Update any external integrations that reference these endpoints.
96
+ </p>
97
+ </Alert>
98
+ {/if}
99
+
100
+ <OffboardReassignControls
101
+ {username}
102
+ bind:targetKind
103
+ bind:selectedUser
104
+ bind:selectedFolder
105
+ bind:selectedOperator
106
+ {users}
107
+ {folders}
108
+ showTargetSelector={ownedCount > 0 || onBehalfCount > 0}
109
+ {size}
110
+ />
@@ -0,0 +1,24 @@
1
+ import type { OffboardPreview } from '../gen/types.gen';
2
+ type Props = {
3
+ preview: OffboardPreview;
4
+ username: string;
5
+ deleteUser?: boolean;
6
+ targetKind: 'user' | 'folder';
7
+ selectedUser: string | undefined;
8
+ selectedFolder: string | undefined;
9
+ selectedOperator: string | undefined;
10
+ users: Array<{
11
+ label: string;
12
+ value: string;
13
+ }>;
14
+ folders: Array<{
15
+ label: string;
16
+ value: string;
17
+ }>;
18
+ size?: 'sm' | 'md';
19
+ csvFilename?: string;
20
+ instanceLevel?: boolean;
21
+ };
22
+ declare const OffboardWorkspaceSection: import("svelte").Component<Props, {}, "targetKind" | "selectedUser" | "selectedFolder" | "selectedOperator">;
23
+ type OffboardWorkspaceSection = ReturnType<typeof OffboardWorkspaceSection>;
24
+ export default OffboardWorkspaceSection;
@@ -19,7 +19,7 @@ import Modal from './common/modal/Modal.svelte';
19
19
  import { userStore } from '../stores';
20
20
  import { UserService } from '../gen';
21
21
  import TextInput from './text_input/TextInput.svelte';
22
- let { targetWorkspace, targetValue, selected, onSelect, kind, canPreserve, customValue, isDeployment = true } = $props();
22
+ let { targetWorkspace, targetValue, selected, onSelect, kind, canPreserve, customValue, isDeployment = true, folderDefault = undefined } = $props();
23
23
  const isTrigger = $derived(kind === 'trigger');
24
24
  let label = $derived(isTrigger
25
25
  ? 'Set the user this will be permissioned as:'
@@ -62,12 +62,22 @@ let filteredUsers = $derived(searchQuery
62
62
  (u.name?.toLowerCase()?.includes(q) ?? false));
63
63
  })
64
64
  : activeUsers);
65
- // Preselect "target" when available and user has permission to preserve
65
+ // Preselect "target" when available and user has permission to preserve.
66
+ // When no target is set but a folder default is, preselect that as a custom value.
67
+ // We track `users.length` so the effect re-runs once the async user list loads.
66
68
  $effect(() => {
67
- if (selected === undefined && targetValue && canPreserve) {
69
+ if (selected !== undefined || !canPreserve)
70
+ return;
71
+ if (targetValue) {
68
72
  onSelect('target');
69
73
  }
74
+ else if (folderDefault && users.length > 0) {
75
+ const username = folderDefault.startsWith('u/') ? folderDefault.slice(2) : folderDefault;
76
+ const email = users.find((u) => u.username === username)?.email ?? folderDefault;
77
+ onSelect('custom', { email, permissionedAs: folderDefault });
78
+ }
70
79
  });
80
+ const isFolderDefaultSelected = $derived(selected === 'custom' && folderDefault !== undefined && customValue === folderDefault);
71
81
  function openModal() {
72
82
  loadUsers();
73
83
  searchQuery = '';
@@ -95,6 +105,14 @@ let selectedDisplayName = $derived.by(() => {
95
105
  {#if selectedDisplayName}
96
106
  <span class="text-xs truncate max-w-24">{selectedDisplayName}</span>
97
107
  {/if}
108
+ {#if isFolderDefaultSelected}
109
+ <span
110
+ class="text-[10px] px-1 py-0.5 rounded bg-blue-50 dark:bg-blue-950/50 text-blue-700 dark:text-blue-300 border border-blue-200 dark:border-blue-900"
111
+ title="From this folder's default_permissioned_as rule"
112
+ >
113
+ folder default
114
+ </span>
115
+ {/if}
98
116
  </span>
99
117
  {/snippet}
100
118
  {#snippet content({ close: closePopover })}
@@ -25,6 +25,13 @@ interface Props {
25
25
  customValue?: string | undefined;
26
26
  /** When false, labels say "current" instead of "target" and modal text refers to "this workspace" */
27
27
  isDeployment?: boolean;
28
+ /**
29
+ * Folder default permissioned_as for this item path — resolved by the parent via
30
+ * `useFolderDefaultPermissionedAs`. When set and no explicit choice has been made,
31
+ * the selector preselects `'custom'` with this value and shows a "folder default"
32
+ * badge so the user sees where the value came from.
33
+ */
34
+ folderDefault?: string | undefined;
28
35
  }
29
36
  declare const OnBehalfOfSelector: import("svelte").Component<Props, {}, "">;
30
37
  type OnBehalfOfSelector = ReturnType<typeof OnBehalfOfSelector>;
@@ -7,13 +7,12 @@ import MultiSelect from './select/MultiSelect.svelte';
7
7
  import { Plus, Edit3, Save, X, Trash, ExternalLink } from 'lucide-svelte';
8
8
  import { sendUserToast } from '../toast';
9
9
  import { twMerge } from 'tailwind-merge';
10
- import { ConfigService } from '../gen';
10
+ import { ConfigService, SettingService } from '../gen';
11
11
  import Tooltip from './Tooltip.svelte';
12
12
  import Badge from './common/badge/Badge.svelte';
13
13
  import { enterpriseLicense } from '../stores';
14
14
  let queueAlertConfig = $state([]);
15
15
  let availableTags = $state([]);
16
- let configName = 'alert__job_queue_waiting';
17
16
  let editingRowIndex = $state(-1);
18
17
  let editForm = $state({
19
18
  tags_to_monitor: [],
@@ -37,7 +36,7 @@ onMount(async () => {
37
36
  });
38
37
  async function fetchConfig() {
39
38
  try {
40
- const response = await ConfigService.getConfig({ name: configName });
39
+ const response = await SettingService.getGlobal({ key: 'alert_job_queue_waiting' });
41
40
  queueAlertConfig = response?.alerts || [];
42
41
  expandedTagRows = [];
43
42
  }
@@ -47,11 +46,12 @@ async function fetchConfig() {
47
46
  }
48
47
  async function fetchWorkerTags() {
49
48
  try {
50
- const response = await ConfigService.listConfigs();
49
+ const response = await ConfigService.listWorkerGroups();
51
50
  const workerTagsSet = new Set();
52
- response.forEach((config) => {
53
- if (config.name.startsWith('worker__') && Array.isArray(config.config?.worker_tags)) {
54
- config?.config?.worker_tags.forEach((tag) => workerTagsSet.add(tag));
51
+ response.forEach((wg) => {
52
+ const config = wg.config;
53
+ if (Array.isArray(config?.worker_tags)) {
54
+ config.worker_tags.forEach((tag) => workerTagsSet.add(tag));
55
55
  }
56
56
  });
57
57
  return Array.from(workerTagsSet);
@@ -163,9 +163,9 @@ async function addNewAlert() {
163
163
  }
164
164
  }
165
165
  async function saveQueueAlertConfig() {
166
- await ConfigService.updateConfig({
167
- name: configName,
168
- requestBody: { alerts: queueAlertConfig }
166
+ await SettingService.setGlobal({
167
+ key: 'alert_job_queue_waiting',
168
+ requestBody: { value: { alerts: queueAlertConfig } }
169
169
  });
170
170
  }
171
171
  function safeSelectItems(items) {
@@ -70,9 +70,9 @@ async function loadResources(resourceType) {
70
70
  }));
71
71
  if (datatableAsPgResource && resourceType === 'postgresql') {
72
72
  try {
73
- const datatables = await WorkspaceService.listDataTables({
73
+ const datatables = (await WorkspaceService.listDataTables({
74
74
  workspace: effectiveWorkspace
75
- });
75
+ })).map((d) => d.name);
76
76
  for (const dt of datatables) {
77
77
  nc.push({
78
78
  value: `datatable://${dt}`,