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
@@ -13,7 +13,7 @@ import {} from './graph';
13
13
  import ModuleStatus from './ModuleStatus.svelte';
14
14
  import { clone, isScriptPreview, msToSec, readFieldsRecursively, truncateRev } from '../utils';
15
15
  import JobArgs from './JobArgs.svelte';
16
- import { ChevronDown, ExternalLink, Hourglass } from 'lucide-svelte';
16
+ import { ChevronDown, Download, ExternalLink, Hourglass } from 'lucide-svelte';
17
17
  import { deepEqual } from 'fast-equals';
18
18
  import FlowTimeline from './FlowTimeline.svelte';
19
19
  import { dfs } from './flows/dfs';
@@ -29,6 +29,7 @@ import JobLoader from './JobLoader.svelte';
29
29
  import { AI_TOOL_CALL_PREFIX, AI_TOOL_MESSAGE_PREFIX, AI_MCP_TOOL_CALL_PREFIX, AI_WEBSEARCH_PREFIX, getToolCallId } from './graph/renderers/nodes/AIToolNode.svelte';
30
30
  import JobAssetsViewer from './assets/JobAssetsViewer.svelte';
31
31
  import McpToolCallDetails from './McpToolCallDetails.svelte';
32
+ import GfmMarkdown from './GfmMarkdown.svelte';
32
33
  import JobOtelTraces from './JobOtelTraces.svelte';
33
34
  import JobDetailHeader from './runs/JobDetailHeader.svelte';
34
35
  import LogViewer from './LogViewer.svelte';
@@ -633,6 +634,20 @@ onDestroy(() => {
633
634
  timeout && clearTimeout(timeout);
634
635
  // sub?.()
635
636
  });
637
+ function getAgentActionContent(agentResult, actionIndex) {
638
+ if (!agentResult?.messages || !Array.isArray(agentResult.messages))
639
+ return undefined;
640
+ let agentActionIdx = 0;
641
+ for (const m of agentResult.messages) {
642
+ if (m.agent_action) {
643
+ if (agentActionIdx === actionIndex) {
644
+ return m.content;
645
+ }
646
+ agentActionIdx++;
647
+ }
648
+ }
649
+ return undefined;
650
+ }
636
651
  function isSuccess(arg) {
637
652
  if (arg == undefined) {
638
653
  return undefined;
@@ -651,7 +666,8 @@ function onJobsLoadedInner(mod, job, force) {
651
666
  previewResult: job['result'],
652
667
  previewArgs: job.args,
653
668
  previewJobId: job.id,
654
- previewSuccess: job['success']
669
+ previewSuccess: job['success'],
670
+ previewLogs: job['logs']
655
671
  };
656
672
  }
657
673
  initializeByJob(id);
@@ -1465,6 +1481,19 @@ let totalEventsWaiting = $derived(Object.values(suspendStatus?.val ?? {}).reduce
1465
1481
  bind:clientHeight={tabsHeight.logsHeight}
1466
1482
  style="min-height: {minTabHeight}px"
1467
1483
  >
1484
+ {#if !hideDownloadLogs && !isReplay && job?.id}
1485
+ <div class="flex justify-end p-1">
1486
+ <Button
1487
+ href="{base}/api/w/{workspace}/jobs_u/get_flow_all_logs/{job.id}"
1488
+ download="windmill_flow_logs_{job.id}.txt"
1489
+ color="light"
1490
+ size="xs"
1491
+ startIcon={{ icon: Download }}
1492
+ >
1493
+ Download all logs
1494
+ </Button>
1495
+ </div>
1496
+ {/if}
1468
1497
  <FlowLogViewerWrapper
1469
1498
  {job}
1470
1499
  {localModuleStates}
@@ -1494,7 +1523,7 @@ let totalEventsWaiting = $derived(Object.values(suspendStatus?.val ?? {}).reduce
1494
1523
  <div class="border h-full rounded-md" bind:clientHeight={wrapperHeight}>
1495
1524
  <Splitpanes>
1496
1525
  <Pane bind:size={graphPaneSize} minSize={30}>
1497
- <div class="bg-surface-secondary h-full overflow-auto">
1526
+ <div class="bg-surface-secondary h-full max-h-screen">
1498
1527
  <div class="flex flex-col" bind:clientHeight={retryStatusHeight}>
1499
1528
  {#each Object.values(retryStatus?.val ?? {}) as count}
1500
1529
  {#if count}
@@ -1514,6 +1543,7 @@ let totalEventsWaiting = $derived(Object.values(suspendStatus?.val ?? {}).reduce
1514
1543
  triggerNode={true}
1515
1544
  download={!hideDownloadInGraph}
1516
1545
  minHeight={wrapperHeight - retryStatusHeight}
1546
+ outerDivClass="max-h-screen"
1517
1547
  success={jobId != undefined && isSuccess(job?.['success'])}
1518
1548
  flowModuleStates={localModuleStates}
1519
1549
  bind:expandedSubflows
@@ -1562,8 +1592,8 @@ let totalEventsWaiting = $derived(Object.values(suspendStatus?.val ?? {}).reduce
1562
1592
  </div>
1563
1593
  </Pane>
1564
1594
  <Pane bind:size={detailsPaneSize} minSize={25} class="!overflow-visible">
1565
- <div class="pt-1 overflow-auto min-h-[700px] flex flex-col h-full">
1566
- <Tabs bind:selected={rightColumnSelect}>
1595
+ <div class="pt-1 min-h-[min(700px,100vh)] max-h-screen flex flex-col h-full relative">
1596
+ <Tabs bind:selected={rightColumnSelect} wrapperClass="shrink-0">
1567
1597
  {#if !hideTimeline}
1568
1598
  <Tab value="timeline" label="Timeline" />
1569
1599
  {/if}
@@ -1576,238 +1606,257 @@ let totalEventsWaiting = $derived(Object.values(suspendStatus?.val ?? {}).reduce
1576
1606
  {/if}
1577
1607
  <Tab value="tracing" label="Tracing" />
1578
1608
  </Tabs>
1579
- {#if rightColumnSelect == 'timeline'}
1580
- <FlowTimeline
1581
- {localModuleStates}
1582
- {onSelectedIteration}
1583
- selfWaitTime={job?.self_wait_time_ms}
1584
- aggregateWaitTime={job?.aggregate_wait_time_ms}
1585
- flowDone={job?.['success'] != undefined}
1586
- bind:this={flowTimeline}
1587
- flowModules={allModulesForTimeline(
1588
- job?.raw_flow?.modules ?? [],
1589
- expandedSubflows ?? {}
1590
- )}
1591
- buildSubflowKey={(key) => buildSubflowKey(key, prefix)}
1592
- durationStatuses={localDurationStatuses}
1593
- />
1594
- {:else if rightColumnSelect == 'node_status'}
1595
- <div class="p-4 grow flex flex-col gap-6">
1596
- {#if selectedNode?.startsWith(AI_TOOL_MESSAGE_PREFIX)}
1597
- <div class="pt-2 pb-4">
1598
- <Alert
1599
- type="info"
1600
- title="Message output is available on the AI agent node"
1601
- />
1602
- </div>
1603
- {:else if selectedNode?.startsWith(AI_MCP_TOOL_CALL_PREFIX)}
1604
- {@const [, agentModuleId, toolCallIndex] = selectedNode.split('-')}
1605
- {@const agentNode = localModuleStates?.[agentModuleId]}
1606
- {@const agentActions = agentNode?.agent_actions}
1607
- {@const mcpActionIndex = parseInt(toolCallIndex)}
1608
- {@const mcpAction =
1609
- agentActions && mcpActionIndex >= 0 && mcpActionIndex < agentActions.length
1610
- ? agentActions[mcpActionIndex]
1611
- : undefined}
1612
- {#if mcpAction?.type === 'mcp_tool_call' && agentNode?.result?.messages}
1613
- {@const message = agentNode.result.messages.find(
1614
- (m: { agent_action?: { call_id?: string }; content?: any }) =>
1615
- m.agent_action?.call_id === mcpAction.call_id
1609
+ <div class="overflow-auto">
1610
+ {#if rightColumnSelect == 'timeline'}
1611
+ <FlowTimeline
1612
+ {localModuleStates}
1613
+ {onSelectedIteration}
1614
+ selfWaitTime={job?.self_wait_time_ms}
1615
+ aggregateWaitTime={job?.aggregate_wait_time_ms}
1616
+ flowDone={job?.['success'] != undefined}
1617
+ bind:this={flowTimeline}
1618
+ flowModules={allModulesForTimeline(
1619
+ job?.raw_flow?.modules ?? [],
1620
+ expandedSubflows ?? {}
1621
+ )}
1622
+ buildSubflowKey={(key) => buildSubflowKey(key, prefix)}
1623
+ durationStatuses={localDurationStatuses}
1624
+ />
1625
+ {:else if rightColumnSelect == 'node_status'}
1626
+ <div class="p-4 grow flex flex-col gap-6">
1627
+ {#if selectedNode?.startsWith(AI_TOOL_MESSAGE_PREFIX)}
1628
+ {@const [, agentModuleId, toolCallIndex] = selectedNode.split('-')}
1629
+ {@const agentNode = localModuleStates?.[agentModuleId]}
1630
+ {@const actionIndex = parseInt(toolCallIndex)}
1631
+ {@const messageContent = getAgentActionContent(
1632
+ agentNode?.result,
1633
+ actionIndex
1616
1634
  )}
1617
- <McpToolCallDetails
1618
- functionName={mcpAction.function_name}
1619
- args={mcpAction.arguments ?? {}}
1620
- result={message?.content}
1621
- type="Success"
1622
- workspaceId={job?.workspace_id}
1623
- />
1624
- {/if}
1625
- {:else if selectedNode?.startsWith(AI_WEBSEARCH_PREFIX)}
1626
- <Alert
1627
- type="info"
1628
- title="Web search output is available on the AI agent node"
1629
- />
1630
- {:else if selectedNode}
1631
- {@const node = localModuleStates[selectedNode]}
1632
- {#if selectedNode == 'end'}
1633
- <FlowJobResult
1634
- tagLabel={customUi?.tagLabel}
1635
- workspaceId={isReplay ? undefined : job?.workspace_id}
1636
- jobId={isReplay ? undefined : job?.id}
1637
- filename={job.id}
1638
- loading={job['running']}
1639
- tag={job?.tag}
1640
- col
1641
- result={job['result']}
1642
- logs={job.logs ?? ''}
1643
- downloadLogs={!hideDownloadLogs && !isReplay}
1644
- />
1645
- {:else if selectedNode == 'start'}
1646
- {#if job.args}
1647
- <JobArgs
1648
- id={isReplay ? undefined : job.id}
1649
- workspace={isReplay
1650
- ? undefined
1651
- : (job.workspace_id ?? $workspaceStore ?? 'no_w')}
1652
- args={job.args}
1653
- />
1654
- {:else}
1655
- <p class="text-secondary">No arguments</p>
1656
- {/if}
1657
- {:else if node}
1658
- {@const module =
1659
- stepDetail && typeof stepDetail !== 'string' ? stepDetail : undefined}
1660
- {@const agentTools =
1661
- module && module.value.type === 'aiagent'
1662
- ? module.value.tools
1663
- : undefined}
1664
- {@const parentLoopsPrefix = getParentLoopsPrefix(module?.id ?? '')}
1665
- {#if node.flow_jobs_results}
1635
+ {#if messageContent !== undefined && typeof messageContent === 'string'}
1666
1636
  <div>
1667
- <span class="pl-1 text-emphasis text-xs font-medium"
1668
- >Result of step as collection of all subflows</span
1669
- >
1670
- <div class="overflow-auto max-h-[200px] p-2">
1671
- <DisplayResult
1672
- workspaceId={isReplay ? undefined : job?.workspace_id}
1673
- result={node.flow_jobs_results}
1674
- nodeId={selectedNode}
1675
- jobId={isReplay ? undefined : job?.id}
1676
- language={job?.language}
1677
- />
1637
+ <div class="text-xs text-emphasis font-semibold mb-1">Message</div>
1638
+ <div class="border rounded p-2 overflow-auto max-h-[500px]">
1639
+ <GfmMarkdown md={messageContent} />
1678
1640
  </div>
1679
1641
  </div>
1642
+ {:else}
1643
+ <div class="pt-2 pb-4">
1644
+ <Alert
1645
+ type="info"
1646
+ title="Message output is available on the AI agent node"
1647
+ />
1648
+ </div>
1680
1649
  {/if}
1681
- <div class="flex flex-col gap-2">
1650
+ {:else if selectedNode?.startsWith(AI_MCP_TOOL_CALL_PREFIX)}
1651
+ {@const [, agentModuleId, toolCallIndex] = selectedNode.split('-')}
1652
+ {@const agentNode = localModuleStates?.[agentModuleId]}
1653
+ {@const agentActions = agentNode?.agent_actions}
1654
+ {@const mcpActionIndex = parseInt(toolCallIndex)}
1655
+ {@const mcpAction =
1656
+ agentActions &&
1657
+ mcpActionIndex >= 0 &&
1658
+ mcpActionIndex < agentActions.length
1659
+ ? agentActions[mcpActionIndex]
1660
+ : undefined}
1661
+ {#if mcpAction?.type === 'mcp_tool_call' && agentNode?.result?.messages}
1662
+ {@const message = agentNode.result.messages.find(
1663
+ (m: { agent_action?: { call_id?: string }; content?: any }) =>
1664
+ m.agent_action?.call_id === mcpAction.call_id
1665
+ )}
1666
+ <McpToolCallDetails
1667
+ functionName={mcpAction.function_name}
1668
+ args={mcpAction.arguments ?? {}}
1669
+ result={message?.content}
1670
+ type="Success"
1671
+ workspaceId={job?.workspace_id}
1672
+ />
1673
+ {/if}
1674
+ {:else if selectedNode?.startsWith(AI_WEBSEARCH_PREFIX)}
1675
+ <Alert type="info" title="Web search was used in this step" />
1676
+ {:else if selectedNode}
1677
+ {@const node = localModuleStates[selectedNode]}
1678
+ {#if selectedNode == 'end'}
1679
+ <FlowJobResult
1680
+ tagLabel={customUi?.tagLabel}
1681
+ workspaceId={isReplay ? undefined : job?.workspace_id}
1682
+ jobId={isReplay ? undefined : job?.id}
1683
+ filename={job.id}
1684
+ loading={job['running']}
1685
+ tag={job?.tag}
1686
+ col
1687
+ result={job['result']}
1688
+ logs={job.logs ?? ''}
1689
+ downloadLogs={!hideDownloadLogs && !isReplay}
1690
+ />
1691
+ {:else if selectedNode == 'start'}
1692
+ {#if job.args}
1693
+ <JobArgs
1694
+ id={isReplay ? undefined : job.id}
1695
+ workspace={isReplay
1696
+ ? undefined
1697
+ : (job.workspace_id ?? $workspaceStore ?? 'no_w')}
1698
+ args={job.args}
1699
+ />
1700
+ {:else}
1701
+ <p class="text-secondary">No arguments</p>
1702
+ {/if}
1703
+ {:else if node}
1704
+ {@const module =
1705
+ stepDetail && typeof stepDetail !== 'string' ? stepDetail : undefined}
1706
+ {@const agentTools =
1707
+ module && module.value.type === 'aiagent'
1708
+ ? module.value.tools
1709
+ : undefined}
1710
+ {@const parentLoopsPrefix = getParentLoopsPrefix(module?.id ?? '')}
1682
1711
  {#if node.flow_jobs_results}
1683
- <span class="pl-1 text-xs font-medium text-emphasis pt-4"
1684
- >Selected subflow</span
1685
- >
1712
+ <div>
1713
+ <span class="pl-1 text-emphasis text-xs font-medium"
1714
+ >Result of step as collection of all subflows</span
1715
+ >
1716
+ <div class="overflow-auto max-h-[200px] p-2">
1717
+ <DisplayResult
1718
+ workspaceId={isReplay ? undefined : job?.workspace_id}
1719
+ result={node.flow_jobs_results}
1720
+ nodeId={selectedNode}
1721
+ jobId={isReplay ? undefined : job?.id}
1722
+ language={job?.language}
1723
+ />
1724
+ </div>
1725
+ </div>
1686
1726
  {/if}
1687
- <div class="flex flex-col gap-6">
1727
+ <div class="flex flex-col gap-2">
1728
+ {#if node.flow_jobs_results}
1729
+ <span class="pl-1 text-xs font-medium text-emphasis pt-4"
1730
+ >Selected subflow</span
1731
+ >
1732
+ {/if}
1688
1733
  <div class="flex flex-col gap-6">
1689
- <div class="flex gap-2 min-w-0 w-full items-center">
1690
- <ModuleStatus
1691
- type={node.type}
1692
- scheduled_for={node.scheduled_for}
1693
- skipped={node.skipped}
1694
- />
1695
- {#if node.duration_ms}
1696
- <Badge>
1697
- <Hourglass class="mr-2" size={10} />
1698
- {msToSec(node.duration_ms)} s
1699
- </Badge>
1734
+ <div class="flex flex-col gap-6">
1735
+ <div class="flex gap-2 min-w-0 w-full items-center">
1736
+ <ModuleStatus
1737
+ type={node.type}
1738
+ scheduled_for={node.scheduled_for}
1739
+ skipped={node.skipped}
1740
+ />
1741
+ {#if node.duration_ms}
1742
+ <Badge>
1743
+ <Hourglass class="mr-2" size={10} />
1744
+ {msToSec(node.duration_ms)} s
1745
+ </Badge>
1746
+ {/if}
1747
+ {#if node.job_id && !isReplay}
1748
+ <div class="grow w-full flex flex-row-reverse">
1749
+ <a
1750
+ class="text-right text-xs"
1751
+ rel="noreferrer"
1752
+ target="_blank"
1753
+ href="{base}/run/{node.job_id ??
1754
+ ''}?workspace={job?.workspace_id}"
1755
+ >
1756
+ {truncateRev(node.job_id ?? '', 10)}
1757
+ <ExternalLink size={12} class="inline-block" />
1758
+ </a>
1759
+ </div>
1760
+ {/if}
1761
+ </div>
1762
+ {#if !node.isListJob}
1763
+ <div>
1764
+ <div class="text-xs text-emphasis font-semibold mb-1"
1765
+ >Inputs</div
1766
+ >
1767
+ <JobArgs
1768
+ id={isReplay ? undefined : node.job_id}
1769
+ workspace={isReplay
1770
+ ? undefined
1771
+ : (job.workspace_id ?? $workspaceStore ?? 'no_w')}
1772
+ args={node.args}
1773
+ />
1774
+ </div>
1700
1775
  {/if}
1701
- {#if node.job_id && !isReplay}
1702
- <div class="grow w-full flex flex-row-reverse">
1703
- <a
1704
- class="text-right text-xs"
1705
- rel="noreferrer"
1706
- target="_blank"
1707
- href="{base}/run/{node.job_id ??
1708
- ''}?workspace={job?.workspace_id}"
1776
+ {#if node.workflow_as_code_status}
1777
+ <div>
1778
+ <div class="text-xs text-emphasis font-semibold mb-1"
1779
+ >Workflow timeline</div
1709
1780
  >
1710
- {truncateRev(node.job_id ?? '', 10)}
1711
- <ExternalLink size={12} class="inline-block" />
1712
- </a>
1781
+ <WorkflowTimeline
1782
+ flow_status={asWorkflowStatus(node.workflow_as_code_status)}
1783
+ flowDone={node.type === 'Success' || node.type === 'Failure'}
1784
+ stepResults={getStepResults(node.workflow_as_code_status)}
1785
+ result={node.result}
1786
+ success={node.type === 'Success'}
1787
+ jobId={node.job_id}
1788
+ />
1713
1789
  </div>
1714
1790
  {/if}
1715
1791
  </div>
1716
- {#if !node.isListJob}
1717
- <div>
1718
- <div class="text-xs text-emphasis font-semibold mb-1">Inputs</div>
1719
- <JobArgs
1720
- id={isReplay ? undefined : node.job_id}
1721
- workspace={isReplay
1722
- ? undefined
1723
- : (job.workspace_id ?? $workspaceStore ?? 'no_w')}
1724
- args={node.args}
1725
- />
1726
- </div>
1727
- {/if}
1728
- {#if node.workflow_as_code_status}
1729
- <div>
1730
- <div class="text-xs text-emphasis font-semibold mb-1"
1731
- >Workflow timeline</div
1732
- >
1733
- <WorkflowTimeline
1734
- flow_status={asWorkflowStatus(node.workflow_as_code_status)}
1735
- flowDone={node.type === 'Success' || node.type === 'Failure'}
1736
- stepResults={getStepResults(node.workflow_as_code_status)}
1737
- result={node.result}
1738
- success={node.type === 'Success'}
1739
- jobId={node.job_id}
1740
- />
1741
- </div>
1742
- {/if}
1743
- </div>
1744
- <FlowJobResult
1745
- tagLabel={customUi?.tagLabel}
1746
- workspaceId={isReplay ? undefined : job?.workspace_id}
1747
- jobId={isReplay ? undefined : node.job_id}
1748
- loading={node.type != 'Success' && node.type != 'Failure'}
1749
- waitingForExecutor={node.type == 'WaitingForExecutor'}
1750
- refreshLog={node.type == 'InProgress'}
1751
- col
1752
- result_stream={resultStreams[node.job_id ?? '']}
1753
- result={node.result}
1754
- tag={node.tag}
1755
- logs={node.logs}
1756
- downloadLogs={!hideDownloadLogs && !isReplay}
1757
- aiAgentStatus={agentTools &&
1758
- node?.job_id &&
1759
- (node.type === 'Success' || node.type === 'Failure')
1760
- ? {
1761
- tools: agentTools,
1762
- agentJob: {
1763
- id: node.job_id,
1764
- result: node.result,
1765
- logs: node.logs,
1766
- args: node.args,
1767
- success: node.type === 'Success',
1768
- type: 'CompletedJob'
1769
- },
1770
- storedToolCallJobs: module
1771
- ? toolCallStore?.getLocalToolCallJobs(parentLoopsPrefix)
1772
- : undefined,
1773
- onToolJobLoaded: (job, idx) => {
1774
- if (module) {
1775
- const storeKey = parentLoopsPrefix + module.id + '-' + idx
1776
- toolCallStore?.setStoredToolCallJob(storeKey, job)
1792
+ <FlowJobResult
1793
+ tagLabel={customUi?.tagLabel}
1794
+ workspaceId={isReplay ? undefined : job?.workspace_id}
1795
+ jobId={isReplay ? undefined : node.job_id}
1796
+ loading={node.type != 'Success' && node.type != 'Failure'}
1797
+ waitingForExecutor={node.type == 'WaitingForExecutor'}
1798
+ refreshLog={node.type == 'InProgress'}
1799
+ col
1800
+ result_stream={resultStreams[node.job_id ?? '']}
1801
+ result={node.result}
1802
+ tag={node.tag}
1803
+ logs={node.logs}
1804
+ downloadLogs={!hideDownloadLogs && !isReplay}
1805
+ aiAgentStatus={agentTools &&
1806
+ node?.job_id &&
1807
+ (node.type === 'Success' || node.type === 'Failure')
1808
+ ? {
1809
+ tools: agentTools,
1810
+ agentJob: {
1811
+ id: node.job_id,
1812
+ result: node.result,
1813
+ logs: node.logs,
1814
+ args: node.args,
1815
+ success: node.type === 'Success',
1816
+ type: 'CompletedJob'
1817
+ },
1818
+ storedToolCallJobs: module
1819
+ ? toolCallStore?.getLocalToolCallJobs(parentLoopsPrefix)
1820
+ : undefined,
1821
+ onToolJobLoaded: (job, idx) => {
1822
+ if (module) {
1823
+ const storeKey = parentLoopsPrefix + module.id + '-' + idx
1824
+ toolCallStore?.setStoredToolCallJob(storeKey, job)
1825
+ }
1777
1826
  }
1778
1827
  }
1779
- }
1780
- : undefined}
1781
- />
1828
+ : undefined}
1829
+ />
1830
+ </div>
1782
1831
  </div>
1783
- </div>
1784
- {:else}
1785
- <p class="p-2 text-primary italic"
1786
- >The execution of this node has no information attached to it. The job
1787
- likely did not run yet</p
1788
- >
1789
- {/if}
1790
- {:else}<p class="text-secondary text-xs italic"
1791
- >Select a node to see its details here</p
1792
- >{/if}
1793
- </div>
1794
- {:else if rightColumnSelect == 'node_definition'}
1795
- {@const node = selectedNode ? localModuleStates[selectedNode] : undefined}
1796
- <FlowGraphViewerStep {stepDetail} jobScriptHash={node?.script_hash} />
1797
- {:else if rightColumnSelect == 'user_states'}
1798
- <div class="p-2">
1799
- <JobArgs argLabel="Key" args={job?.flow_status?.user_states ?? {}} />
1800
- </div>
1801
- {:else if rightColumnSelect == 'tracing'}
1802
- {@const node = selectedNode ? localModuleStates[selectedNode] : undefined}
1803
- {#if node?.job_id}
1804
- <JobOtelTraces jobId={node.job_id} />
1805
- {:else}
1806
- <div class="p-4 text-secondary text-xs italic"
1807
- >Select a node with a job to see HTTP request traces</div
1808
- >
1832
+ {:else}
1833
+ <p class="p-2 text-primary italic"
1834
+ >The execution of this node has no information attached to it. The job
1835
+ likely did not run yet</p
1836
+ >
1837
+ {/if}
1838
+ {:else}<p class="text-secondary text-xs italic"
1839
+ >Select a node to see its details here</p
1840
+ >{/if}
1841
+ </div>
1842
+ {:else if rightColumnSelect == 'node_definition'}
1843
+ {@const node = selectedNode ? localModuleStates[selectedNode] : undefined}
1844
+ <FlowGraphViewerStep {stepDetail} jobScriptHash={node?.script_hash} />
1845
+ {:else if rightColumnSelect == 'user_states'}
1846
+ <div class="p-2">
1847
+ <JobArgs argLabel="Key" args={job?.flow_status?.user_states ?? {}} />
1848
+ </div>
1849
+ {:else if rightColumnSelect == 'tracing'}
1850
+ {@const node = selectedNode ? localModuleStates[selectedNode] : undefined}
1851
+ {#if node?.job_id}
1852
+ <JobOtelTraces jobId={node.job_id} />
1853
+ {:else}
1854
+ <div class="p-4 text-secondary text-xs italic"
1855
+ >Select a node with a job to see HTTP request traces</div
1856
+ >
1857
+ {/if}
1809
1858
  {/if}
1810
- {/if}
1859
+ </div>
1811
1860
  </div>
1812
1861
  </Pane>
1813
1862
  </Splitpanes>
@@ -110,7 +110,7 @@ const barHeight = 32;
110
110
  height={Math.min(400, (subItems?.length ?? 0) * barHeight)}
111
111
  itemCount={subItems?.length ?? 0}
112
112
  itemSize={barHeight}
113
- getKey={(index) => subItems?.[index]?.id}
113
+ getKey={(index) => subItems?.[index]?.id ?? `_${index}`}
114
114
  >
115
115
  {#snippet item({ index, style })}
116
116
  {@const b = subItems?.[index]}