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
@@ -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]}