windmill-components 1.596.1 → 1.612.2

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 (414) hide show
  1. package/dist/appPolicy/myFunction.es.js +1337 -0
  2. package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +2 -0
  3. package/dist/sharedUtils/base.d.ts +1 -0
  4. package/dist/sharedUtils/cloud.d.ts +1 -0
  5. package/dist/sharedUtils/common.d.ts +108 -0
  6. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +5 -0
  7. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +5 -0
  8. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
  9. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +11 -0
  10. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +11 -0
  11. package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +84 -0
  12. package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +6 -0
  13. package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +7 -0
  14. package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +22 -0
  15. package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +10 -0
  16. package/dist/sharedUtils/components/apps/editor/component/components.d.ts +5305 -0
  17. package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +3 -0
  18. package/dist/sharedUtils/components/apps/editor/component/index.d.ts +3 -0
  19. package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +7 -0
  20. package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +3 -0
  21. package/dist/sharedUtils/components/apps/gridUtils.d.ts +14 -0
  22. package/dist/sharedUtils/components/apps/inputType.d.ts +176 -0
  23. package/dist/sharedUtils/components/apps/rx.d.ts +29 -0
  24. package/dist/sharedUtils/components/apps/sharedTypes.d.ts +19 -0
  25. package/dist/sharedUtils/components/apps/types.d.ts +274 -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 +11 -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/random_positive_adjetive.d.ts +1 -0
  37. package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +10 -0
  38. package/dist/sharedUtils/components/raw_apps/utils.d.ts +15 -0
  39. package/dist/sharedUtils/components/triggers/email/utils.d.ts +4 -0
  40. package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +2 -0
  41. package/dist/sharedUtils/components/triggers/http/utils.d.ts +11 -0
  42. package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +2 -0
  43. package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +2 -0
  44. package/dist/sharedUtils/components/triggers/nats/utils.d.ts +2 -0
  45. package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +8 -0
  46. package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +2 -0
  47. package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +32 -0
  48. package/dist/sharedUtils/components/triggers/utils.d.ts +81 -0
  49. package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +2 -0
  50. package/dist/sharedUtils/components/triggers.d.ts +20 -0
  51. package/dist/sharedUtils/gen/core/ApiError.d.ts +10 -0
  52. package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +13 -0
  53. package/dist/sharedUtils/gen/core/ApiResult.d.ts +7 -0
  54. package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +26 -0
  55. package/dist/sharedUtils/gen/core/OpenAPI.d.ts +27 -0
  56. package/dist/sharedUtils/gen/core/request.d.ts +29 -0
  57. package/dist/sharedUtils/gen/index.d.ts +6 -0
  58. package/dist/sharedUtils/gen/schemas.gen.d.ts +6192 -0
  59. package/dist/sharedUtils/gen/services.gen.d.ts +5741 -0
  60. package/dist/sharedUtils/gen/types.gen.d.ts +20152 -0
  61. package/dist/sharedUtils/history.svelte.d.ts +9 -0
  62. package/dist/sharedUtils/hub.d.ts +48 -0
  63. package/dist/sharedUtils/jsr.json +6 -0
  64. package/dist/sharedUtils/lib.d.ts +5 -0
  65. package/dist/sharedUtils/lib.es.js +1426 -0
  66. package/dist/sharedUtils/package.json +12 -0
  67. package/dist/sharedUtils/schema.d.ts +3 -0
  68. package/dist/sharedUtils/stores.d.ts +96 -0
  69. package/dist/sharedUtils/svelte5Utils.svelte.d.ts +49 -0
  70. package/dist/sharedUtils/toast.d.ts +8 -0
  71. package/dist/sharedUtils/utils.d.ts +250 -0
  72. package/package/assets/tokens/tokens.json +11 -1
  73. package/package/ata/apis.js +78 -5
  74. package/package/components/AddUser.svelte +1 -1
  75. package/package/components/CenteredModal.svelte +32 -24
  76. package/package/components/CenteredModal.svelte.d.ts +7 -27
  77. package/package/components/CenteredPage.svelte +5 -2
  78. package/package/components/CenteredPage.svelte.d.ts +2 -0
  79. package/package/components/ConcurrentJobsChart.svelte +3 -2
  80. package/package/components/ConcurrentJobsChart.svelte.d.ts +2 -2
  81. package/package/components/CustomPopover.svelte +20 -23
  82. package/package/components/CustomPopover.svelte.d.ts +14 -39
  83. package/package/components/DBManager.svelte +105 -17
  84. package/package/components/DBManager.svelte.d.ts +2 -1
  85. package/package/components/DBManagerContent.svelte +4 -3
  86. package/package/components/DBManagerContent.svelte.d.ts +1 -1
  87. package/package/components/DBTableEditor.svelte +210 -171
  88. package/package/components/DBTableEditor.svelte.d.ts +22 -3
  89. package/package/components/Description.svelte +3 -2
  90. package/package/components/Dev.svelte +36 -2
  91. package/package/components/DiffDrawer.svelte +8 -29
  92. package/package/components/DiffEditor.svelte +32 -2
  93. package/package/components/DisplayResult.svelte +32 -24
  94. package/package/components/Editor.svelte +70 -16
  95. package/package/components/Editor.svelte.d.ts +3 -0
  96. package/package/components/EditorBar.svelte +1 -1
  97. package/package/components/FakeMonacoPlaceHolder.svelte +1 -1
  98. package/package/components/FlowBuilder.svelte +17 -11
  99. package/package/components/FlowDiffViewer.svelte +37 -0
  100. package/package/components/FlowDiffViewer.svelte.d.ts +7 -0
  101. package/package/components/FlowPreviewContent.svelte +3 -2
  102. package/package/components/FlowPreviewResult.svelte +0 -4
  103. package/package/components/FlowStatusViewerInner.svelte +50 -33
  104. package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -1
  105. package/package/components/FlowStatusWaitingForEvents.svelte +27 -23
  106. package/package/components/FlowStatusWaitingForEvents.svelte.d.ts +4 -18
  107. package/package/components/FlowViewer.svelte +103 -2
  108. package/package/components/FlowViewer.svelte.d.ts +9 -3
  109. package/package/components/ForkWorkspaceBanner.svelte +16 -13
  110. package/package/components/GraphqlSchemaViewer.svelte +8 -1
  111. package/package/components/HistoricInputs.svelte +25 -27
  112. package/package/components/HistoricInputs.svelte.d.ts +2 -2
  113. package/package/components/InstanceSetting.svelte +38 -0
  114. package/package/components/InviteUser.svelte +16 -42
  115. package/package/components/InviteUser.svelte.d.ts +4 -18
  116. package/package/components/JobOtelTraces.svelte +287 -0
  117. package/package/components/JobOtelTraces.svelte.d.ts +6 -0
  118. package/package/components/JsonInputs.svelte +6 -8
  119. package/package/components/JsonInputs.svelte.d.ts +7 -8
  120. package/package/components/LogViewer.svelte +91 -33
  121. package/package/components/Login.svelte +21 -0
  122. package/package/components/ManualPopover.svelte +5 -6
  123. package/package/components/ManualPopover.svelte.d.ts +9 -35
  124. package/package/components/MemoryFootprintViewer.svelte +2 -6
  125. package/package/components/ModulePreview.svelte +23 -21
  126. package/package/components/ModulePreview.svelte.d.ts +1 -0
  127. package/package/components/Path.svelte +2 -2
  128. package/package/components/Path.svelte.d.ts +1 -1
  129. package/package/components/ResourcePicker.svelte +3 -0
  130. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  131. package/package/components/RunButton.svelte +5 -15
  132. package/package/components/RunButton.svelte.d.ts +7 -19
  133. package/package/components/RunChart.svelte +8 -4
  134. package/package/components/RunChart.svelte.d.ts +2 -2
  135. package/package/components/RunFormAdvancedPopup.svelte +1 -1
  136. package/package/components/RunsPage.svelte +169 -539
  137. package/package/components/RunsPage.svelte.d.ts +5 -5
  138. package/package/components/S3FilePicker.svelte +7 -11
  139. package/package/components/S3FilePickerInner.svelte +2 -3
  140. package/package/components/S3FilePickerInner.svelte.d.ts +2 -2
  141. package/package/components/SchemaForm.svelte +26 -19
  142. package/package/components/SchemaFormWithArgPicker.svelte +4 -3
  143. package/package/components/ScriptBuilder.svelte +1 -1
  144. package/package/components/ScriptEditor.svelte +575 -101
  145. package/package/components/Section.svelte +3 -1
  146. package/package/components/ServiceLogsInner.svelte +4 -4
  147. package/package/components/SimpleEditor.svelte +46 -2
  148. package/package/components/SuperadminSettingsInner.svelte +1 -1
  149. package/package/components/TemplateEditor.svelte +54 -29
  150. package/package/components/TemplateEditor.svelte.d.ts +13 -102
  151. package/package/components/UserSettings.svelte +1 -1
  152. package/package/components/WorkerTagPicker.svelte +1 -1
  153. package/package/components/WorkerTagSelect.svelte +5 -2
  154. package/package/components/WorkspaceTutorials.svelte +5 -0
  155. package/package/components/apps/components/buttons/AppButton.svelte +21 -6
  156. package/package/components/apps/components/buttons/AppForm.svelte +2 -1
  157. package/package/components/apps/components/buttons/AppFormButton.svelte +2 -1
  158. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +0 -4
  159. package/package/components/apps/components/display/dbtable/metadata.js +69 -30
  160. package/package/components/apps/components/display/dbtable/queries/alterTable.d.ts +46 -0
  161. package/package/components/apps/components/display/dbtable/queries/alterTable.js +314 -0
  162. package/package/components/apps/components/display/dbtable/queries/alterTable.test.d.ts +1 -0
  163. package/package/components/apps/components/display/dbtable/queries/alterTable.test.js +867 -0
  164. package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +2 -24
  165. package/package/components/apps/components/display/dbtable/queries/createTable.js +11 -25
  166. package/package/components/apps/components/display/dbtable/queries/dbQueriesUtils.d.ts +9 -0
  167. package/package/components/apps/components/display/dbtable/queries/dbQueriesUtils.js +45 -0
  168. package/package/components/apps/components/display/dbtable/queries/relationalKeys.d.ts +47 -0
  169. package/package/components/apps/components/display/dbtable/queries/relationalKeys.js +402 -0
  170. package/package/components/apps/components/display/dbtable/queries/select.d.ts +2 -0
  171. package/package/components/apps/components/display/dbtable/queries/select.js +37 -6
  172. package/package/components/apps/components/display/dbtable/tableEditor.d.ts +35 -0
  173. package/package/components/apps/components/display/dbtable/tableEditor.js +49 -0
  174. package/package/components/apps/components/display/dbtable/utils.d.ts +10 -1
  175. package/package/components/apps/components/display/dbtable/utils.js +52 -20
  176. package/package/components/apps/components/helpers/HiddenComponent.svelte +1 -1
  177. package/package/components/apps/components/helpers/InputValue.svelte +1 -1
  178. package/package/components/apps/components/helpers/ResolveConfig.svelte +1 -1
  179. package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -2
  180. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -1
  181. package/package/components/apps/components/helpers/RunnableWrapper.svelte +2 -2
  182. package/package/components/apps/editor/AppEditorHeader.svelte +8 -1
  183. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +32 -29
  184. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +2 -2
  185. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte +4 -4
  186. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte.d.ts +3 -3
  187. package/package/components/apps/editor/PublicApp.svelte +49 -30
  188. package/package/components/apps/editor/PublicApp.svelte.d.ts +1 -0
  189. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +77 -7
  190. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +2 -2
  191. package/package/components/apps/editor/inlineScriptsPanel/utils.d.ts +2 -2
  192. package/package/components/apps/editor/inlineScriptsPanel/utils.js +10 -1
  193. package/package/components/apps/inputType.d.ts +6 -1
  194. package/package/components/auditLogs/AuditLogsFilters.svelte +9 -17
  195. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  196. package/package/components/common/button/model.js +1 -1
  197. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +1 -1
  198. package/package/components/common/languageIcons/TypeScript.svelte +5 -3
  199. package/package/components/common/languageIcons/TypeScript.svelte.d.ts +1 -0
  200. package/package/components/common/modal/Modal.svelte +3 -3
  201. package/package/components/copilot/autocomplete/Autocompletor.js +3 -2
  202. package/package/components/copilot/chat/AIButtonStyle.d.ts +1 -1
  203. package/package/components/copilot/chat/AIButtonStyle.js +2 -1
  204. package/package/components/copilot/chat/AIChat.svelte +3 -1
  205. package/package/components/copilot/chat/AIChatDisplay.svelte +89 -4
  206. package/package/components/copilot/chat/AIChatInput.svelte +275 -0
  207. package/package/components/copilot/chat/AIChatManager.svelte.js +107 -1
  208. package/package/components/copilot/chat/AiChatLayout.svelte +15 -30
  209. package/package/components/copilot/chat/AppAvailableContextList.svelte +263 -0
  210. package/package/components/copilot/chat/AppAvailableContextList.svelte.d.ts +13 -0
  211. package/package/components/copilot/chat/ContextElementBadge.svelte +44 -0
  212. package/package/components/copilot/chat/DatatableCreationPolicy.svelte +32 -33
  213. package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
  214. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +3 -0
  215. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +4 -0
  216. package/package/components/copilot/chat/app/core.d.ts +56 -15
  217. package/package/components/copilot/chat/app/core.js +141 -22
  218. package/package/components/copilot/chat/context.d.ts +59 -2
  219. package/package/components/copilot/chat/context.js +6 -2
  220. package/package/components/copilot/chat/flow/FlowAIChat.svelte +22 -0
  221. package/package/components/copilot/chat/flow/core.d.ts +3 -1
  222. package/package/components/copilot/chat/flow/core.js +29 -2
  223. package/package/components/copilot/chat/flow/openFlow.json +1 -1
  224. package/package/components/copilot/chat/flow/openFlowZod.d.ts +1 -0
  225. package/package/components/copilot/chat/flow/openFlowZod.js +14 -2
  226. package/package/components/copilot/chat/script/core.d.ts +4 -1
  227. package/package/components/copilot/chat/script/core.js +38 -2
  228. package/package/components/copilot/chat/shared.d.ts +10 -0
  229. package/package/components/copilot/chat/shared.js +24 -0
  230. package/package/components/copilot/lib.d.ts +1 -1
  231. package/package/components/custom_ui.d.ts +1 -0
  232. package/package/components/dbOps.d.ts +18 -4
  233. package/package/components/dbOps.js +25 -3
  234. package/package/components/debug/DebugConsole.svelte +277 -0
  235. package/package/components/debug/DebugConsole.svelte.d.ts +13 -0
  236. package/package/components/debug/DebugPanel.svelte +97 -0
  237. package/package/components/debug/DebugPanel.svelte.d.ts +11 -0
  238. package/package/components/debug/DebugToolbar.svelte +148 -0
  239. package/package/components/debug/DebugToolbar.svelte.d.ts +17 -0
  240. package/package/components/debug/DebugVariableViewer.svelte +115 -0
  241. package/package/components/debug/DebugVariableViewer.svelte.d.ts +11 -0
  242. package/package/components/debug/MonacoDebugger.svelte +384 -0
  243. package/package/components/debug/MonacoDebugger.svelte.d.ts +15 -0
  244. package/package/components/debug/dapClient.d.ts +192 -0
  245. package/package/components/debug/dapClient.js +426 -0
  246. package/package/components/debug/debugUtils.d.ts +30 -0
  247. package/package/components/debug/debugUtils.js +131 -0
  248. package/package/components/debug/index.d.ts +75 -0
  249. package/package/components/debug/index.js +82 -0
  250. package/package/components/flows/CreateActionsApp.svelte +6 -4
  251. package/package/components/flows/DebounceLimit.svelte.d.ts +1 -1
  252. package/package/components/flows/FlowHistoryInner.svelte +15 -4
  253. package/package/components/flows/content/AgentToolWrapper.svelte +1 -1
  254. package/package/components/flows/content/FlowEditorDrawer.svelte +124 -0
  255. package/package/components/flows/content/FlowEditorDrawer.svelte.d.ts +22 -0
  256. package/package/components/flows/content/FlowInput.svelte +211 -37
  257. package/package/components/flows/content/FlowModuleComponent.svelte +553 -67
  258. package/package/components/flows/content/FlowModuleEarlyStop.svelte +8 -10
  259. package/package/components/flows/content/FlowModuleHeader.svelte +7 -4
  260. package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte +1 -1
  261. package/package/components/flows/content/McpOAuthConnect.svelte +217 -0
  262. package/package/components/flows/content/McpOAuthConnect.svelte.d.ts +7 -0
  263. package/package/components/flows/content/McpToolEditor.svelte +50 -37
  264. package/package/components/flows/content/McpToolEditor.svelte.d.ts +0 -1
  265. package/package/components/flows/conversations/FlowChat.svelte +16 -2
  266. package/package/components/flows/conversations/FlowChat.svelte.d.ts +2 -1
  267. package/package/components/flows/conversations/FlowChatInterface.svelte +103 -6
  268. package/package/components/flows/conversations/FlowChatInterface.svelte.d.ts +2 -0
  269. package/package/components/flows/conversations/FlowChatManager.svelte.js +53 -21
  270. package/package/components/flows/header/FlowImportExportMenu.svelte +1 -1
  271. package/package/components/flows/propPicker/PropPickerWrapper.svelte +3 -1
  272. package/package/components/flows/types.d.ts +2 -0
  273. package/package/components/git_sync/GitSyncRepositoryCard.svelte +16 -8
  274. package/package/components/home/ItemsList.svelte +5 -5
  275. package/package/components/home/TutorialBanner.svelte +34 -18
  276. package/package/components/icons/CssIcon.svelte +20 -0
  277. package/package/components/icons/CssIcon.svelte.d.ts +7 -25
  278. package/package/components/icons/HtmlIcon.svelte +20 -0
  279. package/package/components/icons/HtmlIcon.svelte.d.ts +8 -0
  280. package/package/components/icons/JavaScriptIcon.svelte +10 -2
  281. package/package/components/icons/JavaScriptIcon.svelte.d.ts +1 -0
  282. package/package/components/icons/JsonIcon.svelte +8 -2
  283. package/package/components/icons/JsonIcon.svelte.d.ts +1 -0
  284. package/package/components/icons/LessIcon.svelte +16 -0
  285. package/package/components/icons/LessIcon.svelte.d.ts +8 -0
  286. package/package/components/icons/MarkdownIcon.svelte +20 -0
  287. package/package/components/icons/MarkdownIcon.svelte.d.ts +8 -0
  288. package/package/components/icons/ReactIcon.svelte +10 -2
  289. package/package/components/icons/ReactIcon.svelte.d.ts +1 -0
  290. package/package/components/icons/SassIcon.svelte +28 -0
  291. package/package/components/icons/SassIcon.svelte.d.ts +8 -0
  292. package/package/components/icons/SvelteIcon.svelte +10 -2
  293. package/package/components/icons/SvelteIcon.svelte.d.ts +1 -0
  294. package/package/components/icons/VueIcon.svelte +10 -2
  295. package/package/components/icons/VueIcon.svelte.d.ts +1 -0
  296. package/package/components/icons/YamlIcon.svelte +20 -0
  297. package/package/components/icons/YamlIcon.svelte.d.ts +8 -0
  298. package/package/components/instanceSettings/SecretBackendConfig.svelte +514 -0
  299. package/package/components/instanceSettings/SecretBackendConfig.svelte.d.ts +8 -0
  300. package/package/components/instanceSettings.d.ts +2 -1
  301. package/package/components/instanceSettings.js +32 -1
  302. package/package/components/jobs/JobPreview.svelte +46 -39
  303. package/package/components/jobs/JobPreview.svelte.d.ts +1 -0
  304. package/package/components/monacoLanguagesOptions.js +16 -15
  305. package/package/components/propertyPicker/PropPicker.svelte +16 -2
  306. package/package/components/propertyPicker/PropPicker.svelte.d.ts +2 -0
  307. package/package/components/raw_apps/DefaultDatabaseSelector.svelte +9 -5
  308. package/package/components/raw_apps/FileEditorIcon.svelte +12 -7
  309. package/package/components/raw_apps/FileEditorIcon.svelte.d.ts +2 -0
  310. package/package/components/raw_apps/FileTreeNode.svelte +119 -83
  311. package/package/components/raw_apps/RawAppBackgroundRunner.svelte +88 -8
  312. package/package/components/raw_apps/RawAppDataTableList.svelte +12 -9
  313. package/package/components/raw_apps/RawAppEditor.svelte +218 -68
  314. package/package/components/raw_apps/RawAppEditorHeader.svelte +33 -16
  315. package/package/components/raw_apps/RawAppHistoryList.svelte +264 -80
  316. package/package/components/raw_apps/RawAppHistoryList.svelte.d.ts +1 -0
  317. package/package/components/raw_apps/RawAppHistoryManager.svelte.d.ts +15 -1
  318. package/package/components/raw_apps/RawAppHistoryManager.svelte.js +46 -12
  319. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +549 -47
  320. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +31 -5
  321. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +25 -18
  322. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte.d.ts +1 -0
  323. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +141 -10
  324. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte.d.ts +8 -0
  325. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte +2 -1
  326. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +9 -1
  327. package/package/components/raw_apps/RawAppInputsSpecEditor.svelte +47 -3
  328. package/package/components/raw_apps/RawAppInputsSpecEditor.svelte.d.ts +2 -2
  329. package/package/components/raw_apps/RawAppModules.svelte +13 -7
  330. package/package/components/raw_apps/RawAppPreview.svelte +48 -6
  331. package/package/components/raw_apps/RawAppSidebar.svelte +194 -125
  332. package/package/components/raw_apps/RawAppSidebar.svelte.d.ts +1 -0
  333. package/package/components/raw_apps/RunnableRow.svelte +41 -0
  334. package/package/components/raw_apps/RunnableRow.svelte.d.ts +11 -0
  335. package/package/components/raw_apps/utils.d.ts +1 -1
  336. package/package/components/raw_apps/utils.js +76 -18
  337. package/package/components/runs/ManuelDatePicker.svelte +3 -3
  338. package/package/components/runs/ManuelDatePicker.svelte.d.ts +3 -3
  339. package/package/components/runs/NoWorkerWithTagWarning.svelte +5 -1
  340. package/package/components/runs/RunsFilter.svelte +75 -63
  341. package/package/components/runs/RunsFilter.svelte.d.ts +35 -4
  342. package/package/components/runs/RunsQueue.svelte.d.ts +1 -1
  343. package/package/components/runs/RunsTable.svelte +1 -1
  344. package/package/components/runs/RunsTable.svelte.d.ts +1 -1
  345. package/package/components/runs/useJobsLoader.svelte.d.ts +34 -0
  346. package/package/components/runs/useJobsLoader.svelte.js +507 -0
  347. package/package/components/scriptEditor/LogPanel.svelte +17 -2
  348. package/package/components/scriptEditor/LogPanel.svelte.d.ts +2 -0
  349. package/package/components/select/SelectDropdown.svelte +2 -2
  350. package/package/components/settings/AIPromptsModal.svelte +88 -0
  351. package/package/components/settings/AIPromptsModal.svelte.d.ts +11 -0
  352. package/package/components/settings/ChangeWorkspaceColor.svelte +4 -3
  353. package/package/components/settings/ChangeWorkspaceId.svelte +14 -10
  354. package/package/components/settings/ChangeWorkspaceName.svelte +7 -6
  355. package/package/components/settings/UserAIPromptsSettings.svelte +56 -15
  356. package/package/components/settings/WorkspaceOperatorSettings.svelte +68 -85
  357. package/package/components/settings/WorkspaceUserSettings.svelte +531 -406
  358. package/package/components/sidebar/MenuButton.svelte +46 -24
  359. package/package/components/sidebar/MenuButton.svelte.d.ts +2 -0
  360. package/package/components/sidebar/MultiplayerMenu.svelte +3 -3
  361. package/package/components/sidebar/OperatorMenu.svelte +62 -87
  362. package/package/components/sidebar/SidebarContent.svelte +7 -2
  363. package/package/components/sidebar/WorkspaceMenu.svelte +35 -85
  364. package/package/components/sqlTypeService.js +4 -3
  365. package/package/components/table/DataTable.svelte +3 -2
  366. package/package/components/table/DataTable.svelte.d.ts +1 -0
  367. package/package/components/text_input/TextInput.svelte +3 -0
  368. package/package/components/text_input/TextInput.svelte.d.ts +2 -0
  369. package/package/components/tutorials/FlowBuilderLiveTutorial.svelte +6 -35
  370. package/package/components/tutorials/RunsTutorial.svelte +399 -0
  371. package/package/components/{schema/SchemaPicker.svelte.d.ts → tutorials/RunsTutorial.svelte.d.ts} +11 -12
  372. package/package/components/tutorials/TroubleshootFlowTutorial.svelte +5 -20
  373. package/package/components/tutorials/utils.d.ts +16 -0
  374. package/package/components/tutorials/utils.js +96 -0
  375. package/package/components/tutorials/workspace/WorkspaceOnboardingOperatorTutorial.svelte +133 -0
  376. package/package/components/{SavedInputs.svelte.d.ts → tutorials/workspace/WorkspaceOnboardingOperatorTutorial.svelte.d.ts} +8 -11
  377. package/package/components/vscode.js +6 -6
  378. package/package/components/workspace/WorkspaceCard.svelte +184 -0
  379. package/package/components/workspace/WorkspaceCard.svelte.d.ts +24 -0
  380. package/package/components/workspace/WorkspaceIcon.svelte +21 -0
  381. package/package/components/workspace/WorkspaceIcon.svelte.d.ts +9 -0
  382. package/package/components/workspace/WorkspaceTreeView.svelte +331 -0
  383. package/package/components/workspace/WorkspaceTreeView.svelte.d.ts +15 -0
  384. package/package/components/workspaceSettings/AISettings.svelte +146 -108
  385. package/package/components/workspaceSettings/CreateWorkspace.svelte +25 -11
  386. package/package/components/workspaceSettings/DucklakeSettings.svelte +46 -23
  387. package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +2 -1
  388. package/package/components/workspaceSettings/ModelTokenLimits.svelte +14 -18
  389. package/package/components/workspaceSettings/StorageSettings.svelte +280 -241
  390. package/package/components/workspaceSettings/StorageSettings.svelte.d.ts +1 -0
  391. package/package/consts.js +4 -1
  392. package/package/gen/core/OpenAPI.js +1 -1
  393. package/package/gen/schemas.gen.d.ts +126 -0
  394. package/package/gen/schemas.gen.js +126 -0
  395. package/package/gen/services.gen.d.ts +160 -2
  396. package/package/gen/services.gen.js +319 -4
  397. package/package/gen/types.gen.d.ts +607 -2
  398. package/package/hubPaths.json +3 -2
  399. package/package/infer.js +2 -0
  400. package/package/monaco_workers/graphql.worker.bundle.js +121 -121
  401. package/package/rawAppWmillTs.d.ts +11 -0
  402. package/package/rawAppWmillTs.js +38 -1
  403. package/package/svelte5Utils.svelte.d.ts +9 -0
  404. package/package/svelte5Utils.svelte.js +51 -1
  405. package/package/tutorialUtils.js +0 -4
  406. package/package/tutorials/config.js +31 -3
  407. package/package/tutorials/roleUtils.d.ts +1 -1
  408. package/package/tutorials/roleUtils.js +6 -2
  409. package/package/utils.js +159 -1
  410. package/package.json +16 -17
  411. package/package/components/SavedInputs.svelte +0 -416
  412. package/package/components/runs/JobsLoader.svelte +0 -468
  413. package/package/components/runs/JobsLoader.svelte.d.ts +0 -49
  414. package/package/components/schema/SchemaPicker.svelte +0 -92
@@ -24,8 +24,8 @@ function checkIfBreakableParent(flowStoreValue) {
24
24
  }
25
25
  return null;
26
26
  }
27
- let raise_error_message_stop_after_all_if = $state(flowModule.stop_after_all_iters_if?.error_message !== undefined);
28
- let raise_error_message_stop_after_if = $state(flowModule.stop_after_if?.error_message !== undefined);
27
+ let raise_error_message_stop_after_all_if = $state(flowModule.stop_after_all_iters_if?.error_message != undefined);
28
+ let raise_error_message_stop_after_if = $state(flowModule.stop_after_if?.error_message != undefined);
29
29
  let { isLoop, isParallelLoop } = $derived(flowModule.value.type === 'forloopflow' || flowModule.value.type === 'whileloopflow'
30
30
  ? { isLoop: true, isParallelLoop: flowModule.value.parallel ?? false }
31
31
  : { isLoop: false, isParallelLoop: false });
@@ -134,8 +134,7 @@ let breakableParent = $derived(checkIfBreakableParent(flowStore.val));
134
134
  <PropPickerWrapper
135
135
  noPadding
136
136
  notSelectable
137
- flow_input={stepPropPicker.pickableProperties.flow_input}
138
- pickableProperties={undefined}
137
+ pickableProperties={stepPropPicker.pickableProperties}
139
138
  result={earlyStopResult}
140
139
  extraResults={isLoop ? { all_iters: result } : undefined}
141
140
  on:select={({ detail }) => {
@@ -148,8 +147,8 @@ let breakableParent = $derived(checkIfBreakableParent(flowStore.val));
148
147
  lang="javascript"
149
148
  bind:code={flowModule.stop_after_if.expr}
150
149
  class="h-full"
151
- extraLib={`declare const result = ${JSON.stringify(earlyStopResult)};` +
152
- `\n declare const flow_input = ${JSON.stringify(stepPropPicker.pickableProperties.flow_input)};` +
150
+ extraLib={`declare const result = ${JSON.stringify(earlyStopResult)};\n` +
151
+ stepPropPicker.extraLib +
153
152
  (isLoop ? `\ndeclare const all_iters = ${JSON.stringify(result)};` : '')}
154
153
  />
155
154
  </PropPickerWrapper>
@@ -271,8 +270,7 @@ let breakableParent = $derived(checkIfBreakableParent(flowStore.val));
271
270
  <PropPickerWrapper
272
271
  notSelectable
273
272
  noPadding
274
- flow_input={stepPropPicker.pickableProperties.flow_input}
275
- pickableProperties={undefined}
273
+ pickableProperties={stepPropPicker.pickableProperties}
276
274
  {result}
277
275
  on:select={({ detail }) => {
278
276
  editor?.insertAtCursor(detail)
@@ -284,8 +282,8 @@ let breakableParent = $derived(checkIfBreakableParent(flowStore.val));
284
282
  lang="javascript"
285
283
  bind:code={flowModule.stop_after_all_iters_if.expr}
286
284
  class="h-full"
287
- extraLib={`declare const result = ${JSON.stringify(result)};` +
288
- `\ndeclare const flow_input = ${JSON.stringify(stepPropPicker.pickableProperties.flow_input)};`}
285
+ extraLib={`declare const result = ${JSON.stringify(result)};\n` +
286
+ stepPropPicker.extraLib}
289
287
  />
290
288
  </PropPickerWrapper>
291
289
  </div>
@@ -1,13 +1,13 @@
1
1
  <script lang="ts">import Button from '../../common/button/Button.svelte';
2
2
  import {} from '../../../gen';
3
3
  import { createEventDispatcher, getContext } from 'svelte';
4
- import { Bed, Database, ExternalLink, Gauge, GitFork, Pen, PhoneIncoming, RefreshCcw, Repeat, Square, Pin, Save } from 'lucide-svelte';
4
+ import { Bed, Database, Gauge, GitFork, Pen, PhoneIncoming, RefreshCcw, Repeat, Square, Pin, Save } from 'lucide-svelte';
5
5
  import Popover from '../../Popover.svelte';
6
6
  import { sendUserToast } from '../../../utils';
7
7
  import { getLatestHashForScript } from '../../../scripts';
8
8
  import FlowModuleWorkerTagSelect from './FlowModuleWorkerTagSelect.svelte';
9
9
  let { module, tag } = $props();
10
- const { scriptEditorDrawer } = getContext('FlowEditorContext');
10
+ const { scriptEditorDrawer, flowEditorDrawer } = getContext('FlowEditorContext');
11
11
  const dispatch = createEventDispatcher();
12
12
  let customUi = getContext('customUi');
13
13
  let popoverClasses = 'center-center rounded p-2 bg-blue-100 text-blue-800 border border-blue-300 hover:bg-blue-200 dark:bg-frost-700 dark:text-frost-100 dark:border-frost-600';
@@ -128,13 +128,16 @@ let popoverClasses = 'center-center rounded p-2 bg-blue-100 text-blue-800 border
128
128
  variant="subtle"
129
129
  on:click={async () => {
130
130
  if (module.value.type == 'flow') {
131
- window.open(`/flows/edit/${module.value.path}`, '_blank', 'noopener,noreferrer')
131
+ $flowEditorDrawer?.openDrawer(module.value.path, () => {
132
+ dispatch('reload')
133
+ sendUserToast('Flow has been updated')
134
+ })
132
135
  }
133
136
  }}
134
137
  startIcon={{ icon: Pen }}
135
138
  iconOnly={false}
136
139
  >
137
- Edit <ExternalLink size={12} />
140
+ Edit
138
141
  </Button>
139
142
  <Button
140
143
  unifiedSize="sm"
@@ -8,7 +8,7 @@ const dispatch = createEventDispatcher();
8
8
  loadWorkerGroups();
9
9
  async function loadWorkerGroups() {
10
10
  if (!$workerTags) {
11
- $workerTags = await WorkerService.getCustomTags({ workspace: $workspaceStore });
11
+ $workerTags = await WorkerService.getCustomTagsForWorkspace({ workspace: $workspaceStore });
12
12
  }
13
13
  }
14
14
  </script>
@@ -0,0 +1,217 @@
1
+ <script lang="ts">import { workspaceStore } from '../../../stores';
2
+ import { McpOauthService, OauthService, ResourceService, VariableService } from '../../../gen';
3
+ import { Button } from '../../common';
4
+ import Label from '../../Label.svelte';
5
+ import Path from '../../Path.svelte';
6
+ import { sendUserToast } from '../../../toast';
7
+ import { sameTopDomainOrigin } from '../../../cookies';
8
+ import { onDestroy } from 'svelte';
9
+ let { onConnected, onCancel } = $props();
10
+ let serverUrl = $state('');
11
+ let discoveryResult = $state(null);
12
+ let selectedScopes = $state([]);
13
+ let resourceName = $state('');
14
+ let resourcePath = $state('');
15
+ let pathError = $state('');
16
+ let status = $state('idle');
17
+ let error = $state(null);
18
+ async function discoverOAuth() {
19
+ status = 'discovering';
20
+ error = null;
21
+ try {
22
+ discoveryResult = await McpOauthService.discoverMcpOauth({
23
+ requestBody: { mcp_server_url: serverUrl }
24
+ });
25
+ selectedScopes = discoveryResult?.scopes_supported ?? [];
26
+ try {
27
+ const urlObj = new URL(serverUrl);
28
+ resourceName = urlObj.hostname.replace(/\./g, '_');
29
+ }
30
+ catch {
31
+ resourceName = 'mcp_server';
32
+ }
33
+ status = 'discovered';
34
+ }
35
+ catch (e) {
36
+ console.error('Error discovering OAuth settings', e);
37
+ const errorMessage = e.body?.message || e.body || e.message || 'Unknown error';
38
+ error = `Failed to discover OAuth settings: ${errorMessage}`;
39
+ status = 'idle';
40
+ }
41
+ }
42
+ function startOAuth() {
43
+ const url = new URL(`/api/mcp/oauth/start`, window.location.origin);
44
+ url.searchParams.set('mcp_server_url', serverUrl);
45
+ url.searchParams.set('scopes', selectedScopes.join(','));
46
+ const popup = window.open(url.toString(), '_blank', 'popup=true');
47
+ if (!popup) {
48
+ error = 'Popup blocked. Please allow popups for this site.';
49
+ return;
50
+ }
51
+ window.addEventListener('message', handleOAuthMessage);
52
+ window.addEventListener('storage', handleStorageEvent);
53
+ status = 'connecting';
54
+ }
55
+ function handleOAuthMessage(event) {
56
+ if (!sameTopDomainOrigin(event.origin, window.location.origin))
57
+ return;
58
+ if (event.data.type === 'MCP_CONNECTED') {
59
+ cleanup();
60
+ createMcpResource(event.data);
61
+ }
62
+ else if (event.data.type === 'MCP_ERROR') {
63
+ cleanup();
64
+ error = event.data.error;
65
+ status = 'discovered';
66
+ }
67
+ }
68
+ function handleStorageEvent(event) {
69
+ if (event.key === 'mcp-oauth-callback') {
70
+ cleanup();
71
+ try {
72
+ const data = JSON.parse(event.newValue || '{}');
73
+ localStorage.removeItem('mcp-oauth-callback');
74
+ if (data.type === 'MCP_CONNECTED') {
75
+ createMcpResource(data);
76
+ }
77
+ }
78
+ catch (e) {
79
+ console.error('Error parsing MCP OAuth callback', e);
80
+ }
81
+ }
82
+ }
83
+ function cleanup() {
84
+ window.removeEventListener('message', handleOAuthMessage);
85
+ window.removeEventListener('storage', handleStorageEvent);
86
+ }
87
+ async function createMcpResource(data) {
88
+ try {
89
+ let accountId;
90
+ if (data.expires_in && data.refresh_token) {
91
+ const accountIdStr = await OauthService.createAccount({
92
+ workspace: $workspaceStore,
93
+ requestBody: {
94
+ refresh_token: data.refresh_token,
95
+ expires_in: data.expires_in,
96
+ client: 'mcp',
97
+ mcp_server_url: data.mcp_server_url
98
+ }
99
+ });
100
+ accountId = Number(accountIdStr);
101
+ }
102
+ await VariableService.createVariable({
103
+ workspace: $workspaceStore,
104
+ requestBody: {
105
+ path: resourcePath,
106
+ value: data.access_token,
107
+ is_secret: true,
108
+ is_oauth: true,
109
+ account: accountId,
110
+ description: `MCP OAuth token for ${data.mcp_server_url}`
111
+ }
112
+ });
113
+ await ResourceService.createResource({
114
+ workspace: $workspaceStore,
115
+ requestBody: {
116
+ resource_type: 'mcp',
117
+ path: resourcePath,
118
+ value: {
119
+ name: resourceName,
120
+ url: data.mcp_server_url,
121
+ token: `$var:${resourcePath}`
122
+ },
123
+ description: `MCP server connected via OAuth`
124
+ }
125
+ });
126
+ sendUserToast('Connected to MCP server');
127
+ onConnected(resourcePath, resourceName);
128
+ }
129
+ catch (e) {
130
+ error = e.body?.message || e.message || 'Failed to create resource';
131
+ status = 'discovered';
132
+ }
133
+ }
134
+ onDestroy(cleanup);
135
+ </script>
136
+
137
+ <div class="border rounded p-4 bg-surface-secondary flex flex-col gap-4">
138
+ <div class="flex justify-between items-center">
139
+ <span class="font-semibold text-sm">Connect MCP Server with OAuth</span>
140
+ <Button size="xs" color="light" onClick={onCancel}>Cancel</Button>
141
+ </div>
142
+
143
+ <Label label="MCP Server URL">
144
+ <input
145
+ type="url"
146
+ bind:value={serverUrl}
147
+ placeholder="https://mcp.example.com"
148
+ class="text-sm w-full"
149
+ disabled={status === 'connecting'}
150
+ />
151
+ </Label>
152
+
153
+ {#if status === 'idle'}
154
+ <Button size="sm" onClick={discoverOAuth} disabled={!serverUrl}>Discover OAuth Settings</Button>
155
+ {:else if status === 'discovering'}
156
+ <div class="text-sm text-secondary">Discovering OAuth settings...</div>
157
+ {:else if status === 'discovered' && discoveryResult}
158
+ <div class="text-xs text-green-600 dark:text-green-400">
159
+ &#10003; OAuth supported
160
+ {#if discoveryResult.supports_dynamic_registration}
161
+ (Dynamic Client Registration available)
162
+ {/if}
163
+ </div>
164
+
165
+ {#if discoveryResult.scopes_supported && discoveryResult.scopes_supported.length > 0}
166
+ <Label label="Select Scopes">
167
+ <div class="flex flex-col flex-wrap gap-2">
168
+ {#each discoveryResult.scopes_supported as scope}
169
+ <label class="flex flex-row items-center gap-2 text-xs cursor-pointer">
170
+ <input
171
+ type="checkbox"
172
+ checked={selectedScopes.includes(scope)}
173
+ onchange={(e) => {
174
+ const target = e.target as HTMLInputElement
175
+ if (target.checked) {
176
+ selectedScopes = [...selectedScopes, scope]
177
+ } else {
178
+ selectedScopes = selectedScopes.filter((s) => s !== scope)
179
+ }
180
+ }}
181
+ class="!w-4 !h-4"
182
+ />
183
+ {scope}
184
+ </label>
185
+ {/each}
186
+ </div>
187
+ </Label>
188
+ {/if}
189
+
190
+ <Label label="Resource Name">
191
+ <input
192
+ type="text"
193
+ bind:value={resourceName}
194
+ placeholder="my-mcp-server"
195
+ class="text-sm w-full"
196
+ />
197
+ </Label>
198
+
199
+ <Path
200
+ bind:path={resourcePath}
201
+ bind:error={pathError}
202
+ initialPath=""
203
+ namePlaceholder={resourceName}
204
+ kind="resource"
205
+ />
206
+
207
+ <Button size="sm" onClick={startOAuth} disabled={!resourcePath || pathError !== ''}>
208
+ Connect with OAuth
209
+ </Button>
210
+ {:else if status === 'connecting'}
211
+ <div class="text-sm text-secondary">Complete authentication in popup window...</div>
212
+ {/if}
213
+
214
+ {#if error}
215
+ <div class="text-xs text-red-600 dark:text-red-400">{error}</div>
216
+ {/if}
217
+ </div>
@@ -0,0 +1,7 @@
1
+ interface Props {
2
+ onConnected: (resourcePath: string, resourceName: string) => void;
3
+ onCancel: () => void;
4
+ }
5
+ declare const McpOAuthConnect: import("svelte").Component<Props, {}, "">;
6
+ type McpOAuthConnect = ReturnType<typeof McpOAuthConnect>;
7
+ export default McpOAuthConnect;
@@ -7,8 +7,7 @@ let loadToolsCached = createCache(({ workspace, path }) => workspace && path &&
7
7
  : undefined, {
8
8
  initial: { workspace: get(workspaceStore), path: undefined, refreshCount: 0 },
9
9
  invalidateMs: 1000 * 60
10
- } // Cache for 60 seconds
11
- );
10
+ });
12
11
  </script>
13
12
 
14
13
  <script lang="ts">import Section from '../../Section.svelte';
@@ -21,24 +20,25 @@ import ResourcePicker from '../../ResourcePicker.svelte';
21
20
  import { usePromise } from '../../../svelte5Utils.svelte';
22
21
  import { untrack } from 'svelte';
23
22
  import Alert from '../../common/alert/Alert.svelte';
23
+ import McpOAuthConnect from './McpOAuthConnect.svelte';
24
24
  let { tool = $bindable() } = $props();
25
+ let showOAuthForm = $state(false);
25
26
  let refreshCount = $state(0);
27
+ let resourcePicker = $state();
26
28
  let tools = usePromise(async () => await loadToolsCached({
27
29
  workspace: $workspaceStore,
28
30
  path: tool.value.resource_path,
29
31
  refreshCount
30
32
  }), { loadInit: false, clearValueOnRefresh: false });
31
- // Options for the multiselect
32
33
  let toolOptions = $derived(safeSelectItems((tools.value ?? []).map((t) => t.name)));
33
- // Watch for resource_path changes and refresh tools
34
+ let resourcePath = $derived(tool.value.resource_path);
35
+ let error = $derived(tools.error?.body?.message || tools.error?.message);
34
36
  $effect(() => {
35
- // Track reactive dependencies
36
- tool.value.resource_path;
37
+ resourcePath;
37
38
  $workspaceStore;
38
39
  refreshCount;
39
- // Trigger refresh when resource_path or workspace changes
40
40
  untrack(() => {
41
- if (tool.value.resource_path?.length > 0) {
41
+ if (resourcePath?.length > 0) {
42
42
  tools.refresh();
43
43
  }
44
44
  });
@@ -52,14 +52,19 @@ $effect(() => {
52
52
  }
53
53
  });
54
54
  $effect(() => {
55
- if (tool.value.resource_path?.length > 0 && tool.summary?.length === 0) {
55
+ if (resourcePath?.length > 0 && tool.summary?.length === 0) {
56
56
  tool.summary = `MCP: ${tool.value.resource_path}`;
57
57
  }
58
58
  });
59
+ async function handleOAuthConnected(resourcePath, resourceName) {
60
+ await resourcePicker?.refreshResources();
61
+ tool.value.resource_path = resourcePath;
62
+ tool.summary = `MCP: ${resourceName}`;
63
+ showOAuthForm = false;
64
+ }
59
65
  </script>
60
66
 
61
67
  <div class="flex flex-col gap-4 p-4">
62
- <!-- Explanatory Section -->
63
68
  <Alert type="info" title="MCP Client Configuration">
64
69
  {#snippet children()}
65
70
  <p class="mb-2 text-sm">
@@ -74,15 +79,26 @@ $effect(() => {
74
79
  {/snippet}
75
80
  </Alert>
76
81
 
77
- <!-- Resource Path Section -->
78
82
  <div class="w-full">
79
83
  <Label label="MCP Resource">
80
- <ResourcePicker resourceType="mcp" bind:value={tool.value.resource_path} />
84
+ <ResourcePicker bind:this={resourcePicker} resourceType="mcp" bind:value={tool.value.resource_path} />
81
85
  </Label>
82
86
  </div>
83
87
 
84
- {#if tool.value.resource_path?.length > 0}
85
- <!-- Summary Section -->
88
+ {#if !resourcePath}
89
+ {#if !showOAuthForm}
90
+ <Button size="xs" color="light" onClick={() => (showOAuthForm = true)}>
91
+ Connect with OAuth
92
+ </Button>
93
+ {:else}
94
+ <McpOAuthConnect
95
+ onConnected={handleOAuthConnected}
96
+ onCancel={() => (showOAuthForm = false)}
97
+ />
98
+ {/if}
99
+ {/if}
100
+
101
+ {#if resourcePath?.length > 0}
86
102
  <div class="w-full">
87
103
  <Label label="Summary">
88
104
  <input
@@ -94,13 +110,12 @@ $effect(() => {
94
110
  </Label>
95
111
  </div>
96
112
 
97
- <!-- Available Tools Section -->
98
113
  <Section label="Available Tools">
99
114
  {#snippet action()}
100
115
  <Button
101
116
  size="xs"
102
117
  color="light"
103
- on:click={() => (refreshCount += 1)}
118
+ onClick={() => (refreshCount += 1)}
104
119
  startIcon={{ icon: RefreshCw }}
105
120
  disabled={tools.status === 'loading'}
106
121
  >
@@ -108,39 +123,37 @@ $effect(() => {
108
123
  </Button>
109
124
  {/snippet}
110
125
  <div class="w-full flex flex-col gap-2">
111
- {#if tools.error}
112
- <div class="text-xs text-red-600 p-2 border border-red-300 rounded bg-red-50">
113
- {tools.error?.body?.message ||
114
- tools.error?.message ||
115
- 'Failed to load tools from MCP server'}
116
- </div>
117
- {/if}
118
- <div class="max-h-48 overflow-y-auto border rounded p-2 bg-surface-secondary">
119
- {#if tools.status === 'loading'}
126
+ {#if error}
127
+ <div class="text-xs text-red-600 dark:text-red-400 mb-4"
128
+ >{`Failed to load tools from MCP server: ${error}`}</div
129
+ >
130
+ {:else if tools.status === 'loading'}
131
+ <div class="max-h-48 overflow-y-auto border rounded p-2 bg-surface-secondary">
120
132
  <div class="text-xs text-secondary italic">Loading tools...</div>
121
- {:else if (tools.value ?? []).length === 0}
133
+ </div>
134
+ {:else if (tools.value ?? []).length === 0 && !error}
135
+ <div class="max-h-48 overflow-y-auto border rounded p-2 bg-surface-secondary">
122
136
  <div class="text-xs text-secondary italic">
123
- {tools.error
124
- ? 'Failed to load tools. Please check the resource path and try again.'
125
- : 'No tools loaded yet. Click "Refresh Tools" to fetch tools from the MCP server.'}
137
+ No tools loaded yet. Click "Refresh Tools" to fetch tools from the MCP server.
126
138
  </div>
127
- {:else}
139
+ </div>
140
+ {:else if (tools.value ?? []).length > 0}
141
+ <div class="max-h-48 overflow-y-auto border rounded p-2 bg-surface-secondary">
128
142
  <div class="flex flex-col gap-1">
129
- {#each tools.value ?? [] as tool}
143
+ {#each tools.value ?? [] as mcpTool}
130
144
  <div class="text-xs">
131
- <span class="font-semibold">{tool.name}</span>
132
- {#if tool.description}
133
- <span class="text-secondary">— {tool.description}</span>
145
+ <span class="font-semibold">{mcpTool.name}</span>
146
+ {#if mcpTool.description}
147
+ <span class="text-secondary">— {mcpTool.description}</span>
134
148
  {/if}
135
149
  </div>
136
150
  {/each}
137
151
  </div>
138
- {/if}
139
- </div>
152
+ </div>
153
+ {/if}
140
154
  </div>
141
155
  </Section>
142
156
 
143
- <!-- Tool Filtering Section -->
144
157
  {#if tool.value.include_tools && tool.value.exclude_tools}
145
158
  <Section label="Tool Filtering">
146
159
  <div class="w-full flex flex-col gap-3">
@@ -1,7 +1,6 @@
1
1
  import type { McpTool } from '../agentToolUtils';
2
2
  interface Props {
3
3
  tool: McpTool;
4
- noEditor: boolean;
5
4
  }
6
5
  declare const McpToolEditor: import("svelte").Component<Props, {}, "tool">;
7
6
  type McpToolEditor = ReturnType<typeof McpToolEditor>;
@@ -3,7 +3,7 @@ import { createFlowChatManager } from './FlowChatManager.svelte';
3
3
  import FlowConversationsSidebar from './FlowConversationsSidebar.svelte';
4
4
  import FlowChatInterface from './FlowChatInterface.svelte';
5
5
  import { untrack } from 'svelte';
6
- let { onRunFlow, deploymentInProgress = false, useStreaming = false, path, hideSidebar = false } = $props();
6
+ let { onRunFlow, deploymentInProgress = false, useStreaming = false, path, hideSidebar = false, inputSchema = undefined, } = $props();
7
7
  const manager = createFlowChatManager();
8
8
  // Initialize manager when component mounts
9
9
  $effect(() => {
@@ -22,11 +22,25 @@ $effect(() => {
22
22
  });
23
23
  }
24
24
  });
25
+ // Derive additional inputs schema (excluding user_message) for chat mode
26
+ const additionalInputsSchema = $derived.by(() => {
27
+ const props = inputSchema?.properties ?? {};
28
+ const filtered = Object.fromEntries(Object.entries(props).filter(([k]) => k !== 'user_message'));
29
+ if (Object.keys(filtered).length === 0)
30
+ return undefined;
31
+ const required = inputSchema?.required;
32
+ const requiredArray = Array.isArray(required) ? required : [];
33
+ return {
34
+ ...inputSchema,
35
+ properties: filtered,
36
+ required: requiredArray.filter((k) => k !== 'user_message')
37
+ };
38
+ });
25
39
  </script>
26
40
 
27
41
  <div class="flex border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden flex-1">
28
42
  {#if !hideSidebar}
29
43
  <FlowConversationsSidebar {manager} />
30
44
  {/if}
31
- <FlowChatInterface {manager} {deploymentInProgress} />
45
+ <FlowChatInterface {manager} {deploymentInProgress} {additionalInputsSchema} {path} />
32
46
  </div>
@@ -1,9 +1,10 @@
1
1
  interface Props {
2
- onRunFlow: (userMessage: string, conversationId: string) => Promise<string | undefined>;
2
+ onRunFlow: (userMessage: string, conversationId: string, additionalInputs?: Record<string, any>) => Promise<string | undefined>;
3
3
  useStreaming?: boolean;
4
4
  deploymentInProgress?: boolean;
5
5
  path: string;
6
6
  hideSidebar?: boolean;
7
+ inputSchema?: Record<string, any>;
7
8
  }
8
9
  declare const FlowChat: import("svelte").Component<Props, {}, "">;
9
10
  type FlowChat = ReturnType<typeof FlowChat>;
@@ -1,11 +1,85 @@
1
- <script lang="ts">import { Alert } from '../../common';
2
- import { MessageCircle, Loader2 } from 'lucide-svelte';
1
+ <script lang="ts">import { Alert, Button } from '../../common';
2
+ import { MessageCircle, Loader2, Settings2 } from 'lucide-svelte';
3
3
  import ChatMessage from '../../chat/ChatMessage.svelte';
4
4
  import ChatInput from '../../chat/ChatInput.svelte';
5
5
  import { FlowChatManager } from './FlowChatManager.svelte';
6
- let { manager, deploymentInProgress = false } = $props();
6
+ import Modal from '../../common/modal/Modal.svelte';
7
+ import SchemaForm from '../../SchemaForm.svelte';
8
+ import {} from '../../../utils';
9
+ let { manager, deploymentInProgress = false, additionalInputsSchema, path } = $props();
10
+ // Derive helperScript for dynamic inputs from schema
11
+ const dynamicInputHelperScript = $derived.by(() => {
12
+ const dynCode = additionalInputsSchema?.['x-windmill-dyn-select-code'];
13
+ const dynLang = additionalInputsSchema?.['x-windmill-dyn-select-lang'];
14
+ if (dynCode && dynLang) {
15
+ return { source: 'inline', code: dynCode, lang: dynLang };
16
+ }
17
+ return undefined;
18
+ });
19
+ // LocalStorage helpers
20
+ const STORAGE_KEY_PREFIX = 'windmill_flow_chat_inputs_';
21
+ // State for additional inputs modal
22
+ let showInputsModal = $state(false);
23
+ let additionalInputsValues = $state(loadInputsFromStorage() ?? undefined);
24
+ function getStorageKey() {
25
+ return `${STORAGE_KEY_PREFIX}${path}`;
26
+ }
27
+ function loadInputsFromStorage() {
28
+ try {
29
+ const stored = localStorage.getItem(getStorageKey());
30
+ return stored ? JSON.parse(stored) : null;
31
+ }
32
+ catch (e) {
33
+ console.error('Failed to load inputs from localStorage:', e);
34
+ return null;
35
+ }
36
+ }
37
+ function saveInputsToStorage(values) {
38
+ try {
39
+ localStorage.setItem(getStorageKey(), JSON.stringify(values));
40
+ }
41
+ catch (e) {
42
+ console.error('Failed to save inputs to localStorage:', e);
43
+ }
44
+ }
45
+ function handleModalConfirm() {
46
+ saveInputsToStorage(additionalInputsValues ?? {});
47
+ showInputsModal = false;
48
+ }
49
+ function handleSendMessage() {
50
+ const inputs = additionalInputsSchema
51
+ ? (loadInputsFromStorage() ?? additionalInputsValues)
52
+ : undefined;
53
+ manager.sendMessage(inputs);
54
+ }
55
+ function openInputsModal() {
56
+ const stored = loadInputsFromStorage();
57
+ if (stored)
58
+ additionalInputsValues = stored;
59
+ showInputsModal = true;
60
+ }
61
+ const hasMissingRequired = $derived.by(() => {
62
+ if (!additionalInputsSchema?.required?.length)
63
+ return false;
64
+ const values = additionalInputsValues ?? {};
65
+ return additionalInputsSchema.required.some((field) => values[field] === undefined || values[field] === '' || values[field] === null);
66
+ });
7
67
  </script>
8
68
 
69
+ <!-- Additional Inputs Modal -->
70
+ {#if additionalInputsSchema}
71
+ <Modal title="Configure inputs" bind:open={showInputsModal}>
72
+ <SchemaForm
73
+ schema={additionalInputsSchema}
74
+ bind:args={additionalInputsValues}
75
+ helperScript={dynamicInputHelperScript}
76
+ />
77
+ {#snippet actions()}
78
+ <Button onClick={handleModalConfirm} variant="accent">Save</Button>
79
+ {/snippet}
80
+ </Modal>
81
+ {/if}
82
+
9
83
  <div class="flex flex-col h-full flex-1 min-w-0">
10
84
  <!-- Messages Container -->
11
85
  <div
@@ -48,14 +122,37 @@ let { manager, deploymentInProgress = false } = $props();
48
122
  </div>
49
123
 
50
124
  <!-- Chat Input -->
51
- <div class="flex flex-row justify-center py-2 xl:max-w-7xl mx-auto w-full">
125
+ <div class="flex flex-col items-center p-2 xl:max-w-7xl mx-auto w-full gap-2">
126
+ {#if additionalInputsSchema}
127
+ <div class="flex items-center justify-end w-full">
128
+ <div class="relative">
129
+ <Button
130
+ size="xs"
131
+ variant="default"
132
+ startIcon={{ icon: Settings2 }}
133
+ title="Inputs"
134
+ onClick={openInputsModal}
135
+ >
136
+ Inputs
137
+ </Button>
138
+ {#if hasMissingRequired}
139
+ <span class="absolute -top-1 -right-1 w-2 h-2 bg-yellow-500 rounded-full"></span>
140
+ {/if}
141
+ </div>
142
+ </div>
143
+ {/if}
52
144
  <div class="w-full" class:opacity-50={deploymentInProgress}>
53
145
  <ChatInput
54
146
  bind:value={manager.inputMessage}
55
147
  bind:bindTextarea={manager.inputElement}
56
148
  disabled={manager.isLoading || deploymentInProgress}
57
- onSend={() => manager.sendMessage()}
58
- onKeydown={manager.handleKeyDown}
149
+ onSend={handleSendMessage}
150
+ onKeydown={(e) => {
151
+ if (e.key === 'Enter' && !e.shiftKey && !e.isComposing) {
152
+ e.preventDefault()
153
+ handleSendMessage()
154
+ }
155
+ }}
59
156
  showCancelButton={manager.isWaitingForResponse || manager.isLoading}
60
157
  onCancel={() => manager.cancelCurrentJob()}
61
158
  sendTitle={deploymentInProgress ? 'Deployment in progress' : 'Send message (Enter)'}