windmill-components 1.677.0 → 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 (358) 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/flowStore.svelte.d.ts +1 -1
  118. package/package/components/flows/flowTree.d.ts +91 -0
  119. package/package/components/flows/flowTree.js +326 -0
  120. package/package/components/flows/flowTree.test.d.ts +1 -0
  121. package/package/components/flows/flowTree.test.js +236 -0
  122. package/package/components/flows/map/FlowJobsMenu.svelte +36 -30
  123. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
  124. package/package/components/flows/map/FlowModuleSchemaMap.svelte +70 -227
  125. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +0 -2
  126. package/package/components/flows/pickers/PickHubScriptQuick.svelte +2 -2
  127. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
  128. package/package/components/flows/previousResults.js +13 -41
  129. package/package/components/flows/previousResults.test.d.ts +1 -0
  130. package/package/components/flows/previousResults.test.js +65 -0
  131. package/package/components/flows/propPicker/OutputPicker.svelte +2 -1
  132. package/package/components/flows/propPicker/OutputPickerInner.svelte +41 -4
  133. package/package/components/flows/propPicker/StepHistory.svelte +9 -1
  134. package/package/components/git_sync/GitSyncContext.svelte.js +11 -5
  135. package/package/components/git_sync/GitSyncRepositoryCard.svelte +2 -29
  136. package/package/components/git_sync/PullWorkspaceModal.svelte +6 -7
  137. package/package/components/graph/FlowGraphV2.svelte +2 -2
  138. package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
  139. package/package/components/graph/groupedModulesProxy.svelte.d.ts +10 -0
  140. package/package/components/graph/groupedModulesProxy.svelte.js +17 -1
  141. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +5 -2
  142. package/package/components/home/HomeConnectDrawer.svelte +125 -0
  143. package/package/components/home/HomeConnectDrawer.svelte.d.ts +5 -0
  144. package/package/components/icons/GithubIcon.svelte +4 -4
  145. package/package/components/icons/GithubIcon.svelte.d.ts +5 -2
  146. package/package/components/instanceSettings/ExternalJwtTokens.svelte +85 -0
  147. package/package/components/instanceSettings/ExternalJwtTokens.svelte.d.ts +12 -0
  148. package/package/components/instanceSettings/GhesAppSettings.svelte +17 -0
  149. package/package/components/instanceSettings/IndexerMemorySettings.svelte +56 -29
  150. package/package/components/instanceSettings/SecretBackendConfig.svelte +9 -2
  151. package/package/components/instanceSettings.d.ts +1 -0
  152. package/package/components/instanceSettings.js +42 -8
  153. package/package/components/offboarding-utils.d.ts +11 -0
  154. package/package/components/offboarding-utils.js +100 -0
  155. package/package/components/raw_apps/RawAppDataTableDrawer.svelte +1 -1
  156. package/package/components/raw_apps/RawAppEditor.svelte +27 -0
  157. package/package/components/raw_apps/RawAppEditorHeader.svelte +6 -1
  158. package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +1 -0
  159. package/package/components/raw_apps/RawAppYamlEditor.svelte +81 -0
  160. package/package/components/raw_apps/RawAppYamlEditor.svelte.d.ts +20 -0
  161. package/package/components/raw_apps/datatableUtils.svelte.js +1 -1
  162. package/package/components/runs/runsFilter.d.ts +1 -1
  163. package/package/components/script_builder.d.ts +1 -1
  164. package/package/components/select/Select.svelte +2 -1
  165. package/package/components/select/Select.svelte.d.ts +1 -0
  166. package/package/components/settings/CreateToken.svelte +113 -64
  167. package/package/components/settings/CreateToken.svelte.d.ts +3 -0
  168. package/package/components/settings/WorkspaceUserSettings.svelte +34 -28
  169. package/package/components/sidebar/SidebarContent.svelte +58 -2
  170. package/package/components/sidebar/WorkspaceMenu.svelte +8 -4
  171. package/package/components/triggers/AddTriggersButton.svelte +11 -0
  172. package/package/components/triggers/PermissionedAsLine.svelte +37 -3
  173. package/package/components/triggers/PermissionedAsLine.svelte.d.ts +6 -0
  174. package/package/components/triggers/TriggersEditor.svelte +5 -1
  175. package/package/components/triggers/TriggersWrapper.svelte +10 -0
  176. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +13 -11
  177. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +13 -11
  178. package/package/components/triggers/http/RouteEditorConfigSection.svelte +15 -7
  179. package/package/components/triggers/http/RouteEditorInner.svelte +14 -14
  180. package/package/components/triggers/http/RoutesGenerator.svelte +6 -1
  181. package/package/components/triggers/http/RoutesPanel.svelte +1 -1
  182. package/package/components/triggers/http/utils.d.ts +1 -1
  183. package/package/components/triggers/http/utils.js +2 -2
  184. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +13 -11
  185. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +1 -1
  186. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +13 -11
  187. package/package/components/triggers/native/NativeTriggerEditor.svelte +3 -0
  188. package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte +118 -0
  189. package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte.d.ts +17 -0
  190. package/package/components/triggers/native/utils.js +14 -0
  191. package/package/components/triggers/nats/NatsTriggerEditor.svelte.d.ts +4 -3
  192. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +13 -11
  193. package/package/components/triggers/postgres/PostgresTriggerEditor.svelte.d.ts +4 -3
  194. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +13 -11
  195. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +13 -11
  196. package/package/components/triggers/sqs/SqsTriggerEditor.svelte.d.ts +4 -3
  197. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +13 -11
  198. package/package/components/triggers/triggers.svelte.js +1 -0
  199. package/package/components/triggers/utils.js +27 -6
  200. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +13 -11
  201. package/package/components/triggers.d.ts +1 -1
  202. package/package/components/useFolderDefaultPermissionedAs.svelte.d.ts +13 -0
  203. package/package/components/useFolderDefaultPermissionedAs.svelte.js +63 -0
  204. package/package/components/workspaceSettings/CreateWorkspace.svelte +16 -677
  205. package/package/components/workspaceSettings/CreateWorkspaceInner.svelte +604 -0
  206. package/package/components/workspaceSettings/CreateWorkspaceInner.svelte.d.ts +7 -0
  207. package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +27 -25
  208. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +46 -8
  209. package/package/components/workspaceSettings/DataTableSettings.svelte +27 -22
  210. package/package/components/workspaceSettings/DucklakeSettings.svelte +1 -1
  211. package/package/components/workspaceSettings/ForkDatatableSection.svelte +228 -0
  212. package/package/components/workspaceSettings/ForkDatatableSection.svelte.d.ts +28 -0
  213. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +8 -2
  214. package/package/components/workspaceSettings/RulesetEditor.svelte +27 -2
  215. package/package/components/workspaceSettings/VolumeStorageSettings.svelte +1 -1
  216. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +17 -1
  217. package/package/consts.d.ts +3 -0
  218. package/package/consts.js +10 -0
  219. package/package/gen/core/OpenAPI.js +1 -1
  220. package/package/gen/schemas.gen.d.ts +1172 -164
  221. package/package/gen/schemas.gen.js +1168 -157
  222. package/package/gen/services.gen.d.ts +511 -6
  223. package/package/gen/services.gen.js +1023 -23
  224. package/package/gen/types.gen.d.ts +2278 -151
  225. package/package/githubApp.js +5 -1
  226. package/package/hubPaths.json +1 -4
  227. package/package/infer.js +13 -1
  228. package/package/infer.svelte.js +10 -1
  229. package/package/monaco_workers/sqlTypePlugin.worker.d.ts +10 -0
  230. package/package/monaco_workers/sqlTypePlugin.worker.js +39 -0
  231. package/package/script_helpers.d.ts +8 -2
  232. package/package/script_helpers.js +14 -0
  233. package/package/stores.d.ts +4 -0
  234. package/package/stores.js +1 -0
  235. package/package/system_prompts/prompts.d.ts +4 -3
  236. package/package/system_prompts/prompts.js +270 -20
  237. package/package/templates/ci_test_bun.ts.template +19 -0
  238. package/package/templates/ci_test_python.py.template +18 -0
  239. package/package/utils_deployable.d.ts +11 -7
  240. package/package/utils_workspace_deploy.d.ts +8 -8
  241. package/package/utils_workspace_deploy.js +86 -420
  242. package/package.json +4 -4
  243. package/package/components/copilot/chat/__tests__/app/appChat.eval.test.js +0 -153
  244. package/package/components/copilot/chat/__tests__/app/appEvalComparison.d.ts +0 -21
  245. package/package/components/copilot/chat/__tests__/app/appEvalComparison.js +0 -136
  246. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.d.ts +0 -15
  247. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +0 -107
  248. package/package/components/copilot/chat/__tests__/app/appEvalRunner.d.ts +0 -50
  249. package/package/components/copilot/chat/__tests__/app/appEvalRunner.js +0 -93
  250. package/package/components/copilot/chat/__tests__/app/appFixtureLoader.d.ts +0 -29
  251. package/package/components/copilot/chat/__tests__/app/appFixtureLoader.js +0 -134
  252. package/package/components/copilot/chat/__tests__/app/appResultsWriter.d.ts +0 -30
  253. package/package/components/copilot/chat/__tests__/app/appResultsWriter.js +0 -197
  254. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.d.ts +0 -10
  255. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.js +0 -9
  256. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/meta.json +0 -4
  257. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.d.ts +0 -6
  258. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.js +0 -5
  259. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/meta.json +0 -4
  260. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.d.ts +0 -12
  261. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.js +0 -14
  262. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/meta.json +0 -4
  263. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.d.ts +0 -8
  264. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.js +0 -25
  265. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/meta.json +0 -4
  266. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.d.ts +0 -7
  267. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.js +0 -5
  268. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/meta.json +0 -4
  269. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.d.ts +0 -8
  270. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.js +0 -5
  271. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/meta.json +0 -4
  272. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.d.ts +0 -10
  273. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.tsx +0 -26
  274. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.d.ts +0 -10
  275. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.tsx +0 -79
  276. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.d.ts +0 -10
  277. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.tsx +0 -46
  278. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.d.ts +0 -10
  279. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.tsx +0 -56
  280. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.d.ts +0 -6
  281. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.tsx +0 -59
  282. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.d.ts +0 -16
  283. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.tsx +0 -119
  284. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.d.ts +0 -15
  285. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.js +0 -14
  286. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/meta.json +0 -4
  287. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.d.ts +0 -14
  288. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.js +0 -5
  289. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/meta.json +0 -4
  290. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.d.ts +0 -6
  291. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.js +0 -41
  292. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/meta.json +0 -4
  293. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.d.ts +0 -15
  294. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.js +0 -3
  295. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/meta.json +0 -4
  296. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.d.ts +0 -9
  297. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.tsx +0 -51
  298. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.d.ts +0 -8
  299. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.tsx +0 -27
  300. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.d.ts +0 -8
  301. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.tsx +0 -18
  302. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.d.ts +0 -12
  303. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.tsx +0 -81
  304. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.d.ts +0 -3
  305. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.js +0 -3
  306. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/meta.json +0 -4
  307. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.d.ts +0 -3
  308. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.js +0 -3
  309. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/meta.json +0 -4
  310. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.d.ts +0 -2
  311. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.tsx +0 -38
  312. package/package/components/copilot/chat/__tests__/app/variants/baseline.d.ts +0 -6
  313. package/package/components/copilot/chat/__tests__/app/variants/baseline.js +0 -10
  314. package/package/components/copilot/chat/__tests__/app/variants/index.d.ts +0 -3
  315. package/package/components/copilot/chat/__tests__/app/variants/index.js +0 -3
  316. package/package/components/copilot/chat/__tests__/app/variants/streamlined.d.ts +0 -6
  317. package/package/components/copilot/chat/__tests__/app/variants/streamlined.js +0 -137
  318. package/package/components/copilot/chat/__tests__/flow/expected/test1.json +0 -134
  319. package/package/components/copilot/chat/__tests__/flow/expected/test2.json +0 -183
  320. package/package/components/copilot/chat/__tests__/flow/expected/test3.json +0 -204
  321. package/package/components/copilot/chat/__tests__/flow/expected/test4.json +0 -175
  322. package/package/components/copilot/chat/__tests__/flow/expected/test5_modify_simple.json +0 -68
  323. package/package/components/copilot/chat/__tests__/flow/expected/test6_modify_medium.json +0 -142
  324. package/package/components/copilot/chat/__tests__/flow/expected/test7_modify_complex.json +0 -136
  325. package/package/components/copilot/chat/__tests__/flow/flowChat.eval.test.js +0 -294
  326. package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.d.ts +0 -17
  327. package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.js +0 -49
  328. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.d.ts +0 -12
  329. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +0 -79
  330. package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.d.ts +0 -50
  331. package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.js +0 -102
  332. package/package/components/copilot/chat/__tests__/flow/initial/test5_initial.json +0 -53
  333. package/package/components/copilot/chat/__tests__/flow/initial/test6_initial.json +0 -68
  334. package/package/components/copilot/chat/__tests__/flow/initial/test7_initial.json +0 -120
  335. package/package/components/copilot/chat/__tests__/flow/variants/baseline.d.ts +0 -6
  336. package/package/components/copilot/chat/__tests__/flow/variants/baseline.js +0 -10
  337. package/package/components/copilot/chat/__tests__/flow/variants/index.d.ts +0 -3
  338. package/package/components/copilot/chat/__tests__/flow/variants/index.js +0 -3
  339. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.d.ts +0 -15
  340. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.js +0 -388
  341. package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.d.ts +0 -45
  342. package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.js +0 -121
  343. package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.d.ts +0 -28
  344. package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.js +0 -96
  345. package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.d.ts +0 -32
  346. package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.js +0 -130
  347. package/package/components/copilot/chat/__tests__/shared/baseVariants.d.ts +0 -45
  348. package/package/components/copilot/chat/__tests__/shared/baseVariants.js +0 -57
  349. package/package/components/copilot/chat/__tests__/shared/index.d.ts +0 -10
  350. package/package/components/copilot/chat/__tests__/shared/index.js +0 -5
  351. package/package/components/copilot/chat/__tests__/shared/types.d.ts +0 -105
  352. package/package/components/copilot/chat/__tests__/shared/types.js +0 -9
  353. package/package/components/copilot/chat/flow/utils.d.ts +0 -14
  354. package/package/components/copilot/chat/flow/utils.js +0 -108
  355. package/package/components/flows/agentToolUtils.test.js +0 -55
  356. /package/package/components/copilot/chat/{__tests__/app/appChat.eval.test.d.ts → app/core.test.d.ts} +0 -0
  357. /package/package/components/copilot/chat/{__tests__/flow/flowChat.eval.test.d.ts → flow/helperUtils.test.d.ts} +0 -0
  358. /package/package/components/{flows/agentToolUtils.test.d.ts → copilot/chat/flow/utils.test.d.ts} +0 -0
@@ -124,6 +124,9 @@ export async function openNew(nis_flow, fixedScriptPath_, defaultValues) {
124
124
  retry = defaultValues?.retry ?? undefined;
125
125
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
126
126
  mode = defaultValues?.mode ?? 'enabled';
127
+ permissionedAs = undefined;
128
+ selectedPermissionedAs = undefined;
129
+ preservePermissionedAs = false;
127
130
  originalConfig = undefined;
128
131
  }
129
132
  finally {
@@ -147,8 +150,8 @@ function loadTriggerConfig(cfg) {
147
150
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
148
151
  mode = cfg?.mode ?? 'enabled';
149
152
  permissionedAs = cfg?.permissioned_as;
150
- selectedPermissionedAs = undefined;
151
- preservePermissionedAs = false;
153
+ selectedPermissionedAs = cfg?.permissioned_as;
154
+ preservePermissionedAs = !!cfg?.permissioned_as;
152
155
  }
153
156
  async function loadTrigger(defaultConfig) {
154
157
  if (defaultConfig) {
@@ -259,15 +262,14 @@ $effect(() => {
259
262
  <Loader2 class="animate-spin" />
260
263
  {/if}
261
264
  {:else}
262
- {#if edit}
263
- <PermissionedAsLine
264
- {permissionedAs}
265
- onPermissionedAsChange={(pa, preserve) => {
266
- selectedPermissionedAs = pa
267
- preservePermissionedAs = preserve
268
- }}
269
- />
270
- {/if}
265
+ <PermissionedAsLine
266
+ {permissionedAs}
267
+ {path}
268
+ onPermissionedAsChange={(pa, preserve) => {
269
+ selectedPermissionedAs = pa
270
+ preservePermissionedAs = preserve
271
+ }}
272
+ />
271
273
  <div class="flex flex-col gap-12">
272
274
  {#if mode === 'suspended'}
273
275
  <TriggerSuspendedJobsAlert {suspendedJobsModal} />
@@ -112,6 +112,9 @@ export async function openNew(nis_flow, fixedScriptPath_, defaultValues) {
112
112
  auto_acknowledge_msg = defaultValues?.auto_acknowledge_msg ?? true;
113
113
  ack_deadline = defaultValues?.ack_deadline;
114
114
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
115
+ permissionedAs = undefined;
116
+ selectedPermissionedAs = undefined;
117
+ preservePermissionedAs = false;
115
118
  originalConfig = undefined;
116
119
  }
117
120
  finally {
@@ -155,8 +158,8 @@ async function loadTriggerConfig(cfg) {
155
158
  ack_deadline = cfg?.ack_deadline;
156
159
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
157
160
  permissionedAs = cfg?.permissioned_as;
158
- selectedPermissionedAs = undefined;
159
- preservePermissionedAs = false;
161
+ selectedPermissionedAs = cfg?.permissioned_as;
162
+ preservePermissionedAs = !!cfg?.permissioned_as;
160
163
  }
161
164
  async function updateTrigger() {
162
165
  deploymentLoading = true;
@@ -313,15 +316,14 @@ $effect(() => {
313
316
  <p>Loading...</p>
314
317
  </div>
315
318
  {:else}
316
- {#if edit}
317
- <PermissionedAsLine
318
- {permissionedAs}
319
- onPermissionedAsChange={(pa, preserve) => {
320
- selectedPermissionedAs = pa
321
- preservePermissionedAs = preserve
322
- }}
323
- />
324
- {/if}
319
+ <PermissionedAsLine
320
+ {permissionedAs}
321
+ {path}
322
+ onPermissionedAsChange={(pa, preserve) => {
323
+ selectedPermissionedAs = pa
324
+ preservePermissionedAs = preserve
325
+ }}
326
+ />
325
327
  <div class="flex flex-col gap-5">
326
328
  {#if mode === 'suspended'}
327
329
  <TriggerSuspendedJobsAlert {suspendedJobsModal} />
@@ -63,8 +63,9 @@ $effect.pre(() => {
63
63
  route_path === undefined && (route_path = '');
64
64
  });
65
65
  let userIsAdmin = $derived($userStore?.is_admin || $userStore?.is_super_admin);
66
- let userCanEditConfig = $derived(userIsAdmin || isDraftOnly); // User can edit config if they are admin or if the trigger is a draft which will not be saved
67
66
  let globalHttpWorkspacedRoute = $state(false);
67
+ let effectiveWorkspaced = $derived(workspaced_route || globalHttpWorkspacedRoute);
68
+ let userCanEditConfig = $derived(userIsAdmin || isDraftOnly || effectiveWorkspaced);
68
69
  async function loadGlobalHttpWorkspacedRouteSetting() {
69
70
  try {
70
71
  const setting = await SettingService.getGlobal({ key: 'http_route_workspaced_route' });
@@ -76,7 +77,11 @@ async function loadGlobalHttpWorkspacedRouteSetting() {
76
77
  }
77
78
  loadGlobalHttpWorkspacedRouteSetting();
78
79
  $effect.pre(() => {
79
- if (globalHttpWorkspacedRoute && !workspaced_route) {
80
+ // Force workspaced route for non-admins on new triggers only.
81
+ // Existing non-workspaced triggers created by admins can still be edited by non-admins
82
+ // (with restricted fields), so we don't override their workspaced_route value.
83
+ const isNewTrigger = !initialTriggerPath;
84
+ if ((globalHttpWorkspacedRoute || (!userIsAdmin && isNewTrigger)) && !workspaced_route) {
80
85
  workspaced_route = true;
81
86
  dirtyRoutePath = true;
82
87
  }
@@ -90,9 +95,10 @@ $effect.pre(() => {
90
95
  <TestingBadge />
91
96
  {/if}
92
97
  {/snippet}
93
- {#if !userCanEditConfig && isDraftOnly}
94
- <Alert type="info" title="Admin only" collapsible size="xs">
95
- Route endpoints can only be edited by workspace admins
98
+ {#if !userCanEditConfig}
99
+ <Alert type="info" title="Route config restricted" collapsible size="xs">
100
+ Route path, HTTP method, and workspace prefix can only be changed by workspace admins on
101
+ non-workspaced routes
96
102
  </Alert>
97
103
  <div class="my-2"></div>
98
104
  {/if}
@@ -147,7 +153,7 @@ $effect.pre(() => {
147
153
  <Toggle
148
154
  size="sm"
149
155
  checked={workspaced_route}
150
- disabled={!can_write || !userCanEditConfig || globalHttpWorkspacedRoute}
156
+ disabled={!can_write || !userIsAdmin || globalHttpWorkspacedRoute}
151
157
  on:change={() => {
152
158
  workspaced_route = !workspaced_route
153
159
  dirtyRoutePath = true
@@ -155,7 +161,9 @@ $effect.pre(() => {
155
161
  options={{
156
162
  right: globalHttpWorkspacedRoute
157
163
  ? 'Prefix with workspace (enforced by instance setting)'
158
- : 'Prefix with workspace',
164
+ : !userIsAdmin
165
+ ? 'Prefix with workspace (required for non-admin users)'
166
+ : 'Prefix with workspace',
159
167
  rightTooltip:
160
168
  'Prefixes the route with the workspace ID (e.g., {base_url}/api/r/{workspace_id}/{route}). Note: deploying the HTTP trigger to another workspace updates the route workspace prefix accordingly.',
161
169
  rightDocumentationLink:
@@ -98,7 +98,6 @@ let originalConfig = $state(undefined);
98
98
  let userSettings = $state(undefined);
99
99
  let hasChanged = $derived(!deepEqual(getRouteConfig(), originalConfig ?? {}));
100
100
  let scopes = $derived(['http_triggers:read:' + path]);
101
- const isAdmin = $derived($userStore?.is_admin || $userStore?.is_super_admin);
102
101
  const routeConfig = $derived.by(getRouteConfig);
103
102
  const captureConfig = $derived.by(untrack(() => isEditor) ? getCaptureConfig : () => ({}));
104
103
  const saveDisabled = $derived(drawerLoading ||
@@ -213,6 +212,9 @@ export async function openNew(nis_flow, fixedScriptPath_, defaultValues) {
213
212
  error_handler_args = defaultValues?.error_handler_args ?? {};
214
213
  retry = defaultValues?.retry ?? undefined;
215
214
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
215
+ permissionedAs = undefined;
216
+ selectedPermissionedAs = undefined;
217
+ preservePermissionedAs = false;
216
218
  originalConfig = undefined;
217
219
  }
218
220
  finally {
@@ -256,8 +258,8 @@ function loadTriggerConfig(cfg) {
256
258
  retry = cfg?.retry;
257
259
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
258
260
  permissionedAs = cfg?.permissioned_as;
259
- selectedPermissionedAs = undefined;
260
- preservePermissionedAs = false;
261
+ selectedPermissionedAs = cfg?.permissioned_as;
262
+ preservePermissionedAs = !!cfg?.permissioned_as;
261
263
  }
262
264
  async function loadTrigger(defaultConfig) {
263
265
  if (defaultConfig) {
@@ -409,15 +411,14 @@ $effect(() => {
409
411
  <Loader2 class="animate-spin" />
410
412
  {/if}
411
413
  {:else}
412
- {#if edit}
413
- <PermissionedAsLine
414
- {permissionedAs}
415
- onPermissionedAsChange={(pa, preserve) => {
416
- selectedPermissionedAs = pa
417
- preservePermissionedAs = preserve
418
- }}
419
- />
420
- {/if}
414
+ <PermissionedAsLine
415
+ {permissionedAs}
416
+ {path}
417
+ onPermissionedAsChange={(pa, preserve) => {
418
+ selectedPermissionedAs = pa
419
+ preservePermissionedAs = preserve
420
+ }}
421
+ />
421
422
  <div class="flex flex-col gap-8">
422
423
  {#if mode === 'suspended'}
423
424
  <TriggerSuspendedJobsAlert {suspendedJobsModal} />
@@ -446,7 +447,6 @@ $effect(() => {
446
447
  checkInitialPathExistence={!edit}
447
448
  namePlaceholder="route"
448
449
  kind="http_trigger"
449
- hideUser
450
450
  disableEditing={!can_write}
451
451
  />
452
452
  </Label>
@@ -874,7 +874,7 @@ $effect(() => {
874
874
  {#if !drawerLoading}
875
875
  <TriggerEditorToolbar
876
876
  {trigger}
877
- permissions={drawerLoading || !can_write ? 'none' : can_write && isAdmin ? 'create' : 'write'}
877
+ permissions={drawerLoading || !can_write ? 'none' : 'create'}
878
878
  {saveDisabled}
879
879
  {allowDraft}
880
880
  {edit}
@@ -9,7 +9,7 @@ import Subsection from '../../Subsection.svelte';
9
9
  import RouteEditor from './RouteEditor.svelte';
10
10
  import { generateHttpTriggerFromOpenApi } from './utils';
11
11
  import { isCloudHosted } from '../../../cloud';
12
- import { usedTriggerKinds, workspaceStore } from '../../../stores';
12
+ import { usedTriggerKinds, userStore, workspaceStore } from '../../../stores';
13
13
  import FileInput from '../../common/fileInput/FileInput.svelte';
14
14
  import { emptyStringTrimmed, sendUserToast } from '../../../utils';
15
15
  import FolderPicker from '../../FolderPicker.svelte';
@@ -113,10 +113,15 @@ async function saveHttpTrigger() {
113
113
  isCreating = false;
114
114
  }
115
115
  }
116
+ let userIsAdmin = $derived($userStore?.is_admin || $userStore?.is_super_admin);
116
117
  async function generateHttpTrigger() {
117
118
  try {
118
119
  isGeneratingHttpRoutes = true;
119
120
  httpTriggers = await generateHttpTriggerFromOpenApi(code, folderName);
121
+ // Force workspaced routes for non-admins or when the global setting is enabled
122
+ if (!userIsAdmin || globalHttpWorkspacedRoute) {
123
+ httpTriggers = httpTriggers.map((t) => ({ ...t, workspaced_route: true }));
124
+ }
120
125
  if (httpTriggers.length === 0) {
121
126
  sendUserToast('No paths defined in the OpenAPI spec. Cannot generate HTTP routes.', true);
122
127
  }
@@ -38,7 +38,7 @@ onMount(() => {
38
38
  >
39
39
 
40
40
  {#if !$userStore?.is_admin && !$userStore?.is_super_admin && selectedTrigger.isDraft}
41
- <Alert title="Only workspace admins can create routes" type="info" size="xs" />
41
+ <Alert title="Non-admin users are limited to workspaced routes" type="info" size="xs" />
42
42
  {/if}
43
43
  </div>
44
44
  {/snippet}
@@ -6,6 +6,6 @@ export declare const SIGNATURE_TEMPLATE_SCRIPT_HUB_PATH: string;
6
6
  export declare const SIGNATURE_TEMPLATE_FLOW_HUB_ID = "67";
7
7
  export declare function getHttpRoute(route_prefix: string, route_path: string | undefined, workspaced_route: boolean, workspace_id: string): string;
8
8
  export declare function replacePlaceholderForSignatureScriptTemplate(content: string): string;
9
- export declare function saveHttpRouteFromCfg(initialPath: string, routeCfg: Record<string, any>, edit: boolean, workspace: string, isAdmin: boolean, usedTriggerKinds: Writable<string[]>): Promise<boolean>;
9
+ export declare function saveHttpRouteFromCfg(initialPath: string, routeCfg: Record<string, any>, edit: boolean, workspace: string, _isAdmin: boolean, usedTriggerKinds: Writable<string[]>): Promise<boolean>;
10
10
  export type Source = 'OpenAPI' | 'OpenAPI_File' | 'OpenAPI_URL';
11
11
  export declare function generateHttpTriggerFromOpenApi(api: string, folderName: string): Promise<NewHttpTrigger[]>;
@@ -18,7 +18,7 @@ export function replacePlaceholderForSignatureScriptTemplate(content) {
18
18
  const secret_key_path = params.get(SECRET_KEY_PATH) ?? '';
19
19
  return content.replace(/(const\s+SECRET_KEY_VARIABLE_PATH\s*=\s*")[^"]*(";)/, `$1${secret_key_path}$2`);
20
20
  }
21
- export async function saveHttpRouteFromCfg(initialPath, routeCfg, edit, workspace, isAdmin, usedTriggerKinds) {
21
+ export async function saveHttpRouteFromCfg(initialPath, routeCfg, edit, workspace, _isAdmin, usedTriggerKinds) {
22
22
  const requestBody = {
23
23
  path: routeCfg.path,
24
24
  script_path: routeCfg.script_path,
@@ -49,7 +49,7 @@ export async function saveHttpRouteFromCfg(initialPath, routeCfg, edit, workspac
49
49
  path: initialPath,
50
50
  requestBody: {
51
51
  ...requestBody,
52
- route_path: isAdmin || !edit ? routeCfg.route_path : undefined
52
+ route_path: routeCfg.route_path
53
53
  }
54
54
  });
55
55
  sendUserToast(`Route ${routeCfg.path} updated`);
@@ -141,6 +141,9 @@ export async function openNew(nis_flow, fixedScriptPath_, nDefaultValues) {
141
141
  filterLogic = 'and';
142
142
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
143
143
  mode = nDefaultValues?.mode ?? 'enabled';
144
+ permissionedAs = undefined;
145
+ selectedPermissionedAs = undefined;
146
+ preservePermissionedAs = false;
144
147
  originalConfig = undefined;
145
148
  }
146
149
  finally {
@@ -171,8 +174,8 @@ function loadTriggerConfig(cfg) {
171
174
  filterLogic = cfg?.filter_logic ?? 'and';
172
175
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
173
176
  permissionedAs = cfg?.permissioned_as;
174
- selectedPermissionedAs = undefined;
175
- preservePermissionedAs = false;
177
+ selectedPermissionedAs = cfg?.permissioned_as;
178
+ preservePermissionedAs = !!cfg?.permissioned_as;
176
179
  }
177
180
  async function loadTrigger(defaultConfig) {
178
181
  if (defaultConfig) {
@@ -360,15 +363,14 @@ $effect(() => {
360
363
  <Loader2 class="animate-spin" />
361
364
  {/if}
362
365
  {:else}
363
- {#if edit}
364
- <PermissionedAsLine
365
- {permissionedAs}
366
- onPermissionedAsChange={(pa, preserve) => {
367
- selectedPermissionedAs = pa
368
- preservePermissionedAs = preserve
369
- }}
370
- />
371
- {/if}
366
+ <PermissionedAsLine
367
+ {permissionedAs}
368
+ {path}
369
+ onPermissionedAsChange={(pa, preserve) => {
370
+ selectedPermissionedAs = pa
371
+ preservePermissionedAs = preserve
372
+ }}
373
+ />
372
374
  <div class="flex flex-col gap-4">
373
375
  {#if description}
374
376
  {@render description()}
@@ -8,6 +8,6 @@ interface Props {
8
8
  client_id?: string;
9
9
  showTestingBadge?: boolean;
10
10
  }
11
- declare const MqttEditorConfigSection: import("svelte").Component<Props, {}, "subscribe_topics" | "mqtt_resource_path" | "client_id" | "client_version" | "isValid">;
11
+ declare const MqttEditorConfigSection: import("svelte").Component<Props, {}, "client_id" | "subscribe_topics" | "mqtt_resource_path" | "client_version" | "isValid">;
12
12
  type MqttEditorConfigSection = ReturnType<typeof MqttEditorConfigSection>;
13
13
  export default MqttEditorConfigSection;
@@ -128,6 +128,9 @@ export async function openNew(nis_flow, fixedScriptPath_, defaultValues) {
128
128
  v5_config = defaultValues?.v5_config ?? DEFAULT_V5_CONFIG;
129
129
  activateV5Options.topic_alias_maximum = Boolean(defaultValues?.v5_config?.topic_alias_maximum);
130
130
  activateV5Options.session_expiry_interval = Boolean(defaultValues?.v5_config?.session_expiry_interval);
131
+ permissionedAs = undefined;
132
+ selectedPermissionedAs = undefined;
133
+ preservePermissionedAs = false;
131
134
  originalConfig = undefined;
132
135
  }
133
136
  finally {
@@ -157,8 +160,8 @@ async function loadTriggerConfig(cfg) {
157
160
  activateV5Options.topic_alias_maximum = Boolean(v5_config.topic_alias_maximum);
158
161
  activateV5Options.session_expiry_interval = Boolean(v5_config.session_expiry_interval);
159
162
  permissionedAs = cfg?.permissioned_as;
160
- selectedPermissionedAs = undefined;
161
- preservePermissionedAs = false;
163
+ selectedPermissionedAs = cfg?.permissioned_as;
164
+ preservePermissionedAs = !!cfg?.permissioned_as;
162
165
  }
163
166
  catch (error) {
164
167
  sendUserToast(`Could not load mqtt trigger config: ${error.body}`, true);
@@ -327,15 +330,14 @@ $effect(() => {
327
330
  <Loader2 class="animate-spin" />
328
331
  {/if}
329
332
  {:else}
330
- {#if edit}
331
- <PermissionedAsLine
332
- {permissionedAs}
333
- onPermissionedAsChange={(pa, preserve) => {
334
- selectedPermissionedAs = pa
335
- preservePermissionedAs = preserve
336
- }}
337
- />
338
- {/if}
333
+ <PermissionedAsLine
334
+ {permissionedAs}
335
+ {path}
336
+ onPermissionedAsChange={(pa, preserve) => {
337
+ selectedPermissionedAs = pa
338
+ preservePermissionedAs = preserve
339
+ }}
340
+ />
339
341
  <div class="flex flex-col gap-4">
340
342
  {#if description}
341
343
  {@render description()}
@@ -12,6 +12,7 @@ import Section from '../../Section.svelte';
12
12
  import Required from '../../Required.svelte';
13
13
  import NextcloudTriggerForm from './services/nextcloud/NextcloudTriggerForm.svelte';
14
14
  import GoogleTriggerForm from './services/google/GoogleTriggerForm.svelte';
15
+ import GitHubTriggerForm from './services/github/GitHubTriggerForm.svelte';
15
16
  import TriggerEditorToolbar from '../TriggerEditorToolbar.svelte';
16
17
  import { handleConfigChange } from '../utils';
17
18
  import { deepEqual } from 'fast-equals';
@@ -32,6 +33,8 @@ const ServiceFormComponent = $derived.by(() => {
32
33
  return NextcloudTriggerForm;
33
34
  case 'google':
34
35
  return GoogleTriggerForm;
36
+ case 'github':
37
+ return GitHubTriggerForm;
35
38
  default:
36
39
  return null;
37
40
  }
@@ -0,0 +1,118 @@
1
+ <script lang="ts">import Section from '../../../../Section.svelte';
2
+ import Select from '../../../../select/Select.svelte';
3
+ import MultiSelect from '../../../../select/MultiSelect.svelte';
4
+ import { NativeTriggerService } from '../../../../../gen/services.gen';
5
+ import { workspaceStore } from '../../../../../stores';
6
+ import { sendUserToast } from '../../../../../toast';
7
+ import { Loader2 } from 'lucide-svelte';
8
+ let { serviceConfig = $bindable(), errors = $bindable(), loading = $bindable(), disabled = false, externalData } = $props();
9
+ const GITHUB_EVENTS = [
10
+ { label: 'Push', value: 'push' },
11
+ { label: 'Pull Request', value: 'pull_request' },
12
+ { label: 'Issues', value: 'issues' },
13
+ { label: 'Issue Comment', value: 'issue_comment' },
14
+ { label: 'Create (branch/tag)', value: 'create' },
15
+ { label: 'Delete (branch/tag)', value: 'delete' },
16
+ { label: 'Release', value: 'release' },
17
+ { label: 'Workflow Run', value: 'workflow_run' },
18
+ { label: 'Pull Request Review', value: 'pull_request_review' },
19
+ { label: 'Fork', value: 'fork' },
20
+ { label: 'Star', value: 'star' },
21
+ { label: 'Deployment', value: 'deployment' },
22
+ { label: 'Deployment Status', value: 'deployment_status' }
23
+ ];
24
+ let repos = $state([]);
25
+ let selectedRepo = $state(externalData?.owner && externalData?.repo
26
+ ? `${externalData.owner}/${externalData.repo}`
27
+ : serviceConfig.owner && serviceConfig.repo
28
+ ? `${serviceConfig.owner}/${serviceConfig.repo}`
29
+ : '');
30
+ let selectedEvents = $state(externalData?.events ?? serviceConfig.events ?? ['push']);
31
+ async function loadRepos() {
32
+ if (!$workspaceStore) {
33
+ repos = [];
34
+ return;
35
+ }
36
+ loading = true;
37
+ try {
38
+ repos = await NativeTriggerService.listGithubRepos({
39
+ workspace: $workspaceStore
40
+ });
41
+ }
42
+ catch (err) {
43
+ console.error('Failed to load GitHub repositories:', err);
44
+ sendUserToast(`Failed to load repositories: ${err.body || err.message}`, true);
45
+ repos = [];
46
+ }
47
+ finally {
48
+ loading = false;
49
+ }
50
+ }
51
+ $effect(() => {
52
+ if ($workspaceStore) {
53
+ loadRepos();
54
+ }
55
+ });
56
+ $effect(() => {
57
+ const parts = selectedRepo.split('/');
58
+ const owner = parts[0] ?? '';
59
+ const repo = parts.slice(1).join('/') ?? '';
60
+ serviceConfig = {
61
+ owner,
62
+ repo,
63
+ events: selectedEvents
64
+ };
65
+ });
66
+ let repoItems = $derived(repos.map((r) => ({
67
+ label: `${r.full_name}${r.private ? ' (private)' : ''}`,
68
+ value: r.full_name
69
+ })));
70
+ export function validate() {
71
+ let serviceErrors = {};
72
+ if (!selectedRepo?.trim()) {
73
+ serviceErrors.repo = 'Repository is required';
74
+ }
75
+ if (!selectedEvents || selectedEvents.length === 0) {
76
+ serviceErrors.events = 'At least one event is required';
77
+ }
78
+ return serviceErrors;
79
+ }
80
+ </script>
81
+
82
+ <Section label="GitHub Trigger Configuration">
83
+ <div class="flex flex-col gap-4">
84
+ <div class="flex flex-col gap-1">
85
+ <p class="block text-xs font-semibold text-primary">Repository</p>
86
+ {#if loading}
87
+ <div class="flex items-center gap-2 text-secondary text-xs">
88
+ <Loader2 class="animate-spin" size={14} />
89
+ Loading repositories...
90
+ </div>
91
+ {:else}
92
+ <Select
93
+ items={repoItems}
94
+ bind:value={selectedRepo}
95
+ placeholder="Select a repository"
96
+ {disabled}
97
+ />
98
+ {/if}
99
+ {#if errors.repo}
100
+ <p class="text-red-500 text-xs">{errors.repo}</p>
101
+ {/if}
102
+ </div>
103
+
104
+ <div class="flex flex-col gap-1">
105
+ <p class="block text-xs font-semibold text-primary">Events</p>
106
+ <MultiSelect
107
+ items={GITHUB_EVENTS}
108
+ bind:value={selectedEvents}
109
+ placeholder="Select events"
110
+ {disabled}
111
+ reorderable={false}
112
+ />
113
+ {#if errors.events}
114
+ <p class="text-red-500 text-xs">{errors.events}</p>
115
+ {/if}
116
+ </div>
117
+ </div>
118
+ </Section>
@@ -0,0 +1,17 @@
1
+ interface Props {
2
+ serviceConfig: Record<string, any>;
3
+ errors: Record<string, string>;
4
+ disabled?: boolean;
5
+ externalData?: any;
6
+ loading: boolean;
7
+ path?: string;
8
+ isFlow?: boolean;
9
+ token?: string;
10
+ triggerTokens?: any;
11
+ scopes?: any[];
12
+ }
13
+ declare const GitHubTriggerForm: import("svelte").Component<Props, {
14
+ validate: () => Record<string, string>;
15
+ }, "loading" | "errors" | "serviceConfig">;
16
+ type GitHubTriggerForm = ReturnType<typeof GitHubTriggerForm>;
17
+ export default GitHubTriggerForm;
@@ -23,6 +23,16 @@ export const NATIVE_TRIGGER_SERVICES = {
23
23
  script: '/scripts/add?hub=hub%2F28135',
24
24
  flow: '/flows/add?hub=75'
25
25
  }
26
+ },
27
+ github: {
28
+ serviceDisplayName: 'GitHub',
29
+ serviceKey: 'github',
30
+ supportsSync: true,
31
+ isCloudCompatible: true,
32
+ templates: {
33
+ script: '/scripts/add?hub=hub%2F28202',
34
+ flow: '/flows/add?hub=80'
35
+ }
26
36
  }
27
37
  };
28
38
  export async function isServiceAvailable(service, workspace) {
@@ -77,6 +87,8 @@ export function getTriggerIconName(service) {
77
87
  return 'NextcloudIcon';
78
88
  case 'google':
79
89
  return 'GoogleIcon';
90
+ case 'github':
91
+ return 'GithubIcon';
80
92
  default:
81
93
  return 'NextcloudIcon';
82
94
  }
@@ -87,6 +99,8 @@ export async function getServiceIcon(service) {
87
99
  return (await import('../../icons/NextcloudIcon.svelte')).default;
88
100
  case 'google':
89
101
  return (await import('../../icons/GoogleIcon.svelte')).default;
102
+ case 'github':
103
+ return (await import('../../icons/GithubIcon.svelte')).default;
90
104
  }
91
105
  }
92
106
  export function getServiceTemplates(service) {
@@ -1,6 +1,7 @@
1
- declare const NatsTriggerEditor: import("svelte").Component<{
2
- onUpdate: any;
3
- }, {
1
+ type $$ComponentProps = {
2
+ onUpdate?: (path?: string) => void;
3
+ };
4
+ declare const NatsTriggerEditor: import("svelte").Component<$$ComponentProps, {
4
5
  openEdit: (ePath: string, isFlow: boolean) => Promise<void>;
5
6
  openNew: (is_flow: boolean, initial_script_path?: string, defaultValues?: Record<string, any>) => Promise<void>;
6
7
  }, "">;
@@ -121,6 +121,9 @@ export async function openNew(nis_flow, fixedScriptPath_, nDefaultValues) {
121
121
  error_handler_args = nDefaultValues?.error_handler_args ?? {};
122
122
  retry = nDefaultValues?.retry ?? undefined;
123
123
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
124
+ permissionedAs = undefined;
125
+ selectedPermissionedAs = undefined;
126
+ preservePermissionedAs = false;
124
127
  originalConfig = undefined;
125
128
  }
126
129
  finally {
@@ -149,8 +152,8 @@ async function loadTriggerConfig(cfg) {
149
152
  retry = cfg?.retry;
150
153
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
151
154
  permissionedAs = cfg?.permissioned_as;
152
- selectedPermissionedAs = undefined;
153
- preservePermissionedAs = false;
155
+ selectedPermissionedAs = cfg?.permissioned_as;
156
+ preservePermissionedAs = !!cfg?.permissioned_as;
154
157
  }
155
158
  async function loadTrigger(defaultConfig) {
156
159
  if (defaultConfig) {
@@ -312,15 +315,14 @@ $effect(() => {
312
315
  <Loader2 class="animate-spin" />
313
316
  {/if}
314
317
  {:else}
315
- {#if edit}
316
- <PermissionedAsLine
317
- {permissionedAs}
318
- onPermissionedAsChange={(pa, preserve) => {
319
- selectedPermissionedAs = pa
320
- preservePermissionedAs = preserve
321
- }}
322
- />
323
- {/if}
318
+ <PermissionedAsLine
319
+ {permissionedAs}
320
+ {path}
321
+ onPermissionedAsChange={(pa, preserve) => {
322
+ selectedPermissionedAs = pa
323
+ preservePermissionedAs = preserve
324
+ }}
325
+ />
324
326
  <div class="flex flex-col gap-4">
325
327
  {#if description}
326
328
  {@render description()}
@@ -1,6 +1,7 @@
1
- declare const PostgresTriggerEditor: import("svelte").Component<{
2
- onUpdate: any;
3
- }, {
1
+ type $$ComponentProps = {
2
+ onUpdate?: (path?: string) => void;
3
+ };
4
+ declare const PostgresTriggerEditor: import("svelte").Component<$$ComponentProps, {
4
5
  openEdit: (ePath: string, isFlow: boolean) => Promise<void>;
5
6
  openNew: (is_flow: boolean, initial_script_path?: string, defaultValues?: Record<string, any>) => Promise<void>;
6
7
  }, "">;