windmill-components 1.532.0 → 1.542.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/package/components/AIProviderPicker.svelte +181 -0
  2. package/package/components/AIProviderPicker.svelte.d.ts +15 -0
  3. package/package/components/ArgInfo.svelte +2 -2
  4. package/package/components/ArgInput.svelte +60 -27
  5. package/package/components/ArgInput.svelte.d.ts +3 -3
  6. package/package/components/AssignableTagsInner.svelte +89 -3
  7. package/package/components/Auth0Setting.svelte +8 -3
  8. package/package/components/ConcurrentJobsChart.svelte +36 -48
  9. package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
  10. package/package/components/CustomPopover.svelte.d.ts +1 -1
  11. package/package/components/Dev.svelte +5 -4
  12. package/package/components/DiffDrawer.svelte +2 -2
  13. package/package/components/DiffEditor.svelte +34 -37
  14. package/package/components/DiffEditor.svelte.d.ts +23 -39
  15. package/package/components/DropdownSelect.svelte +26 -0
  16. package/package/components/DropdownSelect.svelte.d.ts +11 -0
  17. package/package/components/DropdownV2Inner.svelte +1 -1
  18. package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
  19. package/package/components/DynamicInput.svelte.d.ts +11 -0
  20. package/package/components/EditableSchemaForm.svelte +155 -140
  21. package/package/components/EditableSchemaForm.svelte.d.ts +6 -7
  22. package/package/components/Editor.svelte +101 -87
  23. package/package/components/Editor.svelte.d.ts +7 -1
  24. package/package/components/EditorBar.svelte +2 -5
  25. package/package/components/FlowBuilder.svelte +10 -7
  26. package/package/components/FlowLogRow.svelte +64 -0
  27. package/package/components/FlowLogRow.svelte.d.ts +15 -0
  28. package/package/components/FlowLogViewer.svelte +406 -373
  29. package/package/components/FlowLogViewer.svelte.d.ts +5 -1
  30. package/package/components/FlowLogViewerWrapper.svelte +44 -1
  31. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  32. package/package/components/FlowPreviewContent.svelte +3 -3
  33. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  34. package/package/components/FlowStatusViewer.svelte +28 -0
  35. package/package/components/FlowStatusViewerInner.svelte +106 -23
  36. package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
  37. package/package/components/FolderPicker.svelte +1 -1
  38. package/package/components/InputTransformForm.svelte +20 -10
  39. package/package/components/JobArgs.svelte +1 -1
  40. package/package/components/JobLoader.svelte.d.ts +1 -1
  41. package/package/components/JobStatus.svelte +2 -0
  42. package/package/components/LogSnippetViewer.svelte +3 -3
  43. package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
  44. package/package/components/LogViewer.svelte +87 -71
  45. package/package/components/LogViewer.svelte.d.ts +1 -0
  46. package/package/components/ModulePreview.svelte +2 -1
  47. package/package/components/ModulePreview.svelte.d.ts +1 -0
  48. package/package/components/ModulePreviewForm.svelte +72 -65
  49. package/package/components/ModulePreviewResultViewer.svelte +13 -18
  50. package/package/components/ModuleTest.svelte +6 -5
  51. package/package/components/ModuleTest.svelte.d.ts +1 -0
  52. package/package/components/OktaSetting.svelte +8 -3
  53. package/package/components/Path.svelte +7 -1
  54. package/package/components/Path.svelte.d.ts +1 -1
  55. package/package/components/Portal.svelte +11 -7
  56. package/package/components/Portal.svelte.d.ts +19 -39
  57. package/package/components/PrefixedInput.svelte +120 -0
  58. package/package/components/PrefixedInput.svelte.d.ts +8 -0
  59. package/package/components/QueuePosition.svelte +81 -0
  60. package/package/components/QueuePosition.svelte.d.ts +8 -0
  61. package/package/components/ResourceNarrowing.svelte +13 -0
  62. package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
  63. package/package/components/ResourceTypePicker.svelte +49 -74
  64. package/package/components/RunChart.svelte +74 -89
  65. package/package/components/RunChart.svelte.d.ts +10 -22
  66. package/package/components/RunForm.svelte +2 -2
  67. package/package/components/RunForm.svelte.d.ts +1 -1
  68. package/package/components/RunFormAdvancedPopup.svelte +13 -1
  69. package/package/components/S3FilePicker.svelte +1 -1
  70. package/package/components/SchemaForm.svelte +1 -2
  71. package/package/components/SchemaForm.svelte.d.ts +2 -2
  72. package/package/components/ScriptBuilder.svelte +3 -2
  73. package/package/components/ScriptEditor.svelte +25 -10
  74. package/package/components/ScriptEditor.svelte.d.ts +2 -1
  75. package/package/components/ServiceLogsInner.svelte +1 -1
  76. package/package/components/ShareModal.svelte.d.ts +1 -1
  77. package/package/components/SimpleEditor.svelte +4 -68
  78. package/package/components/StringTypeNarrowing.svelte +5 -10
  79. package/package/components/TemplateEditor.svelte +2 -16
  80. package/package/components/TimeAgo.svelte +1 -1
  81. package/package/components/TimeAgo.svelte.d.ts +1 -0
  82. package/package/components/Toggle.svelte +2 -1
  83. package/package/components/Toggle.svelte.d.ts +2 -1
  84. package/package/components/WorkerRepl.svelte +1 -1
  85. package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
  86. package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
  87. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
  88. package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
  89. package/package/components/apps/components/display/table/utils.js +36 -5
  90. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
  91. package/package/components/apps/components/layout/AppModal.svelte +2 -2
  92. package/package/components/apps/editor/AppEditor.svelte +4 -3
  93. package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
  94. package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
  95. package/package/components/apps/editor/SettingsPanel.svelte +2 -2
  96. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
  97. package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  98. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
  99. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  100. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  101. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
  102. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  103. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +29 -4
  104. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
  105. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
  106. package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
  107. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  108. package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
  109. package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
  110. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
  111. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
  112. package/package/components/assets/JobAssetsViewer.svelte +28 -24
  113. package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
  114. package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
  115. package/package/components/common/OnChange.svelte.d.ts +11 -4
  116. package/package/components/common/badge/Badge.svelte +9 -2
  117. package/package/components/common/badge/Badge.svelte.d.ts +2 -1
  118. package/package/components/common/button/model.d.ts +1 -1
  119. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
  120. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
  121. package/package/components/common/drawer/Disposable.svelte +45 -26
  122. package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
  123. package/package/components/common/drawer/Drawer.svelte +17 -14
  124. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  125. package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
  126. package/package/components/common/modal/Modal.svelte.d.ts +1 -1
  127. package/package/components/common/tabs/TabContent.svelte +2 -7
  128. package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
  129. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
  130. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  131. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
  132. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  133. package/package/components/copilot/MetadataGen.svelte +14 -3
  134. package/package/components/copilot/chat/AIChatInput.svelte +0 -1
  135. package/package/components/copilot/chat/AIChatManager.svelte.js +26 -104
  136. package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
  137. package/package/components/copilot/chat/AvailableContextList.svelte +192 -66
  138. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -2
  139. package/package/components/copilot/chat/ContextElementBadge.svelte +3 -3
  140. package/package/components/copilot/chat/ContextManager.svelte.js +36 -13
  141. package/package/components/copilot/chat/ContextTextarea.svelte +21 -48
  142. package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
  143. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
  144. package/package/components/copilot/chat/anthropic.d.ts +15 -0
  145. package/package/components/copilot/chat/anthropic.js +208 -0
  146. package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
  147. package/package/components/copilot/chat/api/apiTools.js +10 -7
  148. package/package/components/copilot/chat/api/core.d.ts +1 -1
  149. package/package/components/copilot/chat/api/core.js +7 -2
  150. package/package/components/copilot/chat/ask/core.d.ts +1 -1
  151. package/package/components/copilot/chat/ask/core.js +7 -2
  152. package/package/components/copilot/chat/context.d.ts +7 -2
  153. package/package/components/copilot/chat/flow/FlowAIChat.svelte +110 -8
  154. package/package/components/copilot/chat/flow/core.d.ts +12 -1
  155. package/package/components/copilot/chat/flow/core.js +133 -5
  156. package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
  157. package/package/components/copilot/chat/flow/uiIntents.js +5 -0
  158. package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
  159. package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
  160. package/package/components/copilot/chat/monaco-adapter.d.ts +23 -4
  161. package/package/components/copilot/chat/monaco-adapter.js +55 -16
  162. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  163. package/package/components/copilot/chat/navigator/core.js +7 -2
  164. package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
  165. package/package/components/copilot/chat/script/core.d.ts +5 -4
  166. package/package/components/copilot/chat/script/core.js +134 -21
  167. package/package/components/copilot/chat/shared.d.ts +10 -9
  168. package/package/components/copilot/chat/shared.js +24 -12
  169. package/package/components/copilot/lib.d.ts +29 -8
  170. package/package/components/copilot/lib.js +211 -31
  171. package/package/components/copilot/shared.d.ts +1 -1
  172. package/package/components/copilot/shared.js +16 -10
  173. package/package/components/flows/FlowEditor.svelte +4 -2
  174. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  175. package/package/components/flows/FlowModuleIcon.svelte +8 -8
  176. package/package/components/flows/common/FlowCardHeader.svelte +4 -1
  177. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
  178. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
  179. package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
  180. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
  181. package/package/components/flows/content/FlowInput.svelte +36 -39
  182. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
  183. package/package/components/flows/content/FlowLoop.svelte +7 -0
  184. package/package/components/flows/content/FlowModuleComponent.svelte +42 -46
  185. package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
  186. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  187. package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
  188. package/package/components/flows/content/FlowModuleSuspend.svelte +15 -18
  189. package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
  190. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
  191. package/package/components/flows/content/FlowRetries.svelte +108 -3
  192. package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
  193. package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
  194. package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
  195. package/package/components/flows/dfs.d.ts +1 -1
  196. package/package/components/flows/dfs.js +6 -6
  197. package/package/components/flows/flowInfers.js +15 -42
  198. package/package/components/flows/flowStateUtils.svelte.js +1 -2
  199. package/package/components/flows/flowStore.d.ts +45 -1
  200. package/package/components/flows/flowStore.js +1 -1
  201. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  202. package/package/components/flows/map/FlowModuleSchemaItem.svelte +73 -80
  203. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
  204. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
  205. package/package/components/flows/map/InsertModuleButton.svelte +1 -0
  206. package/package/components/flows/map/InsertModuleInner.svelte +12 -15
  207. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
  208. package/package/components/flows/map/MapItem.svelte +8 -4
  209. package/package/components/flows/map/VirtualItem.svelte +1 -1
  210. package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
  211. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
  212. package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
  213. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
  214. package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
  215. package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
  216. package/package/components/flows/types.d.ts +16 -3
  217. package/package/components/flows/utils.js +3 -0
  218. package/package/components/git_sync/DetectionFlow.svelte +15 -17
  219. package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
  220. package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
  221. package/package/components/graph/FlowGraphV2.svelte +1 -1
  222. package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
  223. package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
  224. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
  225. package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
  226. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
  227. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
  228. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
  229. package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
  230. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
  231. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
  232. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
  233. package/package/components/home/ItemsList.svelte +17 -13
  234. package/package/components/home/TreeView.svelte +21 -27
  235. package/package/components/home/TreeView.svelte.d.ts +2 -29
  236. package/package/components/home/TreeViewRoot.svelte +11 -23
  237. package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
  238. package/package/components/icons/GitIcon.svelte +10 -2
  239. package/package/components/icons/GitIcon.svelte.d.ts +1 -0
  240. package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
  241. package/package/components/meltComponents/Popover.svelte +23 -3
  242. package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
  243. package/package/components/monacoLanguagesOptions.d.ts +3 -0
  244. package/package/components/monacoLanguagesOptions.js +109 -0
  245. package/package/components/propertyPicker/ObjectViewer.svelte +18 -5
  246. package/package/components/propertyPicker/PropPicker.svelte +1 -1
  247. package/package/components/propertyPicker/utils.js +14 -7
  248. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
  249. package/package/components/runs/JobRunsPreview.svelte +212 -177
  250. package/package/components/runs/JobsLoader.svelte +2 -2
  251. package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
  252. package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
  253. package/package/components/runs/RunBadges.svelte +100 -0
  254. package/package/components/runs/RunBadges.svelte.d.ts +12 -0
  255. package/package/components/runs/RunLabels.svelte +86 -0
  256. package/package/components/runs/RunLabels.svelte.d.ts +10 -0
  257. package/package/components/runs/RunOption.svelte +20 -0
  258. package/package/components/runs/RunOption.svelte.d.ts +10 -0
  259. package/package/components/runs/RunRow.svelte +239 -151
  260. package/package/components/runs/RunRow.svelte.d.ts +12 -9
  261. package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
  262. package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
  263. package/package/components/runs/RunsFilter.svelte +369 -243
  264. package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
  265. package/package/components/runs/RunsQueue.svelte +96 -25
  266. package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
  267. package/package/components/runs/RunsTable.svelte +62 -71
  268. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  269. package/package/components/runs/runs-grid.css +95 -0
  270. package/package/components/schema/AddPropertyV2.svelte +2 -7
  271. package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
  272. package/package/components/schema/EditableSchemaDrawer.svelte +121 -127
  273. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
  274. package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
  275. package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
  276. package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
  277. package/package/components/schema/FlowPropertyEditor.svelte +195 -236
  278. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  279. package/package/components/schema/PropertyEditor.svelte +33 -35
  280. package/package/components/schema/SchemaFormDND.svelte +11 -10
  281. package/package/components/schema/SchemaFormDND.svelte.d.ts +4 -3
  282. package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
  283. package/package/components/search/GlobalSearchModal.svelte +8 -1
  284. package/package/components/select/DraggableTags.svelte.d.ts +17 -7
  285. package/package/components/select/MultiSelect.svelte.d.ts +21 -11
  286. package/package/components/select/Select.svelte +2 -1
  287. package/package/components/select/Select.svelte.d.ts +25 -13
  288. package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
  289. package/package/components/settings/PremiumInfo.svelte +7 -2
  290. package/package/components/settings/TokenDisplay.svelte +1 -1
  291. package/package/components/sidebar/OperatorMenu.svelte +5 -0
  292. package/package/components/sidebar/SidebarContent.svelte +48 -2
  293. package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
  294. package/package/components/toast.js +6 -3
  295. package/package/components/triggers/AddTriggersButton.svelte +7 -6
  296. package/package/components/triggers/CaptureWrapper.svelte +21 -16
  297. package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
  298. package/package/components/triggers/TriggerLabel.svelte +8 -0
  299. package/package/components/triggers/TriggerTokens.svelte +1 -1
  300. package/package/components/triggers/TriggersEditor.svelte +9 -5
  301. package/package/components/triggers/TriggersTable.svelte +2 -2
  302. package/package/components/triggers/TriggersWrapper.svelte +17 -5
  303. package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
  304. package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
  305. package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
  306. package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
  307. package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
  308. package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
  309. package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
  310. package/package/components/triggers/email/EmailCapture.svelte +39 -0
  311. package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
  312. package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
  313. package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
  314. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
  315. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
  316. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
  317. package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
  318. package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
  319. package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
  320. package/package/components/triggers/email/utils.d.ts +4 -0
  321. package/package/components/triggers/email/utils.js +52 -0
  322. package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
  323. package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
  324. package/package/components/triggers/http/utils.js +1 -1
  325. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
  326. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
  327. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
  328. package/package/components/triggers/triggers.svelte.d.ts +1 -0
  329. package/package/components/triggers/triggers.svelte.js +24 -2
  330. package/package/components/triggers/utils.js +19 -5
  331. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
  332. package/package/components/triggers.d.ts +1 -1
  333. package/package/components/triggers.js +2 -0
  334. package/package/components/wizards/AgGridWizard.svelte +85 -80
  335. package/package/components/workspaceSettings/AISettings.svelte +74 -22
  336. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  337. package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
  338. package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
  339. package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
  340. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
  341. package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
  342. package/package/gen/core/OpenAPI.js +1 -1
  343. package/package/gen/schemas.gen.d.ts +142 -3
  344. package/package/gen/schemas.gen.js +144 -3
  345. package/package/gen/services.gen.d.ts +129 -1
  346. package/package/gen/services.gen.js +267 -1
  347. package/package/gen/types.gen.d.ts +434 -8
  348. package/package/hubPaths.json +6 -2
  349. package/package/infer.js +1 -1
  350. package/package/keyboardChain.d.ts +5 -0
  351. package/package/keyboardChain.js +40 -0
  352. package/package/script_helpers.d.ts +2 -2
  353. package/package/script_helpers.js +2 -0
  354. package/package/services/JobManager.js +2 -2
  355. package/package/stores.d.ts +4 -1
  356. package/package/stores.js +16 -6
  357. package/package/utils/workspaceHierarchy.d.ts +27 -0
  358. package/package/utils/workspaceHierarchy.js +101 -0
  359. package/package/utils.d.ts +6 -3
  360. package/package/utils.js +30 -15
  361. package/package/workspace_settings.js +2 -3
  362. package/package.json +10 -12
  363. package/package/components/DynSelect.svelte.d.ts +0 -11
  364. package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
  365. package/package/components/ObjectTypeNarrowing.svelte +0 -18
  366. package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
  367. package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
  368. package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
  369. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
  370. package/package/components/details/EmailTriggerPanel.svelte +0 -76
  371. package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
@@ -2,10 +2,12 @@ interface Props {
2
2
  defaultValues?: Record<string, any> | undefined;
3
3
  headless?: boolean;
4
4
  natsResourcePath: string;
5
- subjects: string[];
6
- useJetstream: boolean;
7
- streamName: string;
8
- consumerName: string;
5
+ natsCfg: {
6
+ subjects: string[];
7
+ use_jetstream: boolean;
8
+ stream_name?: string;
9
+ consumer_name?: string;
10
+ };
9
11
  path: string;
10
12
  can_write?: boolean;
11
13
  showTestingBadge?: boolean;
@@ -27,6 +29,6 @@ declare const NatsTriggersConfigSection: $$__sveltets_2_IsomorphicComponent<Prop
27
29
  'valid-config': CustomEvent<any>;
28
30
  } & {
29
31
  [evt: string]: CustomEvent<any>;
30
- }, {}, {}, "subjects" | "natsResourcePath" | "useJetstream" | "streamName" | "consumerName">;
32
+ }, {}, {}, "natsResourcePath" | "natsCfg">;
31
33
  type NatsTriggersConfigSection = InstanceType<typeof NatsTriggersConfigSection>;
32
34
  export default NatsTriggersConfigSection;
@@ -27,5 +27,6 @@ export declare class Triggers {
27
27
  fetchSqsTriggers(triggersCountStore: Writable<TriggersCount | undefined>, workspaceId: string | undefined, path: string, isFlow: boolean, user?: UserExt | undefined): Promise<void>;
28
28
  fetchGcpTriggers(triggersCountStore: Writable<TriggersCount | undefined>, workspaceId: string | undefined, path: string, isFlow: boolean, user?: UserExt | undefined): Promise<void>;
29
29
  fetchHttpTriggers(triggersCountStore: Writable<TriggersCount | undefined>, workspaceId: string | undefined, path: string, isFlow: boolean, user?: UserExt | undefined): Promise<void>;
30
+ fetchEmailTriggers(triggersCountStore: Writable<TriggersCount | undefined>, workspaceId: string | undefined, path: string, isFlow: boolean, user?: UserExt | undefined): Promise<void>;
30
31
  fetchTriggers(triggersCountStore: Writable<TriggersCount | undefined>, workspaceId: string | undefined, path: string, isFlow: boolean, primarySchedule?: ScheduleTrigger | undefined | false, user?: UserExt | undefined): Promise<void>;
31
32
  }
@@ -1,4 +1,4 @@
1
- import { KafkaTriggerService, MqttTriggerService, NatsTriggerService, PostgresTriggerService, ScheduleService, SqsTriggerService, WebsocketTriggerService, HttpTriggerService, GcpTriggerService } from '../../gen';
1
+ import { KafkaTriggerService, MqttTriggerService, NatsTriggerService, PostgresTriggerService, ScheduleService, SqsTriggerService, WebsocketTriggerService, HttpTriggerService, GcpTriggerService, EmailTriggerService } from '../../gen';
2
2
  import { getLightConfig, sortTriggers, updateTriggersCount } from './utils';
3
3
  import { canWrite, formatCron, generateRandomString } from '../../utils';
4
4
  export class Triggers {
@@ -316,6 +316,27 @@ export class Triggers {
316
316
  console.error('Failed to fetch HTTP triggers:', error);
317
317
  }
318
318
  }
319
+ async fetchEmailTriggers(triggersCountStore, workspaceId, path, isFlow, user = undefined) {
320
+ if (!workspaceId)
321
+ return;
322
+ try {
323
+ const emailTriggers = await EmailTriggerService.listEmailTriggers({
324
+ workspace: workspaceId,
325
+ path,
326
+ isFlow
327
+ });
328
+ const emailCount = this.updateTriggers(emailTriggers, 'email', user);
329
+ triggersCountStore.update((triggersCount) => {
330
+ return {
331
+ ...(triggersCount ?? {}),
332
+ email_count: emailCount
333
+ };
334
+ });
335
+ }
336
+ catch (error) {
337
+ console.error('Failed to fetch email triggers:', error);
338
+ }
339
+ }
319
340
  async fetchTriggers(triggersCountStore, workspaceId, path, isFlow, primarySchedule = undefined, user = undefined) {
320
341
  if (!workspaceId)
321
342
  return;
@@ -329,7 +350,8 @@ export class Triggers {
329
350
  this.fetchNatsTriggers(triggersCountStore, workspaceId, path, isFlow, user),
330
351
  this.fetchMqttTriggers(triggersCountStore, workspaceId, path, isFlow, user),
331
352
  this.fetchSqsTriggers(triggersCountStore, workspaceId, path, isFlow, user),
332
- this.fetchGcpTriggers(triggersCountStore, workspaceId, path, isFlow, user)
353
+ this.fetchGcpTriggers(triggersCountStore, workspaceId, path, isFlow, user),
354
+ this.fetchEmailTriggers(triggersCountStore, workspaceId, path, isFlow, user)
333
355
  ]);
334
356
  }
335
357
  }
@@ -16,6 +16,7 @@ import { saveNatsTriggerFromCfg } from './nats/utils';
16
16
  import { saveMqttTriggerFromCfg } from './mqtt/utils';
17
17
  import { saveGcpTriggerFromCfg } from './gcp/utils';
18
18
  import { emptyString } from '../../utils';
19
+ import { saveEmailTriggerFromCfg } from './email/utils';
19
20
  export const CLOUD_DISABLED_TRIGGER_TYPES = [
20
21
  'nats',
21
22
  'kafka',
@@ -29,6 +30,7 @@ export const CLOUD_DISABLED_TRIGGER_TYPES = [
29
30
  export const triggerIconMap = {
30
31
  webhook: Webhook,
31
32
  email: Mail,
33
+ default_email: Mail,
32
34
  schedule: Calendar,
33
35
  http: Route,
34
36
  websocket: Unplug,
@@ -52,6 +54,7 @@ export function triggerTypeToCaptureKind(triggerType) {
52
54
  const capturableTriggerTypes = [
53
55
  'webhook',
54
56
  'email',
57
+ 'default_email',
55
58
  'http',
56
59
  'websocket',
57
60
  'postgres',
@@ -71,7 +74,7 @@ export function updateTriggersCount(triggersCountStore, type, action, primaryCfg
71
74
  // Map trigger types to their corresponding count property names
72
75
  const countPropertyMap = {
73
76
  webhook: undefined,
74
- email: undefined,
77
+ default_email: undefined,
75
78
  schedule: 'schedule_count',
76
79
  http: 'http_routes_count',
77
80
  websocket: 'websocket_count',
@@ -81,6 +84,7 @@ export function updateTriggersCount(triggersCountStore, type, action, primaryCfg
81
84
  mqtt: 'mqtt_count',
82
85
  sqs: 'sqs_count',
83
86
  gcp: 'gcp_count',
87
+ email: 'email_count',
84
88
  poll: undefined,
85
89
  cli: undefined
86
90
  };
@@ -126,6 +130,8 @@ export function triggerKindToTriggerType(kind) {
126
130
  return 'webhook';
127
131
  case 'emails':
128
132
  return 'email';
133
+ case 'default_emails':
134
+ return 'default_email';
129
135
  case 'schedules':
130
136
  return 'schedule';
131
137
  case 'routes':
@@ -164,7 +170,7 @@ export async function deployTriggers(triggersToDeploy, workspaceId, isAdmin, use
164
170
  // Map of trigger types to their save functions
165
171
  const triggerSaveFunctions = {
166
172
  webhook: undefined,
167
- email: undefined,
173
+ default_email: undefined,
168
174
  schedule: (trigger) => {
169
175
  if (trigger.isPrimary && initialPath) {
170
176
  trigger.draftConfig = {
@@ -183,6 +189,7 @@ export async function deployTriggers(triggersToDeploy, workspaceId, isAdmin, use
183
189
  mqtt: (trigger) => saveMqttTriggerFromCfg(trigger.path ?? trigger.draftConfig?.path ?? '', trigger.draftConfig ?? {}, !trigger.isDraft, workspaceId, usedTriggerKinds),
184
190
  sqs: (trigger) => saveSqsTriggerFromCfg(trigger.path ?? trigger.draftConfig?.path ?? '', trigger.draftConfig ?? {}, !trigger.isDraft, workspaceId, usedTriggerKinds),
185
191
  gcp: (trigger) => saveGcpTriggerFromCfg(trigger.path ?? trigger.draftConfig?.path ?? '', trigger.draftConfig ?? {}, !trigger.isDraft, workspaceId, usedTriggerKinds),
192
+ email: (trigger) => saveEmailTriggerFromCfg(trigger.path ?? trigger.draftConfig?.path ?? '', trigger.draftConfig ?? {}, !trigger.isDraft, workspaceId, isAdmin, usedTriggerKinds),
186
193
  poll: undefined,
187
194
  cli: undefined
188
195
  };
@@ -262,6 +269,9 @@ export function getLightConfig(triggerType, trigger) {
262
269
  else if (triggerType === 'gcp') {
263
270
  return { gcp_resource_path: trigger.gcp_resource_path, topic: trigger.topic };
264
271
  }
272
+ else if (triggerType === 'email') {
273
+ return { local_part: trigger.local_part };
274
+ }
265
275
  else {
266
276
  return undefined;
267
277
  }
@@ -272,7 +282,7 @@ export function getTriggerLabel(trigger) {
272
282
  if (type === 'webhook') {
273
283
  return 'Webhook';
274
284
  }
275
- else if (type === 'email') {
285
+ else if (type === 'default_email') {
276
286
  return 'Email';
277
287
  }
278
288
  else if (type === 'cli') {
@@ -303,6 +313,9 @@ export function getTriggerLabel(trigger) {
303
313
  else if (type === 'websocket' && config?.url) {
304
314
  return `${config?.url}`;
305
315
  }
316
+ else if (type === 'email' && config?.local_part) {
317
+ return `${config?.local_part}`;
318
+ }
306
319
  else if (isDraft && draftConfig?.path) {
307
320
  return `${draftConfig?.path}`;
308
321
  }
@@ -317,7 +330,7 @@ export function sortTriggers(triggers) {
317
330
  const triggerTypeOrder = [
318
331
  'webhook',
319
332
  'cli',
320
- 'email',
333
+ 'default_email',
321
334
  'poll',
322
335
  'schedule',
323
336
  'http',
@@ -327,7 +340,8 @@ export function sortTriggers(triggers) {
327
340
  'nats',
328
341
  'mqtt',
329
342
  'sqs',
330
- 'gcp'
343
+ 'gcp',
344
+ 'email'
331
345
  ];
332
346
  return triggers.sort((a, b) => {
333
347
  // Draft triggers always come last
@@ -331,8 +331,8 @@ $effect(() => {
331
331
  </Label>
332
332
  </div>
333
333
 
334
- {#if !hideTarget}
335
- <Section label="Runnable" class="flex flex-col gap-4">
334
+ <Section label={hideTarget ? 'Runnable options' : 'Runnable'} class="flex flex-col gap-4">
335
+ {#if !hideTarget}
336
336
  <div>
337
337
  <p class="text-xs mb-1 text-tertiary">
338
338
  Pick a script or flow to be triggered<Required required={true} />
@@ -363,21 +363,21 @@ $effect(() => {
363
363
  {/if}
364
364
  </div>
365
365
  </div>
366
+ {/if}
366
367
 
367
- <Toggle
368
- checked={can_return_message}
369
- on:change={() => {
370
- can_return_message = !can_return_message
371
- }}
372
- options={{
373
- right: 'Send runnable result',
374
- rightTooltip:
375
- 'Whether the runnable result should be sent as a message to the websocket server when not null.'
376
- }}
377
- disabled={!can_write}
378
- />
379
- </Section>
380
- {/if}
368
+ <Toggle
369
+ checked={can_return_message}
370
+ on:change={() => {
371
+ can_return_message = !can_return_message
372
+ }}
373
+ options={{
374
+ right: 'Send runnable result',
375
+ rightTooltip:
376
+ 'Whether the runnable result should be sent as a message to the websocket server when not null.'
377
+ }}
378
+ disabled={!can_write}
379
+ />
380
+ </Section>
381
381
 
382
382
  <WebsocketEditorConfigSection
383
383
  bind:url
@@ -16,5 +16,5 @@ export type TriggerContext = {
16
16
  triggersState: Triggers;
17
17
  };
18
18
  export declare function setScheduledPollSchedule(triggersState: Triggers, triggersCount: Writable<TriggersCount | undefined>): void;
19
- export type TriggerKind = 'webhooks' | 'emails' | 'schedules' | 'cli' | 'routes' | 'websockets' | 'scheduledPoll' | 'kafka' | 'nats' | 'postgres' | 'mqtt' | 'sqs' | 'gcp';
19
+ export type TriggerKind = 'webhooks' | 'emails' | 'default_emails' | 'schedules' | 'cli' | 'routes' | 'websockets' | 'scheduledPoll' | 'kafka' | 'nats' | 'postgres' | 'mqtt' | 'sqs' | 'gcp';
20
20
  export declare function captureTriggerKindToTriggerKind(kind: CaptureTriggerKind): TriggerKind;
@@ -25,6 +25,8 @@ export function captureTriggerKindToTriggerKind(kind) {
25
25
  return 'webhooks';
26
26
  case 'email':
27
27
  return 'emails';
28
+ case 'default_email':
29
+ return 'default_emails';
28
30
  case 'http':
29
31
  return 'routes';
30
32
  case 'websocket':
@@ -7,6 +7,7 @@ import Button from '../common/button/Button.svelte';
7
7
  import Popover from '../meltComponents/Popover.svelte';
8
8
  import { offset, flip, shift } from 'svelte-floating-ui/dom';
9
9
  let { value = $bindable(), trigger: trigger_render } = $props();
10
+ const isActionsColumn = $derived(value?._isActionsColumn === true);
10
11
  const presets = [
11
12
  {
12
13
  label: 'None',
@@ -92,16 +93,18 @@ $effect(() => {
92
93
  <input type="text" placeholder="Header name" bind:value={value.headerName} />
93
94
  </Label>
94
95
 
95
- <Label label="Editable value">
96
- <Toggle
97
- on:pointerdown={(e) => {
98
- e?.stopPropagation()
99
- }}
100
- options={{ right: 'Editable' }}
101
- bind:checked={value.editable}
102
- size="xs"
103
- />
104
- </Label>
96
+ {#if !isActionsColumn}
97
+ <Label label="Editable value">
98
+ <Toggle
99
+ on:pointerdown={(e) => {
100
+ e?.stopPropagation()
101
+ }}
102
+ options={{ right: 'Editable' }}
103
+ bind:checked={value.editable}
104
+ size="xs"
105
+ />
106
+ </Label>
107
+ {/if}
105
108
 
106
109
  <Label label="Min width (px)">
107
110
  <input type="number" placeholder="width" bind:value={value.minWidth} />
@@ -124,8 +127,8 @@ $effect(() => {
124
127
  </Tooltip>
125
128
  {/snippet}
126
129
 
127
- <input type="range" step="1" bind:value={value.flex} min={1} max={12} />
128
- <div class="text-xs">{value.flex}</div>
130
+ <input type="range" step="1" bind:value={value.flex} min={0} max={12} />
131
+ <div class="text-xs">{value.flex ?? 0}</div>
129
132
  </Label>
130
133
 
131
134
  <Label label="Hide">
@@ -139,7 +142,8 @@ $effect(() => {
139
142
  />
140
143
  </Label>
141
144
 
142
- <Label label="Value formatter">
145
+ {#if !isActionsColumn}
146
+ <Label label="Value formatter">
143
147
  {#snippet header()}
144
148
  <Tooltip
145
149
  documentationLink="https://www.ag-grid.com/javascript-data-grid/value-formatters/"
@@ -197,83 +201,84 @@ $effect(() => {
197
201
  {/key}
198
202
  </div>
199
203
 
200
- <Label label="Sort">
201
- <select bind:value={value.sort}>
202
- <option value={null}>None</option>
203
- <option value="asc">Ascending</option>
204
- <option value="desc">Descending</option>
205
- </select>
206
- </Label>
204
+ <Label label="Sort">
205
+ <select bind:value={value.sort}>
206
+ <option value={null}>None</option>
207
+ <option value="asc">Ascending</option>
208
+ <option value="desc">Descending</option>
209
+ </select>
210
+ </Label>
207
211
 
208
- <Label label="Filter">
209
- {#snippet header()}
210
- <Tooltip documentationLink="https://www.ag-grid.com/javascript-data-grid/filtering/">
211
- Filtering allows you to limit the rows displayed in your grid to those that match
212
- criteria you specify.
213
- </Tooltip>
214
- {/snippet}
215
- <Toggle
216
- on:pointerdown={(e) => {
217
- e?.stopPropagation()
218
- }}
219
- options={{ right: 'Enable filter' }}
220
- bind:checked={value.filter}
221
- size="xs"
222
- />
223
- </Label>
224
-
225
- <!--
226
- EE only
212
+ <Label label="Filter">
213
+ {#snippet header()}
214
+ <Tooltip documentationLink="https://www.ag-grid.com/javascript-data-grid/filtering/">
215
+ Filtering allows you to limit the rows displayed in your grid to those that match
216
+ criteria you specify.
217
+ </Tooltip>
218
+ {/snippet}
219
+ <Toggle
220
+ on:pointerdown={(e) => {
221
+ e?.stopPropagation()
222
+ }}
223
+ options={{ right: 'Enable filter' }}
224
+ bind:checked={value.filter}
225
+ size="xs"
226
+ />
227
+ </Label>
227
228
 
228
- <Label label="Aggregation function">
229
- <SimpleEditor autoHeight lang="javascript" bind:code={value.aggFunc} />
230
- </Label>
229
+ <!--
230
+ EE only
231
231
 
232
- <Label label="Pivot">
233
- <Toggle bind:checked={value.pivot} size="xs" />
234
- </Label>
232
+ <Label label="Aggregation function">
233
+ <SimpleEditor autoHeight lang="javascript" bind:code={value.aggFunc} />
234
+ </Label>
235
235
 
236
- <Label label="Pivot index">
237
- <input type="number" placeholder="pivot index" bind:value={value.pivotIndex} />
238
- </Label>
236
+ <Label label="Pivot">
237
+ <Toggle bind:checked={value.pivot} size="xs" />
238
+ </Label>
239
239
 
240
- <Label label="Pinned">
241
- <select bind:value={value.pinned}>
242
- <option value={null}>None</option>
243
- <option value="left">Left</option>
244
- <option value="right">Right</option>
245
- </select>
246
- </Label>
240
+ <Label label="Pivot index">
241
+ <input type="number" placeholder="pivot index" bind:value={value.pivotIndex} />
242
+ </Label>
247
243
 
248
- <Label label="Row group">
249
- <Toggle bind:checked={value.rowGroup} size="xs" />
250
- </Label>
244
+ <Label label="Pinned">
245
+ <select bind:value={value.pinned}>
246
+ <option value={null}>None</option>
247
+ <option value="left">Left</option>
248
+ <option value="right">Right</option>
249
+ </select>
250
+ </Label>
251
251
 
252
- <Label label="Row group index">
253
- <input type="number" placeholder="row group index" bind:value={value.rowGroupIndex} />
254
- </Label>
255
- -->
252
+ <Label label="Row group">
253
+ <Toggle bind:checked={value.rowGroup} size="xs" />
254
+ </Label>
256
255
 
257
- <Label label="Type">
258
- <select bind:value={value.cellRendererType}>
259
- <option value="text">Text</option>
260
- <option value="link">Link</option>
261
- </select>
256
+ <Label label="Row group index">
257
+ <input type="number" placeholder="row group index" bind:value={value.rowGroupIndex} />
262
258
  </Label>
259
+ -->
260
+
261
+ <Label label="Type">
262
+ <select bind:value={value.cellRendererType}>
263
+ <option value="text">Text</option>
264
+ <option value="link">Link</option>
265
+ </select>
266
+ </Label>
263
267
 
264
- {#if value.cellRendererType === 'link'}
265
- <Alert type="info" title="Label" size="xs">
266
- They are two ways to define a link:
267
- <ul class="list-disc list-inside">
268
- <li>
269
- <strong>String</strong>: The string will be used as the link and the label.
270
- </li>
271
- <li>
272
- <strong>Object</strong>: The object must have a <code>href</code> and a
273
- <code>label</code> property.
274
- </li>
275
- </ul>
276
- </Alert>
268
+ {#if value.cellRendererType === 'link'}
269
+ <Alert type="info" title="Label" size="xs">
270
+ They are two ways to define a link:
271
+ <ul class="list-disc list-inside">
272
+ <li>
273
+ <strong>String</strong>: The string will be used as the link and the label.
274
+ </li>
275
+ <li>
276
+ <strong>Object</strong>: The object must have a <code>href</code> and a
277
+ <code>label</code> property.
278
+ </li>
279
+ </ul>
280
+ </Alert>
281
+ {/if}
277
282
  {/if}
278
283
  </div>
279
284
  {/if}
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">import { WorkspaceService } from '../../gen';
2
2
  import { setCopilotInfo, workspaceStore } from '../../stores';
3
3
  import { sendUserToast } from '../../toast';
4
- import { AI_DEFAULT_MODELS, fetchAvailableModels } from '../copilot/lib';
4
+ import { AI_PROVIDERS, fetchAvailableModels } from '../copilot/lib';
5
5
  import TestAiKey from '../copilot/TestAIKey.svelte';
6
6
  import Description from '../Description.svelte';
7
7
  import Label from '../Label.svelte';
@@ -13,21 +13,16 @@ import MultiSelect from '../select/MultiSelect.svelte';
13
13
  import { safeSelectItems } from '../select/utils.svelte';
14
14
  import Badge from '../common/badge/Badge.svelte';
15
15
  import Tooltip from '../Tooltip.svelte';
16
- const aiProviderLabels = [
17
- ['openai', 'OpenAI'],
18
- ['azure_openai', 'Azure OpenAI'],
19
- ['anthropic', 'Anthropic'],
20
- ['mistral', 'Mistral'],
21
- ['deepseek', 'DeepSeek'],
22
- ['googleai', 'Google AI'],
23
- ['groq', 'Groq'],
24
- ['openrouter', 'OpenRouter'],
25
- ['togetherai', 'Together AI'],
26
- ['customai', 'Custom AI']
27
- ];
28
- let { aiProviders = $bindable(), codeCompletionModel = $bindable(), defaultModel = $bindable(), usingOpenaiClientCredentialsOauth = $bindable() } = $props();
16
+ import { AIMode } from '../copilot/chat/AIChatManager.svelte';
17
+ import ToggleButtonGroup from '../common/toggleButton-v2/ToggleButtonGroup.svelte';
18
+ import ToggleButton from '../common/toggleButton-v2/ToggleButton.svelte';
19
+ import autosize from '../../autosize';
20
+ const MAX_CUSTOM_PROMPT_LENGTH = 5000;
21
+ let { aiProviders = $bindable(), codeCompletionModel = $bindable(), defaultModel = $bindable(), customPrompts = $bindable(), usingOpenaiClientCredentialsOauth = $bindable() } = $props();
29
22
  let fetchedAiModels = $state(false);
30
- let availableAiModels = $state(Object.fromEntries(aiProviderLabels.map(([provider]) => [provider, AI_DEFAULT_MODELS[provider]])));
23
+ let availableAiModels = $state(Object.fromEntries(Object.keys(AI_PROVIDERS).map((provider) => [provider, AI_PROVIDERS[provider].defaultModels])));
24
+ // Custom system prompt settings
25
+ let selectedAiMode = $state(AIMode.ASK);
31
26
  let selectedAiModels = $derived(Object.values(aiProviders).flatMap((p) => p.models));
32
27
  let modelProviderMap = $derived(Object.fromEntries(Object.entries(aiProviders).flatMap(([provider, config]) => config.models.map((m) => [m, provider]))));
33
28
  $effect(() => {
@@ -49,7 +44,7 @@ $effect(() => {
49
44
  }
50
45
  catch (e) {
51
46
  console.error('failed to fetch models for provider', provider, e);
52
- availableAiModels[provider] = AI_DEFAULT_MODELS[provider];
47
+ availableAiModels[provider] = AI_PROVIDERS[provider].defaultModels;
53
48
  }
54
49
  }
55
50
  fetchedAiModels = true;
@@ -63,10 +58,15 @@ async function editCopilotConfig() {
63
58
  const default_model = defaultModel && modelProviderMap[defaultModel]
64
59
  ? { model: defaultModel, provider: modelProviderMap[defaultModel] }
65
60
  : undefined;
61
+ // Convert customPrompts to include only non-empty prompts
62
+ const custom_prompts = Object.entries(customPrompts)
63
+ .filter(([_, prompt]) => prompt.trim().length > 0)
64
+ .reduce((acc, [mode, prompt]) => ({ ...acc, [mode]: prompt }), {});
66
65
  const config = {
67
66
  providers: aiProviders,
68
67
  code_completion_model,
69
- default_model
68
+ default_model,
69
+ custom_prompts: Object.keys(custom_prompts).length > 0 ? custom_prompts : undefined
70
70
  };
71
71
  await WorkspaceService.editCopilotConfig({
72
72
  workspace: $workspaceStore,
@@ -91,7 +91,7 @@ async function onAiProviderChange(provider) {
91
91
  }
92
92
  catch (e) {
93
93
  console.error('failed to fetch models for provider', provider, e);
94
- availableAiModels[provider] = AI_DEFAULT_MODELS[provider];
94
+ availableAiModels[provider] = AI_PROVIDERS[provider].defaultModels;
95
95
  }
96
96
  }
97
97
  if (aiProviders[provider]?.resource_path &&
@@ -115,12 +115,12 @@ async function onAiProviderChange(provider) {
115
115
  <div class="flex flex-col gap-2">
116
116
  <p class="font-semibold">AI Providers</p>
117
117
  <div class="flex flex-col gap-4">
118
- {#each aiProviderLabels as [provider, label]}
118
+ {#each Object.entries(AI_PROVIDERS) as [provider, details]}
119
119
  <div class="flex flex-col gap-2">
120
120
  <div class="flex flex-row gap-2">
121
121
  <Toggle
122
122
  options={{
123
- right: label
123
+ right: details.label
124
124
  }}
125
125
  checked={!!aiProviders[provider]}
126
126
  on:change={(e) => {
@@ -186,12 +186,12 @@ async function onAiProviderChange(provider) {
186
186
  () => aiProviders[provider].resource_path,
187
187
  (v) => {
188
188
  aiProviders[provider].resource_path = v
189
- onAiProviderChange(provider)
189
+ onAiProviderChange(provider as AIProvider)
190
190
  }
191
191
  }
192
192
  />
193
193
  <TestAiKey
194
- aiProvider={provider}
194
+ aiProvider={provider as AIProvider}
195
195
  resourcePath={aiProviders[provider].resource_path}
196
196
  model={aiProviders[provider].models[0]}
197
197
  />
@@ -276,6 +276,58 @@ async function onAiProviderChange(provider) {
276
276
  </div>
277
277
  {/if}
278
278
 
279
+ {#if Object.keys(aiProviders).length > 0}
280
+ <div class="flex flex-col gap-2">
281
+ <p class="font-semibold">Custom system prompts</p>
282
+ <div class="flex flex-col gap-4">
283
+ <Label label="AI Mode">
284
+ <ToggleButtonGroup
285
+ bind:selected={selectedAiMode}
286
+ on:selected={({ detail }) => {
287
+ selectedAiMode = detail
288
+ }}
289
+ >
290
+ {#snippet children({ item })}
291
+ {#each Object.values(AIMode) as mode}
292
+ <div class="relative">
293
+ <ToggleButton
294
+ value={mode}
295
+ label={mode.charAt(0).toUpperCase() + mode.slice(1)}
296
+ {item}
297
+ />
298
+ {#if customPrompts[mode]?.length > 0}
299
+ <div
300
+ class="absolute -top-1 -right-1 w-2 h-2 bg-blue-500 rounded-full border border-surface"
301
+ ></div>
302
+ {/if}
303
+ </div>
304
+ {/each}
305
+ {/snippet}
306
+ </ToggleButtonGroup>
307
+ </Label>
308
+
309
+ <Label
310
+ label="Custom system prompt for {selectedAiMode.charAt(0).toUpperCase() +
311
+ selectedAiMode.slice(1)} Mode"
312
+ >
313
+ <textarea
314
+ bind:value={customPrompts[selectedAiMode]}
315
+ placeholder="Enter a custom system prompt for {selectedAiMode} mode."
316
+ class="w-full min-h-24 p-2 border border-gray-200 dark:border-gray-700 rounded-md bg-surface text-primary resize-y"
317
+ rows="4"
318
+ maxlength={MAX_CUSTOM_PROMPT_LENGTH}
319
+ use:autosize
320
+ ></textarea>
321
+ <div class="flex justify-end mt-1">
322
+ <span class="text-xs text-secondary">
323
+ {(customPrompts[selectedAiMode] ?? '').length}/{MAX_CUSTOM_PROMPT_LENGTH} characters
324
+ </span>
325
+ </div>
326
+ </Label>
327
+ </div>
328
+ </div>
329
+ {/if}
330
+
279
331
  <Button
280
332
  wrapperClasses="self-start"
281
333
  disabled={!Object.values(aiProviders).every((p) => p.resource_path) ||
@@ -3,8 +3,9 @@ type $$ComponentProps = {
3
3
  aiProviders: Exclude<AIConfig['providers'], undefined>;
4
4
  codeCompletionModel: string | undefined;
5
5
  defaultModel: string | undefined;
6
+ customPrompts: Record<string, string>;
6
7
  usingOpenaiClientCredentialsOauth: boolean;
7
8
  };
8
- declare const AiSettings: import("svelte").Component<$$ComponentProps, {}, "codeCompletionModel" | "defaultModel" | "aiProviders" | "usingOpenaiClientCredentialsOauth">;
9
+ declare const AiSettings: import("svelte").Component<$$ComponentProps, {}, "codeCompletionModel" | "defaultModel" | "aiProviders" | "customPrompts" | "usingOpenaiClientCredentialsOauth">;
9
10
  type AiSettings = ReturnType<typeof AiSettings>;
10
11
  export default AiSettings;