windmill-components 1.623.2 → 1.642.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 (599) hide show
  1. package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +2 -0
  2. package/dist/sharedUtils/base.d.ts +1 -0
  3. package/dist/sharedUtils/cloud.d.ts +1 -0
  4. package/dist/sharedUtils/common.d.ts +111 -0
  5. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +5 -0
  6. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +5 -0
  7. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
  8. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +13 -0
  9. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +11 -0
  10. package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +95 -0
  11. package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +6 -0
  12. package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +7 -0
  13. package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +33 -0
  14. package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +10 -0
  15. package/dist/sharedUtils/components/apps/editor/component/components.d.ts +5371 -0
  16. package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +3 -0
  17. package/dist/sharedUtils/components/apps/editor/component/index.d.ts +3 -0
  18. package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +7 -0
  19. package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +3 -0
  20. package/dist/sharedUtils/components/apps/gridUtils.d.ts +14 -0
  21. package/dist/sharedUtils/components/apps/inputType.d.ts +178 -0
  22. package/dist/sharedUtils/components/apps/rx.d.ts +29 -0
  23. package/dist/sharedUtils/components/apps/sharedTypes.d.ts +21 -0
  24. package/dist/sharedUtils/components/apps/types.d.ts +274 -0
  25. package/dist/sharedUtils/components/assets/lib.d.ts +25 -0
  26. package/dist/sharedUtils/components/common/alert/model.d.ts +2 -0
  27. package/dist/sharedUtils/components/common/badge/model.d.ts +8 -0
  28. package/dist/sharedUtils/components/common/button/model.d.ts +45 -0
  29. package/dist/sharedUtils/components/common/fileInput/model.d.ts +1 -0
  30. package/dist/sharedUtils/components/common/index.d.ts +24 -0
  31. package/dist/sharedUtils/components/common/skeleton/model.d.ts +21 -0
  32. package/dist/sharedUtils/components/dbTypes.d.ts +14 -0
  33. package/dist/sharedUtils/components/diff_drawer.d.ts +26 -0
  34. package/dist/sharedUtils/components/ducklake.d.ts +1 -0
  35. package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +7 -0
  36. package/dist/sharedUtils/components/icons/index.d.ts +101 -0
  37. package/dist/sharedUtils/components/random_positive_adjetive.d.ts +1 -0
  38. package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +10 -0
  39. package/dist/sharedUtils/components/raw_apps/utils.d.ts +15 -0
  40. package/dist/sharedUtils/components/triggers/email/utils.d.ts +4 -0
  41. package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +2 -0
  42. package/dist/sharedUtils/components/triggers/http/utils.d.ts +11 -0
  43. package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +2 -0
  44. package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +2 -0
  45. package/dist/sharedUtils/components/triggers/nats/utils.d.ts +2 -0
  46. package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +8 -0
  47. package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +2 -0
  48. package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +32 -0
  49. package/dist/sharedUtils/components/triggers/utils.d.ts +80 -0
  50. package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +2 -0
  51. package/dist/sharedUtils/components/triggers.d.ts +20 -0
  52. package/dist/sharedUtils/gen/core/ApiError.d.ts +10 -0
  53. package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +13 -0
  54. package/dist/sharedUtils/gen/core/ApiResult.d.ts +7 -0
  55. package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +26 -0
  56. package/dist/sharedUtils/gen/core/OpenAPI.d.ts +27 -0
  57. package/dist/sharedUtils/gen/core/request.d.ts +29 -0
  58. package/dist/sharedUtils/gen/index.d.ts +6 -0
  59. package/dist/sharedUtils/gen/schemas.gen.d.ts +7036 -0
  60. package/dist/sharedUtils/gen/services.gen.d.ts +6047 -0
  61. package/dist/sharedUtils/gen/types.gen.d.ts +21881 -0
  62. package/dist/sharedUtils/history.svelte.d.ts +9 -0
  63. package/dist/sharedUtils/hub.d.ts +49 -0
  64. package/dist/sharedUtils/jsr.json +6 -0
  65. package/dist/sharedUtils/lib.d.ts +5 -0
  66. package/dist/sharedUtils/lib.es.js +1588 -0
  67. package/dist/sharedUtils/package.json +12 -0
  68. package/dist/sharedUtils/schema.d.ts +3 -0
  69. package/dist/sharedUtils/stores.d.ts +97 -0
  70. package/dist/sharedUtils/svelte5Utils.svelte.d.ts +80 -0
  71. package/dist/sharedUtils/toast.d.ts +8 -0
  72. package/dist/sharedUtils/utils.d.ts +265 -0
  73. package/package/assets/app.css +32 -13
  74. package/package/components/AIAgentLogViewer.svelte +2 -2
  75. package/package/components/AIAgentLogViewer.svelte.d.ts +1 -0
  76. package/package/components/AIProviderPicker.svelte +20 -80
  77. package/package/components/AIProviderPicker.svelte.d.ts +2 -7
  78. package/package/components/AddUser.svelte +2 -2
  79. package/package/components/ApiConnectForm.svelte +7 -1
  80. package/package/components/AppConnectInner.svelte.d.ts +1 -1
  81. package/package/components/ArgInput.svelte +15 -5
  82. package/package/components/ArgInput.svelte.d.ts +3 -4
  83. package/package/components/Auth0Setting.svelte +6 -2
  84. package/package/components/AuthSettings.svelte +68 -39
  85. package/package/components/AuthSettings.svelte.d.ts +3 -1
  86. package/package/components/AutheliaSetting.svelte +3 -2
  87. package/package/components/AuthentikSetting.svelte +3 -2
  88. package/package/components/AutoscalingConfigEditor.svelte +2 -1
  89. package/package/components/AutoscalingConfigEditor.svelte.d.ts +1 -0
  90. package/package/components/CenteredModal.svelte +14 -4
  91. package/package/components/CenteredModal.svelte.d.ts +1 -0
  92. package/package/components/ChangeInstanceUsernameInner.svelte +1 -1
  93. package/package/components/CompareWorkspaces.svelte +29 -57
  94. package/package/components/ConcurrentJobsChart.svelte +1 -1
  95. package/package/components/ConnectionSection.svelte +69 -73
  96. package/package/components/CustomSso.svelte +7 -7
  97. package/package/components/DBManager.svelte +15 -4
  98. package/package/components/DBManager.svelte.d.ts +2 -0
  99. package/package/components/DBManagerContent.svelte +5 -0
  100. package/package/components/DBManagerContent.svelte.d.ts +1 -0
  101. package/package/components/DBManagerDrawer.svelte +2 -0
  102. package/package/components/DatatablePicker.svelte +29 -0
  103. package/package/components/DatatablePicker.svelte.d.ts +13 -0
  104. package/package/components/DateTimeInput.svelte +3 -3
  105. package/package/components/DedicatedWorkersSelector.svelte +39 -42
  106. package/package/components/DeployToSetting.svelte +183 -123
  107. package/package/components/DeployToSetting.svelte.d.ts +19 -28
  108. package/package/components/DeployWorkspace.svelte +6 -44
  109. package/package/components/DeployWorkspace.svelte.d.ts +2 -1
  110. package/package/components/DeployWorkspaceDrawer.svelte +18 -7
  111. package/package/components/DeployWorkspaceDrawer.svelte.d.ts +3 -20
  112. package/package/components/Description.svelte +3 -1
  113. package/package/components/Dev.svelte +1 -0
  114. package/package/components/DiffEditor.svelte +7 -6
  115. package/package/components/DiffEditor.svelte.d.ts +2 -6
  116. package/package/components/DisplayResult.svelte +2 -2
  117. package/package/components/DropdownMenu.svelte +39 -0
  118. package/package/components/DropdownMenu.svelte.d.ts +14 -0
  119. package/package/components/DropdownSubmenuItem.svelte +68 -0
  120. package/package/components/DropdownSubmenuItem.svelte.d.ts +10 -0
  121. package/package/components/DropdownV2.svelte +3 -3
  122. package/package/components/DropdownV2Inner.svelte +42 -34
  123. package/package/components/DropdownV2Inner.svelte.d.ts +2 -1
  124. package/package/components/DucklakePicker.svelte +2 -5
  125. package/package/components/EEOnly.svelte +4 -14
  126. package/package/components/EEOnly.svelte.d.ts +0 -1
  127. package/package/components/Editor.svelte +2 -2
  128. package/package/components/Editor.svelte.d.ts +1 -0
  129. package/package/components/EditorBar.svelte +2 -4
  130. package/package/components/ErrorOrRecoveryHandler.svelte +62 -53
  131. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +1 -0
  132. package/package/components/ExploreAssetButton.svelte +1 -2
  133. package/package/components/FileExplorer.svelte +249 -0
  134. package/package/components/FileExplorer.svelte.d.ts +21 -0
  135. package/package/components/FilesetEditor.svelte +103 -0
  136. package/package/components/FilesetEditor.svelte.d.ts +6 -0
  137. package/package/components/FilterSearchbar.svelte +628 -0
  138. package/package/components/FilterSearchbar.svelte.d.ts +86 -0
  139. package/package/components/FlowBuilder.svelte +123 -79
  140. package/package/components/FlowGraphViewerStep.svelte +49 -33
  141. package/package/components/FlowHistoryJobPicker.svelte +2 -1
  142. package/package/components/FlowJobResult.svelte +31 -23
  143. package/package/components/FlowJobResult.svelte.d.ts +0 -1
  144. package/package/components/FlowLogRow.svelte +1 -1
  145. package/package/components/FlowLogViewer.svelte +8 -3
  146. package/package/components/FlowPreviewContent.svelte +65 -49
  147. package/package/components/FlowPreviewContent.svelte.d.ts +4 -0
  148. package/package/components/FlowRestartButton.svelte +47 -47
  149. package/package/components/FlowRestartButton.svelte.d.ts +2 -0
  150. package/package/components/FlowStatusViewer.svelte +2 -3
  151. package/package/components/FlowStatusViewer.svelte.d.ts +1 -0
  152. package/package/components/FlowStatusViewerInner.svelte +380 -297
  153. package/package/components/FlowStatusViewerInner.svelte.d.ts +2 -2
  154. package/package/components/FlowStatusWaitingForEvents.svelte +11 -10
  155. package/package/components/FolderPicker.svelte +195 -65
  156. package/package/components/FolderPicker.svelte.d.ts +2 -0
  157. package/package/components/HistoricInputs.svelte +3 -4
  158. package/package/components/IconedResourceType.svelte +8 -2
  159. package/package/components/IconedResourceType.svelte.d.ts +2 -0
  160. package/package/components/InputError.svelte +9 -0
  161. package/package/components/InputError.svelte.d.ts +6 -0
  162. package/package/components/InputTransformForm.svelte +46 -39
  163. package/package/components/InputTransformForm.svelte.d.ts +1 -0
  164. package/package/components/InputTransformSchemaForm.svelte +2 -1
  165. package/package/components/InputTransformSchemaForm.svelte.d.ts +1 -0
  166. package/package/components/InputTransformsViewer.svelte +37 -20
  167. package/package/components/InstanceNameEditor.svelte +3 -1
  168. package/package/components/InstanceSetting.svelte +150 -374
  169. package/package/components/InstanceSetting.svelte.d.ts +1 -0
  170. package/package/components/InstanceSettings.svelte +804 -193
  171. package/package/components/InstanceSettings.svelte.d.ts +17 -2
  172. package/package/components/IntegerInput.svelte +58 -0
  173. package/package/components/IntegerInput.svelte.d.ts +14 -0
  174. package/package/components/InviteGlobalUser.svelte +25 -25
  175. package/package/components/InviteGlobalUser.svelte.d.ts +4 -2
  176. package/package/components/JobArgs.svelte +14 -10
  177. package/package/components/JobLoader.svelte +6 -4
  178. package/package/components/JobLoader.svelte.d.ts +2 -2
  179. package/package/components/JobStatus.svelte +29 -26
  180. package/package/components/JobStatus.svelte.d.ts +1 -0
  181. package/package/components/KanidmSetting.svelte +3 -2
  182. package/package/components/KeycloakSetting.svelte +3 -2
  183. package/package/components/Login.svelte +9 -3
  184. package/package/components/ModuleStatus.svelte +5 -5
  185. package/package/components/ModuleTest.svelte +3 -3
  186. package/package/components/MoveDrawer.svelte +47 -76
  187. package/package/components/MoveDrawer.svelte.d.ts +4 -6
  188. package/package/components/NextcloudSetting.svelte +3 -2
  189. package/package/components/NoDirectDeployAlert.svelte +31 -0
  190. package/package/components/NoDirectDeployAlert.svelte.d.ts +6 -0
  191. package/package/components/NumberTypeNarrowing.svelte +65 -67
  192. package/package/components/NumberTypeNarrowing.svelte.d.ts +2 -1
  193. package/package/components/OAuthSetting.svelte +6 -14
  194. package/package/components/ObjectStoreConfigSettings.svelte +150 -55
  195. package/package/components/ObjectStoreConfigSettings.svelte.d.ts +34 -44
  196. package/package/components/OktaSetting.svelte +3 -2
  197. package/package/components/PageHeader.svelte +1 -1
  198. package/package/components/ParentWorkspaceProtectionAlert.svelte +48 -0
  199. package/package/components/ParentWorkspaceProtectionAlert.svelte.d.ts +7 -0
  200. package/package/components/Path.svelte +40 -28
  201. package/package/components/Path.svelte.d.ts +3 -0
  202. package/package/components/PocketIdSetting.svelte +3 -2
  203. package/package/components/ResourceEditor.svelte +9 -3
  204. package/package/components/ResourcePicker.svelte +2 -5
  205. package/package/components/RightClickPopover.svelte +37 -0
  206. package/package/components/RightClickPopover.svelte.d.ts +11 -0
  207. package/package/components/RunChart.svelte +2 -21
  208. package/package/components/RunChart.svelte.d.ts +0 -3
  209. package/package/components/RunsPage.svelte +458 -560
  210. package/package/components/SaveButton.svelte +78 -0
  211. package/package/components/SaveButton.svelte.d.ts +12 -0
  212. package/package/components/SaveInputsButton.svelte +1 -1
  213. package/package/components/SavedInputsV2.svelte +1 -3
  214. package/package/components/SchemaFormWithArgPicker.svelte +34 -30
  215. package/package/components/SchemaFormWithArgPicker.svelte.d.ts +12 -21
  216. package/package/components/SchemaViewer.svelte +56 -53
  217. package/package/components/ScriptBuilder.svelte +12 -12
  218. package/package/components/ScriptEditor.svelte +30 -28
  219. package/package/components/Section.svelte +2 -2
  220. package/package/components/ServiceLogsInner.svelte +21 -82
  221. package/package/components/Star.svelte +8 -22
  222. package/package/components/Star.svelte.d.ts +4 -4
  223. package/package/components/StringTypeNarrowing.svelte +1 -0
  224. package/package/components/SummaryPathDisplay.svelte +177 -0
  225. package/package/components/SummaryPathDisplay.svelte.d.ts +10 -0
  226. package/package/components/SuperadminSettings.svelte +185 -4
  227. package/package/components/SuperadminSettings.svelte.d.ts +4 -1
  228. package/package/components/SuperadminSettingsInner.svelte +307 -192
  229. package/package/components/SuperadminSettingsInner.svelte.d.ts +12 -1
  230. package/package/components/TaggedTextInput.svelte +449 -0
  231. package/package/components/TaggedTextInput.svelte.d.ts +28 -0
  232. package/package/components/Toast.svelte +69 -51
  233. package/package/components/Toast.svelte.d.ts +2 -2
  234. package/package/components/Tooltip.svelte +2 -2
  235. package/package/components/Tooltip.svelte.d.ts +2 -0
  236. package/package/components/TooltipInner.svelte +6 -1
  237. package/package/components/TooltipInner.svelte.d.ts +1 -0
  238. package/package/components/Uptodate.svelte +3 -2
  239. package/package/components/UserSettings.svelte +2 -2
  240. package/package/components/UserSettings.svelte.d.ts +1 -0
  241. package/package/components/WorkerGroup.svelte +320 -192
  242. package/package/components/WorkerGroup.svelte.d.ts +2 -0
  243. package/package/components/WorkspaceDependenciesEditor.svelte +33 -17
  244. package/package/components/ZitadelSetting.svelte +3 -2
  245. package/package/components/aiProviderStorage.d.ts +5 -0
  246. package/package/components/aiProviderStorage.js +50 -0
  247. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +24 -13
  248. package/package/components/apps/components/display/dbtable/metadata.d.ts +1 -0
  249. package/package/components/apps/components/display/dbtable/metadata.js +1 -0
  250. package/package/components/apps/components/display/dbtable/queries/count.js +3 -1
  251. package/package/components/apps/components/display/dbtable/queries/delete.js +3 -1
  252. package/package/components/apps/components/display/dbtable/queries/insert.js +3 -1
  253. package/package/components/apps/components/display/dbtable/queries/select.js +15 -1
  254. package/package/components/apps/components/display/dbtable/queries/update.js +3 -1
  255. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +6 -0
  256. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
  257. package/package/components/apps/components/display/table/AppAggridTable.svelte +7 -0
  258. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +9 -3
  259. package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +1 -0
  260. package/package/components/apps/components/display/table/theme/windmill-theme.css +8 -7
  261. package/package/components/apps/components/helpers/eval.js +5 -2
  262. package/package/components/apps/components/layout/AppModal.svelte +2 -1
  263. package/package/components/apps/components/layout/AppModal.svelte.d.ts +1 -0
  264. package/package/components/apps/editor/appPolicy.js +5 -4
  265. package/package/components/apps/editor/appUtils.d.ts +1 -1
  266. package/package/components/apps/editor/component/components.d.ts +11 -0
  267. package/package/components/apps/editor/component/components.js +19 -2
  268. package/package/components/apps/editor/componentsPanel/CssProperty.svelte +3 -1
  269. package/package/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte +1 -1
  270. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +1 -1
  271. package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +1 -1
  272. package/package/components/apps/editor/settingsPanel/StylePanel.svelte +66 -29
  273. package/package/components/apps/editor/settingsPanel/StylePanel.svelte.d.ts +2 -17
  274. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +10 -0
  275. package/package/components/apps/inputType.d.ts +2 -2
  276. package/package/components/assets/AssetButtons.svelte +3 -7
  277. package/package/components/assets/AssetButtons.svelte.d.ts +2 -4
  278. package/package/components/assets/AssetColumnBadges.svelte +35 -0
  279. package/package/components/assets/AssetColumnBadges.svelte.d.ts +10 -0
  280. package/package/components/assets/AssetsDropdownButton.svelte +8 -6
  281. package/package/components/assets/AssetsUsageDrawer.svelte +16 -14
  282. package/package/components/assets/JobAssetsViewer.svelte +4 -6
  283. package/package/components/assets/assetsFilter.d.ts +50 -0
  284. package/package/components/assets/assetsFilter.js +43 -0
  285. package/package/components/assets/lib.d.ts +3 -2
  286. package/package/components/assets/lib.js +8 -1
  287. package/package/components/auditLogs/AuditLogsFilters.svelte +30 -1
  288. package/package/components/common/InlineCalendarInput.svelte +580 -0
  289. package/package/components/common/InlineCalendarInput.svelte.d.ts +31 -0
  290. package/package/components/common/alert/Alert.svelte +2 -8
  291. package/package/components/common/alert/model.d.ts +1 -0
  292. package/package/components/common/alert/model.js +7 -0
  293. package/package/components/common/badge/Badge.svelte +7 -3
  294. package/package/components/common/badge/Badge.svelte.d.ts +1 -0
  295. package/package/components/common/breadcrumb/Breadcrumb.svelte +10 -14
  296. package/package/components/common/breadcrumb/Breadcrumb.svelte.d.ts +8 -23
  297. package/package/components/common/drawer/DrawerContent.svelte +1 -1
  298. package/package/components/common/seconds/SecondsInput.svelte +158 -67
  299. package/package/components/common/seconds/SecondsInput.svelte.d.ts +9 -21
  300. package/package/components/common/sidebar/SidebarNavigation.svelte +50 -0
  301. package/package/components/common/sidebar/SidebarNavigation.svelte.d.ts +25 -0
  302. package/package/components/common/table/AppRow.svelte +7 -10
  303. package/package/components/common/table/AppRow.svelte.d.ts +2 -2
  304. package/package/components/common/table/FlowRow.svelte +12 -15
  305. package/package/components/common/table/FlowRow.svelte.d.ts +2 -2
  306. package/package/components/common/table/RawAppRow.svelte +5 -82
  307. package/package/components/common/table/RawAppRow.svelte.d.ts +2 -23
  308. package/package/components/common/table/Row.svelte +2 -2
  309. package/package/components/common/table/Row.svelte.d.ts +0 -2
  310. package/package/components/common/table/ScriptRow.svelte +8 -11
  311. package/package/components/common/table/ScriptRow.svelte.d.ts +2 -2
  312. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +1 -1
  313. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -1
  314. package/package/components/copilot/TestAIKey.svelte +1 -1
  315. package/package/components/copilot/chat/AIChatInput.svelte +22 -11
  316. package/package/components/copilot/chat/AIChatManager.svelte.js +15 -17
  317. package/package/components/copilot/chat/AvailableContextList.svelte +215 -12
  318. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +1 -0
  319. package/package/components/copilot/chat/ContextTextarea.svelte +15 -2
  320. package/package/components/copilot/chat/__tests__/app/variants/streamlined.js +1 -1
  321. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.js +4 -2
  322. package/package/components/copilot/chat/app/core.js +7 -86
  323. package/package/components/copilot/chat/context.js +4 -1
  324. package/package/components/copilot/chat/flow/core.js +193 -61
  325. package/package/components/copilot/chat/flow/openFlow.json +1 -1
  326. package/package/components/copilot/chat/flow/openFlowZod.d.ts +2 -2
  327. package/package/components/copilot/chat/flow/openFlowZod.js +6 -8
  328. package/package/components/copilot/chat/navigator/core.d.ts +2 -2
  329. package/package/components/copilot/chat/navigator/core.js +11 -2
  330. package/package/components/copilot/chat/script/core.js +4 -1
  331. package/package/components/copilot/chat/shared.d.ts +53 -1
  332. package/package/components/copilot/chat/shared.js +227 -1
  333. package/package/components/copilot/lib.js +42 -0
  334. package/package/components/dedicated_worker.d.ts +7 -0
  335. package/package/components/dedicated_worker.js +36 -0
  336. package/package/components/details/DetailPageHeader.svelte +8 -23
  337. package/package/components/details/DetailPageHeader.svelte.d.ts +1 -0
  338. package/package/components/details/DetailPageLayout.svelte +1 -1
  339. package/package/components/details/createAppFromScript.d.ts +136 -16
  340. package/package/components/details/createAppFromScript.js +13 -12
  341. package/package/components/diffEditorTypes.d.ts +6 -0
  342. package/package/components/diffEditorTypes.js +1 -0
  343. package/package/components/flows/CreateActionsApp.svelte +32 -82
  344. package/package/components/flows/CreateActionsFlow.svelte +28 -28
  345. package/package/components/flows/FlowAssetsHandler.svelte +1 -4
  346. package/package/components/flows/FlowProgressBar.svelte +37 -1
  347. package/package/components/flows/FlowProgressBar.svelte.d.ts +3 -0
  348. package/package/components/flows/agentToolUtils.d.ts +18 -0
  349. package/package/components/flows/agentToolUtils.js +47 -0
  350. package/package/components/flows/common/FlowCardHeader.svelte +8 -9
  351. package/package/components/flows/content/FlowEnvironmentVariables.svelte +3 -2
  352. package/package/components/flows/content/FlowLoop.svelte +3 -4
  353. package/package/components/flows/content/FlowModuleCache.svelte +1 -3
  354. package/package/components/flows/content/FlowModuleComponent.svelte +22 -6
  355. package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
  356. package/package/components/flows/content/FlowResult.svelte +77 -25
  357. package/package/components/flows/content/FlowRetries.svelte +1 -1
  358. package/package/components/flows/content/FlowSettings.svelte +4 -7
  359. package/package/components/flows/flowState.js +6 -0
  360. package/package/components/flows/flowStateUtils.svelte.js +4 -1
  361. package/package/components/flows/flowStore.svelte.d.ts +1 -1
  362. package/package/components/flows/flowStore.svelte.js +4 -2
  363. package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
  364. package/package/components/flows/header/FlowYamlEditor.svelte +2 -2
  365. package/package/components/flows/map/FlowModuleSchemaMap.svelte +12 -6
  366. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +2 -2
  367. package/package/components/flows/map/InsertModuleInner.svelte +7 -0
  368. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
  369. package/package/components/flows/missingInputWarnings.js +7 -0
  370. package/package/components/flows/pickers/PickHubScriptQuick.svelte +4 -4
  371. package/package/components/flows/propPicker/OutputPicker.svelte +1 -1
  372. package/package/components/flows/propPicker/PropPickerWrapper.svelte +6 -9
  373. package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +3 -3
  374. package/package/components/flows/scheduleUtils.js +2 -2
  375. package/package/components/flows/types.d.ts +1 -3
  376. package/package/components/flows/utils.svelte.js +5 -1
  377. package/package/components/git_sync/GitSyncRepositoryCard.svelte +23 -21
  378. package/package/components/git_sync/GitSyncSection.svelte +24 -27
  379. package/package/components/graph/FlowGraphV2.svelte +1 -1
  380. package/package/components/graph/graphBuilder.svelte.d.ts +3 -1
  381. package/package/components/graph/model.d.ts +1 -1
  382. package/package/components/graph/renderers/nodes/AIToolNode.svelte +3 -1
  383. package/package/components/graph/renderers/nodes/AssetNode.svelte +25 -13
  384. package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
  385. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +8 -0
  386. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +5 -2
  387. package/package/components/home/Item.svelte +9 -15
  388. package/package/components/home/Item.svelte.d.ts +8 -7
  389. package/package/components/home/ItemsList.svelte +4 -10
  390. package/package/components/home/ItemsList.svelte.d.ts +1 -0
  391. package/package/components/icons/GoogleCalendarIcon.svelte +41 -0
  392. package/package/components/icons/GoogleCalendarIcon.svelte.d.ts +7 -0
  393. package/package/components/icons/GoogleDriveIcon.svelte +30 -0
  394. package/package/components/icons/GoogleDriveIcon.svelte.d.ts +7 -0
  395. package/package/components/icons/GoogleIcon.svelte +15 -6
  396. package/package/components/icons/GoogleIcon.svelte.d.ts +5 -2
  397. package/package/components/icons/MSSqlServerIcon.svelte +111 -47
  398. package/package/components/instanceSettings/IndexerJobIndexSettings.svelte +94 -0
  399. package/package/components/instanceSettings/IndexerJobIndexSettings.svelte.d.ts +9 -0
  400. package/package/components/instanceSettings/IndexerLogIndexSettings.svelte +67 -0
  401. package/package/components/instanceSettings/IndexerLogIndexSettings.svelte.d.ts +9 -0
  402. package/package/components/instanceSettings/IndexerMemorySettings.svelte +109 -0
  403. package/package/components/instanceSettings/IndexerMemorySettings.svelte.d.ts +9 -0
  404. package/package/components/instanceSettings/SecretBackendConfig.svelte +15 -16
  405. package/package/components/instanceSettings/SettingCard.svelte +47 -0
  406. package/package/components/instanceSettings/SettingCard.svelte.d.ts +19 -0
  407. package/package/components/instanceSettings/SettingsSearchInput.svelte +66 -0
  408. package/package/components/instanceSettings/SettingsSearchInput.svelte.d.ts +9 -0
  409. package/package/components/instanceSettings.d.ts +52 -0
  410. package/package/components/instanceSettings.js +413 -69
  411. package/package/components/meltComponents/MenuItem.svelte +1 -0
  412. package/package/components/meltComponents/Popover.svelte +10 -1
  413. package/package/components/meltComponents/Popover.svelte.d.ts +2 -0
  414. package/package/components/meltComponents/Tooltip.svelte +2 -1
  415. package/package/components/meltComponents/Tooltip.svelte.d.ts +1 -0
  416. package/package/components/moveRenameManager.d.ts +21 -0
  417. package/package/components/moveRenameManager.js +61 -0
  418. package/package/components/progressBar/ProgressBar.svelte +69 -27
  419. package/package/components/progressBar/ProgressBar.svelte.d.ts +7 -0
  420. package/package/components/prop_picker.d.ts +0 -3
  421. package/package/components/propertyPicker/PropPicker.svelte +34 -49
  422. package/package/components/propertyPicker/PropPicker.svelte.d.ts +12 -11
  423. package/package/components/raw_apps/FileTreeNode.svelte +1 -0
  424. package/package/components/raw_apps/RawAppBackgroundRunner.svelte +3 -2
  425. package/package/components/raw_apps/RawAppEditor.svelte +20 -16
  426. package/package/components/raw_apps/RawAppEditor.svelte.d.ts +4 -4
  427. package/package/components/raw_apps/RawAppEditorHeader.svelte +73 -7
  428. package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +1 -1
  429. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +1 -2
  430. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +41 -1
  431. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +0 -1
  432. package/package/components/raw_apps/RawAppSidebar.svelte +32 -284
  433. package/package/components/raw_apps/RawAppSidebar.svelte.d.ts +1 -1
  434. package/package/components/raw_apps/RunnableRow.svelte +88 -34
  435. package/package/components/raw_apps/RunnableRow.svelte.d.ts +4 -0
  436. package/package/components/resources/resourcesFilter.d.ts +70 -0
  437. package/package/components/resources/resourcesFilter.js +61 -0
  438. package/package/components/runs/BatchReRunOptionsPane.svelte +130 -121
  439. package/package/components/runs/BatchReRunOptionsPane.svelte.d.ts +3 -2
  440. package/package/components/runs/FlowExecutionStatus.svelte +30 -0
  441. package/package/components/runs/FlowExecutionStatus.svelte.d.ts +15 -0
  442. package/package/components/runs/JobDetailFieldConfig.d.ts +47 -0
  443. package/package/components/runs/JobDetailFieldConfig.js +433 -0
  444. package/package/components/runs/JobDetailHeader.svelte +551 -0
  445. package/package/components/runs/JobDetailHeader.svelte.d.ts +17 -0
  446. package/package/components/runs/JobRunsPreview.svelte +174 -218
  447. package/package/components/runs/JobRunsPreview.svelte.d.ts +0 -1
  448. package/package/components/runs/JobStatusIcon.svelte +47 -0
  449. package/package/components/runs/JobStatusIcon.svelte.d.ts +9 -0
  450. package/package/components/runs/RunBadges.svelte +39 -34
  451. package/package/components/runs/RunBadges.svelte.d.ts +2 -1
  452. package/package/components/runs/RunRow.svelte +24 -64
  453. package/package/components/runs/RunRow.svelte.d.ts +1 -2
  454. package/package/components/runs/RunsTable.svelte +312 -131
  455. package/package/components/runs/RunsTable.svelte.d.ts +4 -3
  456. package/package/components/runs/TimeframeSelect.svelte +189 -0
  457. package/package/components/runs/TimeframeSelect.svelte.d.ts +44 -0
  458. package/package/components/runs/runsFilter.d.ts +201 -0
  459. package/package/components/runs/runsFilter.js +182 -0
  460. package/package/components/runs/useJobsLoader.svelte.d.ts +5 -7
  461. package/package/components/runs/useJobsLoader.svelte.js +27 -30
  462. package/package/components/schedules/schedulesFilter.d.ts +65 -0
  463. package/package/components/schedules/schedulesFilter.js +60 -0
  464. package/package/components/schema/EditableSchemaWrapper.svelte +43 -22
  465. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +1 -1
  466. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  467. package/package/components/schema/PropertyEditor.svelte +1 -0
  468. package/package/components/schema/RunningJobSchemaPicker.svelte +1 -1
  469. package/package/components/schema/editable_schema_wrapper.d.ts +1 -0
  470. package/package/components/scripts/CreateActionsScript.svelte +0 -1
  471. package/package/components/search/GlobalSearchModal.svelte +1 -8
  472. package/package/components/select/GenericDropdown.svelte +113 -0
  473. package/package/components/select/GenericDropdown.svelte.d.ts +37 -0
  474. package/package/components/select/Select.svelte +17 -4
  475. package/package/components/select/Select.svelte.d.ts +2 -1
  476. package/package/components/select/SelectDropdown.svelte +76 -155
  477. package/package/components/select/SelectDropdown.svelte.d.ts +4 -1
  478. package/package/components/settings/ChangeWorkspaceColor.svelte +7 -8
  479. package/package/components/settings/ChangeWorkspaceId.svelte +4 -6
  480. package/package/components/settings/ChangeWorkspaceName.svelte +6 -8
  481. package/package/components/settings/PremiumInfo.svelte +268 -128
  482. package/package/components/settings/SettingsPageHeader.svelte +22 -0
  483. package/package/components/settings/SettingsPageHeader.svelte.d.ts +10 -0
  484. package/package/components/settings/WorkspaceUserSettings.svelte +13 -23
  485. package/package/components/sidebar/CriticalAlertModalInner.svelte +28 -22
  486. package/package/components/sidebar/CriticalAlertModalInner.svelte.d.ts +5 -20
  487. package/package/components/sidebar/DarkModeToggle.svelte +2 -2
  488. package/package/components/sidebar/FavoriteMenu.svelte +101 -20
  489. package/package/components/sidebar/FavoriteMenu.svelte.d.ts +29 -1
  490. package/package/components/sidebar/MenuButton.svelte +10 -7
  491. package/package/components/sidebar/MenuButton.svelte.d.ts +2 -0
  492. package/package/components/sidebar/MenuLink.svelte +4 -3
  493. package/package/components/sidebar/OperatorMenu.svelte +3 -1
  494. package/package/components/sidebar/OperatorMenu.svelte.d.ts +6 -1
  495. package/package/components/sidebar/SidebarContent.svelte +3 -3
  496. package/package/components/sidebar/WorkspaceMenu.svelte +3 -2
  497. package/package/components/table/AutoDataTable.svelte +2 -2
  498. package/package/components/toast.js +1 -2
  499. package/package/components/triggers/AddTriggersButton.svelte +11 -0
  500. package/package/components/triggers/TriggerFilters.svelte +71 -0
  501. package/package/components/triggers/TriggerFilters.svelte.d.ts +10 -0
  502. package/package/components/triggers/TriggersEditor.svelte +31 -11
  503. package/package/components/triggers/TriggersWrapper.svelte +10 -0
  504. package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
  505. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +7 -0
  506. package/package/components/triggers/kafka/utils.js +1 -0
  507. package/package/components/triggers/native/NativeTriggerEditor.svelte +22 -17
  508. package/package/components/triggers/native/NativeTriggerTable.svelte +16 -0
  509. package/package/components/triggers/native/services/google/GoogleCalendarPicker.svelte +112 -0
  510. package/package/components/triggers/native/services/google/GoogleCalendarPicker.svelte.d.ts +8 -0
  511. package/package/components/triggers/native/services/google/GoogleDrivePicker.svelte +323 -0
  512. package/package/components/triggers/native/services/google/GoogleDrivePicker.svelte.d.ts +8 -0
  513. package/package/components/triggers/native/services/google/GoogleTriggerForm.svelte +116 -0
  514. package/package/components/triggers/native/services/google/GoogleTriggerForm.svelte.d.ts +12 -0
  515. package/package/components/triggers/native/utils.d.ts +0 -1
  516. package/package/components/triggers/native/utils.js +15 -1
  517. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +3 -3
  518. package/package/components/triggers/triggers.svelte.d.ts +1 -1
  519. package/package/components/triggers/triggers.svelte.js +11 -3
  520. package/package/components/triggers/utils.js +33 -6
  521. package/package/components/triggers/websocket/WebsocketEditorConfigSection.svelte +1 -1
  522. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +3 -81
  523. package/package/components/triggers.d.ts +1 -1
  524. package/package/components/variables/variablesFilter.d.ts +56 -0
  525. package/package/components/variables/variablesFilter.js +51 -0
  526. package/package/components/waitJob.d.ts +1 -1
  527. package/package/components/waitJob.js +3 -2
  528. package/package/components/worker_group.d.ts +2 -0
  529. package/package/components/worker_group.js +15 -0
  530. package/package/components/workspaceSettings/AISettings.svelte +36 -42
  531. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -0
  532. package/package/components/workspaceSettings/CreateWorkspace.svelte +4 -4
  533. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte.d.ts +1 -2
  534. package/package/components/workspaceSettings/DataTableSettings.svelte +27 -16
  535. package/package/components/workspaceSettings/DataTableSettings.svelte.d.ts +1 -0
  536. package/package/components/workspaceSettings/DucklakeSettings.svelte +21 -15
  537. package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +1 -0
  538. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +24 -66
  539. package/package/components/workspaceSettings/ModelTokenLimits.svelte +6 -10
  540. package/package/components/workspaceSettings/OAuthClientConfig.svelte +46 -75
  541. package/package/components/workspaceSettings/OAuthClientConfig.svelte.d.ts +8 -1
  542. package/package/components/workspaceSettings/RulesetEditor.svelte +280 -0
  543. package/package/components/workspaceSettings/RulesetEditor.svelte.d.ts +9 -0
  544. package/package/components/workspaceSettings/SettingsFooter.svelte +35 -0
  545. package/package/components/workspaceSettings/SettingsFooter.svelte.d.ts +12 -0
  546. package/package/components/workspaceSettings/StorageSettings.svelte +48 -34
  547. package/package/components/workspaceSettings/StorageSettings.svelte.d.ts +1 -0
  548. package/package/components/workspaceSettings/WorkspaceDependenciesSettings.svelte +66 -27
  549. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +237 -73
  550. package/package/components/workspaceSettings/WorkspaceRulesets.svelte +183 -0
  551. package/package/components/workspaceSettings/WorkspaceRulesets.svelte.d.ts +3 -0
  552. package/package/editorLangUtils.d.ts +1 -1
  553. package/package/gen/core/OpenAPI.js +1 -1
  554. package/package/gen/schemas.gen.d.ts +996 -70
  555. package/package/gen/schemas.gen.js +1352 -378
  556. package/package/gen/services.gen.d.ts +156 -41
  557. package/package/gen/services.gen.js +319 -83
  558. package/package/gen/types.gen.d.ts +1896 -317
  559. package/package/hub.d.ts +1 -0
  560. package/package/hub.js +7 -0
  561. package/package/hubPaths.json +2 -1
  562. package/package/infer.d.ts +2 -0
  563. package/package/mcpEndpointTools.d.ts +3 -0
  564. package/package/mcpEndpointTools.js +574 -147
  565. package/package/rawAppWmillTs.js +12 -11
  566. package/package/scripts.d.ts +1 -1
  567. package/package/scripts.js +1 -1
  568. package/package/storeUtils.js +8 -0
  569. package/package/stores.d.ts +1 -1
  570. package/package/stores.js +4 -2
  571. package/package/svelte5Utils.svelte.d.ts +40 -0
  572. package/package/svelte5Utils.svelte.js +158 -0
  573. package/package/svelte5UtilsKit.svelte.d.ts +13 -3
  574. package/package/svelte5UtilsKit.svelte.js +96 -20
  575. package/package/system_prompts/prompts.d.ts +5 -5
  576. package/package/system_prompts/prompts.js +94 -21
  577. package/package/toast.d.ts +5 -1
  578. package/package/toast.js +14 -5
  579. package/package/utils.js +214 -7
  580. package/package/utils_deployable.d.ts +25 -25
  581. package/package/utils_deployable.js +2 -1
  582. package/package/validators/workspaceSettings.d.ts +12 -0
  583. package/package/validators/workspaceSettings.js +72 -0
  584. package/package/workspaceProtectionRules.svelte.d.ts +73 -0
  585. package/package/workspaceProtectionRules.svelte.js +176 -0
  586. package/package.json +8 -5
  587. package/package/components/DropdownSelect.svelte +0 -26
  588. package/package/components/DropdownSelect.svelte.d.ts +0 -11
  589. package/package/components/FlowPreviewResult.svelte +0 -84
  590. package/package/components/FlowPreviewResult.svelte.d.ts +0 -20
  591. package/package/components/copilot/chat/context.d.ts +0 -119
  592. package/package/components/flows/propPicker/FlowPropPicker.svelte +0 -72
  593. package/package/components/flows/propPicker/FlowPropPicker.svelte.d.ts +0 -23
  594. package/package/components/runs/ManuelDatePicker.svelte +0 -96
  595. package/package/components/runs/ManuelDatePicker.svelte.d.ts +0 -35
  596. package/package/components/runs/RunsBatchActionsDropdown.svelte +0 -82
  597. package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +0 -15
  598. package/package/components/runs/RunsFilter.svelte +0 -966
  599. package/package/components/runs/RunsFilter.svelte.d.ts +0 -80
@@ -1,3 +1,4 @@
1
+ import { createSearchWorkspaceTool, createGetRunnableDetailsTool } from '../shared';
1
2
  import { ResourceService } from '../../../../gen';
2
3
  import { workspaceStore } from '../../../../stores';
3
4
  import { get } from 'svelte/store';
@@ -8,9 +9,11 @@ Windmill is an open-source developer platform for building internal tools, API i
8
9
 
9
10
  You have access to these tools:
10
11
  1. View current buttons and inputs on the page (get_triggerable_components)
11
- 2. Execute buttons and inputs (trigger_component)
12
+ 2. Execute buttons and inputs (trigger_component)
12
13
  3. Get documentation for user requests (get_documentation)
13
14
  4. Change the AI mode to the one specified (change_mode)
15
+ 5. Search for scripts and flows in the workspace (search_workspace)
16
+ 6. Get detailed information about a specific script or flow (get_runnable_details)
14
17
 
15
18
  INSTRUCTIONS:
16
19
  - When users ask about application features or concepts, first use get_documentation internally to retrieve accurate information about how to fulfill the user's request.
@@ -24,6 +27,10 @@ INSTRUCTIONS:
24
27
  - If you are not sure about an input, set the ones you are sure about, and then ask the user for the value of the input you are not sure about.
25
28
  - If the user asks you to make an API call, switch to API mode with the change_mode tool before using the new tools you'll have access to to make the API call.
26
29
 
30
+ - When users ask about existing scripts, flows, or building blocks in their workspace, use search_workspace to find them.
31
+ - When users want to understand a specific script or flow (inputs, description, what it does), use get_runnable_details.
32
+ - When users ask you to navigate to a specific script or flow, first search for it, then use the navigation tools to go to it.
33
+
27
34
  GENERAL PRINCIPLES:
28
35
  - Be concise but thorough
29
36
  - Focus on taking action and completing the user's goals
@@ -324,7 +331,9 @@ export const navigatorTools = [
324
331
  triggerComponentTool,
325
332
  getDocumentationTool,
326
333
  getCurrentPageNameTool,
327
- getAvailableResourcesTool
334
+ getAvailableResourcesTool,
335
+ createSearchWorkspaceTool(),
336
+ createGetRunnableDetailsTool()
328
337
  ];
329
338
  export function prepareNavigatorSystemMessage(customPrompt) {
330
339
  let content = CHAT_SYSTEM_PROMPT;
@@ -3,7 +3,7 @@ import { capitalize, isObject, toCamel } from '../../../../utils';
3
3
  import { get } from 'svelte/store';
4
4
  import { compile, phpCompile, pythonCompile } from '../../utils';
5
5
  import { dbSchemas } from '../../../../stores';
6
- import { createSearchHubScriptsTool, executeTestRun, buildTestRunArgs, buildContextString, formatScriptLintResult } from '../shared';
6
+ import { createSearchHubScriptsTool, executeTestRun, buildTestRunArgs, buildContextString, formatScriptLintResult, createSearchWorkspaceTool, createGetRunnableDetailsTool } from '../shared';
7
7
  import { setupTypeAcquisition } from '../../../../ata';
8
8
  import { getModelContextWindow } from '../../lib';
9
9
  import { getCurrentModel } from '../../../../aiStore';
@@ -130,6 +130,7 @@ function buildChatSystemPrompt(currentModel) {
130
130
  - You can also receive a \`DIFF\` of the changes that have been made to the code. You should use this diff to give better answers.
131
131
  - Before giving your answer, check again that you carefully followed these instructions.
132
132
  - When asked to create a script that communicates with an external service, you can use the \`search_hub_scripts\` tool to search for relevant scripts in the hub. Make sure the language is the same as what the user is coding in. If you do not find any relevant scripts, you can use the \`search_npm_packages\` tool to search for relevant packages and their documentation. Always give a link to the documentation in your answer if possible.
133
+ - Use \`search_workspace\` to find existing scripts and flows in the workspace, and \`get_runnable_details\` to inspect their schema and code. This is useful when the user wants to reference or reuse existing workspace runnables.
133
134
  - After applying code changes with the \`${editToolName}\` tool, ALWAYS use the \`get_lint_errors\` tool to check for lint errors. If there are errors, fix them before proceeding. Then use the \`test_run_script\` tool to test the code, and iterate on the code until it works as expected (MAX 3 times). If the user cancels the test run, do not try again and wait for the next user instruction.
134
135
 
135
136
  Important:
@@ -265,6 +266,8 @@ export function prepareScriptTools(currentModel, language, context) {
265
266
  }
266
267
  tools.push(testRunScriptTool);
267
268
  tools.push(getLintErrorsTool);
269
+ tools.push(createSearchWorkspaceTool());
270
+ tools.push(createGetRunnableDetailsTool());
268
271
  return tools;
269
272
  }
270
273
  export function prepareScriptUserMessage(instructions, selectedContext) {
@@ -14,7 +14,7 @@ import type { ContextElement, FlowModuleCodePieceElement } from './context';
14
14
  import type { ExtendedOpenFlow } from '../../flows/types';
15
15
  import type { FunctionParameters } from 'openai/resources/shared.mjs';
16
16
  import { z } from 'zod';
17
- import { type CompletedJob, type FlowModule } from '../../../gen';
17
+ import { type CompletedJob, type FlowModule, type Script } from '../../../gen';
18
18
  import { type editor as meditor } from 'monaco-editor';
19
19
  export declare const TOOL_PRETTIFY_MAP: Record<string, (content: string) => string>;
20
20
  export interface ContextStringResult {
@@ -107,6 +107,7 @@ export declare const createSearchHubScriptsTool: (withContent?: boolean) => {
107
107
  }) => Promise<string>;
108
108
  };
109
109
  export declare function buildSchemaForTool(toolDef: ChatCompletionFunctionTool, schemaBuilder: () => Promise<FunctionParameters>): Promise<boolean>;
110
+ export declare const MAX_RUNNABLE_CONTENT_LENGTH = 20000;
110
111
  export interface TestRunConfig {
111
112
  jobStarter: () => Promise<string>;
112
113
  workspace: string;
@@ -129,4 +130,55 @@ export interface ScriptLintResult {
129
130
  }
130
131
  /** Format script lint result for display */
131
132
  export declare function formatScriptLintResult(lintResult: ScriptLintResult): string;
133
+ export declare class WorkspaceRunnablesSearch {
134
+ private uf;
135
+ private scriptsWorkspace;
136
+ private flowsWorkspace;
137
+ private scripts;
138
+ private flows;
139
+ private scriptCache;
140
+ private flowCache;
141
+ constructor();
142
+ private initScripts;
143
+ private initFlows;
144
+ searchScripts(query: string, workspace: string): Promise<{
145
+ type: "script";
146
+ path: string;
147
+ summary: string;
148
+ }[]>;
149
+ searchFlows(query: string, workspace: string): Promise<{
150
+ type: "flow";
151
+ path: string;
152
+ summary: string;
153
+ }[]>;
154
+ search(query: string, workspace: string, type?: 'all' | 'scripts' | 'flows'): Promise<{
155
+ type: "script" | "flow";
156
+ path: string;
157
+ summary: string;
158
+ }[]>;
159
+ getScript(path: string, workspace: string): Promise<Script>;
160
+ getFlow(path: string, workspace: string): Promise<import("../../../gen").OpenFlow & import("../../../gen").FlowMetadata & {
161
+ lock_error_logs?: string;
162
+ version_id?: number;
163
+ }>;
164
+ }
165
+ export declare const workspaceRunnablesSearch: WorkspaceRunnablesSearch;
166
+ export declare const createSearchWorkspaceTool: () => {
167
+ def: ChatCompletionFunctionTool;
168
+ fn: ({ args, workspace, toolId, toolCallbacks }: {
169
+ args: any;
170
+ workspace: string;
171
+ toolId: string;
172
+ toolCallbacks: ToolCallbacks;
173
+ }) => Promise<string>;
174
+ };
175
+ export declare const createGetRunnableDetailsTool: () => {
176
+ def: ChatCompletionFunctionTool;
177
+ fn: ({ args, workspace, toolId, toolCallbacks }: {
178
+ args: any;
179
+ workspace: string;
180
+ toolId: string;
181
+ toolCallbacks: ToolCallbacks;
182
+ }) => Promise<string>;
183
+ };
132
184
  export {};
@@ -12,7 +12,9 @@ export const SPECIAL_MODULE_IDS = {
12
12
  import { get } from 'svelte/store';
13
13
  import { workspaceStore } from '../../../stores';
14
14
  import { z } from 'zod';
15
- import { ScriptService, JobService } from '../../../gen';
15
+ import { ScriptService, FlowService, JobService } from '../../../gen';
16
+ import uFuzzy from '@leeoniya/ufuzzy';
17
+ import { emptyString } from '../../../utils';
16
18
  import { scriptLangToEditorLang } from '../../../scripts';
17
19
  import { getCurrentModel } from '../../../aiStore';
18
20
  import {} from 'monaco-editor';
@@ -229,6 +231,7 @@ export function buildContextString(selectedContext) {
229
231
  let hasDiff = false;
230
232
  let hasFlowModule = false;
231
233
  let hasError = false;
234
+ let workspaceItemsContext = '';
232
235
  let result = '\n\n';
233
236
  for (const context of selectedContext) {
234
237
  if (context.type === 'code') {
@@ -261,6 +264,24 @@ export function buildContextString(selectedContext) {
261
264
  hasFlowModule = true;
262
265
  flowModuleContext += `${context.id}\n`;
263
266
  }
267
+ else if (context.type === 'workspace_script') {
268
+ workspaceItemsContext += `\nWORKSPACE SCRIPT (${context.path}):\n`;
269
+ workspaceItemsContext += `Summary: ${context.summary}\n`;
270
+ workspaceItemsContext += `Language: ${context.language}\n`;
271
+ if (context.schema) {
272
+ workspaceItemsContext += `Inputs: ${JSON.stringify(context.schema)}\n`;
273
+ }
274
+ workspaceItemsContext += `Code:\n${context.content}\n`;
275
+ }
276
+ else if (context.type === 'workspace_flow') {
277
+ workspaceItemsContext += `\nWORKSPACE FLOW (${context.path}):\n`;
278
+ workspaceItemsContext += `Summary: ${context.summary}\n`;
279
+ workspaceItemsContext += `Description: ${context.description}\n`;
280
+ if (context.schema) {
281
+ workspaceItemsContext += `Inputs: ${JSON.stringify(context.schema)}\n`;
282
+ }
283
+ workspaceItemsContext += `Value:\n${context.value}\n`;
284
+ }
264
285
  }
265
286
  if (hasCode) {
266
287
  result += '\n' + codeContext;
@@ -277,6 +298,9 @@ export function buildContextString(selectedContext) {
277
298
  if (hasFlowModule) {
278
299
  result += '\n' + flowModuleContext;
279
300
  }
301
+ if (workspaceItemsContext) {
302
+ result += '\n' + workspaceItemsContext;
303
+ }
280
304
  return result;
281
305
  }
282
306
  async function callTool({ tools, functionName, args, workspace, helpers, toolCallbacks, toolId }) {
@@ -492,6 +516,7 @@ export async function buildSchemaForTool(toolDef, schemaBuilder) {
492
516
  // Constants for result formatting
493
517
  const MAX_RESULT_LENGTH = 12000;
494
518
  const MAX_LOG_LENGTH = 4000;
519
+ export const MAX_RUNNABLE_CONTENT_LENGTH = 20000;
495
520
  // Common job polling function
496
521
  export async function pollJobCompletion(jobId, workspace, toolId, toolCallbacks) {
497
522
  let attempts = 0;
@@ -664,3 +689,204 @@ export function formatScriptLintResult(lintResult) {
664
689
  }
665
690
  return response;
666
691
  }
692
+ // ============= Workspace Runnables Search =============
693
+ export class WorkspaceRunnablesSearch {
694
+ uf;
695
+ scriptsWorkspace = undefined;
696
+ flowsWorkspace = undefined;
697
+ scripts = undefined;
698
+ flows = undefined;
699
+ scriptCache = new Map();
700
+ flowCache = new Map();
701
+ constructor() {
702
+ this.uf = new uFuzzy();
703
+ }
704
+ async initScripts(workspace) {
705
+ if (this.scripts === undefined || this.scriptsWorkspace !== workspace) {
706
+ this.scripts = await ScriptService.listScripts({ workspace });
707
+ this.scriptsWorkspace = workspace;
708
+ }
709
+ }
710
+ async initFlows(workspace) {
711
+ if (this.flows === undefined || this.flowsWorkspace !== workspace) {
712
+ this.flows = await FlowService.listFlows({ workspace });
713
+ this.flowsWorkspace = workspace;
714
+ }
715
+ }
716
+ async searchScripts(query, workspace) {
717
+ await this.initScripts(workspace);
718
+ const scripts = this.scripts;
719
+ if (!scripts)
720
+ return [];
721
+ const trimmed = query.trim();
722
+ if (!trimmed) {
723
+ return scripts.map((s) => ({
724
+ type: 'script',
725
+ path: s.path,
726
+ summary: s.summary
727
+ }));
728
+ }
729
+ const haystack = scripts.map((s) => emptyString(s.summary) ? s.path : s.summary + ' (' + s.path + ')');
730
+ const [idxs, , order] = this.uf.search(haystack, trimmed);
731
+ if (!idxs || !order)
732
+ return [];
733
+ return order.map((orderIdx) => {
734
+ const haystackIdx = idxs[orderIdx];
735
+ return {
736
+ type: 'script',
737
+ path: scripts[haystackIdx].path,
738
+ summary: scripts[haystackIdx].summary
739
+ };
740
+ });
741
+ }
742
+ async searchFlows(query, workspace) {
743
+ await this.initFlows(workspace);
744
+ const flows = this.flows;
745
+ if (!flows)
746
+ return [];
747
+ const trimmed = query.trim();
748
+ if (!trimmed) {
749
+ return flows.map((f) => ({
750
+ type: 'flow',
751
+ path: f.path,
752
+ summary: f.summary
753
+ }));
754
+ }
755
+ const haystack = flows.map((f) => emptyString(f.summary) ? f.path : f.summary + ' (' + f.path + ')');
756
+ const [idxs, , order] = this.uf.search(haystack, trimmed);
757
+ if (!idxs || !order)
758
+ return [];
759
+ return order.map((orderIdx) => {
760
+ const haystackIdx = idxs[orderIdx];
761
+ return {
762
+ type: 'flow',
763
+ path: flows[haystackIdx].path,
764
+ summary: flows[haystackIdx].summary
765
+ };
766
+ });
767
+ }
768
+ async search(query, workspace, type = 'all') {
769
+ const results = [];
770
+ if (type === 'all' || type === 'scripts') {
771
+ results.push(...(await this.searchScripts(query, workspace)));
772
+ }
773
+ if (type === 'all' || type === 'flows') {
774
+ results.push(...(await this.searchFlows(query, workspace)));
775
+ }
776
+ return results;
777
+ }
778
+ async getScript(path, workspace) {
779
+ const key = `${workspace}:${path}`;
780
+ let cached = this.scriptCache.get(key);
781
+ if (!cached) {
782
+ cached = await ScriptService.getScriptByPath({ workspace, path });
783
+ this.scriptCache.set(key, cached);
784
+ }
785
+ return cached;
786
+ }
787
+ async getFlow(path, workspace) {
788
+ const key = `${workspace}:${path}`;
789
+ let cached = this.flowCache.get(key);
790
+ if (!cached) {
791
+ cached = await FlowService.getFlowByPath({ workspace, path });
792
+ this.flowCache.set(key, cached);
793
+ }
794
+ return cached;
795
+ }
796
+ }
797
+ const searchWorkspaceSchema = z.object({
798
+ query: z
799
+ .string()
800
+ .describe('Comma separated list of keywords to search for (e.g. "stripe, send email, ETL")'),
801
+ type: z
802
+ .enum(['all', 'scripts', 'flows'])
803
+ .describe('Filter by type: "all" for both scripts and flows, "scripts" for scripts only, "flows" for flows only.')
804
+ });
805
+ const searchWorkspaceToolDef = createToolDef(searchWorkspaceSchema, 'search_workspace', 'Search for scripts and flows in the workspace. Use this when a user asks about existing building blocks, wants to find a script/flow, or asks "what do I have for X". ALWAYS search really broadly.');
806
+ export const workspaceRunnablesSearch = new WorkspaceRunnablesSearch();
807
+ export const createSearchWorkspaceTool = () => ({
808
+ def: searchWorkspaceToolDef,
809
+ fn: async ({ args, workspace, toolId, toolCallbacks }) => {
810
+ const parsedArgs = searchWorkspaceSchema.parse(args);
811
+ const type = parsedArgs.type;
812
+ toolCallbacks.setToolStatus(toolId, {
813
+ content: `Searching workspace...`
814
+ });
815
+ const results = [];
816
+ const keywords = parsedArgs.query.split(',').map((keyword) => keyword.trim());
817
+ const seenPaths = new Set();
818
+ for (const keyword of keywords) {
819
+ const keywordResults = await workspaceRunnablesSearch.search(keyword, workspace, type);
820
+ for (const result of keywordResults) {
821
+ if (!seenPaths.has(result.path)) {
822
+ results.push(result);
823
+ seenPaths.add(result.path);
824
+ }
825
+ }
826
+ }
827
+ toolCallbacks.setToolStatus(toolId, {
828
+ content: `Found ${results.length} result(s)`
829
+ });
830
+ return JSON.stringify(results, null, 2);
831
+ }
832
+ });
833
+ const getRunnableDetailsSchema = z.object({
834
+ path: z.string().describe('The path of the script or flow (e.g. "f/marketing/send_email")'),
835
+ type: z.enum(['script', 'flow']).describe('Whether this is a script or a flow')
836
+ });
837
+ const getRunnableDetailsToolDef = createToolDef(getRunnableDetailsSchema, 'get_runnable_details', 'Get details (summary, description, inputs schema, content) of a specific script or flow by path');
838
+ export const createGetRunnableDetailsTool = () => ({
839
+ def: getRunnableDetailsToolDef,
840
+ fn: async ({ args, workspace, toolId, toolCallbacks }) => {
841
+ const parsedArgs = getRunnableDetailsSchema.parse(args);
842
+ const { path, type } = parsedArgs;
843
+ toolCallbacks.setToolStatus(toolId, {
844
+ content: `Getting ${type} details for "${path}"...`
845
+ });
846
+ try {
847
+ if (type === 'script') {
848
+ const script = await workspaceRunnablesSearch.getScript(path, workspace);
849
+ toolCallbacks.setToolStatus(toolId, {
850
+ content: `Retrieved script details for "${path}"`
851
+ });
852
+ const content = script.content ?? '';
853
+ const truncatedContent = content.length > MAX_RUNNABLE_CONTENT_LENGTH
854
+ ? content.slice(0, MAX_RUNNABLE_CONTENT_LENGTH) + '\n... (truncated)'
855
+ : content;
856
+ return JSON.stringify({
857
+ path: script.path,
858
+ summary: script.summary,
859
+ description: script.description,
860
+ language: script.language,
861
+ schema: script.schema,
862
+ content: truncatedContent
863
+ }, null, 2);
864
+ }
865
+ else {
866
+ const flow = await workspaceRunnablesSearch.getFlow(path, workspace);
867
+ toolCallbacks.setToolStatus(toolId, {
868
+ content: `Retrieved flow details for "${path}"`
869
+ });
870
+ const flowValue = JSON.stringify(flow.value, null, 2);
871
+ const truncatedValue = flowValue.length > MAX_RUNNABLE_CONTENT_LENGTH
872
+ ? flowValue.slice(0, MAX_RUNNABLE_CONTENT_LENGTH) + '\n... (truncated)'
873
+ : flowValue;
874
+ return JSON.stringify({
875
+ path: flow.path,
876
+ summary: flow.summary,
877
+ description: flow.description,
878
+ schema: flow.schema,
879
+ value: truncatedValue
880
+ }, null, 2);
881
+ }
882
+ }
883
+ catch (error) {
884
+ const errorMessage = error instanceof Error ? error.message : String(error);
885
+ toolCallbacks.setToolStatus(toolId, {
886
+ content: `Error getting ${type} details`,
887
+ error: errorMessage
888
+ });
889
+ return `Error getting ${type} details for "${path}": ${errorMessage}`;
890
+ }
891
+ }
892
+ });
@@ -9,6 +9,7 @@ import { formatResourceTypes } from './utils';
9
9
  import { z } from 'zod';
10
10
  import { processToolCall } from './chat/shared';
11
11
  import { getNonStreamingOpenAIResponsesCompletion, getOpenAIResponsesCompletionStream } from './chat/openai-responses';
12
+ import { convertOpenAIToAnthropicMessages } from './chat/anthropic';
12
13
  import { generateRandomString } from '../../utils';
13
14
  import { copilotInfo, getCurrentModel } from '../../aiStore';
14
15
  export const SUPPORTED_LANGUAGES = new Set(Object.keys(GEN_CONFIG.prompts));
@@ -337,6 +338,17 @@ export async function testKey({ apiKey, resourcePath, model, abortController, me
337
338
  if (!modelToTest) {
338
339
  throw new Error('Missing a model to test');
339
340
  }
341
+ // Use Anthropic SDK for Anthropic provider
342
+ if (aiProvider === 'anthropic') {
343
+ await testAnthropicKey({
344
+ apiKey,
345
+ resourcePath,
346
+ model: modelToTest,
347
+ abortController,
348
+ messages
349
+ });
350
+ return;
351
+ }
340
352
  await getNonStreamingCompletion(messages, abortController, {
341
353
  apiKey,
342
354
  resourcePath,
@@ -346,6 +358,36 @@ export async function testKey({ apiKey, resourcePath, model, abortController, me
346
358
  }
347
359
  });
348
360
  }
361
+ async function testAnthropicKey({ apiKey, resourcePath, model, abortController, messages }) {
362
+ const { system, messages: anthropicMessages } = convertOpenAIToAnthropicMessages(messages);
363
+ const headers = {
364
+ 'X-Provider': 'anthropic',
365
+ 'anthropic-version': '2023-06-01',
366
+ 'X-Anthropic-SDK': 'true'
367
+ };
368
+ if (resourcePath) {
369
+ headers['X-Resource-Path'] = resourcePath;
370
+ }
371
+ else if (apiKey) {
372
+ headers['X-API-Key'] = apiKey;
373
+ }
374
+ const anthropicClient = apiKey
375
+ ? new Anthropic({
376
+ baseURL: `${location.origin}${OpenAPI.BASE}/ai/proxy`,
377
+ apiKey: 'fake-key',
378
+ dangerouslyAllowBrowser: true
379
+ })
380
+ : workspaceAIClients.getAnthropicClient();
381
+ await anthropicClient.messages.create({
382
+ model,
383
+ max_tokens: 100,
384
+ messages: anthropicMessages,
385
+ ...(system && { system })
386
+ }, {
387
+ signal: abortController.signal,
388
+ headers
389
+ });
390
+ }
349
391
  async function getResourceTypes(scriptOptions) {
350
392
  const elems = scriptOptions.type === 'gen' || scriptOptions.type === 'edit' ? [scriptOptions.description] : [];
351
393
  if (scriptOptions.type === 'edit' || scriptOptions.type === 'fix') {
@@ -0,0 +1,7 @@
1
+ export declare function dedicatedWorkerTag(workspaceId: string, path: string): Promise<string>;
2
+ export declare function parseTag(tag: string): {
3
+ workspace: string;
4
+ type: 'script' | 'flow';
5
+ path: string;
6
+ } | null;
7
+ export declare function computeHashedTag(rawTag: string): Promise<string>;
@@ -0,0 +1,36 @@
1
+ const MAX_TAG_LEN = 50;
2
+ const HASH_SUFFIX_LEN = 16;
3
+ // IMPORTANT: This implementation must stay in sync with the Rust backend
4
+ // `dedicated_worker_tag()` in backend/windmill-common/src/worker.rs.
5
+ // The frontend version is used for display; the backend version is authoritative.
6
+ export async function dedicatedWorkerTag(workspaceId, path) {
7
+ const fullTag = `${workspaceId}:${path}`;
8
+ if (fullTag.length <= MAX_TAG_LEN)
9
+ return fullTag;
10
+ const encoded = new TextEncoder().encode(fullTag);
11
+ const hashBuffer = await crypto.subtle.digest('SHA-256', encoded);
12
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
13
+ const hexHash = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
14
+ const prefixLen = MAX_TAG_LEN - 1 - HASH_SUFFIX_LEN;
15
+ return `${fullTag.substring(0, prefixLen)}#${hexHash.substring(0, HASH_SUFFIX_LEN)}`;
16
+ }
17
+ export function parseTag(tag) {
18
+ const colonIndex = tag.indexOf(':');
19
+ if (colonIndex === -1)
20
+ return null;
21
+ const workspace = tag.substring(0, colonIndex);
22
+ const rest = tag.substring(colonIndex + 1);
23
+ if (rest.startsWith('flow/')) {
24
+ return { workspace, type: 'flow', path: rest.substring(5) };
25
+ }
26
+ else {
27
+ return { workspace, type: 'script', path: rest };
28
+ }
29
+ }
30
+ export async function computeHashedTag(rawTag) {
31
+ const parsed = parseTag(rawTag);
32
+ if (!parsed)
33
+ return rawTag;
34
+ const fullPath = parsed.type === 'flow' ? `flow/${parsed.path}` : parsed.path;
35
+ return dedicatedWorkerTag(parsed.workspace, fullPath);
36
+ }
@@ -4,36 +4,21 @@ import ErrorHandlerToggleButton from './ErrorHandlerToggleButton.svelte';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  import { userStore } from '../../stores';
6
6
  import { createEventDispatcher, getContext, tick } from 'svelte';
7
+ import SummaryPathDisplay from '../SummaryPathDisplay.svelte';
7
8
  import { Calendar } from 'lucide-svelte';
8
- import { emptyString } from '../../utils';
9
9
  const { triggersCount, triggersState } = $state(getContext('TriggerContext'));
10
- let { mainButtons = [], menuItems = [], summary, path, tag, errorHandlerKind, scriptOrFlowPath, errorHandlerMuted = $bindable(), children, trigger_badges } = $props();
10
+ let { mainButtons = [], menuItems = [], summary, path, tag, errorHandlerKind, scriptOrFlowPath, errorHandlerMuted = $bindable(), onSaved, children, trigger_badges } = $props();
11
11
  const dispatch = createEventDispatcher();
12
12
  </script>
13
13
 
14
- <div class="border-b p-1">
14
+ <div class="border-b">
15
15
  <div class="mx-auto">
16
16
  <div
17
- class="flex w-full flex-wrap md:flex-nowrap justify-end gap-x-2 gap-y-4 items-center min-h-10"
17
+ class="flex w-full flex-wrap md:flex-nowrap justify-end gap-x-2 gap-y-4 items-center min-h-12"
18
18
  >
19
- <div class="grow px-4 inline-flex items-center gap-4 min-w-0">
20
- <div
21
- class={twMerge(
22
- 'min-w-24 text-emphasis truncate flex flex-col gap-0',
23
- $userStore?.operator ? 'pl-10' : ''
24
- )}
25
- >
26
- <span
27
- class={twMerge(
28
- 'text-sm min-w-24 text-emphasis font-semibold truncate',
29
- $userStore?.operator ? 'pl-10' : ''
30
- )}
31
- >
32
- {emptyString(summary) ? (path ?? '') : summary}
33
- </span>
34
- {#if !emptyString(summary)}
35
- <span class="text-2xs text-secondary">{path}</span>
36
- {/if}
19
+ <div class="grow px-2 inline-flex items-center gap-4 min-w-0">
20
+ <div class={twMerge('min-w-0', $userStore?.operator ? 'pl-10' : '')}>
21
+ <SummaryPathDisplay {summary} {path} {onSaved} kind={errorHandlerKind} />
37
22
  </div>
38
23
  {#if tag}
39
24
  <Badge>tag: {tag}</Badge>
@@ -60,7 +45,7 @@ const dispatch = createEventDispatcher();
60
45
  {/if}
61
46
  {@render trigger_badges?.()}
62
47
  </div>
63
- <div class="flex gap-1 items-center">
48
+ <div class="flex gap-1 items-center pr-4">
64
49
  {#if menuItems.length > 0}
65
50
  {#key menuItems}
66
51
  <DropdownV2
@@ -19,6 +19,7 @@ interface Props {
19
19
  errorHandlerKind: 'flow' | 'script';
20
20
  scriptOrFlowPath: string;
21
21
  errorHandlerMuted: boolean | undefined;
22
+ onSaved?: (newPath: string) => void;
22
23
  children?: import('svelte').Snippet;
23
24
  trigger_badges?: import('svelte').Snippet;
24
25
  }
@@ -63,7 +63,7 @@ const useDesktopLayout = $derived(clientWidth >= 768 && !forceSmallScreen);
63
63
  {/if}
64
64
 
65
65
  {#snippet content()}
66
- <div class="grow min-h-0">
66
+ <div class="grow min-h-0 overflow-y-auto">
67
67
  <TabContent value="form" class="flex flex-col flex-1 h-full">
68
68
  {@render form?.()}
69
69
  </TabContent>