n8n-editor-ui 1.115.1 → 1.116.1

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 (210) hide show
  1. package/.build/cache-marker +1 -1
  2. package/.build/node-popularity.json +1844 -1844
  3. package/dist/assets/{AddDataStoreModal-DxLlmnRh.js → AddDataTableModal-BWWNocvE.js} +32 -32
  4. package/dist/assets/{AddDataStoreModal-B7jBhCjt.css → AddDataTableModal-BzS5Yqag.css} +6 -6
  5. package/dist/assets/{AnimatedSpinner-DR4QrGrL.js → AnimatedSpinner-DFjfUB--.js} +1 -1
  6. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BfGhW9R4.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-AwTdMVsi.js} +1 -1
  7. package/dist/assets/{AuthView-CWVio_MZ.css → AuthView-BvfgleDU.css} +30 -30
  8. package/dist/assets/{AuthView-BUfRQlip.js → AuthView-CPPX5tYt.js} +14 -14
  9. package/dist/assets/{ChangePasswordView-hnVcBOdZ.js → ChangePasswordView-D_VXG-a6.js} +3 -3
  10. package/dist/assets/ChatSidebar-C0s-SoxK.js +117 -0
  11. package/dist/assets/ChatSidebar-wKAC9nrh.css +165 -0
  12. package/dist/assets/ChatView-ClX1FsZV.css +657 -0
  13. package/dist/assets/ChatView-DLlPfas8.js +805 -0
  14. package/dist/assets/CollectionParameter-CYHkGO0F.js +4 -0
  15. package/dist/assets/{CredentialsView-DYbozDMz.js → CredentialsView-BipY16I_.js} +15 -15
  16. package/dist/assets/{CredentialsView-BAqjGrNq.css → CredentialsView-C9uo2Njh.css} +14 -14
  17. package/dist/assets/{DataStoreActions.vue_vue_type_script_setup_true_lang-_Q8OXvzI.js → DataTableActions.vue_vue_type_script_setup_true_lang-B_Q2_4UV.js} +21 -21
  18. package/dist/assets/{DataStoreDetailsView-Bc-J9ZrW.css → DataTableDetailsView-BOmb3x4S.css} +138 -138
  19. package/dist/assets/{DataStoreDetailsView-DN1DvV53.js → DataTableDetailsView-Fi-LWBLm.js} +538 -525
  20. package/dist/assets/{DataStoreView-BqQv7QeU.css → DataTableView-ByKnlVtU.css} +14 -14
  21. package/dist/assets/{DataStoreView-BNU_I-gX.js → DataTableView-CFOQzQI7.js} +68 -68
  22. package/dist/assets/{DemoFooter-rHoOk6iK.js → DemoFooter-J9LQ705n.js} +5 -5
  23. package/dist/assets/{EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-DWIEvR1-.js → EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-BiphSIS4.js} +1 -1
  24. package/dist/assets/{EntityNotFound-DAi6p29d.js → EntityNotFound-CYQqRNOB.js} +2 -2
  25. package/dist/assets/EntityNotFound-CargndZm.css +10 -0
  26. package/dist/assets/EntityUnAuthorised-Deb2bHNC.css +10 -0
  27. package/dist/assets/{EntityUnAuthorised-8E-9FBHe.js → EntityUnAuthorised-DetfwCtv.js} +2 -2
  28. package/dist/assets/{ErrorView-DPS9icAS.css → ErrorView-D2OMvGTk.css} +8 -8
  29. package/dist/assets/{ErrorView-y79cILv4.js → ErrorView-qxP6uTVl.js} +4 -4
  30. package/dist/assets/{EvaluationsRootView-B5AhHo41.css → EvaluationsRootView-7FGhfEKm.css} +48 -48
  31. package/dist/assets/{EvaluationsRootView-CWelItmD.js → EvaluationsRootView-BueMulsE.js} +22 -22
  32. package/dist/assets/{EvaluationsView-BTyYfInB.css → EvaluationsView-DsfXDJ-U.css} +35 -35
  33. package/dist/assets/{EvaluationsView-C0X9064k.js → EvaluationsView-gk_juymK.js} +27 -27
  34. package/dist/assets/{ExecutionsTime-B5dXCTxD.css → ExecutionsTime-BGpurJsp.css} +41 -41
  35. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-CmtPBoIQ.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-8mG-89V4.js} +16 -16
  36. package/dist/assets/{ExecutionsView-DRsBgt5L.js → ExecutionsView-0KpKg6S4.js} +18 -18
  37. package/dist/assets/{ExecutionsView-BxsSXnlU.css → ExecutionsView-BbH7fInw.css} +14 -14
  38. package/dist/assets/{FixedCollectionParameter-Bhdk1XcN.js → FixedCollectionParameter-B9qkRreb.js} +2 -2
  39. package/dist/assets/{FixedCollectionParameter-D3u3aCCk.css → FixedCollectionParameter-D82suS6W.css} +43 -43
  40. package/dist/assets/{ForgotMyPasswordView-C-GNSvtY.js → ForgotMyPasswordView-C1kfYO_S.js} +3 -3
  41. package/dist/assets/{InfoAccordion-BpibqNsS.js → InfoAccordion-B_T19Esx.js} +7 -7
  42. package/dist/assets/{InfoAccordion-dxudNqVC.css → InfoAccordion-BuKidEQb.css} +13 -13
  43. package/dist/assets/{InsightsChartAverageRuntime-CwkkxEk1.js → InsightsChartAverageRuntime-IISuKphn.js} +4 -4
  44. package/dist/assets/{InsightsChartFailed-Di6uVDGI.js → InsightsChartFailed-DRHEEzJU.js} +5 -5
  45. package/dist/assets/{InsightsChartFailureRate-Bl5Av3Eu.js → InsightsChartFailureRate-D1L6WYZP.js} +5 -5
  46. package/dist/assets/{InsightsChartTimeSaved-Bcup49B9.js → InsightsChartTimeSaved-zCEK3kuY.js} +4 -4
  47. package/dist/assets/{InsightsChartTotal-DnEUMCMt.js → InsightsChartTotal-DW-EkNtK.js} +5 -5
  48. package/dist/assets/{InsightsDashboard-luJ134I5.js → InsightsDashboard-DfpOZ30S.js} +21 -21
  49. package/dist/assets/{InsightsDashboard-CYAx_0X9.css → InsightsDashboard-DyOwzHmP.css} +25 -25
  50. package/dist/assets/{InsightsPaywall-BEXUk0T6.js → InsightsPaywall-CKH7O7yd.js} +1 -1
  51. package/dist/assets/{InsightsSummary-DTFIhBF3.css → InsightsSummary-BazqPYQ0.css} +52 -52
  52. package/dist/assets/{InsightsSummary-XxOp2tas.js → InsightsSummary-ChZNMeJI.js} +11 -11
  53. package/dist/assets/{InsightsTableWorkflows-BTHSCwX8.css → InsightsTableWorkflows-D20Yb7ZW.css} +8 -8
  54. package/dist/assets/{InsightsTableWorkflows-B4re5fkw.js → InsightsTableWorkflows-DwLRkvVL.js} +7 -7
  55. package/dist/assets/{Logo-CSmRCqF2.css → Logo-BU1oDo5-.css} +16 -16
  56. package/dist/assets/{Logo-91TLwfCH.js → Logo-Bgcx_T7R.js} +7 -7
  57. package/dist/assets/{LogsPanel-BWP7EQ84.js → LogsPanel-BCUqUR29.js} +141 -1091
  58. package/dist/assets/{LogsPanel-BE9Gl1z0.css → LogsPanel-DVmpE0zV.css} +160 -592
  59. package/dist/assets/{MainHeader-DIiyDT8d.css → MainHeader-BqJwA1aC.css} +117 -117
  60. package/dist/assets/{MainHeader-BaSUt6eJ.js → MainHeader-BzhBs3En.js} +45 -45
  61. package/dist/assets/{MainSidebar-C4cyDjUV.js → MainSidebar-Bf48nTMR.js} +69 -1133
  62. package/dist/assets/{MainSidebar-BT8sXxNa.css → MainSidebar-tTEyXOKH.css} +107 -279
  63. package/dist/assets/NavigationDropdown-Wb7mPGhl.css +187 -0
  64. package/dist/assets/NavigationDropdown-kfg0blbZ.js +1116 -0
  65. package/dist/assets/{NodeCreation-C4gQlPqI.css → NodeCreation-B1fOtARK.css} +6 -6
  66. package/dist/assets/{NodeCreation-BkqOy8gF.js → NodeCreation-CsCoqAnU.js} +12 -10
  67. package/dist/assets/{NodeCreator-COTYfPaK.css → NodeCreator-CamUhvMk.css} +175 -174
  68. package/dist/assets/{NodeCreator-BppRTVIa.js → NodeCreator-D45qQQ4H.js} +60 -64
  69. package/dist/assets/{NodeDetailsView-BuhpInfo.js → NodeDetailsView-6bLQaVHT.js} +33 -32
  70. package/dist/assets/{NodeDetailsView-CBYV4Rrz.css → NodeDetailsView-D3QAo3SF.css} +61 -61
  71. package/dist/assets/{NodeDetailsViewV2-C0bp_zCD.js → NodeDetailsViewV2-DRCY6EX6.js} +58 -69
  72. package/dist/assets/{NodeDetailsViewV2-J_3cfdea.css → NodeDetailsViewV2-bvXejqU_.css} +67 -60
  73. package/dist/assets/{NodeView-Bsq1Fh0D.css → NodeView-BhF0ieQM.css} +85 -85
  74. package/dist/assets/{NodeView-B9LYqx2z.js → NodeView-C9PvNIUz.js} +106 -95
  75. package/dist/assets/{PageViewLayout-CJlzbuVj.css → PageViewLayout-BIiboMgG.css} +5 -5
  76. package/dist/assets/{PageViewLayout-B8D8Tkxn.js → PageViewLayout-DNBKIQ4N.js} +3 -3
  77. package/dist/assets/{PrebuiltAgentTemplatesView-DZAkWI4E.js → PrebuiltAgentTemplatesView-C0Uqhzma.js} +9 -9
  78. package/dist/assets/{PrebuiltAgentTemplatesView-COxu7Iih.css → PrebuiltAgentTemplatesView-jF7HvWnL.css} +14 -14
  79. package/dist/assets/{ProjectBreadcrumb-B1Hnf5da.css → ProjectBreadcrumb-BNbnf7Ir.css} +96 -96
  80. package/dist/assets/{ProjectBreadcrumb-HI65z9tX.js → ProjectBreadcrumb-w-ZQjuc2.js} +22 -22
  81. package/dist/assets/{ProjectHeader-BzekhnTR.js → ProjectHeader-DG_Z0cm0.js} +36 -18
  82. package/dist/assets/{ProjectHeader-BNMKpvzV.css → ProjectHeader-TKKq6OrY.css} +15 -15
  83. package/dist/assets/{ProjectSettings-BTP0xrzD.js → ProjectSettings-ClU4oaU3.js} +26 -26
  84. package/dist/assets/{ProjectSettings-Cj1kC16G.css → ProjectSettings-c2BBLEzY.css} +60 -60
  85. package/dist/assets/ProjectVariables-B76TEE5o.js +532 -0
  86. package/dist/assets/ProjectVariables-DtGcMnSf.css +293 -0
  87. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-DflOVayR.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-C7mROgKI.js} +1 -1
  88. package/dist/assets/{ResourcesListLayout-Dm7w49bu.css → ResourcesListLayout-CY-G3BmN.css} +42 -42
  89. package/dist/assets/{ResourcesListLayout-CnidC9EV.js → ResourcesListLayout-Db6ys3gY.js} +25 -21
  90. package/dist/assets/{RunDataJson-DEs4Ql5T.js → RunDataJson-CXyTvX4C.js} +8 -8
  91. package/dist/assets/{RunDataJson-BH9HLoGC.css → RunDataJson-PAkTmkZf.css} +19 -19
  92. package/dist/assets/{RunDataJsonActions-Ct02vlvz.js → RunDataJsonActions-C5Cvqjc_.js} +2 -2
  93. package/dist/assets/{RunDataJsonActions-B2jW3_UG.css → RunDataJsonActions-CZx7rSSE.css} +2 -2
  94. package/dist/assets/{RunDataParsedAiContent-Bl49tvwG.js → RunDataParsedAiContent-BkNc-yBy.js} +13 -112
  95. package/dist/assets/{RunDataParsedAiContent-wfIiKsq7.css → RunDataParsedAiContent-CvjNCtpG.css} +37 -37
  96. package/dist/assets/{RunDataSearch-D8DXH4rw.js → RunDataSearch-CBsWlIj1.js} +4 -4
  97. package/dist/assets/{RunDataSearch-2eEalFoi.css → RunDataSearch-CPo36NE_.css} +10 -10
  98. package/dist/assets/{RunDataTable-BZzteeuj.css → RunDataTable-C4QnrVVF.css} +104 -104
  99. package/dist/assets/{RunDataTable-CdxTnMd4.js → RunDataTable-FKsWIgfg.js} +33 -33
  100. package/dist/assets/{SamlOnboarding-CLFzc3D4.js → SamlOnboarding--cNSub8q.js} +3 -3
  101. package/dist/assets/{SelectedItemsInfo-Dl4uynXs.css → SelectedItemsInfo-B6Rq6uIe.css} +7 -7
  102. package/dist/assets/{SelectedItemsInfo-Dd3HKZ6z.js → SelectedItemsInfo-BOQrOU8d.js} +3 -3
  103. package/dist/assets/{SettingsApiView-CmU8R9-c.js → SettingsApiView-DkPpP_Xa.js} +14 -14
  104. package/dist/assets/{SettingsApiView-k1hALKCX.css → SettingsApiView-Dtl_N9mK.css} +31 -31
  105. package/dist/assets/{SettingsCommunityNodesView-CAggjsaT.css → SettingsCommunityNodesView-CVQjV37D.css} +31 -31
  106. package/dist/assets/{SettingsCommunityNodesView-CjgVPZAy.js → SettingsCommunityNodesView-CypE1wWW.js} +21 -21
  107. package/dist/assets/{SettingsExternalSecrets-BAX9ENm9.css → SettingsExternalSecrets-CaiOf7cD.css} +12 -12
  108. package/dist/assets/{SettingsExternalSecrets-Baxom4lP.js → SettingsExternalSecrets-Dw8qeVlx.js} +8 -8
  109. package/dist/assets/{SettingsLdapView-BQUfzAsN.js → SettingsLdapView-CQXdsBfZ.js} +8 -8
  110. package/dist/assets/{SettingsLdapView-D0SUO3ai.css → SettingsLdapView-KgMO_1GA.css} +17 -17
  111. package/dist/assets/{SettingsLogStreamingView-Bq2IwWDt.js → SettingsLogStreamingView-B-0r_ZsJ.js} +7 -7
  112. package/dist/assets/{SettingsLogStreamingView-CflEMmu9.css → SettingsLogStreamingView-xo-rTSA0.css} +12 -12
  113. package/dist/assets/SettingsMCPView-BBO_ZyBU.css +552 -0
  114. package/dist/assets/{SettingsMCPView-D3BOHCtS.js → SettingsMCPView-Bbdsa8lu.js} +200 -126
  115. package/dist/assets/{SettingsPersonalView-Bt8bL5tJ.css → SettingsPersonalView-D6LtKnaF.css} +23 -23
  116. package/dist/assets/{SettingsPersonalView-Bbn0olns.js → SettingsPersonalView-VU8Kh83i.js} +10 -10
  117. package/dist/assets/{SettingsSourceControl-BBxJXbFC.css → SettingsSourceControl-C6pfOcuv.css} +40 -40
  118. package/dist/assets/{SettingsSourceControl-CC_Pak2B.js → SettingsSourceControl-CJvfstK0.js} +15 -15
  119. package/dist/assets/{SettingsSso-vViqB8oe.js → SettingsSso-v2r9nirX.js} +7 -7
  120. package/dist/assets/{SettingsSso-D4HKPLvV.css → SettingsSso-w7Iz4Luy.css} +25 -25
  121. package/dist/assets/{SettingsUsageAndPlan-BtE-s9Vb.js → SettingsUsageAndPlan-BhgN2Hcc.js} +13 -13
  122. package/dist/assets/{SettingsUsageAndPlan-82J0IcdW.css → SettingsUsageAndPlan-Cct79Zta.css} +34 -34
  123. package/dist/assets/{SettingsUsersView-DVdCq-SX.js → SettingsUsersView-CApxIHLx.js} +16 -16
  124. package/dist/assets/{SettingsUsersView-BG7JdfYz.css → SettingsUsersView-CfJcVjkl.css} +28 -28
  125. package/dist/assets/{SettingsView-BHLJBEJF.css → SettingsView-C4aA4kVV.css} +18 -18
  126. package/dist/assets/{SettingsView-ByNIw76r.js → SettingsView-Dru_1OUG.js} +8 -8
  127. package/dist/assets/{SetupView-XbSIMu9B.js → SetupView-Bh4XpOq8.js} +3 -3
  128. package/dist/assets/{SetupWorkflowCredentialsButton-CUzPtmot.js → SetupWorkflowCredentialsButton-6T0EX3L6.js} +1 -1
  129. package/dist/assets/{SetupWorkflowFromTemplateView-ZPJL_m2F.css → SetupWorkflowFromTemplateView-CU2iGJTa.css} +11 -11
  130. package/dist/assets/{SetupWorkflowFromTemplateView-CQcMUEt1.js → SetupWorkflowFromTemplateView-EJjV79MY.js} +8 -8
  131. package/dist/assets/{SigninView-D57wRRHz.css → SigninView-BQgsTN8o.css} +13 -13
  132. package/dist/assets/{SigninView-C8qujIEW.js → SigninView-DKLEwC5i.js} +9 -9
  133. package/dist/assets/{SignoutView-BCsXtAKk.js → SignoutView-xza1c_rm.js} +1 -1
  134. package/dist/assets/{SignupView-By-KjS2P.js → SignupView-DnZEsYnl.js} +3 -3
  135. package/dist/assets/{TableBase-CX4nZLla.js → TableBase-B1eTsHT8.js} +3 -3
  136. package/dist/assets/{TableBase-Bf42_9Yp.css → TableBase-CUZbI5pm.css} +24 -24
  137. package/dist/assets/{Tags-CCemj7t9.css → Tags-6vh_jPIG.css} +4 -4
  138. package/dist/assets/{Tags-D03vT_rK.js → Tags-DpegReyF.js} +2 -2
  139. package/dist/assets/{TemplateDetails-DyUqVhf2.css → TemplateDetails-DfyKyMyy.css} +13 -13
  140. package/dist/assets/{TemplateDetails-CDaB-6oH.js → TemplateDetails-lJNnuxdO.js} +8 -8
  141. package/dist/assets/{TemplateList-DNBeV62H.js → TemplateList-BHbHvx-_.js} +24 -24
  142. package/dist/assets/{TemplateList-XNW-2Ugr.css → TemplateList-CNUtq0N7.css} +49 -49
  143. package/dist/assets/{TemplatesCollectionView-BTk7wBlq.js → TemplatesCollectionView-BijeS4Al.js} +13 -13
  144. package/dist/assets/{TemplatesCollectionView-2q1rzsOG.css → TemplatesCollectionView-klb8FT9y.css} +13 -13
  145. package/dist/assets/{TemplatesSearchView-DtyBPi6V.js → TemplatesSearchView-Db14LD0F.js} +18 -18
  146. package/dist/assets/{TemplatesSearchView-DETaMpDt.css → TemplatesSearchView-gPmmtwoU.css} +50 -50
  147. package/dist/assets/{TemplatesView-BTid6_ga.js → TemplatesView-BTxutjLU.js} +8 -8
  148. package/dist/assets/{TemplatesView-Cyu28Dlo.css → TemplatesView-BgdyYmrL.css} +21 -21
  149. package/dist/assets/{TemplatesWorkflowView-DpIiJjJp.css → TemplatesWorkflowView-CBjRBbmw.css} +17 -17
  150. package/dist/assets/{TemplatesWorkflowView-CLr9pY-p.js → TemplatesWorkflowView-xFif3ij7.js} +14 -14
  151. package/dist/assets/{TestRunDetailView-BDPhxOvY.js → TestRunDetailView-BRfLAqZW.js} +36 -36
  152. package/dist/assets/{TestRunDetailView--lZbJq4u.css → TestRunDetailView-D_a9QpSQ.css} +93 -93
  153. package/dist/assets/{TriggerPanel-CQgUdcjv.css → TriggerPanel-BbB_P9ZT.css} +158 -236
  154. package/dist/assets/TriggerPanel-nPxZrihp.js +1633 -0
  155. package/dist/assets/VariablesUsageBadge-BaTs74dX.js +39 -0
  156. package/dist/assets/VariablesUsageBadge-C_yi7Lw5.css +129 -0
  157. package/dist/assets/{VariablesView-DsA8Mqxt.js → VariablesView-BeHRHeb1.js} +11 -52
  158. package/dist/assets/VariablesView-zN910qd9.css +272 -0
  159. package/dist/assets/{WorkerView-BrSoYcbf.css → WorkerView-4m_NaoAx.css} +47 -47
  160. package/dist/assets/{WorkerView-CDijwoCe.js → WorkerView-LAFQqBrx.js} +39 -39
  161. package/dist/assets/{WorkflowActivator-DKpc2Acz.js → WorkflowActivator-BdIK7K-g.js} +7 -7
  162. package/dist/assets/{WorkflowActivator-DPDRDtQG.css → WorkflowActivator-DBJbtrBD.css} +9 -9
  163. package/dist/assets/{WorkflowExecutionsInfoAccordion-53bC-IXN.css → WorkflowExecutionsInfoAccordion-CEOvJ-SX.css} +11 -11
  164. package/dist/assets/{WorkflowExecutionsInfoAccordion-Fedus-Da.js → WorkflowExecutionsInfoAccordion-kaRsv7EW.js} +4 -4
  165. package/dist/assets/{WorkflowExecutionsLandingPage-BpO-BoFq.js → WorkflowExecutionsLandingPage-BdMQTvlG.js} +6 -6
  166. package/dist/assets/{WorkflowExecutionsLandingPage-Bm_hJMl4.css → WorkflowExecutionsLandingPage-DMldlKod.css} +8 -8
  167. package/dist/assets/{WorkflowExecutionsPreview-Cd4BrS-0.css → WorkflowExecutionsPreview-CkEakQp2.css} +90 -90
  168. package/dist/assets/{WorkflowExecutionsPreview-DzvPOJOY.js → WorkflowExecutionsPreview-DoAsEchV.js} +46 -46
  169. package/dist/assets/{WorkflowExecutionsView-DDoqUcYQ.js → WorkflowExecutionsView-Cl1624bM.js} +34 -34
  170. package/dist/assets/{WorkflowExecutionsView-Bjkudb8L.css → WorkflowExecutionsView-CqRMwPwF.css} +82 -82
  171. package/dist/assets/{WorkflowHistory-7Ad0Va7M.css → WorkflowHistory-BmerBiKz.css} +71 -71
  172. package/dist/assets/{WorkflowHistory-BhU1Rfch.js → WorkflowHistory-DcGYJnXH.js} +21 -21
  173. package/dist/assets/{WorkflowOnboardingView-BqWP7FwD.js → WorkflowOnboardingView-Ci32PYxq.js} +1 -1
  174. package/dist/assets/{WorkflowPreview-B1W62QhC.js → WorkflowPreview-B8KvmFRP.js} +8 -8
  175. package/dist/assets/{WorkflowPreview-CIOAVgxK.css → WorkflowPreview-Bt03akXc.css} +8 -8
  176. package/dist/assets/{WorkflowsView-B-pO60w1.js → WorkflowsView-BFZrfitq.js} +79 -83
  177. package/dist/assets/{WorkflowsView-B8UKso1P.css → WorkflowsView-GJhG9SFw.css} +144 -144
  178. package/dist/assets/{chartjs.utils-DpK-YRAM.js → chartjs.utils-nj8CCZPZ.js} +10 -10
  179. package/dist/assets/chat.utils-irsHFh8G.js +224 -0
  180. package/dist/assets/{core-HZaYo_tU.js → core-DsTi4w-I.js} +1 -1
  181. package/dist/assets/{evaluation-ZbMdquW3.css → evaluation-BpIei8SG.css} +26 -26
  182. package/dist/assets/{evaluation.constants-DfiJmRyk.js → evaluation.constants-DjPrCMEi.js} +9 -9
  183. package/dist/assets/{global-link-actions-DdzlWwjw.js → global-link-actions-DSKsOCqo.js} +1 -1
  184. package/dist/assets/{index-CFiA0qjr.css → index-BvbpnRSm.css} +6384 -6442
  185. package/dist/assets/{index-MTM6BbvW.js → index-C2iJCVYf.js} +13722 -15461
  186. package/dist/assets/{index-P3-xVlwI.js → index-DkYsG7tJ.js} +1 -1
  187. package/dist/assets/mcp.store-LrK5gI5Y.js +85 -0
  188. package/dist/assets/{pickBy-DUKPNRlc.js → pickBy-DSRQa7Nf.js} +1 -1
  189. package/dist/assets/{readyToRunWorkflows.store-nzu6XNAP.js → readyToRunWorkflows.store-ia-2Nluj.js} +2 -2
  190. package/dist/assets/{readyToRunWorkflowsV2.store-1dRkG6XV.js → readyToRunWorkflowsV2.store-CyBbWYeG.js} +41 -3
  191. package/dist/assets/{templateActions-BePunFaZ.js → templateActions-CqLHZUrv.js} +1 -1
  192. package/dist/assets/{useBeforeUnload-DsbgbymL.js → useBeforeUnload-D788NzAs.js} +1 -1
  193. package/dist/assets/{useExecutionDebugging-yUnwhnYk.js → useExecutionDebugging-DWOhAQo4.js} +1 -1
  194. package/dist/assets/{useImportCurlCommand-DcFIVp7Y.js → useImportCurlCommand-BQs5GVHJ.js} +1 -1
  195. package/dist/assets/useLogsTreeExpand-2auAOTOK.js +1080 -0
  196. package/dist/assets/useLogsTreeExpand-BZb1m-U7.css +554 -0
  197. package/dist/assets/{useProjectPages-JCNZbA2u.js → useProjectPages-BRhbuYJH.js} +1 -1
  198. package/dist/assets/{usePushConnection-_VL-61pH.js → usePushConnection-DgYz_QNH.js} +17 -19
  199. package/dist/assets/{useWorkflowsCache-DwIv_I-Z.js → useWorkflowsCache-C2_YYjSX.js} +1 -1
  200. package/dist/index.html +2 -2
  201. package/package.json +1 -1
  202. package/scripts/fetch-node-popularity.mjs +13 -1
  203. package/turbo.json +2 -1
  204. package/dist/assets/CollectionParameter-BbxTTmMu.js +0 -4
  205. package/dist/assets/ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-Bv40HGJu.js +0 -44
  206. package/dist/assets/EntityNotFound-pTnVFOv-.css +0 -10
  207. package/dist/assets/EntityUnAuthorised-CHl9g0Ry.css +0 -10
  208. package/dist/assets/SettingsMCPView-B7NzLvT3.css +0 -378
  209. package/dist/assets/TriggerPanel-BS69Ky8P.js +0 -3343
  210. package/dist/assets/VariablesView-BMHdLce7.css +0 -400
@@ -0,0 +1,1080 @@
1
+ import { g5 as addTokenUsageData, g6 as emptyTokenUsageData, g7 as parseErrorMetadata, bI as isChatNode, g8 as NodeConnectionTypes, bD as v4, g9 as get, ga as AGENT_LANGCHAIN_NODE_TYPE, df as MANUAL_CHAT_TRIGGER_NODE_TYPE, de as CHAT_TRIGGER_NODE_TYPE, gb as isEmpty, d as defineComponent, h as createElementBlock, g as openBlock, i as createVNode, j as createBaseVNode, k as unref, p as N8nText, w as withCtx, l as createTextVNode, t as toDisplayString, c as useI18n, gc as formatTokenUsageCount, e as createBlock, f as createCommentVNode, aa as N8nTooltip, dS as getDefaultExportFromCjs, gd as requireUpperFirst, n as normalizeClass, F as Fragment, _ as _export_sfc, aH as useTemplateRef, bL as useTimestamp, ae as useNodeTypesStore, x as computed, dG as toTime, dE as toDayMonth, a8 as watch, B as withModifiers, A as renderList, ap as normalizeStyle, c8 as NodeIcon, ac as I18nT, N as N8nIcon, ab as _sfc_main$5, q as N8nButton, Z as nextTick, b as useRouter, bH as useRunWorkflow, ge as useVirtualList, cl as toRef, K as mergeProps, cb as shallowRef, cJ as useThrottleFn, bG as useNodeHelpers, a2 as useWorkflowsStore, bE as injectWorkflowState, a as useToast, r as ref, gf as LOGS_EXECUTION_DATA_THROTTLE_DURATION, ff as parse, gg as Workflow, a4 as PLACEHOLDER_EMPTY_WORKFLOW_ID } from "./index-C2iJCVYf.js";
2
+ import { A as AnimatedSpinner } from "./AnimatedSpinner-DFjfUB--.js";
3
+ const TOOL_EXECUTOR_NODE_NAME = "PartialExecutionToolExecutor";
4
+ function getConsumedTokens(task) {
5
+ const tokenUsage = task.reduce((acc, curr) => {
6
+ const tokenUsageData = curr?.json?.tokenUsage ?? curr?.json?.tokenUsageEstimate;
7
+ if (!tokenUsageData) return acc;
8
+ return addTokenUsageData(acc, {
9
+ ...tokenUsageData,
10
+ isEstimate: !!curr?.json.tokenUsageEstimate
11
+ });
12
+ }, emptyTokenUsageData);
13
+ return tokenUsage;
14
+ }
15
+ function getConsumedTokensFromTaskData(runData) {
16
+ return getConsumedTokens(
17
+ Object.values(runData.data ?? {}).flat().flat()
18
+ );
19
+ }
20
+ function createNode(node, context, runIndex, runData, children = []) {
21
+ return {
22
+ parent: context.parent,
23
+ node,
24
+ // The ID consists of workflow ID, node ID and run index (including ancestor's), which
25
+ // makes it possible to identify the same log across different executions
26
+ id: `${context.workflow.id}:${node.id}:${[...context.ancestorRunIndexes, runIndex].join(":")}`,
27
+ runIndex,
28
+ runData,
29
+ children,
30
+ consumedTokens: runData ? getConsumedTokensFromTaskData(runData) : emptyTokenUsageData,
31
+ workflow: context.workflow,
32
+ executionId: context.executionId,
33
+ execution: context.data,
34
+ isSubExecution: context.isSubExecution
35
+ };
36
+ }
37
+ function getChildNodes(treeNode, node, runIndex, context) {
38
+ const subExecutionLocator = findSubExecutionLocator(treeNode);
39
+ if (subExecutionLocator !== void 0) {
40
+ const workflow = context.workflows[subExecutionLocator.workflowId];
41
+ const subWorkflowRunData = context.subWorkflowData[subExecutionLocator.executionId];
42
+ if (!workflow || !subWorkflowRunData) {
43
+ return [];
44
+ }
45
+ return createLogTreeRec(void 0, {
46
+ ...context,
47
+ parent: treeNode,
48
+ ancestorRunIndexes: [...context.ancestorRunIndexes, runIndex ?? 0],
49
+ workflow,
50
+ executionId: subExecutionLocator.executionId,
51
+ data: subWorkflowRunData,
52
+ isSubExecution: true
53
+ });
54
+ }
55
+ const connectedSubNodes = context.workflow.getParentNodes(node.name, "ALL_NON_MAIN", 1);
56
+ function isMatchedSource(source) {
57
+ return (source?.previousNode === node.name || isPlaceholderLog(treeNode) && source?.previousNode === TOOL_EXECUTOR_NODE_NAME) && (runIndex === void 0 || source.previousNodeRun === runIndex);
58
+ }
59
+ return connectedSubNodes.flatMap(
60
+ (subNodeName) => (context.data.resultData.runData[subNodeName] ?? []).flatMap((t, index) => {
61
+ const isMatched = t.source.some((source) => source !== null) ? t.source.some(isMatchedSource) : runIndex === void 0 || index === runIndex;
62
+ if (!isMatched) {
63
+ return [];
64
+ }
65
+ const subNode = context.workflow.getNode(subNodeName);
66
+ return subNode ? getTreeNodeData(subNode, t, index, {
67
+ ...context,
68
+ ancestorRunIndexes: [...context.ancestorRunIndexes, runIndex ?? 0],
69
+ parent: treeNode
70
+ }) : [];
71
+ })
72
+ );
73
+ }
74
+ function getTreeNodeData(node, runData, runIndex, context) {
75
+ const treeNode = createNode(node, context, runIndex ?? 0, runData);
76
+ const children = getChildNodes(treeNode, node, runIndex, context).sort(sortLogEntries);
77
+ if ((runData === void 0 || node.disabled) && children.length === 0) {
78
+ return [];
79
+ }
80
+ treeNode.children = children;
81
+ return [treeNode];
82
+ }
83
+ function getTotalConsumedTokens(...usage) {
84
+ return usage.reduce(addTokenUsageData, emptyTokenUsageData);
85
+ }
86
+ function getSubtreeTotalConsumedTokens(treeNode, includeSubWorkflow) {
87
+ const executionId = treeNode.executionId;
88
+ function calculate(currentNode) {
89
+ if (!includeSubWorkflow && currentNode.executionId !== executionId) {
90
+ return emptyTokenUsageData;
91
+ }
92
+ return getTotalConsumedTokens(
93
+ currentNode.consumedTokens,
94
+ ...currentNode.children.map(calculate)
95
+ );
96
+ }
97
+ return calculate(treeNode);
98
+ }
99
+ function findLogEntryToAutoSelect(subTree) {
100
+ const entryWithError = findLogEntryRec((e) => !!e.runData?.error, subTree);
101
+ if (entryWithError) {
102
+ return entryWithError;
103
+ }
104
+ const entryForAiAgent = findLogEntryRec(
105
+ (entry) => entry.node.type === AGENT_LANGCHAIN_NODE_TYPE || entry.parent?.node.type === AGENT_LANGCHAIN_NODE_TYPE && isPlaceholderLog(entry.parent),
106
+ subTree
107
+ );
108
+ if (entryForAiAgent) {
109
+ return entryForAiAgent;
110
+ }
111
+ return subTree[subTree.length - 1];
112
+ }
113
+ function createLogTreeRec(filter, context) {
114
+ const runData = context.data.resultData.runData;
115
+ return Object.entries(runData).flatMap(([nodeName, taskData]) => {
116
+ const node = context.workflow.getNode(nodeName);
117
+ if (node === null || filter && filter.rootNodeId !== node.id) {
118
+ return [];
119
+ }
120
+ const childNodes = context.workflow.getChildNodes(nodeName, "ALL_NON_MAIN");
121
+ if (childNodes.length === 0) {
122
+ const taskDataList = taskData.map((task, runIndex) => ({
123
+ node,
124
+ task,
125
+ runIndex,
126
+ nodeHasMultipleRuns: taskData.length > 1
127
+ }));
128
+ return filter ? taskDataList.filter((item) => item.runIndex === filter.rootNodeRunIndex) : taskDataList;
129
+ }
130
+ if (childNodes.some((child) => (runData[child] ?? []).length > 0)) {
131
+ return [];
132
+ }
133
+ const firstChild = context.workflow.getNode(childNodes[0]);
134
+ if (firstChild === null) {
135
+ return [];
136
+ }
137
+ return [{ node: firstChild, nodeHasMultipleRuns: false }];
138
+ }).flatMap(
139
+ ({ node, runIndex, task, nodeHasMultipleRuns }) => getTreeNodeData(node, task, nodeHasMultipleRuns ? runIndex : void 0, context)
140
+ ).sort(sortLogEntries);
141
+ }
142
+ function createLogTree(workflow, response, workflows = {}, subWorkflowData = {}, filter) {
143
+ return createLogTreeRec(filter, {
144
+ parent: void 0,
145
+ ancestorRunIndexes: [],
146
+ executionId: response.id,
147
+ workflow,
148
+ workflows,
149
+ data: response.data ?? { resultData: { runData: {} } },
150
+ subWorkflowData,
151
+ isSubExecution: false
152
+ });
153
+ }
154
+ function findLogEntryById(id, entries) {
155
+ return findLogEntryRec((entry) => entry.id === id, entries);
156
+ }
157
+ function findLogEntryRec(isMatched, entries) {
158
+ for (const entry of entries) {
159
+ if (isMatched(entry)) {
160
+ return entry;
161
+ }
162
+ const child = findLogEntryRec(isMatched, entry.children);
163
+ if (child) {
164
+ return child;
165
+ }
166
+ }
167
+ return void 0;
168
+ }
169
+ function findSelectedLogEntry(selection, entries, isExecuting) {
170
+ switch (selection.type) {
171
+ case "initial":
172
+ return isExecuting ? void 0 : findLogEntryToAutoSelect(entries);
173
+ case "none":
174
+ return void 0;
175
+ case "selected": {
176
+ const found = findLogEntryRec((e) => e.id === selection.entry.id, entries);
177
+ if (found === void 0 && !isExecuting) {
178
+ for (let runIndex = selection.entry.runIndex - 1; runIndex >= 0; runIndex--) {
179
+ const fallback = findLogEntryRec(
180
+ (e) => e.workflow.id === selection.entry.workflow.id && e.node.id === selection.entry.node.id && e.runIndex === runIndex,
181
+ entries
182
+ );
183
+ if (fallback !== void 0) {
184
+ return fallback;
185
+ }
186
+ }
187
+ }
188
+ return found;
189
+ }
190
+ }
191
+ }
192
+ function flattenLogEntries(entries, collapsedEntryIds, ret = []) {
193
+ for (const entry of entries) {
194
+ ret.push(entry);
195
+ if (!collapsedEntryIds[entry.id]) {
196
+ flattenLogEntries(entry.children, collapsedEntryIds, ret);
197
+ }
198
+ }
199
+ return ret;
200
+ }
201
+ function getEntryAtRelativeIndex(entries, id, relativeIndex) {
202
+ const offset = entries.findIndex((e) => e.id === id);
203
+ return offset === -1 ? void 0 : entries[offset + relativeIndex];
204
+ }
205
+ function sortLogEntries(a, b) {
206
+ if (a.runData === void 0) {
207
+ return a.children.length > 0 ? sortLogEntries(a.children[0], b) : 0;
208
+ }
209
+ if (b.runData === void 0) {
210
+ return b.children.length > 0 ? sortLogEntries(a, b.children[0]) : 0;
211
+ }
212
+ if (a.runData.startTime === b.runData.startTime) {
213
+ return a.runData.executionIndex - b.runData.executionIndex;
214
+ }
215
+ return a.runData.startTime - b.runData.startTime;
216
+ }
217
+ function mergeStartData(startData, response) {
218
+ if (!response.data) {
219
+ return response;
220
+ }
221
+ const nodeNames = [
222
+ ...new Set(
223
+ Object.keys(startData).concat(Object.keys(response.data.resultData.runData))
224
+ ).values()
225
+ ];
226
+ const runData = Object.fromEntries(
227
+ nodeNames.map((nodeName) => {
228
+ const tasks = response.data?.resultData.runData[nodeName] ?? [];
229
+ const mergedTasks = tasks.concat(
230
+ (startData[nodeName] ?? []).filter(
231
+ (task) => (
232
+ // To remove duplicate runs, we check start time in addition to execution index
233
+ // because nodes such as Wait and Form emits multiple websocket events with
234
+ // different execution index for a single run
235
+ tasks.every(
236
+ (t) => t.startTime < task.startTime && t.executionIndex !== task.executionIndex
237
+ )
238
+ )
239
+ ).map((task) => ({
240
+ ...task,
241
+ executionTime: 0,
242
+ executionStatus: "running"
243
+ }))
244
+ );
245
+ return [nodeName, mergedTasks];
246
+ })
247
+ );
248
+ return {
249
+ ...response,
250
+ data: {
251
+ ...response.data,
252
+ resultData: {
253
+ ...response.data.resultData,
254
+ runData
255
+ }
256
+ }
257
+ };
258
+ }
259
+ function hasSubExecution(entry) {
260
+ return findSubExecutionLocator(entry) !== void 0;
261
+ }
262
+ function findSubExecutionLocator(entry) {
263
+ const metadata = entry.runData?.metadata?.subExecution;
264
+ if (metadata) {
265
+ return { workflowId: metadata.workflowId, executionId: metadata.executionId };
266
+ }
267
+ return parseErrorMetadata(entry.runData?.error)?.subExecution;
268
+ }
269
+ function getDepth(entry) {
270
+ let depth = 0;
271
+ let currentEntry = entry;
272
+ while (currentEntry.parent !== void 0) {
273
+ currentEntry = currentEntry.parent;
274
+ depth++;
275
+ }
276
+ return depth;
277
+ }
278
+ function getInputKey(node) {
279
+ if (node.type === MANUAL_CHAT_TRIGGER_NODE_TYPE && node.typeVersion < 1.1) {
280
+ return "input";
281
+ }
282
+ if (node.type === CHAT_TRIGGER_NODE_TYPE) {
283
+ return "chatInput";
284
+ }
285
+ return "chatInput";
286
+ }
287
+ function extractChatInput(workflow, resultData) {
288
+ const chatTrigger = workflow.nodes.find(isChatNode);
289
+ if (chatTrigger === void 0) {
290
+ return void 0;
291
+ }
292
+ const inputKey = getInputKey(chatTrigger);
293
+ const runData = (resultData.runData[chatTrigger.name] ?? [])[0];
294
+ const message = runData?.data?.[NodeConnectionTypes.Main]?.[0]?.[0]?.json?.[inputKey];
295
+ if (runData === void 0 || typeof message !== "string") {
296
+ return void 0;
297
+ }
298
+ return {
299
+ text: message,
300
+ sender: "user",
301
+ id: v4()
302
+ };
303
+ }
304
+ function extractBotResponse(resultData, executionId, emptyText) {
305
+ const lastNodeExecuted = resultData.lastNodeExecuted;
306
+ if (!lastNodeExecuted) return void 0;
307
+ const nodeResponseDataArray = get(resultData.runData, lastNodeExecuted) ?? [];
308
+ const nodeResponseData = nodeResponseDataArray[nodeResponseDataArray.length - 1];
309
+ let responseMessage;
310
+ if (get(nodeResponseData, "error")) {
311
+ responseMessage = "[ERROR: " + get(nodeResponseData, "error.message") + "]";
312
+ } else {
313
+ const mainOutputs = get(nodeResponseData, "data.main");
314
+ let text;
315
+ if (mainOutputs && Array.isArray(mainOutputs)) {
316
+ for (const branch of mainOutputs) {
317
+ if (branch?.[0]?.json) {
318
+ const responseData = branch[0].json;
319
+ text = extractResponseText(responseData);
320
+ if (text) {
321
+ break;
322
+ }
323
+ }
324
+ }
325
+ }
326
+ text = text ?? emptyText;
327
+ if (!text) {
328
+ return void 0;
329
+ }
330
+ responseMessage = text;
331
+ }
332
+ return {
333
+ text: responseMessage,
334
+ sender: "bot",
335
+ id: executionId ?? v4()
336
+ };
337
+ }
338
+ function extractResponseText(responseData) {
339
+ if (!responseData || isEmpty(responseData)) {
340
+ return void 0;
341
+ }
342
+ const paths = ["output", "text", "response.text", "message"];
343
+ const matchedPath = paths.find((path) => get(responseData, path));
344
+ if (!matchedPath) return JSON.stringify(responseData, null, 2);
345
+ const matchedOutput = get(responseData, matchedPath);
346
+ if (typeof matchedOutput === "object") {
347
+ return "```json\n" + JSON.stringify(matchedOutput, null, 2) + "\n```";
348
+ }
349
+ return matchedOutput?.toString() ?? "";
350
+ }
351
+ function restoreChatHistory(workflowExecutionData, emptyText) {
352
+ if (!workflowExecutionData?.data) {
353
+ return [];
354
+ }
355
+ const userMessage = extractChatInput(
356
+ workflowExecutionData.workflowData,
357
+ workflowExecutionData.data.resultData
358
+ );
359
+ const botMessage = extractBotResponse(
360
+ workflowExecutionData.data.resultData,
361
+ workflowExecutionData.id,
362
+ emptyText
363
+ );
364
+ return [...userMessage ? [userMessage] : [], ...botMessage ? [botMessage] : []];
365
+ }
366
+ async function processFiles(data) {
367
+ if (!data || data.length === 0) return [];
368
+ const filePromises = data.map(async (file) => {
369
+ return new Promise((resolve, reject) => {
370
+ const reader = new FileReader();
371
+ reader.onload = () => resolve({
372
+ name: file.name,
373
+ type: file.type,
374
+ data: reader.result
375
+ });
376
+ reader.onerror = () => reject(new Error(`Error reading file: ${reader.error?.message ?? "Unknown error"}`));
377
+ reader.readAsDataURL(file);
378
+ });
379
+ });
380
+ return await Promise.all(filePromises);
381
+ }
382
+ function isSubNodeLog(logEntry) {
383
+ return logEntry.parent !== void 0 && logEntry.parent.executionId === logEntry.executionId;
384
+ }
385
+ function isPlaceholderLog(treeNode) {
386
+ return treeNode.runData === void 0;
387
+ }
388
+ function copyExecutionData(executionData) {
389
+ return {
390
+ ...executionData,
391
+ data: {
392
+ ...executionData.data,
393
+ resultData: {
394
+ ...executionData.data?.resultData,
395
+ runData: Object.fromEntries(
396
+ Object.entries(executionData.data?.resultData.runData ?? {}).map(([k, v]) => [k, [...v]])
397
+ )
398
+ }
399
+ }
400
+ };
401
+ }
402
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
403
+ __name: "ConsumedTokensDetails",
404
+ props: {
405
+ consumedTokens: {}
406
+ },
407
+ setup(__props) {
408
+ const i18n = useI18n();
409
+ return (_ctx, _cache) => {
410
+ return openBlock(), createElementBlock("div", null, [
411
+ createVNode(unref(N8nText), {
412
+ bold: true,
413
+ size: "small"
414
+ }, {
415
+ default: withCtx(() => [
416
+ createTextVNode(toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens.prompt")) + " " + toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens", {
417
+ interpolate: {
418
+ count: unref(formatTokenUsageCount)(_ctx.consumedTokens, "prompt")
419
+ }
420
+ })), 1)
421
+ ]),
422
+ _: 1
423
+ }),
424
+ _cache[0] || (_cache[0] = createBaseVNode("br", null, null, -1)),
425
+ createVNode(unref(N8nText), {
426
+ bold: true,
427
+ size: "small"
428
+ }, {
429
+ default: withCtx(() => [
430
+ createTextVNode(toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens.completion")) + " " + toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens", {
431
+ interpolate: {
432
+ count: unref(formatTokenUsageCount)(_ctx.consumedTokens, "completion")
433
+ }
434
+ })), 1)
435
+ ]),
436
+ _: 1
437
+ })
438
+ ]);
439
+ };
440
+ }
441
+ });
442
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
443
+ __name: "LogsViewConsumedTokenCountText",
444
+ props: {
445
+ consumedTokens: {}
446
+ },
447
+ setup(__props) {
448
+ const locale = useI18n();
449
+ return (_ctx, _cache) => {
450
+ return _ctx.consumedTokens !== void 0 ? (openBlock(), createBlock(unref(N8nTooltip), {
451
+ key: 0,
452
+ enterable: false
453
+ }, {
454
+ content: withCtx(() => [
455
+ createVNode(_sfc_main$4, { "consumed-tokens": _ctx.consumedTokens }, null, 8, ["consumed-tokens"])
456
+ ]),
457
+ default: withCtx(() => [
458
+ createBaseVNode("span", null, toDisplayString(unref(locale).baseText("runData.aiContentBlock.tokens", {
459
+ interpolate: {
460
+ count: unref(formatTokenUsageCount)(_ctx.consumedTokens, "total")
461
+ }
462
+ })), 1)
463
+ ]),
464
+ _: 1
465
+ })) : createCommentVNode("", true);
466
+ };
467
+ }
468
+ });
469
+ var upperFirstExports = requireUpperFirst();
470
+ const upperFirst = /* @__PURE__ */ getDefaultExportFromCjs(upperFirstExports);
471
+ const _hoisted_1$1 = { key: 0 };
472
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
473
+ __name: "LogsViewNodeName",
474
+ props: {
475
+ name: {},
476
+ isError: { type: Boolean },
477
+ isDeleted: { type: Boolean }
478
+ },
479
+ setup(__props) {
480
+ return (_ctx, _cache) => {
481
+ return openBlock(), createBlock(unref(N8nText), {
482
+ tag: "div",
483
+ bold: true,
484
+ size: "small",
485
+ class: normalizeClass(_ctx.$style.name),
486
+ color: _ctx.isError ? "danger" : void 0
487
+ }, {
488
+ default: withCtx(() => [
489
+ _ctx.isDeleted ? (openBlock(), createElementBlock("del", _hoisted_1$1, toDisplayString(_ctx.name), 1)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
490
+ createTextVNode(toDisplayString(_ctx.name), 1)
491
+ ], 64))
492
+ ]),
493
+ _: 1
494
+ }, 8, ["class", "color"]);
495
+ };
496
+ }
497
+ });
498
+ const name$1 = "_name_1qhq5_123";
499
+ const style0$2 = {
500
+ name: name$1
501
+ };
502
+ const cssModules$2 = {
503
+ "$style": style0$2
504
+ };
505
+ const LogsViewNodeName = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__cssModules", cssModules$2]]);
506
+ const _hoisted_1 = ["aria-expanded", "aria-selected"];
507
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
508
+ __name: "LogsOverviewRow",
509
+ props: {
510
+ data: {},
511
+ isSelected: { type: Boolean },
512
+ isReadOnly: { type: Boolean },
513
+ shouldShowTokenCountColumn: { type: Boolean },
514
+ isCompact: { type: Boolean },
515
+ latestInfo: {},
516
+ expanded: { type: Boolean },
517
+ canOpenNdv: { type: Boolean }
518
+ },
519
+ emits: ["toggleExpanded", "toggleSelected", "triggerPartialExecution", "openNdv"],
520
+ setup(__props, { emit: __emit }) {
521
+ const props = __props;
522
+ const emit = __emit;
523
+ const container2 = useTemplateRef("containerRef");
524
+ const locale = useI18n();
525
+ const now = useTimestamp({ interval: 1e3 });
526
+ const nodeTypeStore = useNodeTypesStore();
527
+ const type = computed(() => nodeTypeStore.getNodeType(props.data.node.type));
528
+ const isRunning = computed(() => props.data.runData?.executionStatus === "running");
529
+ const isWaiting = computed(() => props.data.runData?.executionStatus === "waiting");
530
+ const isSettled = computed(() => !isRunning.value && !isWaiting.value);
531
+ const isError = computed(() => !!props.data.runData?.error);
532
+ const statusTextKeyPath = computed(
533
+ () => isSettled.value ? "logs.overview.body.summaryText.in" : "logs.overview.body.summaryText.for"
534
+ );
535
+ const startedAtText = computed(() => {
536
+ if (props.data.runData === void 0) {
537
+ return "—";
538
+ }
539
+ const time = new Date(props.data.runData.startTime);
540
+ return locale.baseText("logs.overview.body.started", {
541
+ interpolate: {
542
+ time: `${toTime(time, true)}, ${toDayMonth(time)}`
543
+ }
544
+ });
545
+ });
546
+ const statusText = computed(() => upperFirst(props.data.runData?.executionStatus ?? ""));
547
+ const timeText = computed(
548
+ () => props.data.runData ? locale.displayTimer(
549
+ isSettled.value ? props.data.runData.executionTime : Math.floor((now.value - props.data.runData.startTime) / 1e3) * 1e3,
550
+ true
551
+ ) : void 0
552
+ );
553
+ const subtreeConsumedTokens = computed(
554
+ () => props.shouldShowTokenCountColumn ? getSubtreeTotalConsumedTokens(props.data, false) : void 0
555
+ );
556
+ const hasChildren = computed(() => props.data.children.length > 0 || hasSubExecution(props.data));
557
+ const indents = computed(() => {
558
+ const ret = [];
559
+ let data = props.data;
560
+ while (data.parent !== void 0) {
561
+ const siblings = data.parent?.children ?? [];
562
+ const lastSibling = siblings[siblings.length - 1];
563
+ ret.unshift({ straight: lastSibling?.id !== data.id, curved: data === props.data });
564
+ data = data.parent;
565
+ }
566
+ return ret;
567
+ });
568
+ watch(
569
+ () => props.isSelected,
570
+ (isSelected) => {
571
+ void nextTick(() => {
572
+ if (isSelected) {
573
+ container2.value?.focus();
574
+ }
575
+ });
576
+ },
577
+ { immediate: true }
578
+ );
579
+ return (_ctx, _cache) => {
580
+ return openBlock(), createElementBlock("div", {
581
+ ref: "containerRef",
582
+ role: "treeitem",
583
+ tabindex: "-1",
584
+ "aria-expanded": props.data.children.length > 0 && props.expanded,
585
+ "aria-selected": props.isSelected,
586
+ class: normalizeClass({
587
+ [_ctx.$style.container]: true,
588
+ [_ctx.$style.compact]: props.isCompact,
589
+ [_ctx.$style.error]: isError.value,
590
+ [_ctx.$style.selected]: props.isSelected
591
+ }),
592
+ onClick: _cache[3] || (_cache[3] = withModifiers(($event) => emit("toggleSelected"), ["stop"]))
593
+ }, [
594
+ (openBlock(true), createElementBlock(Fragment, null, renderList(indents.value, (indent2, level) => {
595
+ return openBlock(), createElementBlock("div", {
596
+ key: level,
597
+ class: normalizeClass({
598
+ [_ctx.$style.indent]: true,
599
+ [_ctx.$style.connectorCurved]: indent2.curved,
600
+ [_ctx.$style.connectorStraight]: indent2.straight
601
+ })
602
+ }, null, 2);
603
+ }), 128)),
604
+ createBaseVNode("div", {
605
+ class: normalizeClass(_ctx.$style.background),
606
+ style: normalizeStyle({ "--indent-depth": indents.value.length })
607
+ }, null, 6),
608
+ createVNode(NodeIcon, {
609
+ "node-type": type.value,
610
+ size: 16,
611
+ class: normalizeClass(_ctx.$style.icon)
612
+ }, null, 8, ["node-type", "class"]),
613
+ createVNode(LogsViewNodeName, {
614
+ class: normalizeClass(_ctx.$style.name),
615
+ name: _ctx.latestInfo?.name ?? props.data.node.name,
616
+ "is-error": isError.value,
617
+ "is-deleted": _ctx.latestInfo?.deleted ?? false
618
+ }, null, 8, ["class", "name", "is-error", "is-deleted"]),
619
+ !_ctx.isCompact ? (openBlock(), createBlock(unref(N8nText), {
620
+ key: 0,
621
+ tag: "div",
622
+ color: "text-light",
623
+ size: "small",
624
+ class: normalizeClass(_ctx.$style.timeTook)
625
+ }, {
626
+ default: withCtx(() => [
627
+ timeText.value !== void 0 ? (openBlock(), createBlock(unref(I18nT), {
628
+ key: 0,
629
+ keypath: statusTextKeyPath.value,
630
+ scope: "global"
631
+ }, {
632
+ status: withCtx(() => [
633
+ createVNode(unref(N8nText), {
634
+ color: isError.value ? "danger" : void 0,
635
+ bold: isError.value,
636
+ size: "small"
637
+ }, {
638
+ default: withCtx(() => [
639
+ isRunning.value ? (openBlock(), createBlock(AnimatedSpinner, {
640
+ key: 0,
641
+ class: normalizeClass(_ctx.$style.statusTextIcon)
642
+ }, null, 8, ["class"])) : isWaiting.value ? (openBlock(), createBlock(unref(N8nIcon), {
643
+ key: 1,
644
+ icon: "status-waiting",
645
+ class: normalizeClass(_ctx.$style.statusTextIcon)
646
+ }, null, 8, ["class"])) : isError.value ? (openBlock(), createBlock(unref(N8nIcon), {
647
+ key: 2,
648
+ icon: "triangle-alert",
649
+ class: normalizeClass(_ctx.$style.statusTextIcon)
650
+ }, null, 8, ["class"])) : createCommentVNode("", true),
651
+ createTextVNode(" " + toDisplayString(statusText.value), 1)
652
+ ]),
653
+ _: 1
654
+ }, 8, ["color", "bold"])
655
+ ]),
656
+ time: withCtx(() => [
657
+ createTextVNode(toDisplayString(timeText.value), 1)
658
+ ]),
659
+ _: 1
660
+ }, 8, ["keypath"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
661
+ createTextVNode("—")
662
+ ], 64))
663
+ ]),
664
+ _: 1
665
+ }, 8, ["class"])) : createCommentVNode("", true),
666
+ !_ctx.isCompact ? (openBlock(), createBlock(unref(N8nText), {
667
+ key: 1,
668
+ tag: "div",
669
+ color: "text-light",
670
+ size: "small",
671
+ class: normalizeClass(_ctx.$style.startedAt)
672
+ }, {
673
+ default: withCtx(() => [
674
+ createTextVNode(toDisplayString(startedAtText.value), 1)
675
+ ]),
676
+ _: 1
677
+ }, 8, ["class"])) : createCommentVNode("", true),
678
+ !_ctx.isCompact && subtreeConsumedTokens.value !== void 0 ? (openBlock(), createBlock(unref(N8nText), {
679
+ key: 2,
680
+ tag: "div",
681
+ color: "text-light",
682
+ size: "small",
683
+ class: normalizeClass(_ctx.$style.consumedTokens)
684
+ }, {
685
+ default: withCtx(() => [
686
+ subtreeConsumedTokens.value.totalTokens > 0 && (props.data.children.length === 0 || !props.expanded) ? (openBlock(), createBlock(_sfc_main$3, {
687
+ key: 0,
688
+ "consumed-tokens": subtreeConsumedTokens.value
689
+ }, null, 8, ["consumed-tokens"])) : createCommentVNode("", true)
690
+ ]),
691
+ _: 1
692
+ }, 8, ["class"])) : createCommentVNode("", true),
693
+ isError.value && _ctx.isCompact ? (openBlock(), createBlock(unref(N8nIcon), {
694
+ key: 3,
695
+ size: "medium",
696
+ color: "danger",
697
+ icon: "triangle-alert",
698
+ class: normalizeClass(_ctx.$style.compactErrorIcon)
699
+ }, null, 8, ["class"])) : createCommentVNode("", true),
700
+ _ctx.canOpenNdv && (!_ctx.isCompact || !props.latestInfo?.deleted) ? (openBlock(), createBlock(unref(_sfc_main$5), {
701
+ key: 4,
702
+ type: "secondary",
703
+ size: "small",
704
+ icon: "square-pen",
705
+ "icon-size": "medium",
706
+ style: normalizeStyle({
707
+ visibility: props.data.isSubExecution ? "hidden" : ""
708
+ }),
709
+ disabled: props.latestInfo?.deleted,
710
+ class: normalizeClass(_ctx.$style.openNdvButton),
711
+ "aria-label": unref(locale).baseText("logs.overview.body.open"),
712
+ onClick: _cache[0] || (_cache[0] = withModifiers(($event) => emit("openNdv"), ["stop"]))
713
+ }, null, 8, ["style", "disabled", "class", "aria-label"])) : createCommentVNode("", true),
714
+ !_ctx.isCompact || !props.isReadOnly && !props.latestInfo?.deleted && !props.latestInfo?.disabled ? (openBlock(), createBlock(unref(_sfc_main$5), {
715
+ key: 5,
716
+ type: "secondary",
717
+ size: "small",
718
+ icon: "play",
719
+ "aria-label": unref(locale).baseText("logs.overview.body.run"),
720
+ class: normalizeClass([_ctx.$style.partialExecutionButton, indents.value.length > 0 ? _ctx.$style.unavailable : ""]),
721
+ disabled: props.latestInfo?.deleted || props.latestInfo?.disabled,
722
+ onClick: _cache[1] || (_cache[1] = withModifiers(($event) => emit("triggerPartialExecution"), ["stop"]))
723
+ }, null, 8, ["aria-label", "class", "disabled"])) : createCommentVNode("", true),
724
+ _ctx.isCompact && !hasChildren.value ? (openBlock(), createElementBlock(Fragment, { key: 6 }, [
725
+ isRunning.value ? (openBlock(), createBlock(AnimatedSpinner, {
726
+ key: 0,
727
+ class: normalizeClass(_ctx.$style.statusIcon)
728
+ }, null, 8, ["class"])) : isWaiting.value ? (openBlock(), createBlock(unref(N8nIcon), {
729
+ key: 1,
730
+ icon: "status-waiting",
731
+ class: normalizeClass(_ctx.$style.statusIcon)
732
+ }, null, 8, ["class"])) : createCommentVNode("", true)
733
+ ], 64)) : createCommentVNode("", true),
734
+ !_ctx.isCompact || hasChildren.value ? (openBlock(), createBlock(unref(N8nButton), {
735
+ key: 7,
736
+ type: "secondary",
737
+ size: "small",
738
+ icon: props.expanded ? "chevron-down" : "chevron-up",
739
+ "icon-size": "medium",
740
+ square: true,
741
+ style: normalizeStyle({
742
+ visibility: hasChildren.value ? "" : "hidden"
743
+ }),
744
+ class: normalizeClass(_ctx.$style.toggleButton),
745
+ "aria-label": unref(locale).baseText("logs.overview.body.toggleRow"),
746
+ onClick: _cache[2] || (_cache[2] = withModifiers(($event) => emit("toggleExpanded"), ["stop"]))
747
+ }, null, 8, ["icon", "style", "class", "aria-label"])) : createCommentVNode("", true)
748
+ ], 10, _hoisted_1);
749
+ };
750
+ }
751
+ });
752
+ const container$1 = "_container_bq32l_123";
753
+ const background = "_background_bq32l_140";
754
+ const selected = "_selected_bq32l_149";
755
+ const error = "_error_bq32l_155";
756
+ const indent = "_indent_bq32l_159";
757
+ const connectorCurved = "_connectorCurved_bq32l_168";
758
+ const connectorStraight = "_connectorStraight_bq32l_178";
759
+ const icon = "_icon_bq32l_187";
760
+ const name = "_name_bq32l_193";
761
+ const timeTook = "_timeTook_bq32l_199";
762
+ const statusTextIcon = "_statusTextIcon_bq32l_204";
763
+ const startedAt = "_startedAt_bq32l_209";
764
+ const consumedTokens = "_consumedTokens_bq32l_215";
765
+ const compactErrorIcon = "_compactErrorIcon_bq32l_222";
766
+ const partialExecutionButton = "_partialExecutionButton_bq32l_234";
767
+ const openNdvButton = "_openNdvButton_bq32l_235";
768
+ const compact = "_compact_bq32l_222";
769
+ const unavailable = "_unavailable_bq32l_245";
770
+ const toggleButton = "_toggleButton_bq32l_253";
771
+ const statusIcon = "_statusIcon_bq32l_277";
772
+ const placeholder = "_placeholder_bq32l_285";
773
+ const style0$1 = {
774
+ container: container$1,
775
+ background,
776
+ selected,
777
+ error,
778
+ indent,
779
+ connectorCurved,
780
+ connectorStraight,
781
+ icon,
782
+ name,
783
+ timeTook,
784
+ statusTextIcon,
785
+ startedAt,
786
+ consumedTokens,
787
+ compactErrorIcon,
788
+ partialExecutionButton,
789
+ openNdvButton,
790
+ compact,
791
+ unavailable,
792
+ toggleButton,
793
+ statusIcon,
794
+ placeholder
795
+ };
796
+ const cssModules$1 = {
797
+ "$style": style0$1
798
+ };
799
+ const LogsOverviewRow = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__cssModules", cssModules$1]]);
800
+ const _sfc_main = /* @__PURE__ */ defineComponent({
801
+ __name: "LogsOverviewRows",
802
+ props: {
803
+ selected: {},
804
+ isReadOnly: { type: Boolean },
805
+ isCompact: { type: Boolean },
806
+ shouldShowTokenCountColumn: { type: Boolean },
807
+ canOpenNdv: { type: Boolean },
808
+ flatLogEntries: {},
809
+ latestNodeInfo: {},
810
+ execution: {}
811
+ },
812
+ emits: ["select", "openNdv", "toggleExpanded"],
813
+ setup(__props, { emit: __emit }) {
814
+ const emit = __emit;
815
+ const router = useRouter();
816
+ const runWorkflow = useRunWorkflow({ router });
817
+ const isExpanded = computed(
818
+ () => __props.flatLogEntries.reduce((acc, entry, index, arr) => {
819
+ acc[entry.id] = arr[index + 1]?.parent?.id === entry.id;
820
+ return acc;
821
+ }, {})
822
+ );
823
+ const virtualList = useVirtualList(
824
+ toRef(() => __props.flatLogEntries),
825
+ { itemHeight: 32 }
826
+ );
827
+ async function handleTriggerPartialExecution(treeNode) {
828
+ const latestName = __props.latestNodeInfo[treeNode.node.id]?.name ?? treeNode.node.name;
829
+ if (latestName) {
830
+ await runWorkflow.runWorkflow({ destinationNode: latestName });
831
+ }
832
+ }
833
+ watch(
834
+ [() => __props.execution?.status === "running", () => __props.flatLogEntries.length],
835
+ async ([isRunning, flatEntryCount], [wasRunning]) => {
836
+ await nextTick(() => {
837
+ if (__props.selected === void 0 && (isRunning || wasRunning)) {
838
+ virtualList.scrollTo(flatEntryCount - 1);
839
+ }
840
+ });
841
+ },
842
+ { immediate: true }
843
+ );
844
+ watch(
845
+ () => __props.selected?.id,
846
+ async (selectedId) => {
847
+ await nextTick(() => {
848
+ if (selectedId === void 0) {
849
+ return;
850
+ }
851
+ const index = virtualList.list.value.some((e) => e.data.id === selectedId) ? -1 : __props.flatLogEntries.findIndex((e) => e.id === selectedId);
852
+ if (index >= 0) {
853
+ virtualList.scrollTo(index);
854
+ }
855
+ });
856
+ },
857
+ { immediate: true }
858
+ );
859
+ return (_ctx, _cache) => {
860
+ return openBlock(), createElementBlock("div", mergeProps({
861
+ class: _ctx.$style.tree
862
+ }, unref(virtualList).containerProps), [
863
+ createBaseVNode("div", mergeProps({ role: "tree" }, unref(virtualList).wrapperProps.value), [
864
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(virtualList).list.value, ({ data, index }) => {
865
+ return openBlock(), createBlock(LogsOverviewRow, {
866
+ key: index,
867
+ data,
868
+ "is-read-only": _ctx.isReadOnly,
869
+ "is-selected": data.id === _ctx.selected?.id,
870
+ "is-compact": _ctx.isCompact,
871
+ "should-show-token-count-column": _ctx.shouldShowTokenCountColumn,
872
+ "latest-info": _ctx.latestNodeInfo[data.node.id],
873
+ expanded: isExpanded.value[data.id],
874
+ "can-open-ndv": _ctx.canOpenNdv,
875
+ onToggleExpanded: ($event) => emit("toggleExpanded", data),
876
+ onOpenNdv: ($event) => emit("openNdv", data),
877
+ onTriggerPartialExecution: ($event) => handleTriggerPartialExecution(data),
878
+ onToggleSelected: ($event) => emit("select", _ctx.selected?.id === data.id ? void 0 : data)
879
+ }, null, 8, ["data", "is-read-only", "is-selected", "is-compact", "should-show-token-count-column", "latest-info", "expanded", "can-open-ndv", "onToggleExpanded", "onOpenNdv", "onTriggerPartialExecution", "onToggleSelected"]);
880
+ }), 128))
881
+ ], 16)
882
+ ], 16);
883
+ };
884
+ }
885
+ });
886
+ const tree = "_tree_92rld_123";
887
+ const container = "_container_92rld_128";
888
+ const staticScrollBar = "_staticScrollBar_92rld_128";
889
+ const style0 = {
890
+ tree,
891
+ container,
892
+ staticScrollBar
893
+ };
894
+ const cssModules = {
895
+ "$style": style0
896
+ };
897
+ const LogsOverviewRows = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cssModules]]);
898
+ function useThrottleWithReactiveDelay(state, delay) {
899
+ const throttled = shallowRef(state.value);
900
+ watch(
901
+ state,
902
+ useThrottleFn(
903
+ (latest) => {
904
+ throttled.value = latest;
905
+ },
906
+ delay,
907
+ true,
908
+ true
909
+ ),
910
+ { immediate: true }
911
+ );
912
+ return throttled;
913
+ }
914
+ function useLogsExecutionData({ isEnabled, filter } = {}) {
915
+ const nodeHelpers = useNodeHelpers();
916
+ const workflowsStore = useWorkflowsStore();
917
+ const workflowState = injectWorkflowState();
918
+ const toast = useToast();
919
+ const state = ref();
920
+ const updateInterval = computed(
921
+ () => workflowsStore.workflowExecutionData?.status === "running" && Object.keys(workflowsStore.workflowExecutionData.data?.resultData.runData ?? {}).length > 1 ? LOGS_EXECUTION_DATA_THROTTLE_DURATION : 0
922
+ );
923
+ const throttledState = useThrottleWithReactiveDelay(state, updateInterval);
924
+ const throttledWorkflowData = computed(() => throttledState.value?.response.workflowData);
925
+ const subWorkflowExecData = ref({});
926
+ const subWorkflows = ref({});
927
+ const workflow = ref();
928
+ const latestNodeNameById = computed(
929
+ () => Object.values(workflow.value?.nodes ?? {}).reduce(
930
+ (acc, node) => {
931
+ const nodeInStore = workflowsStore.getNodeById(node.id);
932
+ acc[node.id] = {
933
+ deleted: !nodeInStore,
934
+ disabled: nodeInStore?.disabled ?? false,
935
+ name: nodeInStore?.name ?? node.name
936
+ };
937
+ return acc;
938
+ },
939
+ {}
940
+ )
941
+ );
942
+ const hasChat = computed(
943
+ () => [Object.values(workflow.value?.nodes ?? {}), workflowsStore.workflow.nodes].some(
944
+ (nodes) => nodes.some(isChatNode)
945
+ )
946
+ );
947
+ const entries = computed(() => {
948
+ if (isEnabled !== void 0 && !isEnabled.value || !throttledState.value || !workflow.value) {
949
+ return [];
950
+ }
951
+ const mergedExecutionData = mergeStartData(
952
+ throttledState.value.startData,
953
+ throttledState.value.response
954
+ );
955
+ return createLogTree(
956
+ workflow.value,
957
+ mergedExecutionData,
958
+ subWorkflows.value,
959
+ subWorkflowExecData.value,
960
+ filter?.value
961
+ );
962
+ });
963
+ function resetExecutionData() {
964
+ state.value = void 0;
965
+ workflowState.setWorkflowExecutionData(null);
966
+ nodeHelpers.updateNodesExecutionIssues();
967
+ }
968
+ async function loadSubExecution(logEntry) {
969
+ const locator = findSubExecutionLocator(logEntry);
970
+ if (!state.value || locator === void 0) {
971
+ return;
972
+ }
973
+ try {
974
+ const subExecution = await workflowsStore.fetchExecutionDataById(locator.executionId);
975
+ const data = subExecution?.data ? parse(subExecution.data) : void 0;
976
+ if (!data || !subExecution) {
977
+ throw Error("Data is missing");
978
+ }
979
+ subWorkflowExecData.value[locator.executionId] = data;
980
+ subWorkflows.value[locator.workflowId] = new Workflow({
981
+ ...subExecution.workflowData,
982
+ nodeTypes: workflowsStore.getNodeTypes()
983
+ });
984
+ } catch (e) {
985
+ toast.showError(e, "Unable to load sub execution");
986
+ }
987
+ }
988
+ watch(
989
+ // Fields that should trigger update
990
+ [
991
+ () => workflowsStore.workflowExecutionData?.id,
992
+ () => workflowsStore.workflowExecutionData?.workflowData.id,
993
+ () => workflowsStore.workflowExecutionData?.status,
994
+ () => workflowsStore.workflowExecutionResultDataLastUpdate,
995
+ () => workflowsStore.workflowExecutionStartedData
996
+ ],
997
+ useThrottleFn(
998
+ ([executionId], [previousExecutionId]) => {
999
+ state.value = workflowsStore.workflowExecutionData === null ? void 0 : {
1000
+ response: copyExecutionData(workflowsStore.workflowExecutionData),
1001
+ startData: workflowsStore.workflowExecutionStartedData?.[1] ?? {}
1002
+ };
1003
+ if (executionId !== previousExecutionId) {
1004
+ subWorkflowExecData.value = {};
1005
+ subWorkflows.value = {};
1006
+ }
1007
+ },
1008
+ updateInterval,
1009
+ true,
1010
+ true
1011
+ ),
1012
+ { immediate: true }
1013
+ );
1014
+ watch(
1015
+ () => workflowsStore.workflowId,
1016
+ (newId) => {
1017
+ if (newId === PLACEHOLDER_EMPTY_WORKFLOW_ID) {
1018
+ resetExecutionData();
1019
+ }
1020
+ }
1021
+ );
1022
+ watch(
1023
+ throttledWorkflowData,
1024
+ (data) => {
1025
+ workflow.value = data ? new Workflow({ ...data, nodeTypes: workflowsStore.getNodeTypes() }) : void 0;
1026
+ },
1027
+ { immediate: true }
1028
+ );
1029
+ return {
1030
+ execution: computed(() => throttledState.value?.response),
1031
+ entries,
1032
+ hasChat,
1033
+ latestNodeNameById,
1034
+ resetExecutionData,
1035
+ loadSubExecution
1036
+ };
1037
+ }
1038
+ function useLogsTreeExpand(entries, loadSubExecution) {
1039
+ const collapsedEntries = shallowRef({});
1040
+ const flatLogEntries = computed(
1041
+ () => flattenLogEntries(entries.value, collapsedEntries.value)
1042
+ );
1043
+ function toggleExpanded(treeNode, expand) {
1044
+ if (hasSubExecution(treeNode) && treeNode.children.length === 0) {
1045
+ void loadSubExecution(treeNode);
1046
+ return;
1047
+ }
1048
+ collapsedEntries.value = {
1049
+ ...collapsedEntries.value,
1050
+ [treeNode.id]: expand === void 0 ? !collapsedEntries.value[treeNode.id] : !expand
1051
+ };
1052
+ }
1053
+ return {
1054
+ flatLogEntries,
1055
+ toggleExpanded
1056
+ };
1057
+ }
1058
+ export {
1059
+ LogsOverviewRows as L,
1060
+ _sfc_main$3 as _,
1061
+ getTotalConsumedTokens as a,
1062
+ getSubtreeTotalConsumedTokens as b,
1063
+ isPlaceholderLog as c,
1064
+ LogsViewNodeName as d,
1065
+ extractBotResponse as e,
1066
+ findSelectedLogEntry as f,
1067
+ getInputKey as g,
1068
+ getEntryAtRelativeIndex as h,
1069
+ isSubNodeLog as i,
1070
+ getDepth as j,
1071
+ findLogEntryRec as k,
1072
+ useLogsExecutionData as l,
1073
+ useLogsTreeExpand as m,
1074
+ getConsumedTokens as n,
1075
+ _sfc_main$4 as o,
1076
+ processFiles as p,
1077
+ findLogEntryById as q,
1078
+ restoreChatHistory as r,
1079
+ upperFirst as u
1080
+ };