windmill-components 1.677.1 → 1.687.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 (354) hide show
  1. package/package/components/AppConnectInner.svelte +6 -0
  2. package/package/components/CiTestResults.svelte +64 -0
  3. package/package/components/CiTestResults.svelte.d.ts +7 -0
  4. package/package/components/CompareWorkspaces.svelte +626 -418
  5. package/package/components/DBManager.svelte +35 -4
  6. package/package/components/DBManager.svelte.d.ts +2 -0
  7. package/package/components/DBManagerContent.svelte +3 -1
  8. package/package/components/DBManagerContent.svelte.d.ts +3 -0
  9. package/package/components/DBManagerDrawer.svelte +145 -3
  10. package/package/components/DBTableEditor.svelte +14 -4
  11. package/package/components/DatatablePicker.svelte +2 -5
  12. package/package/components/DatatableSchemaDiff.svelte +531 -0
  13. package/package/components/DatatableSchemaDiff.svelte.d.ts +29 -0
  14. package/package/components/DedicatedWorkersSelector.svelte +4 -2
  15. package/package/components/DefaultTagsInner.svelte +42 -2
  16. package/package/components/DeployWorkspaceDrawer.svelte +1 -1
  17. package/package/components/Dev.svelte +20 -3
  18. package/package/components/Editor.svelte +1 -1
  19. package/package/components/EditorBar.svelte +1 -1
  20. package/package/components/EditorBar.svelte.d.ts +1 -1
  21. package/package/components/FlowStatusViewerInner.svelte +269 -220
  22. package/package/components/FlowTimeline.svelte +1 -1
  23. package/package/components/FolderEditor.svelte +189 -4
  24. package/package/components/ForkWorkspaceBanner.svelte +82 -11
  25. package/package/components/GlobalUserOffboardingModal.svelte +293 -0
  26. package/package/components/GlobalUserOffboardingModal.svelte.d.ts +10 -0
  27. package/package/components/InstanceSettings.svelte +22 -3
  28. package/package/components/Login.svelte +22 -10
  29. package/package/components/ModuleTest.svelte +2 -1
  30. package/package/components/NoMainFuncBadge.svelte +1 -1
  31. package/package/components/OffboardItemsBox.svelte +56 -0
  32. package/package/components/OffboardItemsBox.svelte.d.ts +12 -0
  33. package/package/components/OffboardReassignControls.svelte +47 -0
  34. package/package/components/OffboardReassignControls.svelte.d.ts +20 -0
  35. package/package/components/OffboardWorkspaceSection.svelte +110 -0
  36. package/package/components/OffboardWorkspaceSection.svelte.d.ts +24 -0
  37. package/package/components/OnBehalfOfSelector.svelte +21 -3
  38. package/package/components/OnBehalfOfSelector.svelte.d.ts +7 -0
  39. package/package/components/QueueAlerts.svelte +10 -10
  40. package/package/components/ResourcePicker.svelte +2 -2
  41. package/package/components/ScriptBuilder.svelte +52 -11
  42. package/package/components/ScriptEditor.svelte +1 -3
  43. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  44. package/package/components/ShareModal.svelte +236 -98
  45. package/package/components/SuperadminSettingsInner.svelte +362 -315
  46. package/package/components/UserOffboardingModal.svelte +238 -0
  47. package/package/components/UserOffboardingModal.svelte.d.ts +10 -0
  48. package/package/components/WorkspaceDeployLayout.svelte +3 -3
  49. package/package/components/WorkspaceDeployLayout.svelte.d.ts +1 -0
  50. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +4 -2
  51. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +12 -0
  52. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  53. package/package/components/common/confirmationModal/ConfirmationModal.svelte +1 -1
  54. package/package/components/common/table/AppRow.svelte +3 -3
  55. package/package/components/common/table/FlowRow.svelte +3 -3
  56. package/package/components/common/table/RawAppRow.svelte +4 -4
  57. package/package/components/common/table/Row.svelte +6 -2
  58. package/package/components/common/table/ScriptRow.svelte +11 -3
  59. package/package/components/copilot/chat/AIChatManager.svelte.js +2 -2
  60. package/package/components/copilot/chat/anthropic.d.ts +7 -1
  61. package/package/components/copilot/chat/anthropic.js +5 -2
  62. package/package/components/copilot/chat/app/core.js +129 -1
  63. package/package/components/copilot/chat/app/core.test.js +192 -0
  64. package/package/components/copilot/chat/chatLoop.d.ts +3 -0
  65. package/package/components/copilot/chat/chatLoop.js +13 -5
  66. package/package/components/copilot/chat/flow/FlowAIChat.svelte +55 -76
  67. package/package/components/copilot/chat/flow/core.d.ts +13 -3
  68. package/package/components/copilot/chat/flow/core.js +467 -116
  69. package/package/components/copilot/chat/flow/helperUtils.d.ts +19 -0
  70. package/package/components/copilot/chat/flow/helperUtils.js +68 -0
  71. package/package/components/copilot/chat/flow/helperUtils.test.js +116 -0
  72. package/package/components/copilot/chat/flow/inlineScriptsUtils.d.ts +5 -24
  73. package/package/components/copilot/chat/flow/inlineScriptsUtils.js +30 -55
  74. package/package/components/copilot/chat/flow/utils.test.js +59 -0
  75. package/package/components/copilot/chat/openai-responses.d.ts +7 -1
  76. package/package/components/copilot/chat/openai-responses.js +5 -2
  77. package/package/components/copilot/chat/shared.d.ts +1 -2
  78. package/package/components/copilot/chat/shared.js +94 -52
  79. package/package/components/copilot/chat/tokenUsage.d.ts +23 -0
  80. package/package/components/copilot/chat/tokenUsage.js +42 -0
  81. package/package/components/copilot/lib.d.ts +5 -1
  82. package/package/components/copilot/lib.js +21 -5
  83. package/package/components/deploymentRequest/DeploymentRequestPanel.svelte +337 -0
  84. package/package/components/deploymentRequest/DeploymentRequestPanel.svelte.d.ts +15 -0
  85. package/package/components/details/CopyableCodeBlock.svelte +18 -8
  86. package/package/components/details/CopyableCodeBlock.svelte.d.ts +1 -0
  87. package/package/components/flows/FlowAssetsHandler.svelte +19 -21
  88. package/package/components/flows/agentToolTree.d.ts +17 -0
  89. package/package/components/flows/agentToolTree.js +114 -0
  90. package/package/components/flows/agentToolTree.test.d.ts +1 -0
  91. package/package/components/flows/agentToolTree.test.js +86 -0
  92. package/package/components/flows/agentToolUtils.d.ts +0 -5
  93. package/package/components/flows/agentToolUtils.js +0 -49
  94. package/package/components/flows/content/FlowLoop.svelte +7 -4
  95. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +15 -7
  96. package/package/components/flows/content/FlowSettings.svelte +29 -0
  97. package/package/components/flows/dfs.d.ts +6 -2
  98. package/package/components/flows/dfs.js +19 -11
  99. package/package/components/flows/flowDeleteController.d.ts +32 -0
  100. package/package/components/flows/flowDeleteController.js +54 -0
  101. package/package/components/flows/flowDeleteController.test.d.ts +1 -0
  102. package/package/components/flows/flowDeleteController.test.js +121 -0
  103. package/package/components/flows/flowDeleteUtils.d.ts +48 -0
  104. package/package/components/flows/flowDeleteUtils.js +150 -0
  105. package/package/components/flows/flowDeleteUtils.test.d.ts +1 -0
  106. package/package/components/flows/flowDeleteUtils.test.js +131 -0
  107. package/package/components/flows/flowDiff.d.ts +2 -47
  108. package/package/components/flows/flowDiff.js +16 -293
  109. package/package/components/flows/flowDiff.testUtils.d.ts +8 -0
  110. package/package/components/flows/flowDiff.testUtils.js +26 -0
  111. package/package/components/flows/flowDiffManager.svelte.js +20 -75
  112. package/package/components/flows/flowDiffManager.svelte.test.js +103 -2
  113. package/package/components/flows/flowExplorer.d.ts +4 -0
  114. package/package/components/flows/flowExplorer.js +7 -30
  115. package/package/components/flows/flowState.d.ts +1 -0
  116. package/package/components/flows/flowStateUtils.svelte.js +6 -1
  117. package/package/components/flows/flowTree.d.ts +91 -0
  118. package/package/components/flows/flowTree.js +326 -0
  119. package/package/components/flows/flowTree.test.d.ts +1 -0
  120. package/package/components/flows/flowTree.test.js +236 -0
  121. package/package/components/flows/map/FlowJobsMenu.svelte +36 -30
  122. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
  123. package/package/components/flows/map/FlowModuleSchemaMap.svelte +70 -227
  124. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +0 -2
  125. package/package/components/flows/pickers/PickHubScriptQuick.svelte +2 -2
  126. package/package/components/flows/previousResults.js +13 -41
  127. package/package/components/flows/previousResults.test.d.ts +1 -0
  128. package/package/components/flows/previousResults.test.js +65 -0
  129. package/package/components/flows/propPicker/OutputPicker.svelte +2 -1
  130. package/package/components/flows/propPicker/OutputPickerInner.svelte +41 -4
  131. package/package/components/flows/propPicker/StepHistory.svelte +9 -1
  132. package/package/components/git_sync/GitSyncContext.svelte.js +11 -5
  133. package/package/components/git_sync/GitSyncRepositoryCard.svelte +2 -29
  134. package/package/components/git_sync/PullWorkspaceModal.svelte +6 -7
  135. package/package/components/graph/FlowGraphV2.svelte +2 -2
  136. package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
  137. package/package/components/graph/groupedModulesProxy.svelte.d.ts +10 -0
  138. package/package/components/graph/groupedModulesProxy.svelte.js +17 -1
  139. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +5 -2
  140. package/package/components/home/HomeConnectDrawer.svelte +125 -0
  141. package/package/components/home/HomeConnectDrawer.svelte.d.ts +5 -0
  142. package/package/components/icons/GithubIcon.svelte +4 -4
  143. package/package/components/icons/GithubIcon.svelte.d.ts +5 -2
  144. package/package/components/instanceSettings/ExternalJwtTokens.svelte +85 -0
  145. package/package/components/instanceSettings/ExternalJwtTokens.svelte.d.ts +12 -0
  146. package/package/components/instanceSettings/GhesAppSettings.svelte +17 -0
  147. package/package/components/instanceSettings/IndexerMemorySettings.svelte +56 -29
  148. package/package/components/instanceSettings/SecretBackendConfig.svelte +9 -2
  149. package/package/components/instanceSettings.d.ts +1 -0
  150. package/package/components/instanceSettings.js +42 -8
  151. package/package/components/offboarding-utils.d.ts +11 -0
  152. package/package/components/offboarding-utils.js +100 -0
  153. package/package/components/raw_apps/RawAppDataTableDrawer.svelte +1 -1
  154. package/package/components/raw_apps/RawAppEditor.svelte +27 -0
  155. package/package/components/raw_apps/RawAppEditorHeader.svelte +6 -1
  156. package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +1 -0
  157. package/package/components/raw_apps/RawAppYamlEditor.svelte +81 -0
  158. package/package/components/raw_apps/RawAppYamlEditor.svelte.d.ts +20 -0
  159. package/package/components/raw_apps/datatableUtils.svelte.js +1 -1
  160. package/package/components/runs/runsFilter.d.ts +1 -1
  161. package/package/components/script_builder.d.ts +1 -1
  162. package/package/components/select/Select.svelte +2 -1
  163. package/package/components/select/Select.svelte.d.ts +1 -0
  164. package/package/components/settings/CreateToken.svelte +113 -64
  165. package/package/components/settings/CreateToken.svelte.d.ts +3 -0
  166. package/package/components/settings/WorkspaceUserSettings.svelte +34 -28
  167. package/package/components/sidebar/SidebarContent.svelte +58 -2
  168. package/package/components/sidebar/WorkspaceMenu.svelte +8 -4
  169. package/package/components/triggers/AddTriggersButton.svelte +11 -0
  170. package/package/components/triggers/PermissionedAsLine.svelte +37 -3
  171. package/package/components/triggers/PermissionedAsLine.svelte.d.ts +6 -0
  172. package/package/components/triggers/TriggersEditor.svelte +5 -1
  173. package/package/components/triggers/TriggersWrapper.svelte +10 -0
  174. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +13 -11
  175. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +13 -11
  176. package/package/components/triggers/http/RouteEditorConfigSection.svelte +15 -7
  177. package/package/components/triggers/http/RouteEditorInner.svelte +14 -14
  178. package/package/components/triggers/http/RoutesGenerator.svelte +6 -1
  179. package/package/components/triggers/http/RoutesPanel.svelte +1 -1
  180. package/package/components/triggers/http/utils.d.ts +1 -1
  181. package/package/components/triggers/http/utils.js +2 -2
  182. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +13 -11
  183. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +13 -11
  184. package/package/components/triggers/native/NativeTriggerEditor.svelte +3 -0
  185. package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte +118 -0
  186. package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte.d.ts +17 -0
  187. package/package/components/triggers/native/utils.js +14 -0
  188. package/package/components/triggers/nats/NatsTriggerEditor.svelte.d.ts +4 -3
  189. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +13 -11
  190. package/package/components/triggers/postgres/PostgresTriggerEditor.svelte.d.ts +4 -3
  191. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +13 -11
  192. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +13 -11
  193. package/package/components/triggers/sqs/SqsTriggerEditor.svelte.d.ts +4 -3
  194. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +13 -11
  195. package/package/components/triggers/triggers.svelte.js +1 -0
  196. package/package/components/triggers/utils.js +27 -6
  197. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +13 -11
  198. package/package/components/triggers.d.ts +1 -1
  199. package/package/components/useFolderDefaultPermissionedAs.svelte.d.ts +13 -0
  200. package/package/components/useFolderDefaultPermissionedAs.svelte.js +63 -0
  201. package/package/components/workspaceSettings/CreateWorkspace.svelte +16 -677
  202. package/package/components/workspaceSettings/CreateWorkspaceInner.svelte +604 -0
  203. package/package/components/workspaceSettings/CreateWorkspaceInner.svelte.d.ts +7 -0
  204. package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +27 -25
  205. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +46 -8
  206. package/package/components/workspaceSettings/DataTableSettings.svelte +27 -22
  207. package/package/components/workspaceSettings/DucklakeSettings.svelte +1 -1
  208. package/package/components/workspaceSettings/ForkDatatableSection.svelte +228 -0
  209. package/package/components/workspaceSettings/ForkDatatableSection.svelte.d.ts +28 -0
  210. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +8 -2
  211. package/package/components/workspaceSettings/RulesetEditor.svelte +27 -2
  212. package/package/components/workspaceSettings/VolumeStorageSettings.svelte +1 -1
  213. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +17 -1
  214. package/package/consts.d.ts +3 -0
  215. package/package/consts.js +10 -0
  216. package/package/gen/core/OpenAPI.js +1 -1
  217. package/package/gen/schemas.gen.d.ts +485 -19
  218. package/package/gen/schemas.gen.js +489 -20
  219. package/package/gen/services.gen.d.ts +229 -2
  220. package/package/gen/services.gen.js +463 -1
  221. package/package/gen/types.gen.d.ts +866 -29
  222. package/package/githubApp.js +5 -1
  223. package/package/hubPaths.json +1 -4
  224. package/package/infer.js +13 -1
  225. package/package/infer.svelte.js +10 -1
  226. package/package/monaco_workers/sqlTypePlugin.worker.d.ts +10 -0
  227. package/package/monaco_workers/sqlTypePlugin.worker.js +39 -0
  228. package/package/script_helpers.d.ts +8 -2
  229. package/package/script_helpers.js +14 -0
  230. package/package/stores.d.ts +4 -0
  231. package/package/stores.js +1 -0
  232. package/package/system_prompts/prompts.d.ts +4 -3
  233. package/package/system_prompts/prompts.js +270 -20
  234. package/package/templates/ci_test_bun.ts.template +19 -0
  235. package/package/templates/ci_test_python.py.template +18 -0
  236. package/package/utils_workspace_deploy.d.ts +8 -8
  237. package/package/utils_workspace_deploy.js +86 -420
  238. package/package.json +3 -3
  239. package/package/components/copilot/chat/__tests__/app/appChat.eval.test.js +0 -153
  240. package/package/components/copilot/chat/__tests__/app/appEvalComparison.d.ts +0 -21
  241. package/package/components/copilot/chat/__tests__/app/appEvalComparison.js +0 -136
  242. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.d.ts +0 -15
  243. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +0 -107
  244. package/package/components/copilot/chat/__tests__/app/appEvalRunner.d.ts +0 -50
  245. package/package/components/copilot/chat/__tests__/app/appEvalRunner.js +0 -93
  246. package/package/components/copilot/chat/__tests__/app/appFixtureLoader.d.ts +0 -29
  247. package/package/components/copilot/chat/__tests__/app/appFixtureLoader.js +0 -134
  248. package/package/components/copilot/chat/__tests__/app/appResultsWriter.d.ts +0 -30
  249. package/package/components/copilot/chat/__tests__/app/appResultsWriter.js +0 -197
  250. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.d.ts +0 -10
  251. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.js +0 -9
  252. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/meta.json +0 -4
  253. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.d.ts +0 -6
  254. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.js +0 -5
  255. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/meta.json +0 -4
  256. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.d.ts +0 -12
  257. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.js +0 -14
  258. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/meta.json +0 -4
  259. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.d.ts +0 -8
  260. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.js +0 -25
  261. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/meta.json +0 -4
  262. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.d.ts +0 -7
  263. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.js +0 -5
  264. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/meta.json +0 -4
  265. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.d.ts +0 -8
  266. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.js +0 -5
  267. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/meta.json +0 -4
  268. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.d.ts +0 -10
  269. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.tsx +0 -26
  270. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.d.ts +0 -10
  271. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.tsx +0 -79
  272. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.d.ts +0 -10
  273. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.tsx +0 -46
  274. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.d.ts +0 -10
  275. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.tsx +0 -56
  276. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.d.ts +0 -6
  277. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.tsx +0 -59
  278. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.d.ts +0 -16
  279. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.tsx +0 -119
  280. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.d.ts +0 -15
  281. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.js +0 -14
  282. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/meta.json +0 -4
  283. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.d.ts +0 -14
  284. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.js +0 -5
  285. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/meta.json +0 -4
  286. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.d.ts +0 -6
  287. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.js +0 -41
  288. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/meta.json +0 -4
  289. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.d.ts +0 -15
  290. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.js +0 -3
  291. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/meta.json +0 -4
  292. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.d.ts +0 -9
  293. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.tsx +0 -51
  294. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.d.ts +0 -8
  295. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.tsx +0 -27
  296. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.d.ts +0 -8
  297. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.tsx +0 -18
  298. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.d.ts +0 -12
  299. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.tsx +0 -81
  300. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.d.ts +0 -3
  301. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.js +0 -3
  302. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/meta.json +0 -4
  303. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.d.ts +0 -3
  304. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.js +0 -3
  305. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/meta.json +0 -4
  306. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.d.ts +0 -2
  307. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.tsx +0 -38
  308. package/package/components/copilot/chat/__tests__/app/variants/baseline.d.ts +0 -6
  309. package/package/components/copilot/chat/__tests__/app/variants/baseline.js +0 -10
  310. package/package/components/copilot/chat/__tests__/app/variants/index.d.ts +0 -3
  311. package/package/components/copilot/chat/__tests__/app/variants/index.js +0 -3
  312. package/package/components/copilot/chat/__tests__/app/variants/streamlined.d.ts +0 -6
  313. package/package/components/copilot/chat/__tests__/app/variants/streamlined.js +0 -137
  314. package/package/components/copilot/chat/__tests__/flow/expected/test1.json +0 -134
  315. package/package/components/copilot/chat/__tests__/flow/expected/test2.json +0 -183
  316. package/package/components/copilot/chat/__tests__/flow/expected/test3.json +0 -204
  317. package/package/components/copilot/chat/__tests__/flow/expected/test4.json +0 -175
  318. package/package/components/copilot/chat/__tests__/flow/expected/test5_modify_simple.json +0 -68
  319. package/package/components/copilot/chat/__tests__/flow/expected/test6_modify_medium.json +0 -142
  320. package/package/components/copilot/chat/__tests__/flow/expected/test7_modify_complex.json +0 -136
  321. package/package/components/copilot/chat/__tests__/flow/flowChat.eval.test.js +0 -294
  322. package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.d.ts +0 -17
  323. package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.js +0 -49
  324. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.d.ts +0 -12
  325. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +0 -79
  326. package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.d.ts +0 -50
  327. package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.js +0 -102
  328. package/package/components/copilot/chat/__tests__/flow/initial/test5_initial.json +0 -53
  329. package/package/components/copilot/chat/__tests__/flow/initial/test6_initial.json +0 -68
  330. package/package/components/copilot/chat/__tests__/flow/initial/test7_initial.json +0 -120
  331. package/package/components/copilot/chat/__tests__/flow/variants/baseline.d.ts +0 -6
  332. package/package/components/copilot/chat/__tests__/flow/variants/baseline.js +0 -10
  333. package/package/components/copilot/chat/__tests__/flow/variants/index.d.ts +0 -3
  334. package/package/components/copilot/chat/__tests__/flow/variants/index.js +0 -3
  335. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.d.ts +0 -15
  336. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.js +0 -388
  337. package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.d.ts +0 -45
  338. package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.js +0 -121
  339. package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.d.ts +0 -28
  340. package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.js +0 -96
  341. package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.d.ts +0 -32
  342. package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.js +0 -130
  343. package/package/components/copilot/chat/__tests__/shared/baseVariants.d.ts +0 -45
  344. package/package/components/copilot/chat/__tests__/shared/baseVariants.js +0 -57
  345. package/package/components/copilot/chat/__tests__/shared/index.d.ts +0 -10
  346. package/package/components/copilot/chat/__tests__/shared/index.js +0 -5
  347. package/package/components/copilot/chat/__tests__/shared/types.d.ts +0 -105
  348. package/package/components/copilot/chat/__tests__/shared/types.js +0 -9
  349. package/package/components/copilot/chat/flow/utils.d.ts +0 -14
  350. package/package/components/copilot/chat/flow/utils.js +0 -108
  351. package/package/components/flows/agentToolUtils.test.js +0 -55
  352. /package/package/components/copilot/chat/{__tests__/app/appChat.eval.test.d.ts → app/core.test.d.ts} +0 -0
  353. /package/package/components/copilot/chat/{__tests__/flow/flowChat.eval.test.d.ts → flow/helperUtils.test.d.ts} +0 -0
  354. /package/package/components/{flows/agentToolUtils.test.d.ts → copilot/chat/flow/utils.test.d.ts} +0 -0
@@ -15,7 +15,7 @@
15
15
  </script>
16
16
 
17
17
  <script lang="ts">import Button from '../../common/button/Button.svelte';
18
- import { Pin, History, Pen, Check, X, Loader2, Pencil } from 'lucide-svelte';
18
+ import { Pin, History, Pen, Check, X, Loader2, Pencil, ScrollText } from 'lucide-svelte';
19
19
  import ObjectViewer from '../../propertyPicker/ObjectViewer.svelte';
20
20
  import StepHistory from './StepHistory.svelte';
21
21
  import { Popover } from '../../meltComponents';
@@ -25,6 +25,7 @@ import DisplayResult from '../../DisplayResult.svelte';
25
25
  import OutputBadge from './OutputBadge.svelte';
26
26
  import { twMerge } from 'tailwind-merge';
27
27
  import DisplayResultControlBar from '../../DisplayResultControlBar.svelte';
28
+ import LogViewer from '../../LogViewer.svelte';
28
29
  import { base } from '../../../base';
29
30
  import { fade } from 'svelte/transition';
30
31
  let { testJob, prefix = '', allowCopy = false, connectingData = undefined, mock = $bindable({ enabled: false }), moduleId = '', fullResult = false, closeOnOutsideClick = false, getLogs = false, isLoading = $bindable(false), hideHeaderBar = false, simpleViewer = undefined, path = '', loopStatus = undefined, customHeight = undefined, rightMargin = false, disableMock = false, disableHistory = false, historyOffset = { mainAxis: 8, crossAxis: -4.5 }, clazz, copilot_fix, onSelect, onUpdateMock, onEditInput, selectionId, initial, customEmptyJobMessage } = $props();
@@ -38,6 +39,7 @@ let contentEl = $state(undefined);
38
39
  let hasOverflow = $state(false);
39
40
  let preview = $state(undefined);
40
41
  let selectedJob = $state(undefined);
42
+ let showLogs = $state(false);
41
43
  function checkOverflow() {
42
44
  if (contentEl) {
43
45
  hasOverflow = contentEl.scrollHeight > contentEl.clientHeight;
@@ -146,7 +148,8 @@ function updateLastJob() {
146
148
  id: flowStateStore.val[moduleId]?.previewJobId ?? '',
147
149
  result: flowStateStore.val[moduleId]?.previewResult,
148
150
  type: 'CompletedJob',
149
- success: flowStateStore.val[moduleId]?.previewSuccess ?? undefined
151
+ success: flowStateStore.val[moduleId]?.previewSuccess ?? undefined,
152
+ logs: flowStateStore.val[moduleId]?.previewLogs
150
153
  };
151
154
  }
152
155
  const lastJob = $derived.by(updateLastJob);
@@ -262,6 +265,11 @@ const noHistory = $derived(loopStatus ? (loopStatus.type === 'self' ? 'isLoop' :
262
265
  preview ? 'bg-surface shadow-sm' : ''
263
266
  )}
264
267
  />
268
+ {:else if isLoadingAndNotMock && !mock?.enabled}
269
+ <div class="flex flex-row w-fit items-center justify-between gap-2 rounded-md bg-surface-secondary p-1 px-2 min-w-16 min-h-[23px]">
270
+ <Loader2 size={12} class="animate-spin text-secondary shrink-0" />
271
+ <span class="text-xs text-secondary w-[56px]">&nbsp;</span>
272
+ </div>
265
273
  {:else if !isLoadingAndNotMock || mock?.enabled}
266
274
  <div
267
275
  class={twMerge(
@@ -323,7 +331,7 @@ const noHistory = $derived(loopStatus ? (loopStatus.type === 'self' ? 'isLoop' :
323
331
  {/if}
324
332
 
325
333
  <!-- Pin button -->
326
- {#if !disableMock && !isLoadingAndNotMock}
334
+ {#if !disableMock}
327
335
  <Tooltip disablePopup={mock?.enabled}>
328
336
  <Button
329
337
  color="light"
@@ -410,6 +418,25 @@ const noHistory = $derived(loopStatus ? (loopStatus.type === 'self' ? 'isLoop' :
410
418
  {/snippet}
411
419
  </Tooltip>
412
420
  {/if}
421
+
422
+ <!-- Logs button -->
423
+ {#if selectedJob?.type === 'CompletedJob' && selectedJob?.['logs']}
424
+ <Tooltip>
425
+ <Button
426
+ size="xs2"
427
+ color="light"
428
+ variant="contained"
429
+ btnClasses={twMerge('h-[27px]', showLogs ? 'bg-blue-500/10 text-blue-800 dark:text-blue-200' : 'bg-transparent')}
430
+ startIcon={{ icon: ScrollText }}
431
+ on:click={() => {
432
+ showLogs = !showLogs
433
+ }}
434
+ />
435
+ {#snippet text()}
436
+ {showLogs ? 'Show result' : 'Show logs'}
437
+ {/snippet}
438
+ </Tooltip>
439
+ {/if}
413
440
  </div>
414
441
 
415
442
  <div class="px-2">
@@ -491,7 +518,17 @@ const noHistory = $derived(loopStatus ? (loopStatus.type === 'self' ? 'isLoop' :
491
518
  hoveringResult = false
492
519
  }}
493
520
  >
494
- {#if isLoadingAndNotMock}
521
+ {#if showLogs && selectedJob?.type === 'CompletedJob' && selectedJob?.['logs']}
522
+ <LogViewer
523
+ small
524
+ jobId={selectedJob.id}
525
+ duration={selectedJob['duration_ms']}
526
+ mem={selectedJob['mem_peak']}
527
+ content={selectedJob['logs']}
528
+ isLoading={false}
529
+ tag={selectedJob['tag']}
530
+ />
531
+ {:else if isLoadingAndNotMock}
495
532
  <div class="flex flex-col items-center justify-center">
496
533
  <Loader2 class="animate-spin" />
497
534
  </div>
@@ -9,7 +9,7 @@ import { Pin } from 'lucide-svelte';
9
9
  import { Cell } from '../../table';
10
10
  import JobPickerLight from './JobPickerLight.svelte';
11
11
  let { selected = $bindable(undefined), moduleId = '', getLogs = false, mockValue = undefined, mockEnabled = false, path = '', staticInputs = undefined, noHistory = undefined } = $props();
12
- const { pathStore } = getContext('FlowEditorContext') ?? {};
12
+ const { pathStore, flowStateStore } = getContext('FlowEditorContext') ?? {};
13
13
  const dispatch = createEventDispatcher();
14
14
  let infiniteList = $state(undefined);
15
15
  let loadInputsPageFn = undefined;
@@ -57,6 +57,14 @@ async function getJobResultAndLogs(jobId, noLogs) {
57
57
  $effect(() => {
58
58
  infiniteList && !noHistory && untrack(() => initLoadInputs());
59
59
  });
60
+ let lastSeenJobId = $state(undefined);
61
+ $effect(() => {
62
+ const jobId = flowStateStore?.val[moduleId]?.previewJobId;
63
+ if (jobId && jobId !== lastSeenJobId) {
64
+ lastSeenJobId = jobId;
65
+ untrack(() => infiniteList?.loadData('forceRefresh'));
66
+ }
67
+ });
60
68
  function handleSelect(e) {
61
69
  if (e.detail === 'extraRow') {
62
70
  if (selected === 'extraRow') {
@@ -113,7 +113,7 @@ export function createGitSyncContext(workspace) {
113
113
  include_path: ['f/**'],
114
114
  exclude_path: [],
115
115
  extra_include_path: [],
116
- include_type: ['script', 'flow', 'app', 'folder']
116
+ include_type: ['script', 'flow', 'app', 'folder', 'workspacedependencies']
117
117
  },
118
118
  exclude_types_override: [],
119
119
  legacyImported: false,
@@ -286,7 +286,7 @@ export function createGitSyncContext(workspace) {
286
286
  // Determine default types - use workspace legacy or fallback
287
287
  const defaultTypes = workspaceLegacyIncludeType.length > 0
288
288
  ? [...workspaceLegacyIncludeType]
289
- : ['script', 'flow', 'app', 'folder'];
289
+ : ['script', 'flow', 'app', 'folder', 'workspacedependencies'];
290
290
  let repoSettings;
291
291
  if (isRepoLegacy) {
292
292
  // Legacy repo: inherit from workspace-level settings and apply exclude_types_override
@@ -307,7 +307,13 @@ export function createGitSyncContext(workspace) {
307
307
  include_path: repo.settings?.include_path ?? ['f/**'],
308
308
  exclude_path: repo.settings?.exclude_path ?? [],
309
309
  extra_include_path: repo.settings?.extra_include_path ?? [],
310
- include_type: repo.settings?.include_type ?? ['script', 'flow', 'app']
310
+ include_type: repo.settings?.include_type ?? [
311
+ 'script',
312
+ 'flow',
313
+ 'app',
314
+ 'folder',
315
+ 'workspacedependencies'
316
+ ]
311
317
  };
312
318
  }
313
319
  return {
@@ -512,7 +518,7 @@ export function createGitSyncContext(workspace) {
512
518
  include_path: ['f/**'],
513
519
  exclude_path: [],
514
520
  extra_include_path: [],
515
- include_type: ['script', 'flow', 'app', 'folder']
521
+ include_type: ['script', 'flow', 'app', 'folder', 'workspacedependencies']
516
522
  },
517
523
  exclude_types_override: [],
518
524
  legacyImported: false,
@@ -538,7 +544,7 @@ export function createGitSyncContext(workspace) {
538
544
  include_path: ['f/**'],
539
545
  exclude_path: [],
540
546
  extra_include_path: [],
541
- include_type: ['script', 'flow', 'app', 'folder']
547
+ include_type: ['script', 'flow', 'app', 'folder', 'workspacedependencies']
542
548
  },
543
549
  exclude_types_override: [],
544
550
  legacyImported: false,
@@ -1,13 +1,10 @@
1
1
  <script lang="ts">import { Save, Trash, XCircle, CheckCircle2, RotateCw, RotateCcw, Download, Upload, Plus } from 'lucide-svelte';
2
2
  import { Button, Alert } from '../common';
3
- import TextInput from '../text_input/TextInput.svelte';
4
- import Section from '../Section.svelte';
5
3
  import { getGitSyncContext } from './GitSyncContext.svelte';
6
4
  import ResourcePicker from '../ResourcePicker.svelte';
7
5
  import GitSyncFilterSettings from '../workspaceSettings/GitSyncFilterSettings.svelte';
8
6
  import DetectionFlow from './DetectionFlow.svelte';
9
7
  import { sendUserToast } from '../../toast';
10
- import Toggle from '../Toggle.svelte';
11
8
  import { fade } from 'svelte/transition';
12
9
  import { workspaceStore } from '../../stores';
13
10
  import GitSyncModeDisplay from './GitSyncModeDisplay.svelte';
@@ -387,8 +384,8 @@ function handlePullSettings() {
387
384
 
388
385
  {#if repo.script_path}
389
386
  <Alert type="warning" title="Pinned git sync script version">
390
- This repository uses a pinned sync script: <code>{repo.script_path}</code>.
391
- Switch to auto-managed to always use the latest version bundled with Windmill.
387
+ This repository uses a pinned sync script: <code>{repo.script_path}</code>. Switch to
388
+ auto-managed to always use the latest version bundled with Windmill.
392
389
  <div class="flex mt-2">
393
390
  <Button
394
391
  size="xs"
@@ -460,30 +457,6 @@ function handlePullSettings() {
460
457
  </div>
461
458
  {/if}
462
459
  </div>
463
-
464
- <!-- Advanced settings (collapsible) -->
465
- <Section label="Advanced" small collapsable initiallyCollapsed={!repo.force_branch}>
466
- <Toggle
467
- checked={!!repo.force_branch}
468
- on:change={(e) => {
469
- if (e.detail) {
470
- repo.force_branch = $workspaceStore ?? ''
471
- } else {
472
- repo.force_branch = undefined
473
- }
474
- }}
475
- options={{
476
- right: 'Environment (experimental)',
477
- rightTooltip:
478
- 'Made for monobranch setups. Passes the value as --branch/--env to the wmill CLI, which selects the matching branch/env configuration from wmill.yaml and includes the branch/env in the item paths.'
479
- }}
480
- />
481
- {#if repo.force_branch != null && repo.force_branch !== undefined}
482
- <div class="w-48 mt-2">
483
- <TextInput size="sm" bind:value={repo.force_branch} />
484
- </div>
485
- {/if}
486
- </Section>
487
460
  {/if}
488
461
  {/if}
489
462
  {:else}
@@ -565,17 +565,16 @@ git pull
565
565
 
566
566
  {#if !settingsOnly}# Push from git repository to workspace
567
567
  wmill sync push --workspace {$workspaceStore} --repository {gitRepoResourcePath}
568
- {:else}# Edit wmill.yaml file
568
+ {:else}# Edit wmill.yaml file
569
569
  vim wmill.yaml
570
570
  git add wmill.yaml
571
-
572
- {/if}# Commit changes
571
+ {/if}# Commit changes
573
572
  git commit
574
573
  git push
575
574
  {#if settingsOnly}
576
- # Push settings only from git repository or click the pull settings button above{#if currentGitSyncSettings?.repositories?.[repoIndex!]?.use_individual_branch}
577
- wmill gitsync-settings push --workspace {$workspaceStore} --repository {gitRepoResourcePath} --promotion main{:else}
578
- wmill gitsync-settings push --workspace {$workspaceStore} --repository {gitRepoResourcePath}{/if}{/if}</pre
575
+ # Push settings only from git repository or click the pull settings button above{#if currentGitSyncSettings?.repositories?.[repoIndex!]?.use_individual_branch}
576
+ wmill gitsync-settings push --workspace {$workspaceStore} --repository {gitRepoResourcePath} --promotion main{:else}
577
+ wmill gitsync-settings push --workspace {$workspaceStore} --repository {gitRepoResourcePath}{/if}{/if}</pre
579
578
  >
580
579
  {#if currentGitSyncSettings?.repositories?.[repoIndex!]?.use_individual_branch && settingsOnly}
581
580
  <div class="text-xs text-primary mt-3">
@@ -588,7 +587,7 @@ wmill gitsync-settings push --workspace {$workspaceStore} --repository {gitRepoR
588
587
  >
589
588
  </div>
590
589
  <pre class="text-xs bg-surface p-2 rounded mt-2 overflow-x-auto"
591
- >gitBranches:
590
+ >workspaces:
592
591
  main:
593
592
  promotionOverrides:
594
593
  # Add your promotion-specific settings here
@@ -71,7 +71,7 @@ const diffManager = createFlowDiffManager();
71
71
  let fullWidth = 0;
72
72
  let width = $state(0);
73
73
  let simplifiableFlow = $state(undefined);
74
- let { onInsert = undefined, onDelete = undefined, onMove = undefined, onDuplicate = undefined, onDeleteBranch = undefined, onNewBranch = undefined, onSelect = undefined, onChangeId = undefined, onUpdateMock = undefined, onSelectedIteration = undefined, success = undefined, modules = [], groupedModules: groupedModulesProp = undefined, groupError = undefined, failureModule = undefined, preprocessorModule = undefined, minHeight = 0, maxHeight = undefined, notSelectable = false, flowModuleStates = undefined, testModuleStates = undefined, moduleActions = undefined, selectionManager: selectionManagerProp = undefined, path = undefined, newFlow = false, insertable = false, earlyStop = false, cache = false, scroll = false, moveManager = undefined, download = false, fullSize = false, disableAi = false, triggerNode = false, workspace = $workspaceStore ?? 'NO_WORKSPACE', editMode = false, allowSimplifiedPoll = true, expandedSubflows = $bindable({}), onTestUpTo = undefined, onEditInput = undefined, isOwner = false, onTestFlow = undefined, isRunning = false, onCancelTestFlow = undefined, onOpenPreview = undefined, onHideJobStatus = undefined, individualStepTests = false, flowJob = undefined, showJobStatus = false, suspendStatus = {}, flowHasChanged = false, noteMode = false, notes = undefined, groups = undefined, groupDisplayState: groupDisplayStateProp = undefined, exitNoteMode = undefined, onNotePositionUpdate = undefined, chatInputEnabled = false, sharedViewport = undefined, onViewportChange = undefined, leftHeader = undefined, diffBeforeFlow = undefined, currentInputSchema = undefined, markRemovedAsShadowed = false, multiSelectEnabled = false, onDeleteMultiple = undefined, onDuplicateMultiple = undefined, onMoveMultiple = undefined, movingIds = undefined } = $props();
74
+ let { onInsert = undefined, onDelete = undefined, onMove = undefined, onDuplicate = undefined, onDeleteBranch = undefined, onNewBranch = undefined, onSelect = undefined, onChangeId = undefined, onUpdateMock = undefined, onSelectedIteration = undefined, success = undefined, modules = [], groupedModules: groupedModulesProp = undefined, groupError = undefined, failureModule = undefined, preprocessorModule = undefined, minHeight = 0, maxHeight = undefined, notSelectable = false, flowModuleStates = undefined, testModuleStates = undefined, moduleActions = undefined, selectionManager: selectionManagerProp = undefined, path = undefined, newFlow = false, insertable = false, earlyStop = false, cache = false, scroll = false, moveManager = undefined, download = false, fullSize = false, disableAi = false, triggerNode = false, workspace = $workspaceStore ?? 'NO_WORKSPACE', editMode = false, allowSimplifiedPoll = true, expandedSubflows = $bindable({}), onTestUpTo = undefined, onEditInput = undefined, isOwner = false, onTestFlow = undefined, isRunning = false, onCancelTestFlow = undefined, onOpenPreview = undefined, onHideJobStatus = undefined, individualStepTests = false, flowJob = undefined, showJobStatus = false, suspendStatus = {}, flowHasChanged = false, noteMode = false, notes = undefined, groups = undefined, groupDisplayState: groupDisplayStateProp = undefined, exitNoteMode = undefined, onNotePositionUpdate = undefined, chatInputEnabled = false, sharedViewport = undefined, onViewportChange = undefined, leftHeader = undefined, diffBeforeFlow = undefined, currentInputSchema = undefined, markRemovedAsShadowed = false, multiSelectEnabled = false, onDeleteMultiple = undefined, onDuplicateMultiple = undefined, onMoveMultiple = undefined, movingIds = undefined, outerDivClass = '' } = $props();
75
75
  // Initialize note manager with fine-grained reactivity
76
76
  const noteManager = new NoteManager(() => notes ?? [], (newNodes) => {
77
77
  nodes = newNodes;
@@ -700,7 +700,7 @@ const modifierKey = isMac() ? 'Meta' : 'Control';
700
700
  {/if}
701
701
  <div
702
702
  style={`height: ${height}px; max-height: ${maxHeight}px;`}
703
- class="overflow-clip relative"
703
+ class="overflow-clip relative {outerDivClass}"
704
704
  bind:clientWidth={debouncedWidth}
705
705
  bind:this={flowContainer}
706
706
  >
@@ -126,6 +126,7 @@ interface Props {
126
126
  diffBeforeFlow?: OpenFlow;
127
127
  currentInputSchema?: Record<string, any>;
128
128
  markRemovedAsShadowed?: boolean;
129
+ outerDivClass?: string;
129
130
  }
130
131
  declare const FlowGraphV2: import("svelte").Component<Props, {
131
132
  isNodeVisible: (nodeId: string) => boolean;
@@ -10,6 +10,13 @@ export type ExtendedOpenFlow = {
10
10
  };
11
11
  [key: string]: any;
12
12
  };
13
+ export type PreparedStructureDelete = {
14
+ affectedGroups: FlowGroup[];
15
+ duplicateGroups: FlowGroup[];
16
+ commit: (commitOpts?: {
17
+ removeDuplicates?: boolean;
18
+ }) => void;
19
+ };
13
20
  /**
14
21
  * Reactive read-only view of the flow structure tree.
15
22
  * The tree is always derived from flowStore (single source of truth).
@@ -41,6 +48,9 @@ export declare class GroupedModulesProxy {
41
48
  removeDuplicates?: boolean;
42
49
  }) => void;
43
50
  };
51
+ prepareDelete(ids: string[], opts?: {
52
+ displayState?: import('./groupEditor.svelte').GroupDisplayState;
53
+ }): PreparedStructureDelete;
44
54
  /**
45
55
  * Convenience: prepare + auto-commit. Only use for mutations that cannot
46
56
  * empty groups (e.g. inserts). Throws if groups are unexpectedly emptied.
@@ -3,7 +3,7 @@ import { groupKey } from './groupEditor.svelte';
3
3
  import { getAllModules } from '../flows/flowExplorer';
4
4
  import { computeGroupModuleIds } from './groupDetectionUtils';
5
5
  import { stateSnapshot } from '../../svelte5Utils.svelte';
6
- import { buildStructureTree, deriveGroupsFromStructure, applyStructureToModules, removeEmptyGroups, findDuplicateGroups, removeDuplicateGroups, flattenStructureIds } from './flowStructure';
6
+ import { buildStructureTree, deriveGroupsFromStructure, applyStructureToModules, removeEmptyGroups, findDuplicateGroups, removeDuplicateGroups, flattenStructureIds, findInStructure } from './flowStructure';
7
7
  /**
8
8
  * Reactive read-only view of the flow structure tree.
9
9
  * The tree is always derived from flowStore (single source of truth).
@@ -70,6 +70,22 @@ export class GroupedModulesProxy {
70
70
  };
71
71
  return { emptiedGroups, duplicateGroups, commit };
72
72
  }
73
+ prepareDelete(ids, opts) {
74
+ const { emptiedGroups, duplicateGroups, commit } = this.prepareMutation((tree) => {
75
+ for (const id of ids) {
76
+ const found = findInStructure(tree, id);
77
+ if (!found) {
78
+ continue;
79
+ }
80
+ found.parentChildren.splice(found.index, 1);
81
+ }
82
+ }, opts);
83
+ return {
84
+ affectedGroups: [...emptiedGroups, ...duplicateGroups],
85
+ duplicateGroups,
86
+ commit
87
+ };
88
+ }
73
89
  /**
74
90
  * Convenience: prepare + auto-commit. Only use for mutations that cannot
75
91
  * empty groups (e.g. inserts). Throws if groups are unexpectedly emptied.
@@ -13,6 +13,7 @@ import TriggerLabel from '../../../triggers/TriggerLabel.svelte';
13
13
  import CountBadge from '../../../common/badge/CountBadge.svelte';
14
14
  import NextcloudIcon from '../../../icons/NextcloudIcon.svelte';
15
15
  import GoogleIcon from '../../../icons/GoogleIcon.svelte';
16
+ import GithubIcon from '../../../icons/GithubIcon.svelte';
16
17
  const { triggersState, triggersCount } = getContext('TriggerContext');
17
18
  let { selected, showOnlyWithCount,
18
19
  // @ts-ignore - This is an output-only prop used with bind:
@@ -36,7 +37,8 @@ let triggerTypeConfig = $derived(() => {
36
37
  poll: { icon: SchedulePollIcon },
37
38
  cli: { icon: Terminal },
38
39
  nextcloud: { icon: NextcloudIcon, countKey: 'nextcloud_count' },
39
- google: { icon: GoogleIcon, countKey: 'google_count' }
40
+ google: { icon: GoogleIcon, countKey: 'google_count' },
41
+ github: { icon: GithubIcon, countKey: 'github_count' }
40
42
  };
41
43
  // Add native trigger services that are available
42
44
  for (const { service, icon } of availableNativeServices) {
@@ -60,7 +62,8 @@ let allTypes = $derived([
60
62
  'poll',
61
63
  'cli',
62
64
  'nextcloud',
63
- 'google'
65
+ 'google',
66
+ 'github'
64
67
  ]);
65
68
  function camelCaseToWords(s) {
66
69
  const result = s.replace(/([A-Z])/g, ' $1');
@@ -0,0 +1,125 @@
1
+ <script lang="ts">import { workspaceStore } from '../../stores';
2
+ import { Button, Drawer, DrawerContent, Tab, TabContent, Tabs } from '../common';
3
+ import CreateToken from '../settings/CreateToken.svelte';
4
+ import CopyableCodeBlock from '../details/CopyableCodeBlock.svelte';
5
+ import { Bot, ExternalLink, Terminal } from 'lucide-svelte';
6
+ import { shell } from 'svelte-highlight/languages';
7
+ let drawer = $state();
8
+ let selectedTab = $state('cli');
9
+ let openVersion = $state(0);
10
+ const origin = $derived(typeof window === 'undefined' ? '' : window.location.origin);
11
+ const workspaceId = $derived($workspaceStore ?? '<workspace>');
12
+ const cliCommands = $derived(`npm install -g windmill-cli
13
+ wmill workspace add ${workspaceId} ${workspaceId} ${origin}
14
+ wmill init
15
+ wmill sync pull`);
16
+ function noop() { }
17
+ export function openDrawer(tab = 'cli') {
18
+ selectedTab = tab;
19
+ openVersion += 1;
20
+ drawer?.openDrawer();
21
+ }
22
+ function closeDrawer() {
23
+ drawer?.closeDrawer();
24
+ }
25
+ </script>
26
+
27
+ <Drawer bind:this={drawer} size="720px">
28
+ <DrawerContent title="Connect this workspace" on:close={closeDrawer}>
29
+ <div class="flex flex-col gap-5 pb-4">
30
+ <div class="flex flex-col gap-2">
31
+ <div class="w-full">
32
+ <Tabs values={['cli', 'mcp']} bind:selected={selectedTab} wrapperClass="scrollbar-hidden">
33
+ <Tab value="cli" label="CLI" icon={Terminal} />
34
+ <Tab value="mcp" label="MCP" icon={Bot} />
35
+ {#snippet content()}
36
+ <div class="pt-4">
37
+ <TabContent value="cli">
38
+ <div class="flex flex-col gap-4">
39
+ <div class="flex items-start justify-between gap-3 flex-wrap">
40
+ <div class="flex flex-col gap-1">
41
+ <h3 class="text-sm font-semibold text-emphasis">Local setup</h3>
42
+ <p class="text-xs text-secondary max-w-xl">
43
+ Run this in your local repo to bind the current workspace, create
44
+ <code class="rounded bg-surface-secondary px-1 py-0.5 font-mono text-2xs text-emphasis"
45
+ >wmill.yaml</code
46
+ >, and pull the latest files.
47
+ </p>
48
+ </div>
49
+
50
+ <Button
51
+ variant="subtle"
52
+ unifiedSize="sm"
53
+ href="https://www.windmill.dev/docs/advanced/cli"
54
+ target="_blank"
55
+ startIcon={{ icon: ExternalLink }}
56
+ >
57
+ CLI docs
58
+ </Button>
59
+ </div>
60
+
61
+ <CopyableCodeBlock
62
+ code={cliCommands}
63
+ language={shell}
64
+ wrap
65
+ copyOnClick={false}
66
+ />
67
+
68
+ <p class="text-2xs text-secondary">
69
+ <code class="rounded bg-surface-secondary px-1 py-0.5 font-mono text-2xs text-emphasis"
70
+ >wmill workspace add</code
71
+ >
72
+ will handle authentication,
73
+ <code class="rounded bg-surface-secondary px-1 py-0.5 font-mono text-2xs text-emphasis"
74
+ >wmill init</code
75
+ >
76
+ bootstraps the local config, and
77
+ <code class="rounded bg-surface-secondary px-1 py-0.5 font-mono text-2xs text-emphasis"
78
+ >wmill sync pull</code
79
+ >
80
+ fetches the workspace content.
81
+ </p>
82
+ </div>
83
+ </TabContent>
84
+
85
+ <TabContent value="mcp">
86
+ <div class="flex flex-col gap-4">
87
+ <div class="flex items-start justify-between gap-3 flex-wrap">
88
+ <div class="flex flex-col gap-1">
89
+ <h3 class="text-sm font-semibold text-emphasis">MCP URL</h3>
90
+ <p class="text-xs text-secondary max-w-xl">
91
+ Generate an MCP server URL for the current workspace and choose which
92
+ scripts, flows, and endpoints the client can access.
93
+ </p>
94
+ </div>
95
+
96
+ <Button
97
+ variant="subtle"
98
+ unifiedSize="sm"
99
+ href="https://www.windmill.dev/docs/core_concepts/mcp"
100
+ target="_blank"
101
+ startIcon={{ icon: ExternalLink }}
102
+ >
103
+ MCP docs
104
+ </Button>
105
+ </div>
106
+
107
+ {#key openVersion}
108
+ <CreateToken
109
+ mcpOnly
110
+ lockWorkspace
111
+ title="Generate MCP URL"
112
+ defaultNewTokenWorkspace={$workspaceStore}
113
+ onTokenCreated={noop}
114
+ />
115
+ {/key}
116
+ </div>
117
+ </TabContent>
118
+ </div>
119
+ {/snippet}
120
+ </Tabs>
121
+ </div>
122
+ </div>
123
+ </div>
124
+ </DrawerContent>
125
+ </Drawer>
@@ -0,0 +1,5 @@
1
+ declare const HomeConnectDrawer: import("svelte").Component<Record<string, never>, {
2
+ openDrawer: (tab?: "mcp" | "cli") => void;
3
+ }, "">;
4
+ type HomeConnectDrawer = ReturnType<typeof HomeConnectDrawer>;
5
+ export default HomeConnectDrawer;
@@ -1,15 +1,15 @@
1
1
  <script lang="ts">"use strict";
2
- let { height = '24px', width = '24px' } = $props();
2
+ let { size = undefined, height: heightProp = 24, width: widthProp = 24, color = undefined, class: clazz = '' } = $props();
3
+ const { width, height } = $derived(size ? { width: size, height: size } : { width: widthProp, height: heightProp });
3
4
  </script>
4
5
 
5
6
  <svg
6
7
  xmlns="http://www.w3.org/2000/svg"
7
- x="0px"
8
- y="0px"
9
8
  {width}
10
9
  {height}
11
10
  viewBox="0 0 30 30"
12
- style="fill:currentcolor;"
11
+ fill={color ?? 'currentColor'}
12
+ class={clazz}
13
13
  >
14
14
  <path
15
15
  d="M15,3C8.373,3,3,8.373,3,15c0,5.623,3.872,10.328,9.092,11.63C12.036,26.468,12,26.28,12,26.047v-2.051 c-0.487,0-1.303,0-1.508,0c-0.821,0-1.551-0.353-1.905-1.009c-0.393-0.729-0.461-1.844-1.435-2.526 c-0.289-0.227-0.069-0.486,0.264-0.451c0.615,0.174,1.125,0.596,1.605,1.222c0.478,0.627,0.703,0.769,1.596,0.769 c0.433,0,1.081-0.025,1.691-0.121c0.328-0.833,0.895-1.6,1.588-1.962c-3.996-0.411-5.903-2.399-5.903-5.098 c0-1.162,0.495-2.286,1.336-3.233C9.053,10.647,8.706,8.73,9.435,8c1.798,0,2.885,1.166,3.146,1.481C13.477,9.174,14.461,9,15.495,9 c1.036,0,2.024,0.174,2.922,0.483C18.675,9.17,19.763,8,21.565,8c0.732,0.731,0.381,2.656,0.102,3.594 c0.836,0.945,1.328,2.066,1.328,3.226c0,2.697-1.904,4.684-5.894,5.097C18.199,20.49,19,22.1,19,23.313v2.734 c0,0.104-0.023,0.179-0.035,0.268C23.641,24.676,27,20.236,27,15C27,8.373,21.627,3,15,3z"
@@ -1,6 +1,9 @@
1
1
  interface Props {
2
- height?: string;
3
- width?: string;
2
+ size?: number;
3
+ height?: number;
4
+ width?: number;
5
+ color?: string | undefined;
6
+ class?: string;
4
7
  }
5
8
  declare const GithubIcon: import("svelte").Component<Props, {}, "">;
6
9
  type GithubIcon = ReturnType<typeof GithubIcon>;
@@ -0,0 +1,85 @@
1
+ <script lang="ts">import DataTable from '../table/DataTable.svelte';
2
+ import Head from '../table/Head.svelte';
3
+ import Cell from '../table/Cell.svelte';
4
+ import SettingsPageHeader from '../settings/SettingsPageHeader.svelte';
5
+ import Toggle from '../Toggle.svelte';
6
+ import { displayDate } from '../../utils';
7
+ import { Check, X } from 'lucide-svelte';
8
+ let { tokens, hasMore, loading, activeOnly, onLoadMore, onActiveOnlyChange } = $props();
9
+ const loadMoreSize = 50;
10
+ </script>
11
+
12
+ <SettingsPageHeader
13
+ title="External JWTs"
14
+ description="External JWT tokens that have authenticated against this instance, deduplicated by their claims."
15
+ />
16
+
17
+ <div class="flex flex-row gap-2 items-center mb-2">
18
+ <Toggle
19
+ checked={activeOnly}
20
+ on:change={(e) => onActiveOnlyChange(e.detail)}
21
+ options={{
22
+ left: 'Recently active only',
23
+ leftTooltip: 'Show only tokens used in the last 30 days'
24
+ }}
25
+ />
26
+ </div>
27
+
28
+ <DataTable
29
+ shouldLoadMore={hasMore}
30
+ loadMore={loadMoreSize}
31
+ {loading}
32
+ on:loadMore={() => onLoadMore()}
33
+ >
34
+ <Head>
35
+ <tr>
36
+ <Cell head first>Email</Cell>
37
+ <Cell head>Username</Cell>
38
+ <Cell head>Admin</Cell>
39
+ <Cell head>Operator</Cell>
40
+ <Cell head>Workspace</Cell>
41
+ <Cell head>Label</Cell>
42
+ <Cell head>Scopes</Cell>
43
+ <Cell head last>Last Used</Cell>
44
+ </tr>
45
+ </Head>
46
+ <tbody>
47
+ {#each tokens as token, i (token.jwt_hash)}
48
+ <tr class={i % 2 === 0 ? 'bg-surface-tertiary' : 'bg-surface'}>
49
+ {#if token.email === ''}
50
+ <Cell first colspan={7}>
51
+ <span class="text-tertiary italic">Legacy entry — details unavailable</span>
52
+ </Cell>
53
+ <Cell last><span class="whitespace-nowrap">{displayDate(token.last_used_at)}</span></Cell>
54
+ {:else}
55
+ <Cell first><span class="font-mono text-xs">{token.email}</span></Cell>
56
+ <Cell>{token.username}</Cell>
57
+ <Cell>
58
+ {#if token.is_admin}
59
+ <Check size={14} class="text-green-600" />
60
+ {:else}
61
+ <X size={14} class="text-tertiary" />
62
+ {/if}
63
+ </Cell>
64
+ <Cell>
65
+ {#if token.is_operator}
66
+ <Check size={14} class="text-green-600" />
67
+ {:else}
68
+ <X size={14} class="text-tertiary" />
69
+ {/if}
70
+ </Cell>
71
+ <Cell>{token.workspace_id ?? '-'}</Cell>
72
+ <Cell>{token.label ?? '-'}</Cell>
73
+ <Cell>
74
+ {#if token.scopes && token.scopes.length > 0}
75
+ {token.scopes.join(', ')}
76
+ {:else}
77
+ -
78
+ {/if}
79
+ </Cell>
80
+ <Cell last><span class="whitespace-nowrap">{displayDate(token.last_used_at)}</span></Cell>
81
+ {/if}
82
+ </tr>
83
+ {/each}
84
+ </tbody>
85
+ </DataTable>
@@ -0,0 +1,12 @@
1
+ import type { ExternalJwtToken } from '../../gen';
2
+ interface Props {
3
+ tokens: ExternalJwtToken[];
4
+ hasMore: boolean;
5
+ loading: boolean;
6
+ activeOnly: boolean;
7
+ onLoadMore: () => void;
8
+ onActiveOnlyChange: (v: boolean) => void;
9
+ }
10
+ declare const ExternalJwtTokens: import("svelte").Component<Props, {}, "">;
11
+ type ExternalJwtTokens = ReturnType<typeof ExternalJwtTokens>;
12
+ export default ExternalJwtTokens;