windmill-components 1.677.1 → 1.695.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/package/components/AppConnectInner.svelte +6 -0
  2. package/package/components/ArgInput.svelte +2 -0
  3. package/package/components/AutoscalingConfigEditor.svelte +18 -4
  4. package/package/components/CiTestResults.svelte +64 -0
  5. package/package/components/CiTestResults.svelte.d.ts +7 -0
  6. package/package/components/CompareWorkspaces.svelte +741 -484
  7. package/package/components/DBManager.svelte +35 -4
  8. package/package/components/DBManager.svelte.d.ts +2 -0
  9. package/package/components/DBManagerContent.svelte +3 -1
  10. package/package/components/DBManagerContent.svelte.d.ts +3 -0
  11. package/package/components/DBManagerDrawer.svelte +145 -3
  12. package/package/components/DBTableEditor.svelte +14 -4
  13. package/package/components/DatatablePicker.svelte +2 -5
  14. package/package/components/DatatableSchemaDiff.svelte +531 -0
  15. package/package/components/DatatableSchemaDiff.svelte.d.ts +29 -0
  16. package/package/components/DedicatedWorkersSelector.svelte +4 -2
  17. package/package/components/DefaultTagsInner.svelte +42 -2
  18. package/package/components/DeployWorkspaceDrawer.svelte +1 -1
  19. package/package/components/Dev.svelte +407 -74
  20. package/package/components/EditableSchemaForm.svelte +4 -0
  21. package/package/components/Editor.svelte +1 -1
  22. package/package/components/EditorBar.svelte +1 -1
  23. package/package/components/EditorBar.svelte.d.ts +1 -1
  24. package/package/components/ErrorOrRecoveryHandler.svelte +2 -2
  25. package/package/components/FlowPreviewContent.svelte +32 -30
  26. package/package/components/FlowRestartButton.svelte +143 -61
  27. package/package/components/FlowRestartButton.svelte.d.ts +37 -0
  28. package/package/components/FlowStatusViewer.svelte +15 -1
  29. package/package/components/FlowStatusViewer.svelte.d.ts +10 -2
  30. package/package/components/FlowStatusViewerInner.svelte +270 -222
  31. package/package/components/FlowStatusViewerInner.svelte.d.ts +6 -2
  32. package/package/components/FlowTimeline.svelte +1 -1
  33. package/package/components/FolderEditor.svelte +189 -4
  34. package/package/components/ForkConflictModal.svelte +57 -0
  35. package/package/components/ForkConflictModal.svelte.d.ts +3 -0
  36. package/package/components/ForkWorkspaceBanner.svelte +82 -11
  37. package/package/components/GitRepoViewer.svelte +251 -97
  38. package/package/components/GlobalUserOffboardingModal.svelte +293 -0
  39. package/package/components/GlobalUserOffboardingModal.svelte.d.ts +10 -0
  40. package/package/components/InputTransformSchemaForm.svelte +1 -1
  41. package/package/components/InstanceSettings.svelte +58 -19
  42. package/package/components/Login.svelte +133 -36
  43. package/package/components/Login.svelte.d.ts +1 -0
  44. package/package/components/ModuleTest.svelte +2 -1
  45. package/package/components/NoMainFuncBadge.svelte +1 -1
  46. package/package/components/OffboardItemsBox.svelte +56 -0
  47. package/package/components/OffboardItemsBox.svelte.d.ts +12 -0
  48. package/package/components/OffboardReassignControls.svelte +47 -0
  49. package/package/components/OffboardReassignControls.svelte.d.ts +20 -0
  50. package/package/components/OffboardWorkspaceSection.svelte +110 -0
  51. package/package/components/OffboardWorkspaceSection.svelte.d.ts +24 -0
  52. package/package/components/OnBehalfOfSelector.svelte +21 -3
  53. package/package/components/OnBehalfOfSelector.svelte.d.ts +7 -0
  54. package/package/components/Path.svelte +7 -1
  55. package/package/components/Path.svelte.d.ts +1 -1
  56. package/package/components/QueueAlerts.svelte +10 -10
  57. package/package/components/ResourcePicker.svelte +2 -2
  58. package/package/components/RunsPage.svelte +2 -1
  59. package/package/components/S3FilePickerInner.svelte +89 -89
  60. package/package/components/ScriptBuilder.svelte +52 -11
  61. package/package/components/ScriptEditor.svelte +19 -8
  62. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  63. package/package/components/ShareModal.svelte +236 -98
  64. package/package/components/ShareModal.svelte.d.ts +1 -1
  65. package/package/components/SuperadminSettingsInner.svelte +362 -315
  66. package/package/components/UserOffboardingModal.svelte +238 -0
  67. package/package/components/UserOffboardingModal.svelte.d.ts +10 -0
  68. package/package/components/WorkspaceDeployLayout.svelte +3 -3
  69. package/package/components/WorkspaceDeployLayout.svelte.d.ts +1 -0
  70. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +3 -0
  71. package/package/components/apps/components/helpers/executeRunnable.js +2 -1
  72. package/package/components/apps/editor/AppReportsDrawerInner.svelte +1 -1
  73. package/package/components/apps/editor/appPolicy.js +2 -1
  74. package/package/components/apps/editor/commonAppUtils.d.ts +3 -0
  75. package/package/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte +1 -1
  76. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +7 -0
  77. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +4 -2
  78. package/package/components/apps/editor/inlineScriptsPanel/TagPopup.svelte +49 -0
  79. package/package/components/apps/editor/inlineScriptsPanel/TagPopup.svelte.d.ts +9 -0
  80. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +12 -0
  81. package/package/components/apps/inputType.d.ts +1 -0
  82. package/package/components/apps/sharedTypes.d.ts +1 -0
  83. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  84. package/package/components/auditLogs/AuditLogsFilters.svelte +8 -3
  85. package/package/components/common/confirmationModal/ConfirmationModal.svelte +1 -1
  86. package/package/components/common/fileUpload/S3ArgInput.svelte +12 -10
  87. package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +2 -0
  88. package/package/components/common/table/AppRow.svelte +3 -3
  89. package/package/components/common/table/FlowRow.svelte +3 -3
  90. package/package/components/common/table/RawAppRow.svelte +4 -4
  91. package/package/components/common/table/Row.svelte +6 -2
  92. package/package/components/common/table/ScriptRow.svelte +11 -3
  93. package/package/components/copilot/chat/AIChatDisplay.svelte +5 -36
  94. package/package/components/copilot/chat/AIChatInput.svelte +56 -47
  95. package/package/components/copilot/chat/AIChatManager.svelte.js +50 -48
  96. package/package/components/copilot/chat/ContextElementBadge.svelte +6 -4
  97. package/package/components/copilot/chat/anthropic.d.ts +7 -1
  98. package/package/components/copilot/chat/anthropic.js +5 -2
  99. package/package/components/copilot/chat/app/core.d.ts +12 -20
  100. package/package/components/copilot/chat/app/core.js +230 -159
  101. package/package/components/copilot/chat/app/core.test.js +417 -0
  102. package/package/components/copilot/chat/chatLoop.d.ts +3 -0
  103. package/package/components/copilot/chat/chatLoop.js +13 -5
  104. package/package/components/copilot/chat/context.js +44 -0
  105. package/package/components/copilot/chat/flow/FlowAIChat.svelte +57 -76
  106. package/package/components/copilot/chat/flow/core.d.ts +14 -3
  107. package/package/components/copilot/chat/flow/core.js +494 -116
  108. package/package/components/copilot/chat/flow/helperUtils.d.ts +22 -0
  109. package/package/components/copilot/chat/flow/helperUtils.js +100 -0
  110. package/package/components/copilot/chat/flow/helperUtils.test.js +231 -0
  111. package/package/components/copilot/chat/flow/inlineScriptsUtils.d.ts +5 -24
  112. package/package/components/copilot/chat/flow/inlineScriptsUtils.js +30 -55
  113. package/package/components/copilot/chat/flow/openFlow.json +1 -1
  114. package/package/components/copilot/chat/flow/openFlowZod.gen.js +24 -0
  115. package/package/components/copilot/chat/flow/utils.test.js +59 -0
  116. package/package/components/copilot/chat/openai-responses.d.ts +7 -1
  117. package/package/components/copilot/chat/openai-responses.js +5 -2
  118. package/package/components/copilot/chat/script/core.js +3 -0
  119. package/package/components/copilot/chat/shared.d.ts +7 -2
  120. package/package/components/copilot/chat/shared.js +116 -53
  121. package/package/components/copilot/chat/shared.test.d.ts +1 -0
  122. package/package/components/copilot/chat/shared.test.js +412 -0
  123. package/package/components/copilot/chat/tokenUsage.d.ts +23 -0
  124. package/package/components/copilot/chat/tokenUsage.js +42 -0
  125. package/package/components/copilot/chat/workspaceTools.d.ts +7 -0
  126. package/package/components/copilot/chat/workspaceTools.js +239 -0
  127. package/package/components/copilot/chat/workspaceToolsZod.gen.d.ts +1295 -0
  128. package/package/components/copilot/chat/workspaceToolsZod.gen.js +424 -0
  129. package/package/components/copilot/lib.d.ts +5 -1
  130. package/package/components/copilot/lib.js +24 -6
  131. package/package/components/copilot/lib.test.d.ts +1 -0
  132. package/package/components/copilot/lib.test.js +19 -0
  133. package/package/components/copilot/modelConfig.d.ts +3 -0
  134. package/package/components/copilot/modelConfig.js +10 -0
  135. package/package/components/deploymentRequest/DeploymentRequestPanel.svelte +337 -0
  136. package/package/components/deploymentRequest/DeploymentRequestPanel.svelte.d.ts +15 -0
  137. package/package/components/details/CopyableCodeBlock.svelte +18 -8
  138. package/package/components/details/CopyableCodeBlock.svelte.d.ts +1 -0
  139. package/package/components/flows/FlowAssetsHandler.svelte +19 -21
  140. package/package/components/flows/FlowProgressBar.svelte +5 -2
  141. package/package/components/flows/agentToolTree.d.ts +17 -0
  142. package/package/components/flows/agentToolTree.js +114 -0
  143. package/package/components/flows/agentToolTree.test.d.ts +1 -0
  144. package/package/components/flows/agentToolTree.test.js +86 -0
  145. package/package/components/flows/agentToolUtils.d.ts +0 -5
  146. package/package/components/flows/agentToolUtils.js +0 -49
  147. package/package/components/flows/content/FlowLoop.svelte +7 -4
  148. package/package/components/flows/content/FlowModuleComponent.svelte +636 -599
  149. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +15 -7
  150. package/package/components/flows/content/FlowSettings.svelte +29 -0
  151. package/package/components/flows/conversations/FlowChatManager.svelte.js +21 -10
  152. package/package/components/flows/dfs.d.ts +6 -2
  153. package/package/components/flows/dfs.js +19 -11
  154. package/package/components/flows/flowDeleteController.d.ts +32 -0
  155. package/package/components/flows/flowDeleteController.js +54 -0
  156. package/package/components/flows/flowDeleteController.test.d.ts +1 -0
  157. package/package/components/flows/flowDeleteController.test.js +121 -0
  158. package/package/components/flows/flowDeleteUtils.d.ts +48 -0
  159. package/package/components/flows/flowDeleteUtils.js +150 -0
  160. package/package/components/flows/flowDeleteUtils.test.d.ts +1 -0
  161. package/package/components/flows/flowDeleteUtils.test.js +131 -0
  162. package/package/components/flows/flowDiff.d.ts +2 -47
  163. package/package/components/flows/flowDiff.js +16 -293
  164. package/package/components/flows/flowDiff.testUtils.d.ts +8 -0
  165. package/package/components/flows/flowDiff.testUtils.js +26 -0
  166. package/package/components/flows/flowDiffManager.svelte.js +20 -75
  167. package/package/components/flows/flowDiffManager.svelte.test.js +103 -2
  168. package/package/components/flows/flowExplorer.d.ts +4 -0
  169. package/package/components/flows/flowExplorer.js +7 -30
  170. package/package/components/flows/flowState.d.ts +1 -0
  171. package/package/components/flows/flowStateUtils.svelte.js +11 -2
  172. package/package/components/flows/flowTree.d.ts +91 -0
  173. package/package/components/flows/flowTree.js +326 -0
  174. package/package/components/flows/flowTree.test.d.ts +1 -0
  175. package/package/components/flows/flowTree.test.js +236 -0
  176. package/package/components/flows/map/FlowJobsMenu.svelte +36 -30
  177. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
  178. package/package/components/flows/map/FlowModuleSchemaMap.svelte +73 -229
  179. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +1 -2
  180. package/package/components/flows/pickers/PickHubScriptQuick.svelte +2 -2
  181. package/package/components/flows/previousResults.js +13 -41
  182. package/package/components/flows/previousResults.test.d.ts +1 -0
  183. package/package/components/flows/previousResults.test.js +65 -0
  184. package/package/components/flows/propPicker/OutputPicker.svelte +2 -1
  185. package/package/components/flows/propPicker/OutputPickerInner.svelte +41 -4
  186. package/package/components/flows/propPicker/StepHistory.svelte +9 -1
  187. package/package/components/git_sync/GitSyncContext.svelte.js +11 -7
  188. package/package/components/git_sync/GitSyncRepositoryCard.svelte +2 -29
  189. package/package/components/git_sync/PullWorkspaceModal.svelte +6 -7
  190. package/package/components/graph/FlowGraphV2.svelte +8 -4
  191. package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -0
  192. package/package/components/graph/groupedModulesProxy.svelte.d.ts +10 -0
  193. package/package/components/graph/groupedModulesProxy.svelte.js +17 -1
  194. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +8 -2
  195. package/package/components/home/HomeConnectDrawer.svelte +125 -0
  196. package/package/components/home/HomeConnectDrawer.svelte.d.ts +5 -0
  197. package/package/components/home/deploy_ui.js +1 -1
  198. package/package/components/icons/AzureIcon.svelte +12 -25
  199. package/package/components/icons/AzureIcon.svelte.d.ts +3 -2
  200. package/package/components/icons/GithubIcon.svelte +4 -4
  201. package/package/components/icons/GithubIcon.svelte.d.ts +5 -2
  202. package/package/components/instanceSettings/ExternalJwtTokens.svelte +85 -0
  203. package/package/components/instanceSettings/ExternalJwtTokens.svelte.d.ts +12 -0
  204. package/package/components/instanceSettings/GhesAppSettings.svelte +17 -0
  205. package/package/components/instanceSettings/IndexerMemorySettings.svelte +56 -29
  206. package/package/components/instanceSettings/SecretBackendConfig.svelte +9 -2
  207. package/package/components/instanceSettings.d.ts +1 -0
  208. package/package/components/instanceSettings.js +66 -8
  209. package/package/components/mcp/McpScopeSelector.svelte +119 -9
  210. package/package/components/mcp/McpScopeSelector.svelte.d.ts +1 -0
  211. package/package/components/offboarding-utils.d.ts +11 -0
  212. package/package/components/offboarding-utils.js +102 -0
  213. package/package/components/progressBar/ProgressBar.svelte +9 -5
  214. package/package/components/progressBar/ProgressBar.svelte.d.ts +1 -0
  215. package/package/components/raw_apps/DeleteAfterUsePopup.svelte +52 -0
  216. package/package/components/raw_apps/DeleteAfterUsePopup.svelte.d.ts +9 -0
  217. package/package/components/raw_apps/RawAppBackgroundRunner.svelte +5 -1
  218. package/package/components/raw_apps/RawAppDataTableDrawer.svelte +1 -1
  219. package/package/components/raw_apps/RawAppEditor.svelte +186 -102
  220. package/package/components/raw_apps/RawAppEditorHeader.svelte +6 -1
  221. package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +1 -0
  222. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +9 -3
  223. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +2 -1
  224. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +1 -0
  225. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte.d.ts +1 -0
  226. package/package/components/raw_apps/RawAppInputsSpecEditor.svelte +48 -5
  227. package/package/components/raw_apps/RawAppSharedUiDrawer.svelte +129 -0
  228. package/package/components/raw_apps/RawAppSharedUiDrawer.svelte.d.ts +5 -0
  229. package/package/components/raw_apps/RawAppSidebar.svelte +12 -0
  230. package/package/components/raw_apps/RawAppYamlEditor.svelte +81 -0
  231. package/package/components/raw_apps/RawAppYamlEditor.svelte.d.ts +20 -0
  232. package/package/components/raw_apps/dataTableRefUtils.d.ts +7 -0
  233. package/package/components/raw_apps/dataTableRefUtils.js +34 -0
  234. package/package/components/raw_apps/dataTableRefUtils.test.d.ts +1 -0
  235. package/package/components/raw_apps/dataTableRefUtils.test.js +29 -0
  236. package/package/components/raw_apps/datatableUtils.svelte.js +1 -1
  237. package/package/components/raw_apps/rawAppPolicy.d.ts +1 -0
  238. package/package/components/raw_apps/rawAppPolicy.js +17 -2
  239. package/package/components/resources/resourceTypesFilter.d.ts +19 -0
  240. package/package/components/resources/resourceTypesFilter.js +21 -0
  241. package/package/components/restartFromStepPath.d.ts +39 -0
  242. package/package/components/restartFromStepPath.js +89 -0
  243. package/package/components/runs/JobDetailFieldConfig.d.ts +1 -0
  244. package/package/components/runs/JobDetailFieldConfig.js +57 -10
  245. package/package/components/runs/JobDetailHeader.svelte +24 -3
  246. package/package/components/runs/runsFilter.d.ts +1 -1
  247. package/package/components/schema/FlowPropertyEditor.svelte +30 -1
  248. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +5 -2
  249. package/package/components/script_builder.d.ts +1 -1
  250. package/package/components/search/GlobalSearchModal.svelte +8 -1
  251. package/package/components/select/Select.svelte +3 -2
  252. package/package/components/select/Select.svelte.d.ts +1 -0
  253. package/package/components/settings/CreateToken.svelte +91 -71
  254. package/package/components/settings/CreateToken.svelte.d.ts +3 -0
  255. package/package/components/settings/EditTokenScopesModal.svelte +57 -0
  256. package/package/components/settings/EditTokenScopesModal.svelte.d.ts +10 -0
  257. package/package/components/settings/ScopesPicker.svelte +43 -0
  258. package/package/components/settings/ScopesPicker.svelte.d.ts +11 -0
  259. package/package/components/settings/TokensTable.svelte +51 -15
  260. package/package/components/settings/WorkspaceUserSettings.svelte +34 -28
  261. package/package/components/sidebar/OperatorMenu.svelte +6 -0
  262. package/package/components/sidebar/SidebarContent.svelte +68 -2
  263. package/package/components/sidebar/WorkspaceMenu.svelte +8 -4
  264. package/package/components/triggers/AddTriggersButton.svelte +17 -0
  265. package/package/components/triggers/CaptureWrapper.svelte +19 -1
  266. package/package/components/triggers/PermissionedAsLine.svelte +37 -3
  267. package/package/components/triggers/PermissionedAsLine.svelte.d.ts +6 -0
  268. package/package/components/triggers/TriggerEditorToolbar.svelte.d.ts +1 -1
  269. package/package/components/triggers/TriggerModeToggle.svelte +36 -7
  270. package/package/components/triggers/TriggerModeToggle.svelte.d.ts +1 -1
  271. package/package/components/triggers/TriggerSuspendedJobsModal.svelte.d.ts +1 -1
  272. package/package/components/triggers/TriggersEditor.svelte +10 -2
  273. package/package/components/triggers/TriggersWrapper.svelte +20 -0
  274. package/package/components/triggers/azure/AzureCapture.svelte +41 -0
  275. package/package/components/triggers/azure/AzureCapture.svelte.d.ts +44 -0
  276. package/package/components/triggers/azure/AzureTriggerEditor.svelte +20 -0
  277. package/package/components/triggers/azure/AzureTriggerEditor.svelte.d.ts +9 -0
  278. package/package/components/triggers/azure/AzureTriggerEditorConfigSection.svelte +301 -0
  279. package/package/components/triggers/azure/AzureTriggerEditorConfigSection.svelte.d.ts +16 -0
  280. package/package/components/triggers/azure/AzureTriggerEditorInner.svelte +422 -0
  281. package/package/components/triggers/azure/AzureTriggerEditorInner.svelte.d.ts +25 -0
  282. package/package/components/triggers/azure/AzureTriggerPanel.svelte +55 -0
  283. package/package/components/triggers/azure/AzureTriggerPanel.svelte.d.ts +10 -0
  284. package/{dist/sharedUtils/components/triggers/kafka → package/components/triggers/azure}/utils.d.ts +1 -1
  285. package/package/components/triggers/azure/utils.js +56 -0
  286. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +15 -11
  287. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +22 -14
  288. package/package/components/triggers/http/RouteEditorConfigSection.svelte +15 -7
  289. package/package/components/triggers/http/RouteEditorInner.svelte +16 -14
  290. package/package/components/triggers/http/RoutesGenerator.svelte +6 -1
  291. package/package/components/triggers/http/RoutesPanel.svelte +1 -1
  292. package/package/components/triggers/http/utils.d.ts +1 -1
  293. package/package/components/triggers/http/utils.js +2 -2
  294. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +22 -14
  295. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +22 -14
  296. package/package/components/triggers/native/NativeTriggerEditor.svelte +3 -0
  297. package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte +118 -0
  298. package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte.d.ts +17 -0
  299. package/package/components/triggers/native/utils.js +14 -0
  300. package/package/components/triggers/nats/NatsTriggerEditor.svelte.d.ts +4 -3
  301. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +22 -14
  302. package/package/components/triggers/postgres/PostgresTriggerEditor.svelte.d.ts +4 -3
  303. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +22 -14
  304. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +22 -14
  305. package/package/components/triggers/sqs/SqsTriggerEditor.svelte.d.ts +4 -3
  306. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +22 -14
  307. package/package/components/triggers/triggers.svelte.d.ts +1 -0
  308. package/package/components/triggers/triggers.svelte.js +24 -1
  309. package/package/components/triggers/utils.js +47 -6
  310. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +22 -14
  311. package/package/components/triggers.d.ts +1 -1
  312. package/package/components/useFolderDefaultPermissionedAs.svelte.d.ts +13 -0
  313. package/package/components/useFolderDefaultPermissionedAs.svelte.js +63 -0
  314. package/package/components/useNestedRestartState.svelte.d.ts +56 -0
  315. package/package/components/useNestedRestartState.svelte.js +320 -0
  316. package/package/components/workspaceSettings/CreateWorkspace.svelte +16 -677
  317. package/package/components/workspaceSettings/CreateWorkspaceInner.svelte +604 -0
  318. package/package/components/workspaceSettings/CreateWorkspaceInner.svelte.d.ts +7 -0
  319. package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +27 -25
  320. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +46 -8
  321. package/package/components/workspaceSettings/DataTableSettings.svelte +27 -22
  322. package/package/components/workspaceSettings/DucklakeSettings.svelte +1 -1
  323. package/package/components/workspaceSettings/ForkDatatableSection.svelte +228 -0
  324. package/package/components/workspaceSettings/ForkDatatableSection.svelte.d.ts +28 -0
  325. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +8 -2
  326. package/package/components/workspaceSettings/RulesetEditor.svelte +27 -2
  327. package/package/components/workspaceSettings/SharedUiSettings.svelte +175 -0
  328. package/package/components/workspaceSettings/SharedUiSettings.svelte.d.ts +3 -0
  329. package/package/components/workspaceSettings/VolumeStorageSettings.svelte +1 -1
  330. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +17 -1
  331. package/package/consts.d.ts +3 -0
  332. package/package/consts.js +10 -0
  333. package/package/gen/core/OpenAPI.js +1 -1
  334. package/package/gen/schemas.gen.d.ts +795 -59
  335. package/package/gen/schemas.gen.js +801 -60
  336. package/package/gen/services.gen.d.ts +475 -5
  337. package/package/gen/services.gen.js +976 -23
  338. package/package/gen/types.gen.d.ts +1865 -75
  339. package/package/githubApp.js +5 -1
  340. package/package/hubPaths.json +2 -8
  341. package/package/infer.d.ts +1 -1
  342. package/package/infer.js +50 -52
  343. package/package/infer.svelte.js +10 -1
  344. package/package/mcpEndpointTools.js +60 -4
  345. package/package/monaco_workers/sqlTypePlugin.worker.d.ts +10 -0
  346. package/package/monaco_workers/sqlTypePlugin.worker.js +39 -0
  347. package/package/script_helpers.d.ts +8 -2
  348. package/package/script_helpers.js +31 -0
  349. package/package/stores.d.ts +11 -0
  350. package/package/stores.js +6 -0
  351. package/package/system_prompts/index.d.ts +1 -0
  352. package/package/system_prompts/index.js +8 -0
  353. package/package/system_prompts/prompts.d.ts +17 -13
  354. package/package/system_prompts/prompts.js +921 -61
  355. package/package/templates/ci_test_bun.ts.template +27 -0
  356. package/package/templates/ci_test_python.py.template +26 -0
  357. package/package/utils/forkConflict.d.ts +26 -0
  358. package/package/utils/forkConflict.js +56 -0
  359. package/package/utils_deployable.d.ts +164 -121
  360. package/package/utils_deployable.js +61 -11
  361. package/package/utils_workspace_deploy.d.ts +8 -8
  362. package/package/utils_workspace_deploy.js +89 -421
  363. package/package.json +30 -6
  364. package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +0 -2
  365. package/dist/sharedUtils/base.d.ts +0 -1
  366. package/dist/sharedUtils/cloud.d.ts +0 -1
  367. package/dist/sharedUtils/common.d.ts +0 -111
  368. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +0 -5
  369. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +0 -5
  370. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +0 -5
  371. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +0 -13
  372. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +0 -11
  373. package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +0 -95
  374. package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +0 -6
  375. package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +0 -7
  376. package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +0 -33
  377. package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +0 -10
  378. package/dist/sharedUtils/components/apps/editor/component/components.d.ts +0 -5371
  379. package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +0 -3
  380. package/dist/sharedUtils/components/apps/editor/component/index.d.ts +0 -3
  381. package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +0 -7
  382. package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +0 -3
  383. package/dist/sharedUtils/components/apps/gridUtils.d.ts +0 -14
  384. package/dist/sharedUtils/components/apps/inputType.d.ts +0 -178
  385. package/dist/sharedUtils/components/apps/rx.d.ts +0 -29
  386. package/dist/sharedUtils/components/apps/sharedTypes.d.ts +0 -21
  387. package/dist/sharedUtils/components/apps/types.d.ts +0 -274
  388. package/dist/sharedUtils/components/assets/lib.d.ts +0 -25
  389. package/dist/sharedUtils/components/common/alert/model.d.ts +0 -2
  390. package/dist/sharedUtils/components/common/badge/model.d.ts +0 -8
  391. package/dist/sharedUtils/components/common/button/model.d.ts +0 -45
  392. package/dist/sharedUtils/components/common/fileInput/model.d.ts +0 -1
  393. package/dist/sharedUtils/components/common/index.d.ts +0 -24
  394. package/dist/sharedUtils/components/common/skeleton/model.d.ts +0 -21
  395. package/dist/sharedUtils/components/dbTypes.d.ts +0 -14
  396. package/dist/sharedUtils/components/diff_drawer.d.ts +0 -26
  397. package/dist/sharedUtils/components/ducklake.d.ts +0 -1
  398. package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +0 -7
  399. package/dist/sharedUtils/components/icons/index.d.ts +0 -101
  400. package/dist/sharedUtils/components/random_positive_adjetive.d.ts +0 -1
  401. package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +0 -10
  402. package/dist/sharedUtils/components/raw_apps/utils.d.ts +0 -15
  403. package/dist/sharedUtils/components/triggers/email/utils.d.ts +0 -4
  404. package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +0 -2
  405. package/dist/sharedUtils/components/triggers/http/utils.d.ts +0 -11
  406. package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +0 -2
  407. package/dist/sharedUtils/components/triggers/nats/utils.d.ts +0 -2
  408. package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +0 -8
  409. package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +0 -2
  410. package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +0 -32
  411. package/dist/sharedUtils/components/triggers/utils.d.ts +0 -80
  412. package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +0 -2
  413. package/dist/sharedUtils/components/triggers.d.ts +0 -20
  414. package/dist/sharedUtils/gen/core/ApiError.d.ts +0 -10
  415. package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +0 -13
  416. package/dist/sharedUtils/gen/core/ApiResult.d.ts +0 -7
  417. package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +0 -26
  418. package/dist/sharedUtils/gen/core/OpenAPI.d.ts +0 -27
  419. package/dist/sharedUtils/gen/core/request.d.ts +0 -29
  420. package/dist/sharedUtils/gen/index.d.ts +0 -6
  421. package/dist/sharedUtils/gen/schemas.gen.d.ts +0 -7036
  422. package/dist/sharedUtils/gen/services.gen.d.ts +0 -6047
  423. package/dist/sharedUtils/gen/types.gen.d.ts +0 -21881
  424. package/dist/sharedUtils/history.svelte.d.ts +0 -9
  425. package/dist/sharedUtils/hub.d.ts +0 -49
  426. package/dist/sharedUtils/jsr.json +0 -6
  427. package/dist/sharedUtils/lib.d.ts +0 -5
  428. package/dist/sharedUtils/lib.es.js +0 -1588
  429. package/dist/sharedUtils/package.json +0 -12
  430. package/dist/sharedUtils/schema.d.ts +0 -3
  431. package/dist/sharedUtils/stores.d.ts +0 -97
  432. package/dist/sharedUtils/svelte5Utils.svelte.d.ts +0 -80
  433. package/dist/sharedUtils/toast.d.ts +0 -8
  434. package/dist/sharedUtils/utils.d.ts +0 -265
  435. package/package/components/copilot/chat/__tests__/app/appChat.eval.test.js +0 -153
  436. package/package/components/copilot/chat/__tests__/app/appEvalComparison.d.ts +0 -21
  437. package/package/components/copilot/chat/__tests__/app/appEvalComparison.js +0 -136
  438. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.d.ts +0 -15
  439. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +0 -107
  440. package/package/components/copilot/chat/__tests__/app/appEvalRunner.d.ts +0 -50
  441. package/package/components/copilot/chat/__tests__/app/appEvalRunner.js +0 -93
  442. package/package/components/copilot/chat/__tests__/app/appFixtureLoader.d.ts +0 -29
  443. package/package/components/copilot/chat/__tests__/app/appFixtureLoader.js +0 -134
  444. package/package/components/copilot/chat/__tests__/app/appResultsWriter.d.ts +0 -30
  445. package/package/components/copilot/chat/__tests__/app/appResultsWriter.js +0 -197
  446. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.d.ts +0 -10
  447. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.js +0 -9
  448. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/meta.json +0 -4
  449. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.d.ts +0 -6
  450. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.js +0 -5
  451. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/meta.json +0 -4
  452. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.d.ts +0 -12
  453. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.js +0 -14
  454. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/meta.json +0 -4
  455. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.d.ts +0 -8
  456. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.js +0 -25
  457. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/meta.json +0 -4
  458. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.d.ts +0 -7
  459. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.js +0 -5
  460. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/meta.json +0 -4
  461. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.d.ts +0 -8
  462. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.js +0 -5
  463. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/meta.json +0 -4
  464. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.d.ts +0 -10
  465. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.tsx +0 -26
  466. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.d.ts +0 -10
  467. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.tsx +0 -79
  468. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.d.ts +0 -10
  469. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.tsx +0 -46
  470. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.d.ts +0 -10
  471. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.tsx +0 -56
  472. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.d.ts +0 -6
  473. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.tsx +0 -59
  474. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.d.ts +0 -16
  475. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.tsx +0 -119
  476. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.d.ts +0 -15
  477. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.js +0 -14
  478. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/meta.json +0 -4
  479. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.d.ts +0 -14
  480. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.js +0 -5
  481. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/meta.json +0 -4
  482. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.d.ts +0 -6
  483. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.js +0 -41
  484. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/meta.json +0 -4
  485. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.d.ts +0 -15
  486. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.js +0 -3
  487. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/meta.json +0 -4
  488. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.d.ts +0 -9
  489. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.tsx +0 -51
  490. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.d.ts +0 -8
  491. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.tsx +0 -27
  492. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.d.ts +0 -8
  493. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.tsx +0 -18
  494. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.d.ts +0 -12
  495. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.tsx +0 -81
  496. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.d.ts +0 -3
  497. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.js +0 -3
  498. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/meta.json +0 -4
  499. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.d.ts +0 -3
  500. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.js +0 -3
  501. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/meta.json +0 -4
  502. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.d.ts +0 -2
  503. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.tsx +0 -38
  504. package/package/components/copilot/chat/__tests__/app/variants/baseline.d.ts +0 -6
  505. package/package/components/copilot/chat/__tests__/app/variants/baseline.js +0 -10
  506. package/package/components/copilot/chat/__tests__/app/variants/index.d.ts +0 -3
  507. package/package/components/copilot/chat/__tests__/app/variants/index.js +0 -3
  508. package/package/components/copilot/chat/__tests__/app/variants/streamlined.d.ts +0 -6
  509. package/package/components/copilot/chat/__tests__/app/variants/streamlined.js +0 -137
  510. package/package/components/copilot/chat/__tests__/flow/expected/test1.json +0 -134
  511. package/package/components/copilot/chat/__tests__/flow/expected/test2.json +0 -183
  512. package/package/components/copilot/chat/__tests__/flow/expected/test3.json +0 -204
  513. package/package/components/copilot/chat/__tests__/flow/expected/test4.json +0 -175
  514. package/package/components/copilot/chat/__tests__/flow/expected/test5_modify_simple.json +0 -68
  515. package/package/components/copilot/chat/__tests__/flow/expected/test6_modify_medium.json +0 -142
  516. package/package/components/copilot/chat/__tests__/flow/expected/test7_modify_complex.json +0 -136
  517. package/package/components/copilot/chat/__tests__/flow/flowChat.eval.test.js +0 -294
  518. package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.d.ts +0 -17
  519. package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.js +0 -49
  520. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.d.ts +0 -12
  521. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +0 -79
  522. package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.d.ts +0 -50
  523. package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.js +0 -102
  524. package/package/components/copilot/chat/__tests__/flow/initial/test5_initial.json +0 -53
  525. package/package/components/copilot/chat/__tests__/flow/initial/test6_initial.json +0 -68
  526. package/package/components/copilot/chat/__tests__/flow/initial/test7_initial.json +0 -120
  527. package/package/components/copilot/chat/__tests__/flow/variants/baseline.d.ts +0 -6
  528. package/package/components/copilot/chat/__tests__/flow/variants/baseline.js +0 -10
  529. package/package/components/copilot/chat/__tests__/flow/variants/index.d.ts +0 -3
  530. package/package/components/copilot/chat/__tests__/flow/variants/index.js +0 -3
  531. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.d.ts +0 -15
  532. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.js +0 -388
  533. package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.d.ts +0 -45
  534. package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.js +0 -121
  535. package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.d.ts +0 -28
  536. package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.js +0 -96
  537. package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.d.ts +0 -32
  538. package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.js +0 -130
  539. package/package/components/copilot/chat/__tests__/shared/baseVariants.d.ts +0 -45
  540. package/package/components/copilot/chat/__tests__/shared/baseVariants.js +0 -57
  541. package/package/components/copilot/chat/__tests__/shared/index.d.ts +0 -10
  542. package/package/components/copilot/chat/__tests__/shared/index.js +0 -5
  543. package/package/components/copilot/chat/__tests__/shared/types.d.ts +0 -105
  544. package/package/components/copilot/chat/__tests__/shared/types.js +0 -9
  545. package/package/components/copilot/chat/flow/openFlowZod.js +0 -24
  546. package/package/components/copilot/chat/flow/utils.d.ts +0 -14
  547. package/package/components/copilot/chat/flow/utils.js +0 -108
  548. package/package/components/flows/agentToolUtils.test.js +0 -55
  549. /package/package/components/copilot/chat/{__tests__/app/appChat.eval.test.d.ts → app/core.test.d.ts} +0 -0
  550. /package/package/components/copilot/chat/{__tests__/flow/flowChat.eval.test.d.ts → flow/helperUtils.test.d.ts} +0 -0
  551. /package/package/components/copilot/chat/flow/{openFlowZod.d.ts → openFlowZod.gen.d.ts} +0 -0
  552. /package/package/components/{flows/agentToolUtils.test.d.ts → copilot/chat/flow/utils.test.d.ts} +0 -0
@@ -0,0 +1,102 @@
1
+ export function pl(n, singular) {
2
+ return `${n} ${singular}${n === 1 ? '' : 's'}`;
3
+ }
4
+ function triggerCount(triggers) {
5
+ if (!triggers)
6
+ return 0;
7
+ return Object.values(triggers).reduce((s, arr) => s + arr.length, 0);
8
+ }
9
+ export function countPaths(p) {
10
+ if (!p)
11
+ return 0;
12
+ return ((p.scripts?.length ?? 0) +
13
+ (p.flows?.length ?? 0) +
14
+ (p.apps?.length ?? 0) +
15
+ (p.resources?.length ?? 0) +
16
+ (p.variables?.length ?? 0) +
17
+ (p.schedules?.length ?? 0) +
18
+ triggerCount(p.triggers));
19
+ }
20
+ const TRIGGER_TABLE_TO_ROUTE = {
21
+ http_trigger: 'routes',
22
+ websocket_trigger: 'websocket_triggers',
23
+ kafka_trigger: 'kafka_triggers',
24
+ postgres_trigger: 'postgres_triggers',
25
+ mqtt_trigger: 'mqtt_triggers',
26
+ nats_trigger: 'nats_triggers',
27
+ sqs_trigger: 'sqs_triggers',
28
+ gcp_trigger: 'gcp_triggers',
29
+ azure_trigger: 'azure_triggers',
30
+ email_trigger: 'email_triggers'
31
+ };
32
+ const TRIGGER_TABLE_TO_LABEL = {
33
+ http_trigger: 'http trigger',
34
+ websocket_trigger: 'websocket trigger',
35
+ kafka_trigger: 'kafka trigger',
36
+ postgres_trigger: 'postgres trigger',
37
+ mqtt_trigger: 'mqtt trigger',
38
+ nats_trigger: 'nats trigger',
39
+ sqs_trigger: 'sqs trigger',
40
+ gcp_trigger: 'gcp trigger',
41
+ azure_trigger: 'azure trigger',
42
+ email_trigger: 'email trigger'
43
+ };
44
+ export function flattenPaths(p) {
45
+ if (!p)
46
+ return [];
47
+ const result = [];
48
+ for (const [kind, list] of Object.entries(p)) {
49
+ if (kind === 'triggers' && list && typeof list === 'object' && !Array.isArray(list)) {
50
+ for (const [triggerType, paths] of Object.entries(list)) {
51
+ for (const path of paths)
52
+ result.push({ kind: triggerType, path });
53
+ }
54
+ }
55
+ else if (Array.isArray(list)) {
56
+ for (const path of list)
57
+ result.push({ kind, path });
58
+ }
59
+ }
60
+ return result;
61
+ }
62
+ export function triggerLabel(triggerType) {
63
+ return TRIGGER_TABLE_TO_LABEL[triggerType] ?? triggerType;
64
+ }
65
+ export function kindLabel(kind) {
66
+ if (TRIGGER_TABLE_TO_LABEL[kind])
67
+ return TRIGGER_TABLE_TO_LABEL[kind];
68
+ // "scripts" -> "script", "flows" -> "flow", etc.
69
+ return kind.replace(/s$/, '');
70
+ }
71
+ export function itemHref(kind, path) {
72
+ switch (kind) {
73
+ case 'scripts':
74
+ return `/scripts/get/${path}`;
75
+ case 'flows':
76
+ return `/flows/get/${path}`;
77
+ case 'apps':
78
+ return `/apps/get/${path}`;
79
+ case 'resources':
80
+ return `/resources#/resource/${path}`;
81
+ case 'variables':
82
+ return `/variables#${path}`;
83
+ case 'schedules':
84
+ return `/schedules#${path}`;
85
+ default: {
86
+ const route = TRIGGER_TABLE_TO_ROUTE[kind];
87
+ if (route)
88
+ return `/${route}#${path}`;
89
+ return undefined;
90
+ }
91
+ }
92
+ }
93
+ export function downloadCsv(rows, filename) {
94
+ const csv = rows.map((r) => r.map((c) => `"${c.replace(/"/g, '""')}"`).join(',')).join('\n');
95
+ const blob = new Blob([csv], { type: 'text/csv' });
96
+ const url = URL.createObjectURL(blob);
97
+ const a = document.createElement('a');
98
+ a.href = url;
99
+ a.download = filename;
100
+ a.click();
101
+ URL.revokeObjectURL(url);
102
+ }
@@ -3,7 +3,7 @@ import { linear } from 'svelte/easing';
3
3
  import { twMerge } from 'tailwind-merge';
4
4
  import { Loader2 } from 'lucide-svelte';
5
5
  import { fade } from 'svelte/transition';
6
- let { error = undefined, index, subIndex, subLength, nextInProgress = false, subIndexIsPercent = false, compact = false, hideStepTitle = false, slim = false, length, class: className = '', textPosition = 'top', stepId, showStepId = false, isWaitingForEvents = false, isCanceled = false, isScheduled = false } = $props();
6
+ let { error = undefined, index, subIndex, subLength, nextInProgress = false, subIndexIsPercent = false, compact = false, hideStepTitle = false, slim = false, length, class: className = '', textPosition = 'top', stepId, showStepId = false, isWaitingForEvents = false, isCanceled = false, isScheduled = false, isSkipped = false } = $props();
7
7
  let duration = 200;
8
8
  let percent = new Tween(0, { duration, easing: linear });
9
9
  export function resetP() {
@@ -87,13 +87,15 @@ const status = $derived(error != undefined ? 'error' : finished ? 'done' : 'runn
87
87
  : 'text-blue-700 dark:text-blue-200'}"
88
88
  >
89
89
  <div class={twMerge(slim ? 'text-xs' : 'text-sm', 'flex items-center gap-1')}>
90
- {#if status == 'running' && !isCanceled && !isScheduled}
90
+ {#if status == 'running' && !isCanceled && !isScheduled && !isSkipped}
91
91
  <Loader2 class="animate-spin" size={14} />
92
92
  {/if}
93
- {#key status + isWaitingForEvents + stepId + isCanceled + isScheduled}
93
+ {#key status + isWaitingForEvents + stepId + isCanceled + isScheduled + isSkipped}
94
94
  <span in:fade={{ duration: 150 }}>
95
95
  {#if status == 'error'}
96
96
  Error occurred
97
+ {:else if isSkipped}
98
+ Skipped
97
99
  {:else if status == 'done' && isCanceled}
98
100
  Canceled
99
101
  {:else if status == 'done'}
@@ -109,9 +111,11 @@ const status = $derived(error != undefined ? 'error' : finished ? 'done' : 'runn
109
111
  {:else if hideStepTitle}
110
112
  {isCanceled ? 'Canceled' : 'Running'}
111
113
  {:else if subIndexIsPercent}
112
- {(isCanceled ? 'Canceled at ' : '') + `Step ${index + 1} (${subIndex !== undefined ? subIndex + '%' : ''})`}
114
+ {(isCanceled ? 'Canceled at ' : '') +
115
+ `Step ${index + 1} (${subIndex !== undefined ? subIndex + '%' : ''})`}
113
116
  {:else}
114
- {(isCanceled ? 'Canceled at ' : '') + `Step ${index + 1}${subIndex !== undefined ? `.${subIndex + 1}` : ''}`}
117
+ {(isCanceled ? 'Canceled at ' : '') +
118
+ `Step ${index + 1}${subIndex !== undefined ? `.${subIndex + 1}` : ''}`}
115
119
  {/if}
116
120
  </span>
117
121
  {/key}
@@ -16,6 +16,7 @@ interface Props {
16
16
  isWaitingForEvents?: boolean;
17
17
  isCanceled?: boolean;
18
18
  isScheduled?: boolean;
19
+ isSkipped?: boolean;
19
20
  }
20
21
  declare const ProgressBar: import("svelte").Component<Props, {
21
22
  resetP: () => void;
@@ -0,0 +1,52 @@
1
+ <script lang="ts">import Toggle from '../Toggle.svelte';
2
+ import { Button, SecondsInput } from '../common';
3
+ import { Trash } from 'lucide-svelte';
4
+ import Popover from '../meltComponents/Popover.svelte';
5
+ import { autoPlacement } from '@floating-ui/core';
6
+ let { delete_after_secs = $bindable(), btnProps } = $props();
7
+ const enabled = $derived(typeof delete_after_secs === 'number' && delete_after_secs >= 0);
8
+ </script>
9
+
10
+ <Popover
11
+ floatingConfig={{
12
+ middleware: [
13
+ autoPlacement({
14
+ allowedPlacements: ['bottom-start', 'bottom-end', 'top-start', 'top-end', 'top', 'bottom']
15
+ })
16
+ ]
17
+ }}
18
+ closeButton
19
+ contentClasses="block text-primary p-4"
20
+ >
21
+ {#snippet trigger()}
22
+ <Button
23
+ nonCaptureEvent={true}
24
+ btnClasses={enabled
25
+ ? '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'
26
+ : 'bg-surface text-primary hover:bg-hover'}
27
+ color="light"
28
+ variant="contained"
29
+ size="xs2"
30
+ iconOnly
31
+ startIcon={{ icon: Trash }}
32
+ title="Delete job metadata after the job completes"
33
+ {...btnProps}
34
+ />
35
+ {/snippet}
36
+ {#snippet content()}
37
+ <Toggle
38
+ checked={enabled}
39
+ on:change={() => {
40
+ delete_after_secs = enabled ? undefined : 0
41
+ }}
42
+ options={{
43
+ right: 'Delete job metadata after the job completes'
44
+ }}
45
+ />
46
+ <div class="mt-4">
47
+ <span class="text-xs font-bold">Delay before deletion</span>
48
+ <SecondsInput bind:seconds={delete_after_secs} disabled={!enabled} />
49
+ <span class="text-2xs text-tertiary block mt-1">0 = immediate</span>
50
+ </div>
51
+ {/snippet}
52
+ </Popover>
@@ -0,0 +1,9 @@
1
+ import { Button } from '../common';
2
+ import type { ComponentProps } from 'svelte';
3
+ interface Props {
4
+ delete_after_secs: number | undefined;
5
+ btnProps?: ComponentProps<typeof Button>;
6
+ }
7
+ declare const DeleteAfterUsePopup: import("svelte").Component<Props, {}, "delete_after_secs">;
8
+ type DeleteAfterUsePopup = ReturnType<typeof DeleteAfterUsePopup>;
9
+ export default DeleteAfterUsePopup;
@@ -64,7 +64,11 @@ let listener = async (event) => {
64
64
  ? Object.fromEntries(Object.entries(runnable?.fields ?? {})
65
65
  .filter(([k, v]) => v.type == 'static')
66
66
  .map(([k, v]) => [k, v?.['value']]))
67
- : undefined
67
+ : undefined,
68
+ force_viewer_sensitive_inputs: editor
69
+ ? undefinedIfEmpty(Object.keys(runnable?.fields ?? {}).filter((k) => runnable?.fields?.[k]?.type == 'user' && runnable?.fields?.[k]?.sensitive))
70
+ : undefined,
71
+ force_viewer_delete_after_secs: editor ? runnable?.delete_after_secs : undefined
68
72
  }, undefined);
69
73
  let job = { component: runnable_id, created_at: Date.now(), job: uuid };
70
74
  if (event.data.type == 'backendAsync') {
@@ -26,7 +26,7 @@ const datatables = resource([], async () => {
26
26
  if (!$workspaceStore)
27
27
  return [];
28
28
  try {
29
- return await WorkspaceService.listDataTables({ workspace: $workspaceStore });
29
+ return (await WorkspaceService.listDataTables({ workspace: $workspaceStore })).map((d) => d.name);
30
30
  }
31
31
  catch (e) {
32
32
  console.error('Failed to load datatables:', e);
@@ -1,6 +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 RawAppYamlEditor, {} from './RawAppYamlEditor.svelte';
4
5
  import { WorkspaceService } from '../../gen';
5
6
  import DiffDrawer from '../DiffDrawer.svelte';
6
7
  import { encodeState } from '../../utils';
@@ -14,16 +15,72 @@ import RawAppSidebar from './RawAppSidebar.svelte';
14
15
  import { isRunnableByName, isRunnableByPath } from '../apps/inputType';
15
16
  import { aiChatManager, AIMode } from '../copilot/chat/AIChatManager.svelte';
16
17
  import { onMount, untrack } from 'svelte';
18
+ import { createAppSelectedContext } from '../copilot/chat/context';
17
19
  import { rawAppLintStore } from './lintStore';
18
20
  import { dbSchemas } from '../../stores';
19
21
  import { runScriptAndPollResult } from '../jobs/utils';
20
22
  import { RawAppHistoryManager } from './RawAppHistoryManager.svelte';
21
23
  import { sendUserToast } from '../../utils';
22
- import { parseDataTableRef, formatDataTableRef, DEFAULT_DATA } from './dataTableRefUtils';
24
+ import { buildDataTableWhitelist, parseDataTableRef, formatDataTableRef, isDatatableTableAllowed, DEFAULT_DATA } from './dataTableRefUtils';
23
25
  let { files = $bindable({}), runnables = $bindable({}), data = $bindable(DEFAULT_DATA), newApp, policy, summary = $bindable(''), path, newPath = undefined, savedApp = $bindable(undefined), diffDrawer = undefined } = $props();
24
26
  export const version = undefined;
25
27
  // Convert to object format for child components
26
28
  let dataTableRefsObjects = $derived(data.tables.map(parseDataTableRef));
29
+ let dataTableWhitelist = $derived(buildDataTableWhitelist(dataTableRefsObjects));
30
+ function countTables(schemas) {
31
+ return Object.values(schemas).reduce((acc, tables) => acc + tables.length, 0);
32
+ }
33
+ function withTableCount(datatable) {
34
+ return {
35
+ datatable_name: datatable.datatable_name,
36
+ schemas: datatable.schemas,
37
+ tableCount: countTables(datatable.schemas),
38
+ ...(datatable.error && { error: datatable.error })
39
+ };
40
+ }
41
+ function isDatatableTableWhitelisted(datatableName, schemaName, tableName) {
42
+ return isDatatableTableAllowed(dataTableWhitelist, datatableName, schemaName, tableName);
43
+ }
44
+ function filterDatatableTables(allTables) {
45
+ if (dataTableWhitelist.datatables.size === 0) {
46
+ return allTables.map(withTableCount);
47
+ }
48
+ const results = [];
49
+ for (const datatable of allTables) {
50
+ if (!dataTableWhitelist.datatables.has(datatable.datatable_name)) {
51
+ continue;
52
+ }
53
+ if (dataTableWhitelist.allTablesDatatables.has(datatable.datatable_name)) {
54
+ results.push(withTableCount(datatable));
55
+ continue;
56
+ }
57
+ const allowedTables = dataTableWhitelist.tables.get(datatable.datatable_name);
58
+ if (!allowedTables) {
59
+ results.push(withTableCount({
60
+ datatable_name: datatable.datatable_name,
61
+ schemas: {},
62
+ error: datatable.error
63
+ }));
64
+ continue;
65
+ }
66
+ const filteredSchemas = {};
67
+ for (const [schemaName, tableNames] of Object.entries(datatable.schemas)) {
68
+ const allowedTablesInSchema = allowedTables.get(schemaName);
69
+ if (!allowedTablesInSchema)
70
+ continue;
71
+ const filteredTables = tableNames.filter((tableName) => allowedTablesInSchema.has(tableName));
72
+ if (filteredTables.length > 0) {
73
+ filteredSchemas[schemaName] = filteredTables;
74
+ }
75
+ }
76
+ results.push(withTableCount({
77
+ datatable_name: datatable.datatable_name,
78
+ schemas: filteredSchemas,
79
+ error: datatable.error
80
+ }));
81
+ }
82
+ return results;
83
+ }
27
84
  // Initialize history manager
28
85
  const historyManager = new RawAppHistoryManager({
29
86
  maxEntries: 50,
@@ -47,7 +104,23 @@ function saveFrontendDraft() {
47
104
  }, 500);
48
105
  }
49
106
  let iframe = $state(undefined);
107
+ let yamlEditorDrawer = $state(undefined);
50
108
  let sidebarPanelSize = $state(15);
109
+ function handleYamlApply(update) {
110
+ if (update.summary !== undefined) {
111
+ summary = update.summary;
112
+ }
113
+ if (update.files !== undefined) {
114
+ files = update.files;
115
+ }
116
+ if (update.runnables !== undefined) {
117
+ runnables = update.runnables;
118
+ }
119
+ if (update.data !== undefined) {
120
+ data = update.data;
121
+ }
122
+ historyManager.manualSnapshot(files ?? {}, runnables, summary, data, true);
123
+ }
51
124
  let jobs = $state([]);
52
125
  let jobsById = $state({});
53
126
  // Helper function to convert internal Runnable to BackendRunnable format
@@ -101,13 +174,52 @@ function convertToBackendRunnable(key, runnable) {
101
174
  return backendRunnable;
102
175
  }
103
176
  let iframeLoaded = $state(false); // @hmr:keep
177
+ // Suppresses iframe-sourced events for a short window after we re-push files,
178
+ // to keep the iframe's boot-time messages from clobbering the user's state.
179
+ // suppressIframeSetFiles is held across an entire iframe reload (e.g. theme switch);
180
+ // the timer is reset on every reload so rapid toggles don't clear it prematurely.
104
181
  let suppressSetActiveDocument = false;
182
+ let suppressIframeSetFiles = false;
183
+ let suppressTimer;
184
+ let sharedUiFiles = $state({});
185
+ let sharedUiVersion = $state(0);
186
+ let sharedUiLoaded = $state(false);
187
+ async function loadSharedUi() {
188
+ if (!$workspaceStore)
189
+ return;
190
+ try {
191
+ const res = (await WorkspaceService.getSharedUi({
192
+ workspace: $workspaceStore
193
+ }));
194
+ sharedUiFiles = res.files ?? {};
195
+ sharedUiVersion = res.version ?? 0;
196
+ }
197
+ catch (e) {
198
+ console.warn('Failed to load shared UI for raw app editor:', e);
199
+ sharedUiFiles = {};
200
+ }
201
+ finally {
202
+ sharedUiLoaded = true;
203
+ }
204
+ }
205
+ function setSharedUiInIframe() {
206
+ const filesSnap = $state.snapshot(sharedUiFiles);
207
+ iframe?.contentWindow?.postMessage({
208
+ type: 'setSharedUi',
209
+ files: filesSnap,
210
+ version: sharedUiVersion
211
+ }, '*');
212
+ }
105
213
  function populateFiles() {
106
214
  if (files) {
107
- // Suppress iframe's automatic setActiveDocument for a short window
108
- // after sending files, to prevent it from resetting to App.tsx.
109
215
  suppressSetActiveDocument = true;
110
- setTimeout(() => { suppressSetActiveDocument = false; }, 500);
216
+ if (suppressTimer !== undefined)
217
+ clearTimeout(suppressTimer);
218
+ suppressTimer = setTimeout(() => {
219
+ suppressSetActiveDocument = false;
220
+ suppressIframeSetFiles = false;
221
+ suppressTimer = undefined;
222
+ }, 500);
111
223
  const doc = untrack(() => selectedDocument);
112
224
  if (doc) {
113
225
  setFilesAndSelectInIframe(files, doc);
@@ -142,6 +254,7 @@ onMount(() => {
142
254
  aiChatManager.saveAndClear();
143
255
  aiChatManager.changeMode(AIMode.APP);
144
256
  rawAppLintStore.enable();
257
+ loadSharedUi();
145
258
  // Initialize aiChatManager.datatableCreationPolicy from stored data
146
259
  aiChatManager.datatableCreationPolicy = {
147
260
  enabled: data.datatable !== undefined,
@@ -305,38 +418,14 @@ $effect(() => {
305
418
  };
306
419
  },
307
420
  getSelectedContext: () => {
308
- const baseContext = {
421
+ return createAppSelectedContext({
309
422
  inspectorElement: inspectorElement,
310
- selectionExcluded: selectionExcludedFromPrompt,
311
- toggleSelectionExcluded: toggleSelectionExcluded,
312
423
  clearInspector: clearInspectorSelection,
313
- clearRunnable: handleClearRunnable,
314
424
  codeSelection: codeSelection,
315
425
  clearCodeSelection: () => {
316
426
  codeSelection = undefined;
317
427
  }
318
- };
319
- if (selectedRunnable) {
320
- const runnable = convertToBackendRunnable(selectedRunnable, runnables[selectedRunnable]);
321
- return {
322
- type: 'backend',
323
- backendKey: selectedRunnable,
324
- backendRunnable: runnable,
325
- ...baseContext
326
- };
327
- }
328
- if (selectedDocument) {
329
- return {
330
- type: 'frontend',
331
- frontendPath: selectedDocument,
332
- frontendContent: files?.[selectedDocument],
333
- ...baseContext
334
- };
335
- }
336
- return {
337
- type: 'none',
338
- ...baseContext
339
- };
428
+ });
340
429
  },
341
430
  snapshot: () => {
342
431
  // Force create snapshot for AI - it needs a restore point
@@ -347,79 +436,38 @@ $effect(() => {
347
436
  console.log('reverting to snapshot', id);
348
437
  handleHistorySelect(id);
349
438
  },
350
- getDatatables: async () => {
439
+ listDatatableTables: async () => {
351
440
  if (!$workspaceStore) {
352
441
  return [];
353
442
  }
354
- // Get all datatable schemas from the backend
355
- const allSchemas = await WorkspaceService.listDataTableSchemas({
443
+ const tables = await WorkspaceService.listDataTableTables({
356
444
  workspace: $workspaceStore
357
445
  });
358
- // Get unique datatable names from dataTableRefs (the whitelisted tables)
359
- const whitelistedDatatables = new Set(dataTableRefsObjects.map((ref) => ref.datatable));
360
- // If no datatables are configured, return all available datatables
361
- // This allows users to see all datatables in the @ context menu
362
- if (whitelistedDatatables.size === 0) {
363
- return allSchemas;
364
- }
365
- // Build a map of whitelisted tables per datatable: datatable -> schema -> Set<table>
366
- const whitelistedTables = new Map();
367
- for (const ref of dataTableRefsObjects) {
368
- if (!ref.table)
369
- continue;
370
- if (!whitelistedTables.has(ref.datatable)) {
371
- whitelistedTables.set(ref.datatable, new Map());
372
- }
373
- const schemaKey = ref.schema || 'public';
374
- const schemaMap = whitelistedTables.get(ref.datatable);
375
- if (!schemaMap.has(schemaKey)) {
376
- schemaMap.set(schemaKey, new Set());
377
- }
378
- schemaMap.get(schemaKey).add(ref.table);
446
+ return filterDatatableTables(tables);
447
+ },
448
+ getDatatableTableSchema: async (datatableName, schemaName, tableName) => {
449
+ if (!$workspaceStore) {
450
+ return {};
379
451
  }
380
- // Filter schemas to only include whitelisted datatables and tables
381
- const results = [];
382
- for (const schema of allSchemas) {
383
- if (!whitelistedDatatables.has(schema.datatable_name)) {
384
- continue;
385
- }
386
- const allowedTables = whitelistedTables.get(schema.datatable_name);
387
- if (!allowedTables) {
388
- // Include the datatable but with empty schemas
389
- results.push({
390
- datatable_name: schema.datatable_name,
391
- schemas: {},
392
- error: schema.error
393
- });
394
- continue;
395
- }
396
- // Filter schemas to only include whitelisted tables
397
- const filteredSchemas = {};
398
- for (const [schemaName, tables] of Object.entries(schema.schemas)) {
399
- const allowedTablesInSchema = allowedTables.get(schemaName);
400
- if (!allowedTablesInSchema)
401
- continue;
402
- const filteredTables = {};
403
- for (const [tableName, columns] of Object.entries(tables)) {
404
- if (allowedTablesInSchema.has(tableName)) {
405
- filteredTables[tableName] = columns;
406
- }
407
- }
408
- if (Object.keys(filteredTables).length > 0) {
409
- filteredSchemas[schemaName] = filteredTables;
410
- }
411
- }
412
- results.push({
413
- datatable_name: schema.datatable_name,
414
- schemas: filteredSchemas,
415
- error: schema.error
452
+ if (!isDatatableTableWhitelisted(datatableName, schemaName, tableName)) {
453
+ const tableRef = formatDataTableRef({
454
+ datatable: datatableName,
455
+ schema: schemaName === 'public' ? undefined : schemaName,
456
+ table: tableName
416
457
  });
458
+ throw new Error(`Table '${tableRef}' is not configured in this app`);
417
459
  }
418
- return results;
460
+ const schema = await WorkspaceService.getDataTableTableSchema({
461
+ workspace: $workspaceStore,
462
+ datatableName,
463
+ schemaName,
464
+ tableName
465
+ });
466
+ return schema.columns;
419
467
  },
420
468
  getAvailableDatatableNames: () => {
421
469
  // Get unique datatable names from dataTableRefs
422
- return [...new Set(dataTableRefsObjects.map((ref) => ref.datatable))];
470
+ return [...dataTableWhitelist.datatables];
423
471
  },
424
472
  execDatatableSql: async (datatableName, sql, newTable) => {
425
473
  if (!$workspaceStore) {
@@ -450,6 +498,7 @@ $effect(() => {
450
498
  delete $dbSchemas[resourcePath];
451
499
  }
452
500
  }
501
+ void aiChatManager.refreshDatatables();
453
502
  // Check if result is an array (SELECT) or something else
454
503
  if (Array.isArray(result)) {
455
504
  return { success: true, result };
@@ -474,6 +523,7 @@ $effect(() => {
474
523
  if (!data.tables.includes(newRef)) {
475
524
  data.tables = [...data.tables, newRef];
476
525
  saveFrontendDraft();
526
+ void aiChatManager.refreshDatatables();
477
527
  }
478
528
  }
479
529
  });
@@ -481,11 +531,7 @@ $effect(() => {
481
531
  let selectedRunnable = $state(undefined);
482
532
  let selectedDocument = $state(undefined);
483
533
  let inspectorElement = $state(undefined);
484
- let selectionExcludedFromPrompt = $state(false);
485
534
  let codeSelection = $state(undefined);
486
- function toggleSelectionExcluded() {
487
- selectionExcludedFromPrompt = !selectionExcludedFromPrompt;
488
- }
489
535
  let modules = $state({});
490
536
  // Normalize Windows-style path separators to Linux-style
491
537
  function normalizeFilePaths(filesObj) {
@@ -495,6 +541,10 @@ function normalizeFilePaths(filesObj) {
495
541
  }
496
542
  function listener(e) {
497
543
  if (e.data.type === 'setFiles') {
544
+ // Ignore setFiles from the iframe while it's reloading (e.g. theme switch);
545
+ // the iframe boots with its default template and would otherwise clobber the user's files.
546
+ if (suppressIframeSetFiles)
547
+ return;
498
548
  // Normalize Windows-style path separators to Linux-style
499
549
  const normalizedFiles = normalizeFilePaths(e.data.files);
500
550
  // Only mark pending changes if files actually changed (ignore echo from setFilesInIframe)
@@ -565,12 +615,41 @@ $effect(() => {
565
615
  iframeLoaded = true;
566
616
  });
567
617
  });
618
+ $effect(() => {
619
+ // Toggling dark mode changes the iframe src, causing it to reload.
620
+ // Reset iframeLoaded so the populate effect refires after the new load,
621
+ // and suppress the iframe's initial setFiles (default template) until then.
622
+ void darkMode;
623
+ untrack(() => {
624
+ if (iframe && iframeLoaded) {
625
+ iframeLoaded = false;
626
+ suppressIframeSetFiles = true;
627
+ // Cancel any pending clear from a prior reload — otherwise on rapid
628
+ // toggles the previous timer can fire mid-reload and drop suppression
629
+ // before the iframe has finished booting.
630
+ if (suppressTimer !== undefined) {
631
+ clearTimeout(suppressTimer);
632
+ suppressTimer = undefined;
633
+ }
634
+ }
635
+ });
636
+ });
568
637
  $effect(() => {
569
638
  iframe && iframeLoaded && files && populateFiles();
570
639
  });
571
640
  $effect(() => {
572
641
  iframe && iframeLoaded && runnables && populateRunnables();
573
642
  });
643
+ $effect(() => {
644
+ // Re-push the shared UI whenever the iframe (re)loads or the
645
+ // fetched files change. We gate on `sharedUiLoaded` so the empty
646
+ // initial state isn't sent before the API call resolves.
647
+ if (iframe && iframeLoaded && sharedUiLoaded) {
648
+ // Touch the version so reassignments after a refresh re-fire this.
649
+ void sharedUiVersion;
650
+ untrack(() => setSharedUiInIframe());
651
+ }
652
+ });
574
653
  function clearInspectorSelection() {
575
654
  inspectorElement = undefined;
576
655
  iframe?.contentWindow?.postMessage({ type: 'inspectorClear' }, '*');
@@ -584,21 +663,16 @@ function handleSelectFile(path) {
584
663
  path: path
585
664
  }, '*');
586
665
  }
587
- function handleClearRunnable() {
588
- selectedRunnable = undefined;
589
- }
590
666
  // Track previous values for change detection
591
667
  let prevSelectedRunnable = undefined;
592
668
  let prevSelectedDocument = undefined;
593
- // Clear inspector and reset exclusion when selection changes
669
+ // Clear inspector when selection changes
594
670
  $effect(() => {
595
671
  if (selectedRunnable !== prevSelectedRunnable || selectedDocument !== prevSelectedDocument) {
596
672
  // Only clear if we're actually switching to something different
597
673
  if (prevSelectedRunnable !== undefined || prevSelectedDocument !== undefined) {
598
674
  clearInspectorSelection();
599
675
  }
600
- // Reset exclusion when switching files/runnables
601
- selectionExcludedFromPrompt = false;
602
676
  prevSelectedRunnable = selectedRunnable;
603
677
  prevSelectedDocument = selectedDocument;
604
678
  }
@@ -694,6 +768,16 @@ function handleKeydown(e) {
694
768
  canRedo={historyManager.canRedo}
695
769
  onUndo={handleUndo}
696
770
  onRedo={handleRedo}
771
+ onOpenYamlEditor={() => yamlEditorDrawer?.openDrawer()}
772
+ />
773
+
774
+ <RawAppYamlEditor
775
+ bind:drawer={yamlEditorDrawer}
776
+ {summary}
777
+ {files}
778
+ {runnables}
779
+ {data}
780
+ onApply={handleYamlApply}
697
781
  />
698
782
 
699
783
  <Splitpanes id="o2" class="grow min-h-0">