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
@@ -0,0 +1,337 @@
1
+ <script lang="ts">import { onMount, untrack } from 'svelte';
2
+ import { Badge, Button } from '../common';
3
+ import Select from '../select/Select.svelte';
4
+ import TextInput from '../text_input/TextInput.svelte';
5
+ import { safeSelectItems } from '../select/utils.svelte';
6
+ import { WorkspaceService } from '../../gen';
7
+ import { sendUserToast } from '../../toast';
8
+ import { Send, Plus, X, ArchiveX } from 'lucide-svelte';
9
+ let { forkWorkspaceId, parentWorkspaceId, currentUsername, isAdmin, onStateChange } = $props();
10
+ let request = $state(null);
11
+ let loading = $state(true);
12
+ let eligibleDeployers = $state([]);
13
+ let showRequestDialog = $state(false);
14
+ let selectedAssignees = $state([]);
15
+ let assigneeToAdd = $state(undefined);
16
+ let newComment = $state('');
17
+ let posting = $state(false);
18
+ let replyParentId = $state(undefined);
19
+ let replyBody = $state('');
20
+ let canCancel = $derived(request != null && (isAdmin || request.requested_by === currentUsername));
21
+ async function load() {
22
+ loading = true;
23
+ try {
24
+ request = await WorkspaceService.getOpenDeploymentRequest({ workspace: forkWorkspaceId });
25
+ }
26
+ catch (e) {
27
+ console.error('Failed to load open deployment request', e);
28
+ request = null;
29
+ }
30
+ finally {
31
+ loading = false;
32
+ onStateChange?.(request != null);
33
+ }
34
+ }
35
+ async function loadEligibleDeployers() {
36
+ try {
37
+ eligibleDeployers = await WorkspaceService.listDeploymentRequestEligibleDeployers({
38
+ workspace: forkWorkspaceId
39
+ });
40
+ }
41
+ catch (e) {
42
+ console.error('Failed to load eligible deployers', e);
43
+ eligibleDeployers = [];
44
+ }
45
+ }
46
+ onMount(() => {
47
+ load();
48
+ loadEligibleDeployers();
49
+ });
50
+ $effect(() => {
51
+ if (assigneeToAdd && !selectedAssignees.includes(assigneeToAdd)) {
52
+ const v = assigneeToAdd;
53
+ untrack(() => {
54
+ selectedAssignees = [...selectedAssignees, v];
55
+ assigneeToAdd = undefined;
56
+ });
57
+ }
58
+ });
59
+ async function createRequest() {
60
+ if (selectedAssignees.length === 0) {
61
+ sendUserToast('Pick at least one assignee', true);
62
+ return;
63
+ }
64
+ posting = true;
65
+ try {
66
+ request = await WorkspaceService.createDeploymentRequest({
67
+ workspace: forkWorkspaceId,
68
+ requestBody: { assignees: selectedAssignees }
69
+ });
70
+ sendUserToast(`Deployment request sent to ${selectedAssignees.length} assignee(s)`);
71
+ showRequestDialog = false;
72
+ selectedAssignees = [];
73
+ onStateChange?.(true);
74
+ }
75
+ catch (e) {
76
+ sendUserToast(`Failed to create deployment request: ${e.body || e.message}`, true);
77
+ }
78
+ finally {
79
+ posting = false;
80
+ }
81
+ }
82
+ async function cancelRequest() {
83
+ if (!request)
84
+ return;
85
+ if (!confirm('Cancel the open deployment request? Assignees will be notified.'))
86
+ return;
87
+ try {
88
+ await WorkspaceService.cancelDeploymentRequest({
89
+ workspace: forkWorkspaceId,
90
+ id: request.id
91
+ });
92
+ sendUserToast('Deployment request cancelled');
93
+ request = null;
94
+ onStateChange?.(false);
95
+ }
96
+ catch (e) {
97
+ sendUserToast(`Failed to cancel: ${e.body || e.message}`, true);
98
+ }
99
+ }
100
+ async function postComment(body, parentId) {
101
+ if (!request || !body.trim())
102
+ return;
103
+ posting = true;
104
+ try {
105
+ const created = await WorkspaceService.createDeploymentRequestComment({
106
+ workspace: forkWorkspaceId,
107
+ id: request.id,
108
+ requestBody: { body, parent_id: parentId }
109
+ });
110
+ request = {
111
+ ...request,
112
+ comments: [...request.comments, created]
113
+ };
114
+ if (parentId == null) {
115
+ newComment = '';
116
+ }
117
+ else {
118
+ replyBody = '';
119
+ replyParentId = undefined;
120
+ }
121
+ }
122
+ catch (e) {
123
+ sendUserToast(`Failed to post comment: ${e.body || e.message}`, true);
124
+ }
125
+ finally {
126
+ posting = false;
127
+ }
128
+ }
129
+ let topLevel = $derived(request?.comments.filter((c) => c.parent_id == null) ?? []);
130
+ function repliesOf(parent) {
131
+ if (!request)
132
+ return [];
133
+ return request.comments.filter((c) => c.parent_id === parent.id);
134
+ }
135
+ function formatTimestamp(iso) {
136
+ return new Date(iso).toLocaleString();
137
+ }
138
+ // Has content to render inline in the deploy panel: dialog open,
139
+ // request open, or still loading.
140
+ let hasContent = $derived(loading || showRequestDialog || request != null);
141
+ export function refresh() {
142
+ load();
143
+ }
144
+ export function openRequestDialog() {
145
+ showRequestDialog = true;
146
+ }
147
+ export function isDialogOpen() {
148
+ return showRequestDialog;
149
+ }
150
+ export function hasOpenRequest() {
151
+ return request != null;
152
+ }
153
+ </script>
154
+
155
+ {#if hasContent}
156
+ <div class="flex flex-col gap-2 mt-3 pt-3 border-t">
157
+ {#if loading}
158
+ <div class="text-secondary text-xs">Loading deployment request…</div>
159
+ {:else if !request}
160
+ <!-- showRequestDialog == true -->
161
+ <div class="flex flex-col gap-2 border rounded-md p-3 bg-surface">
162
+ <div class="text-xs text-secondary">
163
+ Pick one or more assignees. They must be admins or members of <code>wm_deployers</code>
164
+ in <b>{parentWorkspaceId}</b>.
165
+ </div>
166
+ <Select
167
+ bind:value={assigneeToAdd}
168
+ items={safeSelectItems(
169
+ eligibleDeployers
170
+ .filter((d) => !selectedAssignees.includes(d.username))
171
+ .map((d) => ({
172
+ label: `${d.username} <${d.email}>`,
173
+ value: d.username
174
+ }))
175
+ )}
176
+ placeholder="Add assignee…"
177
+ />
178
+ {#if selectedAssignees.length > 0}
179
+ <div class="flex flex-wrap gap-1">
180
+ {#each selectedAssignees as a (a)}
181
+ <Badge color="blue">
182
+ {a}
183
+ <button
184
+ type="button"
185
+ class="ml-1 hover:text-red-600"
186
+ onclick={() => {
187
+ selectedAssignees = selectedAssignees.filter((s) => s !== a)
188
+ }}
189
+ >
190
+ <X size={12} />
191
+ </button>
192
+ </Badge>
193
+ {/each}
194
+ </div>
195
+ {/if}
196
+ <div class="flex gap-2">
197
+ <Button
198
+ variant="accent"
199
+ size="xs"
200
+ startIcon={{ icon: Send }}
201
+ disabled={posting || selectedAssignees.length === 0}
202
+ onclick={createRequest}
203
+ >
204
+ Send request
205
+ </Button>
206
+ <Button
207
+ variant="default"
208
+ size="xs"
209
+ onclick={() => {
210
+ showRequestDialog = false
211
+ selectedAssignees = []
212
+ }}
213
+ >
214
+ Cancel
215
+ </Button>
216
+ </div>
217
+ </div>
218
+ {:else}
219
+ <div class="flex items-center justify-between flex-wrap gap-2 text-xs">
220
+ <div class="flex items-center gap-2 flex-wrap">
221
+ <Badge color="green" size="xs">Deployment request open</Badge>
222
+ <span class="text-secondary">by</span>
223
+ <b>{request.requested_by}</b>
224
+ <span class="text-secondary">at {formatTimestamp(request.requested_at)}</span>
225
+ </div>
226
+ {#if canCancel}
227
+ <Button
228
+ variant="default"
229
+ size="xs"
230
+ startIcon={{ icon: ArchiveX }}
231
+ onclick={cancelRequest}
232
+ >
233
+ Cancel request
234
+ </Button>
235
+ {/if}
236
+ </div>
237
+ <div class="flex items-center gap-1 flex-wrap text-xs">
238
+ <span class="text-secondary">Assignees:</span>
239
+ {#each request.assignees as a (a.username)}
240
+ <Badge color="indigo" size="xs">{a.username}</Badge>
241
+ {/each}
242
+ </div>
243
+
244
+ <div class="border rounded-md bg-surface p-3 flex flex-col gap-3">
245
+ {#if topLevel.length === 0}
246
+ <div class="text-secondary text-xs">No comments yet. Be the first to leave feedback.</div>
247
+ {/if}
248
+ {#each topLevel as c (c.id)}
249
+ <div class="border rounded-md p-2 flex flex-col gap-1" class:opacity-60={c.obsolete}>
250
+ <div class="flex items-center justify-between gap-2 text-xs">
251
+ <div class="flex items-center gap-2">
252
+ <b>{c.author}</b>
253
+ {#if c.anchor_kind && c.anchor_path}
254
+ <Badge color="blue" size="xs">
255
+ {c.anchor_kind}:{c.anchor_path}
256
+ </Badge>
257
+ {/if}
258
+ {#if c.obsolete}
259
+ <Badge color="gray" size="xs">obsolete</Badge>
260
+ {/if}
261
+ </div>
262
+ <span class="text-tertiary text-2xs">{formatTimestamp(c.created_at)}</span>
263
+ </div>
264
+ <div class="text-sm whitespace-pre-wrap">{c.body}</div>
265
+
266
+ {#each repliesOf(c) as r (r.id)}
267
+ <div
268
+ class="ml-4 border-l pl-2 flex flex-col gap-1"
269
+ class:opacity-60={r.obsolete || c.obsolete}
270
+ >
271
+ <div class="flex items-center justify-between gap-2 text-xs">
272
+ <b>{r.author}</b>
273
+ <span class="text-tertiary text-2xs">{formatTimestamp(r.created_at)}</span>
274
+ </div>
275
+ <div class="text-sm whitespace-pre-wrap">{r.body}</div>
276
+ </div>
277
+ {/each}
278
+
279
+ {#if replyParentId === c.id}
280
+ <div class="ml-4 flex flex-col gap-1 mt-1">
281
+ <TextInput bind:value={replyBody} inputProps={{ placeholder: 'Write a reply…' }} />
282
+ <div class="flex gap-2">
283
+ <Button
284
+ size="xs"
285
+ variant="accent"
286
+ disabled={posting || !replyBody.trim()}
287
+ onclick={() => postComment(replyBody, c.id)}
288
+ >
289
+ Reply
290
+ </Button>
291
+ <Button
292
+ size="xs"
293
+ variant="default"
294
+ onclick={() => {
295
+ replyParentId = undefined
296
+ replyBody = ''
297
+ }}
298
+ >
299
+ Cancel
300
+ </Button>
301
+ </div>
302
+ </div>
303
+ {:else}
304
+ <button
305
+ class="text-xs text-tertiary hover:text-secondary mt-1 self-start"
306
+ onclick={() => {
307
+ replyParentId = c.id
308
+ replyBody = ''
309
+ }}
310
+ >
311
+ Reply
312
+ </button>
313
+ {/if}
314
+ </div>
315
+ {/each}
316
+
317
+ <div class="flex flex-col gap-2 border-t pt-2">
318
+ <TextInput
319
+ bind:value={newComment}
320
+ inputProps={{ placeholder: 'Leave a general comment…' }}
321
+ />
322
+ <div class="self-end">
323
+ <Button
324
+ size="xs"
325
+ variant="accent"
326
+ startIcon={{ icon: Plus }}
327
+ disabled={posting || !newComment.trim()}
328
+ onclick={() => postComment(newComment)}
329
+ >
330
+ Comment
331
+ </Button>
332
+ </div>
333
+ </div>
334
+ </div>
335
+ {/if}
336
+ </div>
337
+ {/if}
@@ -0,0 +1,15 @@
1
+ interface Props {
2
+ forkWorkspaceId: string;
3
+ parentWorkspaceId: string;
4
+ currentUsername: string;
5
+ isAdmin: boolean;
6
+ onStateChange?: (hasOpenRequest: boolean) => void;
7
+ }
8
+ declare const DeploymentRequestPanel: import("svelte").Component<Props, {
9
+ refresh: () => void;
10
+ openRequestDialog: () => void;
11
+ isDialogOpen: () => boolean;
12
+ hasOpenRequest: () => boolean;
13
+ }, "">;
14
+ type DeploymentRequestPanel = ReturnType<typeof DeploymentRequestPanel>;
15
+ export default DeploymentRequestPanel;
@@ -1,7 +1,15 @@
1
1
  <script lang="ts">import { copyToClipboard } from '../../utils';
2
2
  import { Copy } from 'lucide-svelte';
3
3
  import Highlight from 'svelte-highlight';
4
- let { code, language, disabled = false, wrap = false } = $props();
4
+ let { code, language, disabled = false, wrap = false, copyOnClick = true } = $props();
5
+ function copyCode(event) {
6
+ if (disabled) {
7
+ return;
8
+ }
9
+ event?.preventDefault();
10
+ event?.stopPropagation();
11
+ copyToClipboard(code);
12
+ }
5
13
  </script>
6
14
 
7
15
  <!-- svelte-ignore a11y_click_events_have_key_events -->
@@ -9,22 +17,24 @@ let { code, language, disabled = false, wrap = false } = $props();
9
17
  <div
10
18
  class="flex flex-col flex-1 border rounded-md relative bg-surface-input"
11
19
  class:cursor-not-allowed={disabled}
20
+ class:cursor-pointer={copyOnClick && !disabled}
21
+ class:cursor-text={!copyOnClick && !disabled}
12
22
  onclick={(e) => {
13
- if (disabled) {
14
- return
23
+ if (copyOnClick) {
24
+ copyCode(e)
15
25
  }
16
- e.preventDefault()
17
- copyToClipboard(code)
18
26
  }}
19
27
  >
20
- <div class="absolute top-2 right-1 z-10 pointer-events-none">
21
- <Copy size={14} class="w-8 cursor-pointer pointer-events-auto" />
28
+ <div class="absolute top-2 right-1 z-10">
29
+ <div class="w-8 cursor-pointer" onclick={copyCode}>
30
+ <Copy size={14} />
31
+ </div>
22
32
  </div>
23
33
  <div class="p-2 w-full overflow-auto">
24
34
  <Highlight
25
35
  {language}
26
36
  {code}
27
- class="pointer-events-none {wrap ? 'whitespace-pre-wrap break-all pr-8' : ''}"
37
+ class="{copyOnClick ? 'pointer-events-none' : 'select-text'} {wrap ? 'whitespace-pre-wrap break-all pr-8' : ''}"
28
38
  />
29
39
  </div>
30
40
  </div>
@@ -4,6 +4,7 @@ interface Props {
4
4
  language: LanguageType<string>;
5
5
  disabled?: boolean;
6
6
  wrap?: boolean;
7
+ copyOnClick?: boolean;
7
8
  }
8
9
  declare const CopyableCodeBlock: import("svelte").Component<Props, {}, "">;
9
10
  type CopyableCodeBlock = ReturnType<typeof CopyableCodeBlock>;
@@ -21,13 +21,14 @@
21
21
  <script lang="ts">import { inferAssets } from '../../infer';
22
22
  import { assetEq, getFlowModuleAssets } from '../assets/lib';
23
23
  import { getAllModules } from './flowExplorer';
24
- import { getContext, untrack } from 'svelte';
24
+ import { getContext } from 'svelte';
25
25
  import { AssetService, ResourceService } from '../../gen';
26
26
  import { deepEqual } from 'fast-equals';
27
27
  import { workspaceStore } from '../../stores';
28
28
  import S3FilePicker from '../S3FilePicker.svelte';
29
29
  import ResourceEditorDrawer from '../ResourceEditorDrawer.svelte';
30
30
  import { watch } from 'runed';
31
+ import { sendUserToast } from '../../toast';
31
32
  let { modules, enableParser = false, enableDbExplore = false, enablePathScriptAndFlowAssets = false } = $props();
32
33
  const flowGraphAssetsCtx = getContext('FlowGraphAssetContext');
33
34
  const { selectionManager } = getContext('FlowEditorContext') || {};
@@ -88,7 +89,14 @@ $effect(() => {
88
89
  }
89
90
  }
90
91
  });
91
- async function parseAndUpdateRawScriptModule(v, modId) {
92
+ function analyzeEntireFlow() {
93
+ for (const mod of allModules) {
94
+ if (mod.value.type === 'rawscript') {
95
+ parseAndUpdateRawScriptModule(mod.value, mod.id);
96
+ }
97
+ }
98
+ }
99
+ async function parseAndUpdateRawScriptModule(v, modId, isUserEdit = true) {
92
100
  console.log('Parsing assets for RawScript module', modId);
93
101
  let inferAssetsResult = await inferAssets(v.language, v.content);
94
102
  if (inferAssetsResult.status === 'error')
@@ -102,25 +110,15 @@ async function parseAndUpdateRawScriptModule(v, modId) {
102
110
  asset.alt_access_type = old.alt_access_type;
103
111
  }
104
112
  const normalizedAssets = newAssets.length > 0 ? newAssets : undefined;
105
- if (!deepEqual(v.assets, normalizedAssets))
106
- v.assets = normalizedAssets;
113
+ if (!deepEqual(v.assets, normalizedAssets)) {
114
+ if (!isUserEdit && normalizedAssets && normalizedAssets.length > 0) {
115
+ sendUserToast('Assets were detected in this step. Analyze entire flow for assets?', 'warning', [{ label: 'Analyze entire flow', callback: () => analyzeEntireFlow() }]);
116
+ }
117
+ else {
118
+ v.assets = normalizedAssets;
119
+ }
120
+ }
107
121
  }
108
- // Check for raw script modules whose assets were not parsed. Useful for flows created
109
- // before the assets feature was introduced.
110
- $effect(() => {
111
- if (!enableParser)
112
- return;
113
- untrack(() => {
114
- setTimeout(() => {
115
- for (const mod of allModules) {
116
- if (mod.value.type === 'rawscript' && mod.value.assets === undefined) {
117
- console.log('RawScript module', mod.id, 'without assets field, parsing');
118
- parseAndUpdateRawScriptModule(mod.value, mod.id);
119
- }
120
- }
121
- }, 500); // ensure modules are loaded
122
- });
123
- });
124
122
  $effect(() => {
125
123
  if (!enableParser)
126
124
  return;
@@ -134,7 +132,7 @@ $effect(() => {
134
132
  // Also recompute if the module is selected
135
133
  watch([() => selectedId === mod.id], () => {
136
134
  if (selectedId === mod.id)
137
- parseAndUpdateRawScriptModule(modValue, mod.id);
135
+ parseAndUpdateRawScriptModule(modValue, mod.id, modValue.assets !== undefined);
138
136
  });
139
137
  }
140
138
  }
@@ -0,0 +1,17 @@
1
+ import type { FlowModule } from '../../gen';
2
+ import { type AgentTool } from './agentToolUtils';
3
+ export type AgentToolOwner = {
4
+ agentId: string;
5
+ tools: AgentTool[];
6
+ toolIndex: number;
7
+ tool: AgentTool;
8
+ depth: number;
9
+ };
10
+ export type RemovedAgentTool = {
11
+ tool: AgentTool;
12
+ removedIds: string[];
13
+ };
14
+ export declare function findAgentToolOwner(modules: FlowModule[], toolId: string): AgentToolOwner | undefined;
15
+ export declare function removeAgentToolOwner(owner: AgentToolOwner): RemovedAgentTool | undefined;
16
+ export declare function collectFlowNodeIds(module: FlowModule): string[];
17
+ export declare function collectAgentToolIds(tool: AgentTool): string[];
@@ -0,0 +1,114 @@
1
+ import { isFlowModuleTool } from './agentToolUtils';
2
+ export function findAgentToolOwner(modules, toolId) {
3
+ return findAgentToolOwnerInModules(modules, toolId, 0);
4
+ }
5
+ export function removeAgentToolOwner(owner) {
6
+ const candidate = owner.tools[owner.toolIndex];
7
+ if (!candidate || candidate.id !== owner.tool.id) {
8
+ return undefined;
9
+ }
10
+ owner.tools.splice(owner.toolIndex, 1);
11
+ return {
12
+ tool: candidate,
13
+ removedIds: collectAgentToolIds(candidate)
14
+ };
15
+ }
16
+ export function collectFlowNodeIds(module) {
17
+ return collectFlowNodeIdsFromNode(module);
18
+ }
19
+ export function collectAgentToolIds(tool) {
20
+ return collectFlowNodeIdsFromNode(tool);
21
+ }
22
+ function findAgentToolOwnerInModules(modules, toolId, depth) {
23
+ for (const module of modules) {
24
+ const owner = findAgentToolOwnerInNode(module, toolId, depth);
25
+ if (owner) {
26
+ return owner;
27
+ }
28
+ }
29
+ return undefined;
30
+ }
31
+ function findAgentToolOwnerInNode(node, toolId, depth) {
32
+ if (node.value.type === 'forloopflow' || node.value.type === 'whileloopflow') {
33
+ return findAgentToolOwnerInModules(node.value.modules, toolId, depth);
34
+ }
35
+ if (node.value.type === 'branchall') {
36
+ for (const branch of node.value.branches) {
37
+ const owner = findAgentToolOwnerInModules(branch.modules, toolId, depth);
38
+ if (owner) {
39
+ return owner;
40
+ }
41
+ }
42
+ return undefined;
43
+ }
44
+ if (node.value.type === 'branchone') {
45
+ const defaultOwner = findAgentToolOwnerInModules(node.value.default, toolId, depth);
46
+ if (defaultOwner) {
47
+ return defaultOwner;
48
+ }
49
+ for (const branch of node.value.branches) {
50
+ const owner = findAgentToolOwnerInModules(branch.modules, toolId, depth);
51
+ if (owner) {
52
+ return owner;
53
+ }
54
+ }
55
+ return undefined;
56
+ }
57
+ if (node.value.type !== 'aiagent') {
58
+ return undefined;
59
+ }
60
+ const toolIndex = node.value.tools.findIndex((tool) => tool.id === toolId);
61
+ if (toolIndex !== -1) {
62
+ return {
63
+ agentId: node.id,
64
+ tools: node.value.tools,
65
+ toolIndex,
66
+ tool: node.value.tools[toolIndex],
67
+ depth: depth + 1
68
+ };
69
+ }
70
+ for (const tool of node.value.tools) {
71
+ if (!isFlowModuleTool(tool)) {
72
+ continue;
73
+ }
74
+ const owner = findAgentToolOwnerInNode(tool, toolId, depth + 1);
75
+ if (owner) {
76
+ return owner;
77
+ }
78
+ }
79
+ return undefined;
80
+ }
81
+ function collectFlowNodeIdsFromNode(node) {
82
+ const ids = [node.id];
83
+ if (node.value.type === 'forloopflow' || node.value.type === 'whileloopflow') {
84
+ for (const module of node.value.modules) {
85
+ ids.push(...collectFlowNodeIds(module));
86
+ }
87
+ return ids;
88
+ }
89
+ if (node.value.type === 'branchall') {
90
+ for (const branch of node.value.branches) {
91
+ for (const module of branch.modules) {
92
+ ids.push(...collectFlowNodeIds(module));
93
+ }
94
+ }
95
+ return ids;
96
+ }
97
+ if (node.value.type === 'branchone') {
98
+ for (const module of node.value.default) {
99
+ ids.push(...collectFlowNodeIds(module));
100
+ }
101
+ for (const branch of node.value.branches) {
102
+ for (const module of branch.modules) {
103
+ ids.push(...collectFlowNodeIds(module));
104
+ }
105
+ }
106
+ return ids;
107
+ }
108
+ if (node.value.type === 'aiagent') {
109
+ for (const tool of node.value.tools) {
110
+ ids.push(...collectAgentToolIds(tool));
111
+ }
112
+ }
113
+ return ids;
114
+ }
@@ -0,0 +1 @@
1
+ export {};