windmill-components 1.623.1 → 1.623.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 (480) hide show
  1. package/package/assets/tokens/tokens.json +11 -1
  2. package/package/ata/apis.js +78 -5
  3. package/package/cancelable-promise-utils.js +4 -2
  4. package/package/components/AddUser.svelte +1 -1
  5. package/package/components/ApiConnectForm.svelte +6 -0
  6. package/package/components/AppConnectDrawer.svelte +1 -0
  7. package/package/components/AppConnectInner.svelte +1 -0
  8. package/package/components/AuthSettings.svelte +3 -1
  9. package/package/components/BedrockCredentialsCheck.svelte +241 -0
  10. package/package/components/BedrockCredentialsCheck.svelte.d.ts +3 -0
  11. package/package/components/CenteredModal.svelte +32 -24
  12. package/package/components/CenteredModal.svelte.d.ts +7 -27
  13. package/package/components/CenteredPage.svelte +6 -2
  14. package/package/components/CenteredPage.svelte.d.ts +3 -0
  15. package/package/components/CompareWorkspaces.svelte +74 -16
  16. package/package/components/ConcurrentJobsChart.svelte +3 -2
  17. package/package/components/ConcurrentJobsChart.svelte.d.ts +2 -2
  18. package/package/components/CustomPopover.svelte +20 -23
  19. package/package/components/CustomPopover.svelte.d.ts +14 -39
  20. package/package/components/DBManager.svelte +134 -42
  21. package/package/components/DBManager.svelte.d.ts +13 -2
  22. package/package/components/DBManagerContent.svelte +25 -63
  23. package/package/components/DBManagerContent.svelte.d.ts +38 -4
  24. package/package/components/DBManagerDrawer.svelte +7 -9
  25. package/package/components/DBTable.svelte +1 -1
  26. package/package/components/DBTable.svelte.d.ts +3 -1
  27. package/package/components/DBTableEditor.svelte +234 -178
  28. package/package/components/DBTableEditor.svelte.d.ts +22 -3
  29. package/package/components/DateInput.svelte +29 -35
  30. package/package/components/DateInput.svelte.d.ts +10 -11
  31. package/package/components/DedicatedWorkersSelector.svelte +569 -0
  32. package/package/components/DedicatedWorkersSelector.svelte.d.ts +8 -0
  33. package/package/components/DeployWorkspace.svelte +106 -29
  34. package/package/components/Description.svelte +3 -2
  35. package/package/components/Dev.svelte +36 -2
  36. package/package/components/DiffDrawer.svelte +8 -29
  37. package/package/components/DiffEditor.svelte +32 -2
  38. package/package/components/DisplayResult.svelte +32 -24
  39. package/package/components/DropdownV2.svelte +2 -1
  40. package/package/components/DropdownV2.svelte.d.ts +1 -0
  41. package/package/components/Editor.svelte +71 -26
  42. package/package/components/Editor.svelte.d.ts +3 -0
  43. package/package/components/EditorBar.svelte +1 -1
  44. package/package/components/FakeMonacoPlaceHolder.svelte +1 -1
  45. package/package/components/FlowBuilder.svelte +17 -11
  46. package/package/components/FlowDiffViewer.svelte +37 -0
  47. package/package/components/FlowDiffViewer.svelte.d.ts +7 -0
  48. package/package/components/FlowGraphViewer.svelte +5 -2
  49. package/package/components/FlowGraphViewer.svelte.d.ts +2 -0
  50. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  51. package/package/components/FlowPreviewContent.svelte +3 -2
  52. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  53. package/package/components/FlowPreviewResult.svelte +0 -4
  54. package/package/components/FlowRestartButton.svelte +2 -3
  55. package/package/components/FlowRestartButton.svelte.d.ts +3 -0
  56. package/package/components/FlowStatusViewerInner.svelte +55 -35
  57. package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -1
  58. package/package/components/FlowStatusWaitingForEvents.svelte +27 -23
  59. package/package/components/FlowStatusWaitingForEvents.svelte.d.ts +4 -18
  60. package/package/components/FlowViewer.svelte +103 -2
  61. package/package/components/FlowViewer.svelte.d.ts +9 -3
  62. package/package/components/ForkWorkspaceBanner.svelte +32 -13
  63. package/package/components/GraphqlSchemaViewer.svelte +8 -1
  64. package/package/components/HistoricInputs.svelte +25 -27
  65. package/package/components/HistoricInputs.svelte.d.ts +2 -2
  66. package/package/components/InfiniteList.svelte +27 -20
  67. package/package/components/InfiniteList.svelte.d.ts +2 -0
  68. package/package/components/InstanceSetting.svelte +38 -0
  69. package/package/components/InviteUser.svelte +16 -42
  70. package/package/components/InviteUser.svelte.d.ts +4 -18
  71. package/package/components/JobLoader.svelte.d.ts +1 -1
  72. package/package/components/JobOtelTraces.svelte +287 -0
  73. package/package/components/JobOtelTraces.svelte.d.ts +6 -0
  74. package/package/components/JsonInputs.svelte +6 -8
  75. package/package/components/JsonInputs.svelte.d.ts +7 -8
  76. package/package/components/LogViewer.svelte +91 -33
  77. package/package/components/Login.svelte +27 -0
  78. package/package/components/ManualPopover.svelte +5 -6
  79. package/package/components/ManualPopover.svelte.d.ts +9 -35
  80. package/package/components/MemoryFootprintViewer.svelte +2 -6
  81. package/package/components/ModulePreview.svelte +23 -21
  82. package/package/components/ModulePreview.svelte.d.ts +1 -0
  83. package/package/components/NextcloudSetting.svelte +1 -1
  84. package/package/components/OAuthSetting.svelte +1 -0
  85. package/package/components/Path.svelte +2 -2
  86. package/package/components/Path.svelte.d.ts +1 -1
  87. package/package/components/PocketIdSetting.svelte +82 -0
  88. package/package/components/PocketIdSetting.svelte.d.ts +6 -0
  89. package/package/components/ResourceEditor.svelte +4 -4
  90. package/package/components/ResourcePicker.svelte +4 -0
  91. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  92. package/package/components/RunButton.svelte +5 -15
  93. package/package/components/RunButton.svelte.d.ts +7 -19
  94. package/package/components/RunChart.svelte +8 -4
  95. package/package/components/RunChart.svelte.d.ts +2 -2
  96. package/package/components/RunForm.svelte +9 -17
  97. package/package/components/RunForm.svelte.d.ts +0 -1
  98. package/package/components/RunFormAdvancedPopup.svelte +1 -1
  99. package/package/components/RunsPage.svelte +202 -537
  100. package/package/components/RunsPage.svelte.d.ts +5 -5
  101. package/package/components/S3FilePicker.svelte +7 -11
  102. package/package/components/S3FilePickerInner.svelte +2 -3
  103. package/package/components/S3FilePickerInner.svelte.d.ts +2 -2
  104. package/package/components/SavedInputsPicker.svelte +1 -1
  105. package/package/components/SavedInputsV2.svelte +35 -36
  106. package/package/components/SchemaForm.svelte +26 -19
  107. package/package/components/SchemaFormWithArgPicker.svelte +4 -3
  108. package/package/components/ScriptBuilder.svelte +1 -1
  109. package/package/components/ScriptEditor.svelte +575 -101
  110. package/package/components/Section.svelte +4 -2
  111. package/package/components/ServiceLogsInner.svelte +4 -4
  112. package/package/components/ShareModal.svelte.d.ts +1 -1
  113. package/package/components/SimpleEditor.svelte +46 -2
  114. package/package/components/Star.svelte +8 -12
  115. package/package/components/Star.svelte.d.ts +6 -19
  116. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  117. package/package/components/SuperadminSettingsInner.svelte +1 -1
  118. package/package/components/TemplateEditor.svelte +54 -29
  119. package/package/components/TemplateEditor.svelte.d.ts +13 -102
  120. package/package/components/TimeAgo.svelte +49 -7
  121. package/package/components/TimeAgo.svelte.d.ts +1 -0
  122. package/package/components/Toast.svelte +5 -1
  123. package/package/components/UserSettings.svelte +1 -1
  124. package/package/components/WorkerGroup.svelte +35 -20
  125. package/package/components/WorkerGroup.svelte.d.ts +1 -0
  126. package/package/components/WorkerTagPicker.svelte +1 -1
  127. package/package/components/WorkerTagSelect.svelte +5 -2
  128. package/package/components/WorkspaceTutorials.svelte +5 -0
  129. package/package/components/apps/components/buttons/AppButton.svelte +21 -6
  130. package/package/components/apps/components/buttons/AppForm.svelte +2 -1
  131. package/package/components/apps/components/buttons/AppFormButton.svelte +2 -1
  132. package/package/components/apps/components/display/InsertRowDrawerButton.svelte +1 -1
  133. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +2 -5
  134. package/package/components/apps/components/display/dbtable/dbFeatures.d.ts +9 -0
  135. package/package/components/apps/components/display/dbtable/dbFeatures.js +32 -0
  136. package/package/components/apps/components/display/dbtable/metadata.d.ts +3 -3
  137. package/package/components/apps/components/display/dbtable/metadata.js +177 -148
  138. package/package/components/apps/components/display/dbtable/queries/alterTable.d.ts +46 -0
  139. package/package/components/apps/components/display/dbtable/queries/alterTable.js +322 -0
  140. package/package/components/apps/components/display/dbtable/queries/alterTable.test.d.ts +1 -0
  141. package/package/components/apps/components/display/dbtable/queries/alterTable.test.js +867 -0
  142. package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +2 -24
  143. package/package/components/apps/components/display/dbtable/queries/createTable.js +13 -25
  144. package/package/components/apps/components/display/dbtable/queries/dbQueriesUtils.d.ts +9 -0
  145. package/package/components/apps/components/display/dbtable/queries/dbQueriesUtils.js +45 -0
  146. package/package/components/apps/components/display/dbtable/queries/relationalKeys.d.ts +45 -0
  147. package/package/components/apps/components/display/dbtable/queries/relationalKeys.js +401 -0
  148. package/package/components/apps/components/display/dbtable/queries/select.d.ts +2 -0
  149. package/package/components/apps/components/display/dbtable/queries/select.js +37 -6
  150. package/package/components/apps/components/display/dbtable/tableEditor.d.ts +35 -0
  151. package/package/components/apps/components/display/dbtable/tableEditor.js +67 -0
  152. package/package/components/apps/components/display/dbtable/utils.d.ts +2 -0
  153. package/package/components/apps/components/display/dbtable/utils.js +61 -36
  154. package/package/components/apps/components/display/table/AppAggridTable.svelte +8 -0
  155. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +9 -9
  156. package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +1 -1
  157. package/package/components/apps/components/helpers/HiddenComponent.svelte +1 -1
  158. package/package/components/apps/components/helpers/InputValue.svelte +1 -1
  159. package/package/components/apps/components/helpers/ResolveConfig.svelte +1 -1
  160. package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -2
  161. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -1
  162. package/package/components/apps/components/helpers/RunnableWrapper.svelte +2 -2
  163. package/package/components/apps/components/inputs/AppMultiSelectV2.svelte +2 -4
  164. package/package/components/apps/editor/AppEditorHeader.svelte +8 -1
  165. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +32 -29
  166. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +2 -2
  167. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte +4 -4
  168. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte.d.ts +3 -3
  169. package/package/components/apps/editor/PublicApp.svelte +49 -30
  170. package/package/components/apps/editor/PublicApp.svelte.d.ts +1 -0
  171. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +77 -7
  172. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +2 -2
  173. package/package/components/apps/editor/inlineScriptsPanel/utils.d.ts +2 -2
  174. package/package/components/apps/editor/inlineScriptsPanel/utils.js +10 -1
  175. package/package/components/apps/inputType.d.ts +6 -1
  176. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  177. package/package/components/assets/AssetsUsageDrawer.svelte +98 -27
  178. package/package/components/assets/AssetsUsageDrawer.svelte.d.ts +5 -6
  179. package/package/components/assets/lib.d.ts +3 -2
  180. package/package/components/assets/lib.js +3 -1
  181. package/package/components/auditLogs/AuditLogsFilters.svelte +9 -17
  182. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  183. package/package/components/common/CloseButton.svelte +2 -1
  184. package/package/components/common/CloseButton.svelte.d.ts +1 -0
  185. package/package/components/common/badge/CountBadge.svelte +4 -3
  186. package/package/components/common/badge/CountBadge.svelte.d.ts +1 -0
  187. package/package/components/common/button/Button.svelte +1 -1
  188. package/package/components/common/button/model.js +1 -1
  189. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +1 -1
  190. package/package/components/common/confirmationModal/ConfirmationModal.svelte +2 -1
  191. package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +1 -0
  192. package/package/components/common/drawer/Drawer.svelte +4 -1
  193. package/package/components/common/drawer/DrawerContent.svelte +6 -3
  194. package/package/components/common/drawer/DrawerContent.svelte.d.ts +1 -0
  195. package/package/components/common/languageIcons/TypeScript.svelte +5 -3
  196. package/package/components/common/languageIcons/TypeScript.svelte.d.ts +1 -0
  197. package/package/components/common/modal/Modal.svelte +3 -3
  198. package/package/components/common/modal/Modal2.svelte +1 -0
  199. package/package/components/common/table/AppRow.svelte +4 -1
  200. package/package/components/common/table/FlowRow.svelte +4 -1
  201. package/package/components/common/table/RawAppRow.svelte +4 -1
  202. package/package/components/common/table/Row.svelte +11 -21
  203. package/package/components/common/table/Row.svelte.d.ts +4 -20
  204. package/package/components/common/table/RowIcon.svelte +6 -2
  205. package/package/components/common/table/RowIcon.svelte.d.ts +1 -1
  206. package/package/components/common/table/ScriptRow.svelte +4 -1
  207. package/package/components/copilot/autocomplete/Autocompletor.d.ts +1 -1
  208. package/package/components/copilot/autocomplete/Autocompletor.js +7 -6
  209. package/package/components/copilot/autocomplete/request.js +13 -9
  210. package/package/components/copilot/chat/AIButtonStyle.d.ts +1 -1
  211. package/package/components/copilot/chat/AIButtonStyle.js +2 -1
  212. package/package/components/copilot/chat/AIChat.svelte +3 -1
  213. package/package/components/copilot/chat/AIChatDisplay.svelte +89 -4
  214. package/package/components/copilot/chat/AIChatInput.svelte +275 -0
  215. package/package/components/copilot/chat/AIChatManager.svelte.js +107 -1
  216. package/package/components/copilot/chat/AiChatLayout.svelte +15 -30
  217. package/package/components/copilot/chat/AppAvailableContextList.svelte +263 -0
  218. package/package/components/copilot/chat/AppAvailableContextList.svelte.d.ts +13 -0
  219. package/package/components/copilot/chat/ContextElementBadge.svelte +44 -0
  220. package/package/components/copilot/chat/DatatableCreationPolicy.svelte +32 -33
  221. package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
  222. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +3 -0
  223. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +4 -0
  224. package/package/components/copilot/chat/app/core.d.ts +56 -15
  225. package/package/components/copilot/chat/app/core.js +141 -22
  226. package/package/components/copilot/chat/context.d.ts +59 -2
  227. package/package/components/copilot/chat/context.js +6 -2
  228. package/package/components/copilot/chat/flow/FlowAIChat.svelte +22 -0
  229. package/package/components/copilot/chat/flow/core.d.ts +3 -1
  230. package/package/components/copilot/chat/flow/core.js +29 -2
  231. package/package/components/copilot/chat/flow/openFlow.json +1 -1
  232. package/package/components/copilot/chat/flow/openFlowZod.d.ts +1 -0
  233. package/package/components/copilot/chat/flow/openFlowZod.js +14 -2
  234. package/package/components/copilot/chat/script/core.d.ts +4 -1
  235. package/package/components/copilot/chat/script/core.js +43 -6
  236. package/package/components/copilot/chat/shared.d.ts +10 -0
  237. package/package/components/copilot/chat/shared.js +24 -0
  238. package/package/components/copilot/lib.d.ts +1 -1
  239. package/package/components/copilot/lib.js +2 -9
  240. package/package/components/copilot/utils.d.ts +5 -0
  241. package/package/components/copilot/utils.js +8 -0
  242. package/package/components/custom_ui.d.ts +2 -0
  243. package/package/components/dbOps.d.ts +18 -4
  244. package/package/components/dbOps.js +25 -3
  245. package/package/components/debug/DebugConsole.svelte +277 -0
  246. package/package/components/debug/DebugConsole.svelte.d.ts +13 -0
  247. package/package/components/debug/DebugPanel.svelte +97 -0
  248. package/package/components/debug/DebugPanel.svelte.d.ts +11 -0
  249. package/package/components/debug/DebugToolbar.svelte +148 -0
  250. package/package/components/debug/DebugToolbar.svelte.d.ts +17 -0
  251. package/package/components/debug/DebugVariableViewer.svelte +115 -0
  252. package/package/components/debug/DebugVariableViewer.svelte.d.ts +11 -0
  253. package/package/components/debug/MonacoDebugger.svelte +384 -0
  254. package/package/components/debug/MonacoDebugger.svelte.d.ts +15 -0
  255. package/package/components/debug/dapClient.d.ts +192 -0
  256. package/package/components/debug/dapClient.js +426 -0
  257. package/package/components/debug/debugUtils.d.ts +30 -0
  258. package/package/components/debug/debugUtils.js +131 -0
  259. package/package/components/debug/index.d.ts +75 -0
  260. package/package/components/debug/index.js +82 -0
  261. package/package/components/details/DetailPageHeader.svelte +21 -7
  262. package/package/components/details/DetailPageHeader.svelte.d.ts +2 -1
  263. package/package/components/details/DetailPageLayout.svelte +10 -1
  264. package/package/components/details/DetailPageLayout.svelte.d.ts +1 -0
  265. package/package/components/flows/CreateActionsApp.svelte +6 -4
  266. package/package/components/flows/DebounceLimit.svelte.d.ts +1 -1
  267. package/package/components/flows/FlowHistoryInner.svelte +15 -4
  268. package/package/components/flows/content/AgentToolWrapper.svelte +1 -1
  269. package/package/components/flows/content/FlowEditorDrawer.svelte +124 -0
  270. package/package/components/flows/content/FlowEditorDrawer.svelte.d.ts +22 -0
  271. package/package/components/flows/content/FlowInput.svelte +211 -37
  272. package/package/components/flows/content/FlowModuleComponent.svelte +553 -67
  273. package/package/components/flows/content/FlowModuleEarlyStop.svelte +8 -10
  274. package/package/components/flows/content/FlowModuleHeader.svelte +7 -4
  275. package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte +1 -1
  276. package/package/components/flows/content/McpOAuthConnect.svelte +217 -0
  277. package/package/components/flows/content/McpOAuthConnect.svelte.d.ts +7 -0
  278. package/package/components/flows/content/McpToolEditor.svelte +50 -37
  279. package/package/components/flows/content/McpToolEditor.svelte.d.ts +0 -1
  280. package/package/components/flows/conversations/FlowChat.svelte +16 -2
  281. package/package/components/flows/conversations/FlowChat.svelte.d.ts +2 -1
  282. package/package/components/flows/conversations/FlowChatInterface.svelte +103 -6
  283. package/package/components/flows/conversations/FlowChatInterface.svelte.d.ts +2 -0
  284. package/package/components/flows/conversations/FlowChatManager.svelte.js +53 -21
  285. package/package/components/flows/conversations/FlowConversationsSidebar.svelte +79 -77
  286. package/package/components/flows/header/FlowImportExportMenu.svelte +1 -1
  287. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  288. package/package/components/flows/propPicker/PropPickerWrapper.svelte +3 -1
  289. package/package/components/flows/types.d.ts +2 -0
  290. package/package/components/git_sync/GitSyncRepositoryCard.svelte +16 -8
  291. package/package/components/graph/FlowGraphV2.svelte +7 -1
  292. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +41 -24
  293. package/package/components/home/ItemsList.svelte +7 -6
  294. package/package/components/home/TutorialBanner.svelte +34 -18
  295. package/package/components/home/treeViewUtils.js +1 -1
  296. package/package/components/icons/CssIcon.svelte +20 -0
  297. package/package/components/icons/CssIcon.svelte.d.ts +7 -25
  298. package/package/components/icons/HtmlIcon.svelte +20 -0
  299. package/package/components/icons/HtmlIcon.svelte.d.ts +8 -0
  300. package/package/components/icons/JavaScriptIcon.svelte +10 -2
  301. package/package/components/icons/JavaScriptIcon.svelte.d.ts +1 -0
  302. package/package/components/icons/JsonIcon.svelte +8 -2
  303. package/package/components/icons/JsonIcon.svelte.d.ts +1 -0
  304. package/package/components/icons/LessIcon.svelte +16 -0
  305. package/package/components/icons/LessIcon.svelte.d.ts +8 -0
  306. package/package/components/icons/MarkdownIcon.svelte +20 -0
  307. package/package/components/icons/MarkdownIcon.svelte.d.ts +8 -0
  308. package/package/components/icons/NextcloudIcon.svelte +3 -2
  309. package/package/components/icons/NextcloudIcon.svelte.d.ts +2 -0
  310. package/package/components/icons/PocketIdIcon.svelte +9 -0
  311. package/package/components/icons/PocketIdIcon.svelte.d.ts +9 -0
  312. package/package/components/icons/ReactIcon.svelte +10 -2
  313. package/package/components/icons/ReactIcon.svelte.d.ts +1 -0
  314. package/package/components/icons/SassIcon.svelte +28 -0
  315. package/package/components/icons/SassIcon.svelte.d.ts +8 -0
  316. package/package/components/icons/SvelteIcon.svelte +10 -2
  317. package/package/components/icons/SvelteIcon.svelte.d.ts +1 -0
  318. package/package/components/icons/VueIcon.svelte +10 -2
  319. package/package/components/icons/VueIcon.svelte.d.ts +1 -0
  320. package/package/components/icons/YamlIcon.svelte +20 -0
  321. package/package/components/icons/YamlIcon.svelte.d.ts +8 -0
  322. package/package/components/icons/index.js +3 -1
  323. package/package/components/instanceSettings/SecretBackendConfig.svelte +514 -0
  324. package/package/components/instanceSettings/SecretBackendConfig.svelte.d.ts +8 -0
  325. package/package/components/instanceSettings.d.ts +2 -1
  326. package/package/components/instanceSettings.js +33 -1
  327. package/package/components/jobs/JobPreview.svelte +46 -39
  328. package/package/components/jobs/JobPreview.svelte.d.ts +1 -0
  329. package/package/components/monacoLanguagesOptions.js +16 -15
  330. package/package/components/propertyPicker/PropPicker.svelte +16 -2
  331. package/package/components/propertyPicker/PropPicker.svelte.d.ts +2 -0
  332. package/package/components/raw_apps/DefaultDatabaseSelector.svelte +9 -5
  333. package/package/components/raw_apps/FileEditorIcon.svelte +12 -7
  334. package/package/components/raw_apps/FileEditorIcon.svelte.d.ts +2 -0
  335. package/package/components/raw_apps/FileTreeNode.svelte +119 -83
  336. package/package/components/raw_apps/RawAppBackgroundRunner.svelte +88 -8
  337. package/package/components/raw_apps/RawAppDataTableDrawer.svelte +1 -3
  338. package/package/components/raw_apps/RawAppDataTableList.svelte +12 -9
  339. package/package/components/raw_apps/RawAppEditor.svelte +218 -68
  340. package/package/components/raw_apps/RawAppEditorHeader.svelte +33 -16
  341. package/package/components/raw_apps/RawAppHistoryList.svelte +264 -80
  342. package/package/components/raw_apps/RawAppHistoryList.svelte.d.ts +1 -0
  343. package/package/components/raw_apps/RawAppHistoryManager.svelte.d.ts +15 -1
  344. package/package/components/raw_apps/RawAppHistoryManager.svelte.js +46 -12
  345. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +549 -47
  346. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +31 -5
  347. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +25 -18
  348. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte.d.ts +1 -0
  349. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +141 -10
  350. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte.d.ts +8 -0
  351. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte +2 -1
  352. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +9 -1
  353. package/package/components/raw_apps/RawAppInputsSpecEditor.svelte +47 -3
  354. package/package/components/raw_apps/RawAppInputsSpecEditor.svelte.d.ts +2 -2
  355. package/package/components/raw_apps/RawAppModules.svelte +13 -7
  356. package/package/components/raw_apps/RawAppPreview.svelte +48 -6
  357. package/package/components/raw_apps/RawAppSidebar.svelte +194 -125
  358. package/package/components/raw_apps/RawAppSidebar.svelte.d.ts +1 -0
  359. package/package/components/raw_apps/RunnableRow.svelte +41 -0
  360. package/package/components/raw_apps/RunnableRow.svelte.d.ts +11 -0
  361. package/package/components/raw_apps/datatableUtils.svelte.js +1 -1
  362. package/package/components/raw_apps/utils.d.ts +1 -1
  363. package/package/components/raw_apps/utils.js +76 -18
  364. package/package/components/runs/ManuelDatePicker.svelte +3 -3
  365. package/package/components/runs/ManuelDatePicker.svelte.d.ts +3 -3
  366. package/package/components/runs/NoWorkerWithTagWarning.svelte +5 -1
  367. package/package/components/runs/RunsFilter.svelte +75 -63
  368. package/package/components/runs/RunsFilter.svelte.d.ts +35 -4
  369. package/package/components/runs/RunsQueue.svelte.d.ts +1 -1
  370. package/package/components/runs/RunsTable.svelte +1 -1
  371. package/package/components/runs/RunsTable.svelte.d.ts +1 -1
  372. package/package/components/runs/useJobsLoader.svelte.d.ts +34 -0
  373. package/package/components/runs/useJobsLoader.svelte.js +507 -0
  374. package/package/components/schema/EditableSchemaWrapper.svelte +2 -2
  375. package/package/components/scriptEditor/LogPanel.svelte +17 -2
  376. package/package/components/scriptEditor/LogPanel.svelte.d.ts +2 -0
  377. package/package/components/select/MultiSelect.svelte +1 -1
  378. package/package/components/select/SelectDropdown.svelte +17 -5
  379. package/package/components/settings/AIPromptsModal.svelte +88 -0
  380. package/package/components/settings/AIPromptsModal.svelte.d.ts +11 -0
  381. package/package/components/settings/ChangeWorkspaceColor.svelte +4 -3
  382. package/package/components/settings/ChangeWorkspaceId.svelte +16 -11
  383. package/package/components/settings/ChangeWorkspaceName.svelte +7 -6
  384. package/package/components/settings/CreateToken.svelte +4 -4
  385. package/package/components/settings/UserAIPromptsSettings.svelte +56 -15
  386. package/package/components/settings/WorkspaceOperatorSettings.svelte +68 -85
  387. package/package/components/settings/WorkspaceUserSettings.svelte +537 -411
  388. package/package/components/sidebar/MenuButton.svelte +54 -24
  389. package/package/components/sidebar/MenuButton.svelte.d.ts +2 -0
  390. package/package/components/sidebar/MultiplayerMenu.svelte +4 -4
  391. package/package/components/sidebar/OperatorMenu.svelte +63 -88
  392. package/package/components/sidebar/SidebarContent.svelte +39 -6
  393. package/package/components/sidebar/UserMenu.svelte +3 -3
  394. package/package/components/sidebar/WorkspaceMenu.svelte +35 -85
  395. package/package/components/sqlTypeService.js +4 -3
  396. package/package/components/table/DataTable.svelte +8 -3
  397. package/package/components/table/DataTable.svelte.d.ts +2 -0
  398. package/package/components/text_input/TextInput.svelte +3 -0
  399. package/package/components/text_input/TextInput.svelte.d.ts +2 -0
  400. package/package/components/triggers/AddTriggersButton.svelte +17 -4
  401. package/package/components/triggers/TriggersEditor.svelte +4 -0
  402. package/package/components/triggers/TriggersWrapper.svelte +14 -0
  403. package/package/components/triggers/native/NativeTriggerEditor.svelte +379 -0
  404. package/package/components/triggers/native/NativeTriggerEditor.svelte.d.ts +26 -0
  405. package/package/components/triggers/native/NativeTriggerTable.svelte +155 -0
  406. package/package/components/triggers/native/NativeTriggerTable.svelte.d.ts +16 -0
  407. package/package/components/triggers/native/NativeTriggersPanel.svelte +40 -0
  408. package/package/components/triggers/native/NativeTriggersPanel.svelte.d.ts +15 -0
  409. package/package/components/triggers/native/services/nextcloud/NextcloudTriggerForm.svelte +104 -0
  410. package/package/components/triggers/native/services/nextcloud/NextcloudTriggerForm.svelte.d.ts +18 -0
  411. package/package/components/triggers/native/utils.d.ts +74 -0
  412. package/package/components/triggers/native/utils.js +152 -0
  413. package/package/components/triggers/triggers.svelte.d.ts +2 -1
  414. package/package/components/triggers/triggers.svelte.js +36 -8
  415. package/package/components/triggers/utils.js +18 -6
  416. package/package/components/triggers.d.ts +1 -1
  417. package/package/components/tutorials/FlowBuilderLiveTutorial.svelte +6 -35
  418. package/package/components/tutorials/RunsTutorial.svelte +399 -0
  419. package/package/components/{schema/SchemaPicker.svelte.d.ts → tutorials/RunsTutorial.svelte.d.ts} +11 -12
  420. package/package/components/tutorials/TroubleshootFlowTutorial.svelte +5 -20
  421. package/package/components/tutorials/utils.d.ts +16 -0
  422. package/package/components/tutorials/utils.js +96 -0
  423. package/package/components/tutorials/workspace/WorkspaceOnboardingOperatorTutorial.svelte +133 -0
  424. package/package/components/{SavedInputs.svelte.d.ts → tutorials/workspace/WorkspaceOnboardingOperatorTutorial.svelte.d.ts} +8 -11
  425. package/package/components/vscode.js +6 -6
  426. package/package/components/workspace/WorkspaceCard.svelte +184 -0
  427. package/package/components/workspace/WorkspaceCard.svelte.d.ts +24 -0
  428. package/package/components/workspace/WorkspaceIcon.svelte +21 -0
  429. package/package/components/workspace/WorkspaceIcon.svelte.d.ts +9 -0
  430. package/package/components/workspace/WorkspaceTreeView.svelte +331 -0
  431. package/package/components/workspace/WorkspaceTreeView.svelte.d.ts +15 -0
  432. package/package/components/workspaceSettings/AISettings.svelte +147 -108
  433. package/package/components/workspaceSettings/CreateWorkspace.svelte +26 -12
  434. package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +1 -0
  435. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +3 -1
  436. package/package/components/workspaceSettings/DataTableSettings.svelte +2 -1
  437. package/package/components/workspaceSettings/DucklakeSettings.svelte +54 -26
  438. package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +2 -1
  439. package/package/components/workspaceSettings/ModelTokenLimits.svelte +14 -18
  440. package/package/components/workspaceSettings/OAuthClientConfig.svelte +180 -0
  441. package/package/components/workspaceSettings/OAuthClientConfig.svelte.d.ts +14 -0
  442. package/package/components/workspaceSettings/StorageSettings.svelte +285 -241
  443. package/package/components/workspaceSettings/StorageSettings.svelte.d.ts +1 -0
  444. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +302 -0
  445. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte.d.ts +3 -0
  446. package/package/consts.js +4 -3
  447. package/package/gen/core/OpenAPI.js +1 -1
  448. package/package/gen/schemas.gen.d.ts +517 -4
  449. package/package/gen/schemas.gen.js +523 -4
  450. package/package/gen/services.gen.d.ts +359 -22
  451. package/package/gen/services.gen.js +702 -44
  452. package/package/gen/types.gen.d.ts +1501 -121
  453. package/package/hub.js +2 -2
  454. package/package/hubPaths.json +3 -2
  455. package/package/infer.js +2 -0
  456. package/package/logout.d.ts +0 -2
  457. package/package/logout.js +2 -23
  458. package/package/logoutKit.d.ts +2 -0
  459. package/package/logoutKit.js +26 -0
  460. package/package/monaco_workers/graphql.worker.bundle.js +121 -121
  461. package/package/navigation.d.ts +1 -1
  462. package/package/rawAppWmillTs.d.ts +11 -0
  463. package/package/rawAppWmillTs.js +38 -1
  464. package/package/refreshUser.d.ts +5 -1
  465. package/package/refreshUser.js +20 -30
  466. package/package/storeUtils.js +2 -0
  467. package/package/svelte5Utils.svelte.d.ts +68 -1
  468. package/package/svelte5Utils.svelte.js +193 -2
  469. package/package/svelte5UtilsKit.svelte.d.ts +3 -0
  470. package/package/svelte5UtilsKit.svelte.js +30 -0
  471. package/package/tutorialUtils.js +0 -4
  472. package/package/tutorials/config.js +31 -3
  473. package/package/tutorials/roleUtils.d.ts +1 -1
  474. package/package/tutorials/roleUtils.js +6 -2
  475. package/package/utils.js +162 -1
  476. package/package.json +1 -1
  477. package/package/components/SavedInputs.svelte +0 -416
  478. package/package/components/runs/JobsLoader.svelte +0 -468
  479. package/package/components/runs/JobsLoader.svelte.d.ts +0 -49
  480. package/package/components/schema/SchemaPicker.svelte +0 -92
@@ -45,9 +45,16 @@ let listener = async (event) => {
45
45
  const runnable_id = data.runnable_id;
46
46
  let runnable = runnables[runnable_id];
47
47
  if (runnable) {
48
+ // Build args, converting ctx fields to $ctx:property format
49
+ const args = { ...(data.v ?? {}) };
50
+ for (const [key, field] of Object.entries(runnable?.fields ?? {})) {
51
+ if (field?.type === 'ctx' && field?.ctx) {
52
+ args[key] = `$ctx:${field.ctx}`;
53
+ }
54
+ }
48
55
  const uuid = await executeRunnable(runnable, workspace, undefined, $userStore?.username, path, runnable_id, {
49
56
  component: runnable_id,
50
- args: data.v ?? {},
57
+ args,
51
58
  force_viewer_allow_user_resources: editor
52
59
  ? undefinedIfEmpty(Object.keys(runnable?.fields ?? {}).filter((k) => runnable?.fields?.[k]?.type == 'user' &&
53
60
  runnable?.fields?.[k]?.allowUserResources))
@@ -73,17 +80,90 @@ let listener = async (event) => {
73
80
  job.result = result;
74
81
  }
75
82
  }
76
- else if (event.data.type == 'waitJob') {
77
- await respondWithResult(data.jobId);
78
- }
79
- else if (event.data.type == 'getJob') {
80
- const job = await JobService.getJob({ workspace, id: data.jobId });
81
- respond({ result: job });
82
- }
83
83
  else {
84
84
  console.error('No runnable found for', runnable_id);
85
85
  }
86
86
  }
87
+ else if (event.data.type == 'waitJob') {
88
+ await respondWithResult(data.jobId);
89
+ }
90
+ else if (event.data.type == 'getJob') {
91
+ const job = await JobService.getJob({ workspace, id: data.jobId });
92
+ respond({ result: job });
93
+ }
94
+ else if (event.data.type == 'streamJob') {
95
+ // Stream job results using SSE
96
+ const jobId = data.jobId;
97
+ const reqId = data.reqId;
98
+ const params = new URLSearchParams();
99
+ params.set('fast', 'true');
100
+ const sseUrl = `/api/w/${workspace}/jobs_u/getupdate_sse/${jobId}?${params.toString()}`;
101
+ const eventSource = new EventSource(sseUrl);
102
+ eventSource.onmessage = (sseEvent) => {
103
+ try {
104
+ const update = JSON.parse(sseEvent.data);
105
+ const type = update.type;
106
+ if (type === 'ping' || type === 'timeout') {
107
+ if (type === 'timeout') {
108
+ eventSource.close();
109
+ }
110
+ return;
111
+ }
112
+ if (type === 'error') {
113
+ eventSource.close();
114
+ iframe?.contentWindow?.postMessage({
115
+ type: 'streamJobRes',
116
+ reqId,
117
+ error: true,
118
+ result: { message: update.error || 'SSE error' }
119
+ }, '*');
120
+ return;
121
+ }
122
+ if (type === 'not_found') {
123
+ eventSource.close();
124
+ iframe?.contentWindow?.postMessage({
125
+ type: 'streamJobRes',
126
+ reqId,
127
+ error: true,
128
+ result: { message: 'Job not found' }
129
+ }, '*');
130
+ return;
131
+ }
132
+ // Send stream update if there's new stream data
133
+ if (update.new_result_stream !== undefined) {
134
+ iframe?.contentWindow?.postMessage({
135
+ type: 'streamJobUpdate',
136
+ reqId,
137
+ new_result_stream: update.new_result_stream,
138
+ stream_offset: update.stream_offset
139
+ }, '*');
140
+ }
141
+ // Check if job is completed
142
+ if (update.completed) {
143
+ eventSource.close();
144
+ iframe?.contentWindow?.postMessage({
145
+ type: 'streamJobRes',
146
+ reqId,
147
+ error: false,
148
+ result: update.only_result
149
+ }, '*');
150
+ }
151
+ }
152
+ catch (parseErr) {
153
+ console.warn('Failed to parse SSE data:', parseErr);
154
+ }
155
+ };
156
+ eventSource.onerror = (error) => {
157
+ console.warn('SSE stream error:', error);
158
+ eventSource.close();
159
+ iframe?.contentWindow?.postMessage({
160
+ type: 'streamJobRes',
161
+ reqId,
162
+ error: true,
163
+ result: { message: 'SSE connection error' }
164
+ }, '*');
165
+ };
166
+ }
87
167
  };
88
168
  </script>
89
169
 
@@ -14,7 +14,6 @@ let selectedDatatable = $state(undefined);
14
14
  // For DB manager
15
15
  let dbManagerContent = $state();
16
16
  let hasReplResult = $state(false);
17
- let isRefreshing = $state(false);
18
17
  let windowWidth = $state(window.innerWidth);
19
18
  let expand = $state(false);
20
19
  // Multi-select mode: selected tables
@@ -136,7 +135,6 @@ const canAdd = $derived(selectedDatatable && selectedTables.length > 0);
136
135
  bind:this={dbManagerContent}
137
136
  input={dbInput}
138
137
  bind:hasReplResult
139
- bind:isRefreshing
140
138
  bind:selectedSchemaKey
141
139
  bind:selectedTableKey
142
140
  multiSelectMode={true}
@@ -184,7 +182,7 @@ const canAdd = $derived(selectedDatatable && selectedTables.length > 0);
184
182
  </Button>
185
183
 
186
184
  <Button
187
- loading={isRefreshing}
185
+ loading={dbManagerContent?.isLoading() ?? false}
188
186
  on:click={() => dbManagerContent?.refresh()}
189
187
  startIcon={{ icon: RefreshCcw }}
190
188
  size="xs"
@@ -1,6 +1,7 @@
1
1
  <script lang="ts">import { Plus, Database, Trash2, Table2, Star } from 'lucide-svelte';
2
2
  import PanelSection from '../apps/editor/settingsPanel/common/PanelSection.svelte';
3
3
  import DefaultDatabaseSelector from './DefaultDatabaseSelector.svelte';
4
+ import { Button } from '../common';
4
5
  let { dataTableRefs = [], defaultDatatable = undefined, defaultSchema = undefined, onAdd, onRemove, onSelect, onDefaultChange, selectedIndex = undefined, standalone = false, hideDefaultSelector = false } = $props();
5
6
  const groupedRefs = $derived.by(() => {
6
7
  const groups = new Map();
@@ -44,7 +45,7 @@ function sortSchemaEntries(entries, datatableName) {
44
45
  </script>
45
46
 
46
47
  {#snippet actionButtons()}
47
- <div class="flex items-center">
48
+ <div class="flex items-center gap-1">
48
49
  <!-- Settings popover for default database/schema -->
49
50
  {#if !hideDefaultSelector}
50
51
  <DefaultDatabaseSelector
@@ -55,14 +56,16 @@ function sortSchemaEntries(entries, datatableName) {
55
56
  {/if}
56
57
 
57
58
  <!-- Add datatable button -->
58
- <button
59
- onclick={() => onAdd?.()}
60
- class="pt-1.5 pb-0.5 px-1 hover:bg-surface-hover rounded transition-colors flex items-center gap-0.5"
59
+ <Button
60
+ onClick={() => onAdd?.()}
61
61
  title="Add datatable reference"
62
+ unifiedSize="xs"
63
+ variant="subtle"
64
+ btnClasses="px-1 gap-0.5"
62
65
  >
63
- <Plus size={12} class="text-secondary" />
64
- <Database size={12} class="text-tertiary" />
65
- </button>
66
+ <Plus size={12} />
67
+ <Database size={12} />
68
+ </Button>
66
69
  </div>
67
70
  {/snippet}
68
71
 
@@ -138,7 +141,7 @@ function sortSchemaEntries(entries, datatableName) {
138
141
  {#if standalone}
139
142
  <div class="flex flex-col gap-2">
140
143
  <div class="flex items-center justify-between">
141
- <span class="text-xs text-tertiary">Existing tables to use</span>
144
+ <span class="text-xs text-emphasis font-semibold">Existing tables to use</span>
142
145
  {@render actionButtons()}
143
146
  </div>
144
147
  {@render tableList()}
@@ -146,7 +149,7 @@ function sortSchemaEntries(entries, datatableName) {
146
149
  {:else}
147
150
  <PanelSection
148
151
  fullHeight={false}
149
- size="lg"
152
+ size="sm"
150
153
  title="data"
151
154
  id="app-editor-data-panel"
152
155
  tooltip="Data tables to use in the app. Adding some here does not change the behavior of the app, since they can be used in code directly regardless. But it allows AI to always keep their schema in context as well as allowing quick access and clear view of the app's data layer."
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">import { Pane, Splitpanes } from 'svelte-splitpanes';
2
2
  import RawAppInlineScriptsPanel from './RawAppInlineScriptsPanel.svelte';
3
3
  import RawAppEditorHeader from './RawAppEditorHeader.svelte';
4
- import {} from '../../gen';
4
+ import { WorkspaceService } from '../../gen';
5
5
  import DiffDrawer from '../DiffDrawer.svelte';
6
6
  import { encodeState } from '../../utils';
7
7
  import { deepEqual } from 'fast-equals';
@@ -16,7 +16,6 @@ import { aiChatManager, AIMode } from '../copilot/chat/AIChatManager.svelte';
16
16
  import { onMount } from 'svelte';
17
17
  import { rawAppLintStore } from './lintStore';
18
18
  import { dbSchemas } from '../../stores';
19
- import { getDbSchemas } from '../apps/components/display/dbtable/metadata';
20
19
  import { runScriptAndPollResult } from '../jobs/utils';
21
20
  import { RawAppHistoryManager } from './RawAppHistoryManager.svelte';
22
21
  import { sendUserToast } from '../../utils';
@@ -58,7 +57,7 @@ function saveFrontendDraft() {
58
57
  }, 500);
59
58
  }
60
59
  let iframe = $state(undefined);
61
- let sidebarPanelSize = $state(10);
60
+ let sidebarPanelSize = $state(15);
62
61
  let jobs = $state([]);
63
62
  let jobsById = $state({});
64
63
  // Helper function to convert internal Runnable to BackendRunnable format
@@ -122,6 +121,14 @@ function setFilesInIframe(newFiles) {
122
121
  files: files
123
122
  }, '*');
124
123
  }
124
+ function setFilesAndSelectInIframe(newFiles, pathToSelect) {
125
+ const files = Object.fromEntries(Object.entries(newFiles).filter(([path, _]) => !path.endsWith('/')));
126
+ iframe?.contentWindow?.postMessage({
127
+ type: 'setFilesAndSelect',
128
+ files: files,
129
+ pathToSelect: pathToSelect
130
+ }, '*');
131
+ }
125
132
  function populateRunnables() {
126
133
  iframe?.contentWindow?.postMessage({
127
134
  type: 'setRunnables',
@@ -205,7 +212,6 @@ $effect(() => {
205
212
  ...$state.snapshot(files ?? {}),
206
213
  '/wmill.d.ts': genWmillTs(runnables)
207
214
  };
208
- console.log('result', frontendFiles);
209
215
  return frontendFiles;
210
216
  },
211
217
  setFrontendFile: (path, content) => {
@@ -214,10 +220,9 @@ $effect(() => {
214
220
  files = {};
215
221
  }
216
222
  files[path] = content;
217
- setFilesInIframe(files);
218
223
  selectedDocument = path;
219
- handleSelectFile(path);
220
- console.log('files after setting', files);
224
+ // Use combined setFilesAndSelect to avoid race condition
225
+ setFilesAndSelectInIframe(files, path);
221
226
  return lint();
222
227
  },
223
228
  deleteFrontendFile: (path) => {
@@ -297,24 +302,37 @@ $effect(() => {
297
302
  };
298
303
  },
299
304
  getSelectedContext: () => {
305
+ const baseContext = {
306
+ inspectorElement: inspectorElement,
307
+ selectionExcluded: selectionExcludedFromPrompt,
308
+ toggleSelectionExcluded: toggleSelectionExcluded,
309
+ clearInspector: clearInspectorSelection,
310
+ clearRunnable: handleClearRunnable,
311
+ codeSelection: codeSelection,
312
+ clearCodeSelection: () => {
313
+ codeSelection = undefined;
314
+ }
315
+ };
300
316
  if (selectedRunnable) {
301
- console.log('selectedRunnable', selectedRunnable);
317
+ const runnable = convertToBackendRunnable(selectedRunnable, runnables[selectedRunnable]);
302
318
  return {
303
319
  type: 'backend',
304
- content: selectedRunnable ?? ''
320
+ backendKey: selectedRunnable,
321
+ backendRunnable: runnable,
322
+ ...baseContext
305
323
  };
306
324
  }
307
325
  if (selectedDocument) {
308
- console.log('selectedDocument', selectedDocument);
309
326
  return {
310
327
  type: 'frontend',
311
- content: selectedDocument ?? ''
328
+ frontendPath: selectedDocument,
329
+ frontendContent: files?.[selectedDocument],
330
+ ...baseContext
312
331
  };
313
332
  }
314
- console.log('no selection');
315
333
  return {
316
334
  type: 'none',
317
- content: ''
335
+ ...baseContext
318
336
  };
319
337
  },
320
338
  snapshot: () => {
@@ -327,52 +345,71 @@ $effect(() => {
327
345
  handleHistorySelect(id);
328
346
  },
329
347
  getDatatables: async () => {
348
+ if (!$workspaceStore) {
349
+ return [];
350
+ }
351
+ // Get all datatable schemas from the backend
352
+ const allSchemas = await WorkspaceService.listDataTableSchemas({
353
+ workspace: $workspaceStore
354
+ });
355
+ // Get unique datatable names from dataTableRefs (the whitelisted tables)
356
+ const whitelistedDatatables = new Set(dataTableRefsObjects.map((ref) => ref.datatable));
357
+ // If no datatables are configured, return all available datatables
358
+ // This allows users to see all datatables in the @ context menu
359
+ if (whitelistedDatatables.size === 0) {
360
+ return allSchemas;
361
+ }
362
+ // Build a map of whitelisted tables per datatable: datatable -> schema -> Set<table>
363
+ const whitelistedTables = new Map();
364
+ for (const ref of dataTableRefsObjects) {
365
+ if (!ref.table)
366
+ continue;
367
+ if (!whitelistedTables.has(ref.datatable)) {
368
+ whitelistedTables.set(ref.datatable, new Map());
369
+ }
370
+ const schemaKey = ref.schema || 'public';
371
+ const schemaMap = whitelistedTables.get(ref.datatable);
372
+ if (!schemaMap.has(schemaKey)) {
373
+ schemaMap.set(schemaKey, new Set());
374
+ }
375
+ schemaMap.get(schemaKey).add(ref.table);
376
+ }
377
+ // Filter schemas to only include whitelisted datatables and tables
330
378
  const results = [];
331
- // Get unique datatable names from dataTableRefs
332
- const datatableNames = [...new Set(dataTableRefsObjects.map((ref) => ref.datatable))];
333
- for (const datatableName of datatableNames) {
334
- const resourcePath = `datatable://${datatableName}`;
335
- // Get or load the schema
336
- let schema = $dbSchemas[resourcePath];
337
- if (!schema) {
338
- try {
339
- await getDbSchemas('postgresql', resourcePath, $workspaceStore, $dbSchemas, (msg) => console.error('Schema error:', msg));
340
- schema = $dbSchemas[resourcePath];
341
- }
342
- catch (e) {
343
- console.error(`Failed to load schema for ${datatableName}:`, e);
344
- continue;
345
- }
379
+ for (const schema of allSchemas) {
380
+ if (!whitelistedDatatables.has(schema.datatable_name)) {
381
+ continue;
346
382
  }
347
- if (!schema?.schema)
383
+ const allowedTables = whitelistedTables.get(schema.datatable_name);
384
+ if (!allowedTables) {
385
+ // Include the datatable but with empty schemas
386
+ results.push({
387
+ datatable_name: schema.datatable_name,
388
+ schemas: {},
389
+ error: schema.error
390
+ });
348
391
  continue;
349
- // Get the tables for this datatable from the refs
350
- const refsForDatatable = dataTableRefsObjects.filter((ref) => ref.datatable === datatableName);
351
- const tables = [];
352
- for (const ref of refsForDatatable) {
353
- const schemaKey = ref.schema || 'public';
354
- const tableKey = ref.table;
355
- if (!tableKey)
356
- continue; // Skip if no table specified
357
- const tableSchema = schema.schema[schemaKey]?.[tableKey];
358
- if (!tableSchema)
392
+ }
393
+ // Filter schemas to only include whitelisted tables
394
+ const filteredSchemas = {};
395
+ for (const [schemaName, tables] of Object.entries(schema.schemas)) {
396
+ const allowedTablesInSchema = allowedTables.get(schemaName);
397
+ if (!allowedTablesInSchema)
359
398
  continue;
360
- const columns = {};
361
- for (const [colName, colDef] of Object.entries(tableSchema)) {
362
- columns[colName] = {
363
- type: colDef.type || 'unknown',
364
- required: colDef.required || false
365
- };
399
+ const filteredTables = {};
400
+ for (const [tableName, columns] of Object.entries(tables)) {
401
+ if (allowedTablesInSchema.has(tableName)) {
402
+ filteredTables[tableName] = columns;
403
+ }
404
+ }
405
+ if (Object.keys(filteredTables).length > 0) {
406
+ filteredSchemas[schemaName] = filteredTables;
366
407
  }
367
- tables.push({
368
- schema: schemaKey,
369
- table: tableKey,
370
- columns
371
- });
372
408
  }
373
409
  results.push({
374
- name: datatableName,
375
- tables
410
+ datatable_name: schema.datatable_name,
411
+ schemas: filteredSchemas,
412
+ error: schema.error
376
413
  });
377
414
  }
378
415
  return results;
@@ -422,17 +459,44 @@ $effect(() => {
422
459
  const errorMsg = e instanceof Error ? e.message : String(e);
423
460
  return { success: false, error: errorMsg };
424
461
  }
462
+ },
463
+ addTableToWhitelist: (datatableName, schemaName, tableName) => {
464
+ // Format the table reference
465
+ const newRef = formatDataTableRef({
466
+ datatable: datatableName,
467
+ schema: schemaName === 'public' ? undefined : schemaName,
468
+ table: tableName
469
+ });
470
+ // Only add if not already present
471
+ if (!data.tables.includes(newRef)) {
472
+ data.tables = [...data.tables, newRef];
473
+ saveFrontendDraft();
474
+ }
425
475
  }
426
476
  });
427
477
  });
428
478
  let selectedRunnable = $state(undefined);
429
479
  let selectedDocument = $state(undefined);
480
+ let inspectorElement = $state(undefined);
481
+ let selectionExcludedFromPrompt = $state(false);
482
+ let codeSelection = $state(undefined);
483
+ function toggleSelectionExcluded() {
484
+ selectionExcludedFromPrompt = !selectionExcludedFromPrompt;
485
+ }
430
486
  let modules = $state({});
487
+ // Normalize Windows-style path separators to Linux-style
488
+ function normalizeFilePaths(filesObj) {
489
+ if (!filesObj)
490
+ return filesObj;
491
+ return Object.fromEntries(Object.entries(filesObj).map(([path, content]) => [path.replace(/\\/g, '/'), content]));
492
+ }
431
493
  function listener(e) {
432
494
  if (e.data.type === 'setFiles') {
495
+ // Normalize Windows-style path separators to Linux-style
496
+ const normalizedFiles = normalizeFilePaths(e.data.files);
433
497
  // Only mark pending changes if files actually changed (ignore echo from setFilesInIframe)
434
- if (!deepEqual(files, e.data.files)) {
435
- files = e.data.files;
498
+ if (!deepEqual(files, normalizedFiles)) {
499
+ files = normalizedFiles;
436
500
  historyManager.markPendingChanges();
437
501
  }
438
502
  }
@@ -443,7 +507,39 @@ function listener(e) {
443
507
  modules = e.data.modules;
444
508
  }
445
509
  else if (e.data.type === 'setActiveDocument') {
446
- selectedDocument = e.data.path;
510
+ // Normalize Windows-style path separators to Linux-style
511
+ selectedDocument = e.data.path?.replace(/\\/g, '/');
512
+ }
513
+ else if (e.data.type === 'inspectorSelect') {
514
+ // Handle inspector element selection from the iframe preview
515
+ inspectorElement = e.data.element;
516
+ }
517
+ else if (e.data.type === 'inspectorClear') {
518
+ // Clear the inspector element when user dismisses the selection
519
+ inspectorElement = undefined;
520
+ }
521
+ else if (e.data.type === 'editorSelection') {
522
+ // Handle code selection from the iframe editor
523
+ const selection = e.data.selection;
524
+ if (selection === null) {
525
+ // Selection cleared
526
+ codeSelection = undefined;
527
+ }
528
+ else {
529
+ // Normalize path
530
+ const normalizedPath = selection.path?.replace(/\\/g, '/');
531
+ codeSelection = {
532
+ type: 'app_code_selection',
533
+ source: normalizedPath,
534
+ sourceType: 'frontend',
535
+ title: `${normalizedPath}:L${selection.range.startLine}-L${selection.range.endLine}`,
536
+ content: selection.content,
537
+ startLine: selection.range.startLine,
538
+ endLine: selection.range.endLine,
539
+ startColumn: selection.range.startColumn,
540
+ endColumn: selection.range.endColumn
541
+ };
542
+ }
447
543
  }
448
544
  }
449
545
  let getBundleResolve = undefined;
@@ -470,14 +566,38 @@ $effect(() => {
470
566
  $effect(() => {
471
567
  iframe && iframeLoaded && runnables && populateRunnables();
472
568
  });
569
+ function clearInspectorSelection() {
570
+ inspectorElement = undefined;
571
+ iframe?.contentWindow?.postMessage({ type: 'inspectorClear' }, '*');
572
+ }
473
573
  function handleSelectFile(path) {
474
574
  console.log('event Select file:', path);
475
575
  selectedRunnable = undefined;
576
+ // Inspector is cleared by the $effect watching selection changes
476
577
  iframe?.contentWindow?.postMessage({
477
578
  type: 'selectFile',
478
579
  path: path
479
580
  }, '*');
480
581
  }
582
+ function handleClearRunnable() {
583
+ selectedRunnable = undefined;
584
+ }
585
+ // Track previous values for change detection
586
+ let prevSelectedRunnable = undefined;
587
+ let prevSelectedDocument = undefined;
588
+ // Clear inspector and reset exclusion when selection changes
589
+ $effect(() => {
590
+ if (selectedRunnable !== prevSelectedRunnable || selectedDocument !== prevSelectedDocument) {
591
+ // Only clear if we're actually switching to something different
592
+ if (prevSelectedRunnable !== undefined || prevSelectedDocument !== undefined) {
593
+ clearInspectorSelection();
594
+ }
595
+ // Reset exclusion when switching files/runnables
596
+ selectionExcludedFromPrompt = false;
597
+ prevSelectedRunnable = selectedRunnable;
598
+ prevSelectedDocument = selectedDocument;
599
+ }
600
+ });
481
601
  function handleUndo() {
482
602
  // Create a snapshot if we're at the latest position with pending changes
483
603
  if (historyManager.needsSnapshotBeforeNav) {
@@ -495,9 +615,10 @@ function handleRedo() {
495
615
  }
496
616
  }
497
617
  function handleHistorySelect(id) {
498
- // Create a snapshot if we have pending changes before navigating
499
- if (historyManager.needsSnapshotBeforeNav) {
500
- historyManager.manualSnapshot(files ?? {}, runnables, summary, data);
618
+ // Save current state temporarily (not as a snapshot) when navigating to history
619
+ // Only if we're currently at the "current" state (not already viewing history)
620
+ if (historyManager.selectedEntryId === undefined) {
621
+ historyManager.saveTemporaryCurrentState(files ?? {}, runnables, summary, data);
501
622
  }
502
623
  const entry = historyManager.selectEntry(id);
503
624
  if (entry) {
@@ -510,15 +631,16 @@ function applyEntry(entry) {
510
631
  runnables = structuredClone($state.snapshot(entry.runnables));
511
632
  summary = entry.summary;
512
633
  data = structuredClone($state.snapshot(entry.data));
513
- setFilesInIframe(entry.files);
514
- populateRunnables();
515
- // Re-select the current document if it exists in the new files
634
+ // If there's a selected document that exists in the new files, use the combined message
516
635
  if (selectedDocument && entry.files[selectedDocument] !== undefined) {
517
- iframe?.contentWindow?.postMessage({
518
- type: 'selectFile',
519
- path: selectedDocument
520
- }, '*');
636
+ // Use combined setFilesAndSelect message to avoid race condition
637
+ setFilesAndSelectInIframe(entry.files, selectedDocument);
521
638
  }
639
+ else {
640
+ // Otherwise just set files normally
641
+ setFilesInIframe(entry.files);
642
+ }
643
+ populateRunnables();
522
644
  }
523
645
  catch (error) {
524
646
  console.error('Failed to apply entry:', error);
@@ -569,8 +691,8 @@ function handleKeydown(e) {
569
691
  onRedo={handleRedo}
570
692
  />
571
693
 
572
- <Splitpanes id="o2" class="grow">
573
- <Pane bind:size={sidebarPanelSize} maxSize={20}>
694
+ <Splitpanes id="o2" class="grow min-h-0">
695
+ <Pane bind:size={sidebarPanelSize} maxSize={20} class="h-full overflow-y-auto">
574
696
  <RawAppSidebar
575
697
  bind:files={
576
698
  () => files,
@@ -605,6 +727,15 @@ function handleKeydown(e) {
605
727
  {historyManager}
606
728
  historySelectedId={historyManager.selectedEntryId}
607
729
  onHistorySelect={handleHistorySelect}
730
+ onHistorySelectCurrent={() => {
731
+ // Restore the temporary current state if it exists
732
+ const tempState = historyManager.getAndClearTemporaryState()
733
+ if (tempState) {
734
+ applyEntry(tempState)
735
+ }
736
+ // Clear selection to indicate we're at current state
737
+ historyManager.clearSelection()
738
+ }}
608
739
  onManualSnapshot={() => {
609
740
  historyManager.manualSnapshot(files ?? {}, runnables, summary, data, true)
610
741
  }}
@@ -626,7 +757,26 @@ function handleKeydown(e) {
626
757
  appPath={path}
627
758
  {selectedRunnable}
628
759
  {initRunnablesContent}
629
- {runnables}
760
+ bind:runnables
761
+ onSelectionChange={(selection) => {
762
+ console.log('handle selection', selection)
763
+
764
+ if (selection === null) {
765
+ codeSelection = undefined
766
+ } else if (selectedRunnable) {
767
+ codeSelection = {
768
+ type: 'app_code_selection',
769
+ source: selectedRunnable,
770
+ sourceType: 'backend',
771
+ title: `${selectedRunnable}:L${selection.startLine}-L${selection.endLine}`,
772
+ content: selection.content,
773
+ startLine: selection.startLine,
774
+ endLine: selection.endLine,
775
+ startColumn: selection.startColumn,
776
+ endColumn: selection.endColumn
777
+ }
778
+ }
779
+ }}
630
780
  />
631
781
  </div>
632
782
  {/if}