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.
- package/.build/cache-marker +1 -1
- package/.build/node-popularity.json +1844 -1844
- package/dist/assets/{AddDataStoreModal-DxLlmnRh.js → AddDataTableModal-BWWNocvE.js} +32 -32
- package/dist/assets/{AddDataStoreModal-B7jBhCjt.css → AddDataTableModal-BzS5Yqag.css} +6 -6
- package/dist/assets/{AnimatedSpinner-DR4QrGrL.js → AnimatedSpinner-DFjfUB--.js} +1 -1
- 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
- package/dist/assets/{AuthView-CWVio_MZ.css → AuthView-BvfgleDU.css} +30 -30
- package/dist/assets/{AuthView-BUfRQlip.js → AuthView-CPPX5tYt.js} +14 -14
- package/dist/assets/{ChangePasswordView-hnVcBOdZ.js → ChangePasswordView-D_VXG-a6.js} +3 -3
- package/dist/assets/ChatSidebar-C0s-SoxK.js +117 -0
- package/dist/assets/ChatSidebar-wKAC9nrh.css +165 -0
- package/dist/assets/ChatView-ClX1FsZV.css +657 -0
- package/dist/assets/ChatView-DLlPfas8.js +805 -0
- package/dist/assets/CollectionParameter-CYHkGO0F.js +4 -0
- package/dist/assets/{CredentialsView-DYbozDMz.js → CredentialsView-BipY16I_.js} +15 -15
- package/dist/assets/{CredentialsView-BAqjGrNq.css → CredentialsView-C9uo2Njh.css} +14 -14
- 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
- package/dist/assets/{DataStoreDetailsView-Bc-J9ZrW.css → DataTableDetailsView-BOmb3x4S.css} +138 -138
- package/dist/assets/{DataStoreDetailsView-DN1DvV53.js → DataTableDetailsView-Fi-LWBLm.js} +538 -525
- package/dist/assets/{DataStoreView-BqQv7QeU.css → DataTableView-ByKnlVtU.css} +14 -14
- package/dist/assets/{DataStoreView-BNU_I-gX.js → DataTableView-CFOQzQI7.js} +68 -68
- package/dist/assets/{DemoFooter-rHoOk6iK.js → DemoFooter-J9LQ705n.js} +5 -5
- 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
- package/dist/assets/{EntityNotFound-DAi6p29d.js → EntityNotFound-CYQqRNOB.js} +2 -2
- package/dist/assets/EntityNotFound-CargndZm.css +10 -0
- package/dist/assets/EntityUnAuthorised-Deb2bHNC.css +10 -0
- package/dist/assets/{EntityUnAuthorised-8E-9FBHe.js → EntityUnAuthorised-DetfwCtv.js} +2 -2
- package/dist/assets/{ErrorView-DPS9icAS.css → ErrorView-D2OMvGTk.css} +8 -8
- package/dist/assets/{ErrorView-y79cILv4.js → ErrorView-qxP6uTVl.js} +4 -4
- package/dist/assets/{EvaluationsRootView-B5AhHo41.css → EvaluationsRootView-7FGhfEKm.css} +48 -48
- package/dist/assets/{EvaluationsRootView-CWelItmD.js → EvaluationsRootView-BueMulsE.js} +22 -22
- package/dist/assets/{EvaluationsView-BTyYfInB.css → EvaluationsView-DsfXDJ-U.css} +35 -35
- package/dist/assets/{EvaluationsView-C0X9064k.js → EvaluationsView-gk_juymK.js} +27 -27
- package/dist/assets/{ExecutionsTime-B5dXCTxD.css → ExecutionsTime-BGpurJsp.css} +41 -41
- 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
- package/dist/assets/{ExecutionsView-DRsBgt5L.js → ExecutionsView-0KpKg6S4.js} +18 -18
- package/dist/assets/{ExecutionsView-BxsSXnlU.css → ExecutionsView-BbH7fInw.css} +14 -14
- package/dist/assets/{FixedCollectionParameter-Bhdk1XcN.js → FixedCollectionParameter-B9qkRreb.js} +2 -2
- package/dist/assets/{FixedCollectionParameter-D3u3aCCk.css → FixedCollectionParameter-D82suS6W.css} +43 -43
- package/dist/assets/{ForgotMyPasswordView-C-GNSvtY.js → ForgotMyPasswordView-C1kfYO_S.js} +3 -3
- package/dist/assets/{InfoAccordion-BpibqNsS.js → InfoAccordion-B_T19Esx.js} +7 -7
- package/dist/assets/{InfoAccordion-dxudNqVC.css → InfoAccordion-BuKidEQb.css} +13 -13
- package/dist/assets/{InsightsChartAverageRuntime-CwkkxEk1.js → InsightsChartAverageRuntime-IISuKphn.js} +4 -4
- package/dist/assets/{InsightsChartFailed-Di6uVDGI.js → InsightsChartFailed-DRHEEzJU.js} +5 -5
- package/dist/assets/{InsightsChartFailureRate-Bl5Av3Eu.js → InsightsChartFailureRate-D1L6WYZP.js} +5 -5
- package/dist/assets/{InsightsChartTimeSaved-Bcup49B9.js → InsightsChartTimeSaved-zCEK3kuY.js} +4 -4
- package/dist/assets/{InsightsChartTotal-DnEUMCMt.js → InsightsChartTotal-DW-EkNtK.js} +5 -5
- package/dist/assets/{InsightsDashboard-luJ134I5.js → InsightsDashboard-DfpOZ30S.js} +21 -21
- package/dist/assets/{InsightsDashboard-CYAx_0X9.css → InsightsDashboard-DyOwzHmP.css} +25 -25
- package/dist/assets/{InsightsPaywall-BEXUk0T6.js → InsightsPaywall-CKH7O7yd.js} +1 -1
- package/dist/assets/{InsightsSummary-DTFIhBF3.css → InsightsSummary-BazqPYQ0.css} +52 -52
- package/dist/assets/{InsightsSummary-XxOp2tas.js → InsightsSummary-ChZNMeJI.js} +11 -11
- package/dist/assets/{InsightsTableWorkflows-BTHSCwX8.css → InsightsTableWorkflows-D20Yb7ZW.css} +8 -8
- package/dist/assets/{InsightsTableWorkflows-B4re5fkw.js → InsightsTableWorkflows-DwLRkvVL.js} +7 -7
- package/dist/assets/{Logo-CSmRCqF2.css → Logo-BU1oDo5-.css} +16 -16
- package/dist/assets/{Logo-91TLwfCH.js → Logo-Bgcx_T7R.js} +7 -7
- package/dist/assets/{LogsPanel-BWP7EQ84.js → LogsPanel-BCUqUR29.js} +141 -1091
- package/dist/assets/{LogsPanel-BE9Gl1z0.css → LogsPanel-DVmpE0zV.css} +160 -592
- package/dist/assets/{MainHeader-DIiyDT8d.css → MainHeader-BqJwA1aC.css} +117 -117
- package/dist/assets/{MainHeader-BaSUt6eJ.js → MainHeader-BzhBs3En.js} +45 -45
- package/dist/assets/{MainSidebar-C4cyDjUV.js → MainSidebar-Bf48nTMR.js} +69 -1133
- package/dist/assets/{MainSidebar-BT8sXxNa.css → MainSidebar-tTEyXOKH.css} +107 -279
- package/dist/assets/NavigationDropdown-Wb7mPGhl.css +187 -0
- package/dist/assets/NavigationDropdown-kfg0blbZ.js +1116 -0
- package/dist/assets/{NodeCreation-C4gQlPqI.css → NodeCreation-B1fOtARK.css} +6 -6
- package/dist/assets/{NodeCreation-BkqOy8gF.js → NodeCreation-CsCoqAnU.js} +12 -10
- package/dist/assets/{NodeCreator-COTYfPaK.css → NodeCreator-CamUhvMk.css} +175 -174
- package/dist/assets/{NodeCreator-BppRTVIa.js → NodeCreator-D45qQQ4H.js} +60 -64
- package/dist/assets/{NodeDetailsView-BuhpInfo.js → NodeDetailsView-6bLQaVHT.js} +33 -32
- package/dist/assets/{NodeDetailsView-CBYV4Rrz.css → NodeDetailsView-D3QAo3SF.css} +61 -61
- package/dist/assets/{NodeDetailsViewV2-C0bp_zCD.js → NodeDetailsViewV2-DRCY6EX6.js} +58 -69
- package/dist/assets/{NodeDetailsViewV2-J_3cfdea.css → NodeDetailsViewV2-bvXejqU_.css} +67 -60
- package/dist/assets/{NodeView-Bsq1Fh0D.css → NodeView-BhF0ieQM.css} +85 -85
- package/dist/assets/{NodeView-B9LYqx2z.js → NodeView-C9PvNIUz.js} +106 -95
- package/dist/assets/{PageViewLayout-CJlzbuVj.css → PageViewLayout-BIiboMgG.css} +5 -5
- package/dist/assets/{PageViewLayout-B8D8Tkxn.js → PageViewLayout-DNBKIQ4N.js} +3 -3
- package/dist/assets/{PrebuiltAgentTemplatesView-DZAkWI4E.js → PrebuiltAgentTemplatesView-C0Uqhzma.js} +9 -9
- package/dist/assets/{PrebuiltAgentTemplatesView-COxu7Iih.css → PrebuiltAgentTemplatesView-jF7HvWnL.css} +14 -14
- package/dist/assets/{ProjectBreadcrumb-B1Hnf5da.css → ProjectBreadcrumb-BNbnf7Ir.css} +96 -96
- package/dist/assets/{ProjectBreadcrumb-HI65z9tX.js → ProjectBreadcrumb-w-ZQjuc2.js} +22 -22
- package/dist/assets/{ProjectHeader-BzekhnTR.js → ProjectHeader-DG_Z0cm0.js} +36 -18
- package/dist/assets/{ProjectHeader-BNMKpvzV.css → ProjectHeader-TKKq6OrY.css} +15 -15
- package/dist/assets/{ProjectSettings-BTP0xrzD.js → ProjectSettings-ClU4oaU3.js} +26 -26
- package/dist/assets/{ProjectSettings-Cj1kC16G.css → ProjectSettings-c2BBLEzY.css} +60 -60
- package/dist/assets/ProjectVariables-B76TEE5o.js +532 -0
- package/dist/assets/ProjectVariables-DtGcMnSf.css +293 -0
- 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
- package/dist/assets/{ResourcesListLayout-Dm7w49bu.css → ResourcesListLayout-CY-G3BmN.css} +42 -42
- package/dist/assets/{ResourcesListLayout-CnidC9EV.js → ResourcesListLayout-Db6ys3gY.js} +25 -21
- package/dist/assets/{RunDataJson-DEs4Ql5T.js → RunDataJson-CXyTvX4C.js} +8 -8
- package/dist/assets/{RunDataJson-BH9HLoGC.css → RunDataJson-PAkTmkZf.css} +19 -19
- package/dist/assets/{RunDataJsonActions-Ct02vlvz.js → RunDataJsonActions-C5Cvqjc_.js} +2 -2
- package/dist/assets/{RunDataJsonActions-B2jW3_UG.css → RunDataJsonActions-CZx7rSSE.css} +2 -2
- package/dist/assets/{RunDataParsedAiContent-Bl49tvwG.js → RunDataParsedAiContent-BkNc-yBy.js} +13 -112
- package/dist/assets/{RunDataParsedAiContent-wfIiKsq7.css → RunDataParsedAiContent-CvjNCtpG.css} +37 -37
- package/dist/assets/{RunDataSearch-D8DXH4rw.js → RunDataSearch-CBsWlIj1.js} +4 -4
- package/dist/assets/{RunDataSearch-2eEalFoi.css → RunDataSearch-CPo36NE_.css} +10 -10
- package/dist/assets/{RunDataTable-BZzteeuj.css → RunDataTable-C4QnrVVF.css} +104 -104
- package/dist/assets/{RunDataTable-CdxTnMd4.js → RunDataTable-FKsWIgfg.js} +33 -33
- package/dist/assets/{SamlOnboarding-CLFzc3D4.js → SamlOnboarding--cNSub8q.js} +3 -3
- package/dist/assets/{SelectedItemsInfo-Dl4uynXs.css → SelectedItemsInfo-B6Rq6uIe.css} +7 -7
- package/dist/assets/{SelectedItemsInfo-Dd3HKZ6z.js → SelectedItemsInfo-BOQrOU8d.js} +3 -3
- package/dist/assets/{SettingsApiView-CmU8R9-c.js → SettingsApiView-DkPpP_Xa.js} +14 -14
- package/dist/assets/{SettingsApiView-k1hALKCX.css → SettingsApiView-Dtl_N9mK.css} +31 -31
- package/dist/assets/{SettingsCommunityNodesView-CAggjsaT.css → SettingsCommunityNodesView-CVQjV37D.css} +31 -31
- package/dist/assets/{SettingsCommunityNodesView-CjgVPZAy.js → SettingsCommunityNodesView-CypE1wWW.js} +21 -21
- package/dist/assets/{SettingsExternalSecrets-BAX9ENm9.css → SettingsExternalSecrets-CaiOf7cD.css} +12 -12
- package/dist/assets/{SettingsExternalSecrets-Baxom4lP.js → SettingsExternalSecrets-Dw8qeVlx.js} +8 -8
- package/dist/assets/{SettingsLdapView-BQUfzAsN.js → SettingsLdapView-CQXdsBfZ.js} +8 -8
- package/dist/assets/{SettingsLdapView-D0SUO3ai.css → SettingsLdapView-KgMO_1GA.css} +17 -17
- package/dist/assets/{SettingsLogStreamingView-Bq2IwWDt.js → SettingsLogStreamingView-B-0r_ZsJ.js} +7 -7
- package/dist/assets/{SettingsLogStreamingView-CflEMmu9.css → SettingsLogStreamingView-xo-rTSA0.css} +12 -12
- package/dist/assets/SettingsMCPView-BBO_ZyBU.css +552 -0
- package/dist/assets/{SettingsMCPView-D3BOHCtS.js → SettingsMCPView-Bbdsa8lu.js} +200 -126
- package/dist/assets/{SettingsPersonalView-Bt8bL5tJ.css → SettingsPersonalView-D6LtKnaF.css} +23 -23
- package/dist/assets/{SettingsPersonalView-Bbn0olns.js → SettingsPersonalView-VU8Kh83i.js} +10 -10
- package/dist/assets/{SettingsSourceControl-BBxJXbFC.css → SettingsSourceControl-C6pfOcuv.css} +40 -40
- package/dist/assets/{SettingsSourceControl-CC_Pak2B.js → SettingsSourceControl-CJvfstK0.js} +15 -15
- package/dist/assets/{SettingsSso-vViqB8oe.js → SettingsSso-v2r9nirX.js} +7 -7
- package/dist/assets/{SettingsSso-D4HKPLvV.css → SettingsSso-w7Iz4Luy.css} +25 -25
- package/dist/assets/{SettingsUsageAndPlan-BtE-s9Vb.js → SettingsUsageAndPlan-BhgN2Hcc.js} +13 -13
- package/dist/assets/{SettingsUsageAndPlan-82J0IcdW.css → SettingsUsageAndPlan-Cct79Zta.css} +34 -34
- package/dist/assets/{SettingsUsersView-DVdCq-SX.js → SettingsUsersView-CApxIHLx.js} +16 -16
- package/dist/assets/{SettingsUsersView-BG7JdfYz.css → SettingsUsersView-CfJcVjkl.css} +28 -28
- package/dist/assets/{SettingsView-BHLJBEJF.css → SettingsView-C4aA4kVV.css} +18 -18
- package/dist/assets/{SettingsView-ByNIw76r.js → SettingsView-Dru_1OUG.js} +8 -8
- package/dist/assets/{SetupView-XbSIMu9B.js → SetupView-Bh4XpOq8.js} +3 -3
- package/dist/assets/{SetupWorkflowCredentialsButton-CUzPtmot.js → SetupWorkflowCredentialsButton-6T0EX3L6.js} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-ZPJL_m2F.css → SetupWorkflowFromTemplateView-CU2iGJTa.css} +11 -11
- package/dist/assets/{SetupWorkflowFromTemplateView-CQcMUEt1.js → SetupWorkflowFromTemplateView-EJjV79MY.js} +8 -8
- package/dist/assets/{SigninView-D57wRRHz.css → SigninView-BQgsTN8o.css} +13 -13
- package/dist/assets/{SigninView-C8qujIEW.js → SigninView-DKLEwC5i.js} +9 -9
- package/dist/assets/{SignoutView-BCsXtAKk.js → SignoutView-xza1c_rm.js} +1 -1
- package/dist/assets/{SignupView-By-KjS2P.js → SignupView-DnZEsYnl.js} +3 -3
- package/dist/assets/{TableBase-CX4nZLla.js → TableBase-B1eTsHT8.js} +3 -3
- package/dist/assets/{TableBase-Bf42_9Yp.css → TableBase-CUZbI5pm.css} +24 -24
- package/dist/assets/{Tags-CCemj7t9.css → Tags-6vh_jPIG.css} +4 -4
- package/dist/assets/{Tags-D03vT_rK.js → Tags-DpegReyF.js} +2 -2
- package/dist/assets/{TemplateDetails-DyUqVhf2.css → TemplateDetails-DfyKyMyy.css} +13 -13
- package/dist/assets/{TemplateDetails-CDaB-6oH.js → TemplateDetails-lJNnuxdO.js} +8 -8
- package/dist/assets/{TemplateList-DNBeV62H.js → TemplateList-BHbHvx-_.js} +24 -24
- package/dist/assets/{TemplateList-XNW-2Ugr.css → TemplateList-CNUtq0N7.css} +49 -49
- package/dist/assets/{TemplatesCollectionView-BTk7wBlq.js → TemplatesCollectionView-BijeS4Al.js} +13 -13
- package/dist/assets/{TemplatesCollectionView-2q1rzsOG.css → TemplatesCollectionView-klb8FT9y.css} +13 -13
- package/dist/assets/{TemplatesSearchView-DtyBPi6V.js → TemplatesSearchView-Db14LD0F.js} +18 -18
- package/dist/assets/{TemplatesSearchView-DETaMpDt.css → TemplatesSearchView-gPmmtwoU.css} +50 -50
- package/dist/assets/{TemplatesView-BTid6_ga.js → TemplatesView-BTxutjLU.js} +8 -8
- package/dist/assets/{TemplatesView-Cyu28Dlo.css → TemplatesView-BgdyYmrL.css} +21 -21
- package/dist/assets/{TemplatesWorkflowView-DpIiJjJp.css → TemplatesWorkflowView-CBjRBbmw.css} +17 -17
- package/dist/assets/{TemplatesWorkflowView-CLr9pY-p.js → TemplatesWorkflowView-xFif3ij7.js} +14 -14
- package/dist/assets/{TestRunDetailView-BDPhxOvY.js → TestRunDetailView-BRfLAqZW.js} +36 -36
- package/dist/assets/{TestRunDetailView--lZbJq4u.css → TestRunDetailView-D_a9QpSQ.css} +93 -93
- package/dist/assets/{TriggerPanel-CQgUdcjv.css → TriggerPanel-BbB_P9ZT.css} +158 -236
- package/dist/assets/TriggerPanel-nPxZrihp.js +1633 -0
- package/dist/assets/VariablesUsageBadge-BaTs74dX.js +39 -0
- package/dist/assets/VariablesUsageBadge-C_yi7Lw5.css +129 -0
- package/dist/assets/{VariablesView-DsA8Mqxt.js → VariablesView-BeHRHeb1.js} +11 -52
- package/dist/assets/VariablesView-zN910qd9.css +272 -0
- package/dist/assets/{WorkerView-BrSoYcbf.css → WorkerView-4m_NaoAx.css} +47 -47
- package/dist/assets/{WorkerView-CDijwoCe.js → WorkerView-LAFQqBrx.js} +39 -39
- package/dist/assets/{WorkflowActivator-DKpc2Acz.js → WorkflowActivator-BdIK7K-g.js} +7 -7
- package/dist/assets/{WorkflowActivator-DPDRDtQG.css → WorkflowActivator-DBJbtrBD.css} +9 -9
- package/dist/assets/{WorkflowExecutionsInfoAccordion-53bC-IXN.css → WorkflowExecutionsInfoAccordion-CEOvJ-SX.css} +11 -11
- package/dist/assets/{WorkflowExecutionsInfoAccordion-Fedus-Da.js → WorkflowExecutionsInfoAccordion-kaRsv7EW.js} +4 -4
- package/dist/assets/{WorkflowExecutionsLandingPage-BpO-BoFq.js → WorkflowExecutionsLandingPage-BdMQTvlG.js} +6 -6
- package/dist/assets/{WorkflowExecutionsLandingPage-Bm_hJMl4.css → WorkflowExecutionsLandingPage-DMldlKod.css} +8 -8
- package/dist/assets/{WorkflowExecutionsPreview-Cd4BrS-0.css → WorkflowExecutionsPreview-CkEakQp2.css} +90 -90
- package/dist/assets/{WorkflowExecutionsPreview-DzvPOJOY.js → WorkflowExecutionsPreview-DoAsEchV.js} +46 -46
- package/dist/assets/{WorkflowExecutionsView-DDoqUcYQ.js → WorkflowExecutionsView-Cl1624bM.js} +34 -34
- package/dist/assets/{WorkflowExecutionsView-Bjkudb8L.css → WorkflowExecutionsView-CqRMwPwF.css} +82 -82
- package/dist/assets/{WorkflowHistory-7Ad0Va7M.css → WorkflowHistory-BmerBiKz.css} +71 -71
- package/dist/assets/{WorkflowHistory-BhU1Rfch.js → WorkflowHistory-DcGYJnXH.js} +21 -21
- package/dist/assets/{WorkflowOnboardingView-BqWP7FwD.js → WorkflowOnboardingView-Ci32PYxq.js} +1 -1
- package/dist/assets/{WorkflowPreview-B1W62QhC.js → WorkflowPreview-B8KvmFRP.js} +8 -8
- package/dist/assets/{WorkflowPreview-CIOAVgxK.css → WorkflowPreview-Bt03akXc.css} +8 -8
- package/dist/assets/{WorkflowsView-B-pO60w1.js → WorkflowsView-BFZrfitq.js} +79 -83
- package/dist/assets/{WorkflowsView-B8UKso1P.css → WorkflowsView-GJhG9SFw.css} +144 -144
- package/dist/assets/{chartjs.utils-DpK-YRAM.js → chartjs.utils-nj8CCZPZ.js} +10 -10
- package/dist/assets/chat.utils-irsHFh8G.js +224 -0
- package/dist/assets/{core-HZaYo_tU.js → core-DsTi4w-I.js} +1 -1
- package/dist/assets/{evaluation-ZbMdquW3.css → evaluation-BpIei8SG.css} +26 -26
- package/dist/assets/{evaluation.constants-DfiJmRyk.js → evaluation.constants-DjPrCMEi.js} +9 -9
- package/dist/assets/{global-link-actions-DdzlWwjw.js → global-link-actions-DSKsOCqo.js} +1 -1
- package/dist/assets/{index-CFiA0qjr.css → index-BvbpnRSm.css} +6384 -6442
- package/dist/assets/{index-MTM6BbvW.js → index-C2iJCVYf.js} +13722 -15461
- package/dist/assets/{index-P3-xVlwI.js → index-DkYsG7tJ.js} +1 -1
- package/dist/assets/mcp.store-LrK5gI5Y.js +85 -0
- package/dist/assets/{pickBy-DUKPNRlc.js → pickBy-DSRQa7Nf.js} +1 -1
- package/dist/assets/{readyToRunWorkflows.store-nzu6XNAP.js → readyToRunWorkflows.store-ia-2Nluj.js} +2 -2
- package/dist/assets/{readyToRunWorkflowsV2.store-1dRkG6XV.js → readyToRunWorkflowsV2.store-CyBbWYeG.js} +41 -3
- package/dist/assets/{templateActions-BePunFaZ.js → templateActions-CqLHZUrv.js} +1 -1
- package/dist/assets/{useBeforeUnload-DsbgbymL.js → useBeforeUnload-D788NzAs.js} +1 -1
- package/dist/assets/{useExecutionDebugging-yUnwhnYk.js → useExecutionDebugging-DWOhAQo4.js} +1 -1
- package/dist/assets/{useImportCurlCommand-DcFIVp7Y.js → useImportCurlCommand-BQs5GVHJ.js} +1 -1
- package/dist/assets/useLogsTreeExpand-2auAOTOK.js +1080 -0
- package/dist/assets/useLogsTreeExpand-BZb1m-U7.css +554 -0
- package/dist/assets/{useProjectPages-JCNZbA2u.js → useProjectPages-BRhbuYJH.js} +1 -1
- package/dist/assets/{usePushConnection-_VL-61pH.js → usePushConnection-DgYz_QNH.js} +17 -19
- package/dist/assets/{useWorkflowsCache-DwIv_I-Z.js → useWorkflowsCache-C2_YYjSX.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/scripts/fetch-node-popularity.mjs +13 -1
- package/turbo.json +2 -1
- package/dist/assets/CollectionParameter-BbxTTmMu.js +0 -4
- package/dist/assets/ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-Bv40HGJu.js +0 -44
- package/dist/assets/EntityNotFound-pTnVFOv-.css +0 -10
- package/dist/assets/EntityUnAuthorised-CHl9g0Ry.css +0 -10
- package/dist/assets/SettingsMCPView-B7NzLvT3.css +0 -378
- package/dist/assets/TriggerPanel-BS69Ky8P.js +0 -3343
- package/dist/assets/VariablesView-BMHdLce7.css +0 -400
|
@@ -1,403 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { _ as _sfc_main$j } from "./
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
const TOOL_EXECUTOR_NODE_NAME = "PartialExecutionToolExecutor";
|
|
1
|
+
import { a as useToast, r as ref, x as computed, c as useI18n$1, bC as usePinnedData, am as useMessage, an as MODAL_CONFIRM, bD as v4, a2 as useWorkflowsStore, bE as injectWorkflowState, au as useRootStore, bF as useLogsStore, b as useRouter, bG as useNodeHelpers, bH as useRunWorkflow, bI as isChatNode, a8 as watch, V as VIEWS, bJ as chatEventBus, a4 as PLACEHOLDER_EMPTY_WORKFLOW_ID, bK as provide, d as defineComponent, h as createElementBlock, g as openBlock, n as normalizeClass, i as createVNode, j as createBaseVNode, k as unref, p as N8nText, w as withCtx, Y as renderSlot, l as createTextVNode, t as toDisplayString, _ as _export_sfc, bL as useTimestamp, e as createBlock, f as createCommentVNode, a3 as useRoute, af as useSourceControlStore, bM as useCanvasOperations, ae as useNodeTypesStore, bN as START_NODE_TYPE, bO as getScrollbarWidth, q as N8nButton, B as withModifiers, aa as N8nTooltip, F as Fragment, O as N8nRadioButtons, bP as inject, bQ as isRef, bR as toRefs, o as onMounted, bS as normalizeProps, bT as guardReactiveProps, bu as resolveDynamicComponent, K as mergeProps, A as renderList, bU as markdownLink, bV as useFileDialog, bh as onUnmounted, ap as normalizeStyle, b4 as withDirectives, bW as vModelText, bX as withKeys, N as N8nIcon, bY as useAttrs, bZ as useClipboard, ab as _sfc_main$h, b_ as createSlots, a_ as useNDVStore, b$ as PopOutWindowKey, c0 as resolveDirective, c1 as RunData, ac as I18nT, C as N8nLink, c2 as NDVEmptyState, c3 as waitingNodeTooltip, c4 as RunDataItemCount, b0 as useLocalStorage, c5 as useExperimentalNdvStore, aH as useTemplateRef, c6 as LOG_DETAILS_PANEL_STATE, c7 as KeyboardShortcutTooltip, c8 as NodeIcon, c9 as N8nResizeWrapper, ca as useStyles, aO as N8nActionDropdown, cb as shallowRef, Q as useUIStore, cc as useCanvasStore, al as useTelemetry, cd as canvasEventBus, ay as useDocumentTitle, ce as onScopeDispose, X as onBeforeUnmount, cf as useProvideTooltipAppendTo, cg as LOGS_PANEL_STATE, ch as LOCAL_STORAGE_PANEL_HEIGHT, ci as LOCAL_STORAGE_OVERVIEW_PANEL_WIDTH, cj as LOCAL_STORAGE_PANEL_WIDTH, ck as useActiveElement, bo as useKeybindings, cl as toRef, Z as nextTick, cm as ndvEventBus } from "./index-C2iJCVYf.js";
|
|
2
|
+
import { p as processFiles, g as getInputKey, e as extractBotResponse, r as restoreChatHistory, u as upperFirst, _ as _sfc_main$g, a as getTotalConsumedTokens, b as getSubtreeTotalConsumedTokens, L as LogsOverviewRows, i as isSubNodeLog, c as isPlaceholderLog, d as LogsViewNodeName, f as findSelectedLogEntry, h as getEntryAtRelativeIndex, j as getDepth, k as findLogEntryRec, l as useLogsExecutionData, m as useLogsTreeExpand } from "./useLogsTreeExpand-2auAOTOK.js";
|
|
3
|
+
import { H as HighlightJS, V as VueMarkdown } from "./core-DsTi4w-I.js";
|
|
4
|
+
import "./AnimatedSpinner-DFjfUB--.js";
|
|
6
5
|
function constructChatWebsocketUrl(url, executionId, sessionId2, isPublic) {
|
|
7
6
|
const baseUrl = new URL(url).origin;
|
|
8
7
|
const wsProtocol = baseUrl.startsWith("https") ? "wss" : "ws";
|
|
9
8
|
const wsUrl = baseUrl.replace(/^https?/, wsProtocol);
|
|
10
9
|
return `${wsUrl}/chat?sessionId=${sessionId2}&executionId=${executionId}${isPublic ? "&isPublic=true" : ""}`;
|
|
11
10
|
}
|
|
12
|
-
function getConsumedTokens(task) {
|
|
13
|
-
if (!task.data) {
|
|
14
|
-
return emptyTokenUsageData;
|
|
15
|
-
}
|
|
16
|
-
const tokenUsage = Object.values(task.data).flat().flat().reduce((acc, curr) => {
|
|
17
|
-
const tokenUsageData = curr?.json?.tokenUsage ?? curr?.json?.tokenUsageEstimate;
|
|
18
|
-
if (!tokenUsageData) return acc;
|
|
19
|
-
return addTokenUsageData(acc, {
|
|
20
|
-
...tokenUsageData,
|
|
21
|
-
isEstimate: !!curr?.json.tokenUsageEstimate
|
|
22
|
-
});
|
|
23
|
-
}, emptyTokenUsageData);
|
|
24
|
-
return tokenUsage;
|
|
25
|
-
}
|
|
26
|
-
function createNode(node, context, runIndex, runData, children = []) {
|
|
27
|
-
return {
|
|
28
|
-
parent: context.parent,
|
|
29
|
-
node,
|
|
30
|
-
// The ID consists of workflow ID, node ID and run index (including ancestor's), which
|
|
31
|
-
// makes it possible to identify the same log across different executions
|
|
32
|
-
id: `${context.workflow.id}:${node.id}:${[...context.ancestorRunIndexes, runIndex].join(":")}`,
|
|
33
|
-
runIndex,
|
|
34
|
-
runData,
|
|
35
|
-
children,
|
|
36
|
-
consumedTokens: runData ? getConsumedTokens(runData) : emptyTokenUsageData,
|
|
37
|
-
workflow: context.workflow,
|
|
38
|
-
executionId: context.executionId,
|
|
39
|
-
execution: context.data
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
function getChildNodes(treeNode, node, runIndex, context) {
|
|
43
|
-
const subExecutionLocator = findSubExecutionLocator(treeNode);
|
|
44
|
-
if (subExecutionLocator !== void 0) {
|
|
45
|
-
const workflow = context.workflows[subExecutionLocator.workflowId];
|
|
46
|
-
const subWorkflowRunData = context.subWorkflowData[subExecutionLocator.executionId];
|
|
47
|
-
if (!workflow || !subWorkflowRunData) {
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
50
|
-
return createLogTreeRec({
|
|
51
|
-
...context,
|
|
52
|
-
parent: treeNode,
|
|
53
|
-
ancestorRunIndexes: [...context.ancestorRunIndexes, runIndex ?? 0],
|
|
54
|
-
workflow,
|
|
55
|
-
executionId: subExecutionLocator.executionId,
|
|
56
|
-
data: subWorkflowRunData
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
const connectedSubNodes = context.workflow.getParentNodes(node.name, "ALL_NON_MAIN", 1);
|
|
60
|
-
function isMatchedSource(source) {
|
|
61
|
-
return (source?.previousNode === node.name || isPlaceholderLog(treeNode) && source?.previousNode === TOOL_EXECUTOR_NODE_NAME) && (runIndex === void 0 || source.previousNodeRun === runIndex);
|
|
62
|
-
}
|
|
63
|
-
return connectedSubNodes.flatMap(
|
|
64
|
-
(subNodeName) => (context.data.resultData.runData[subNodeName] ?? []).flatMap((t, index) => {
|
|
65
|
-
const isMatched = t.source.some((source) => source !== null) ? t.source.some(isMatchedSource) : runIndex === void 0 || index === runIndex;
|
|
66
|
-
if (!isMatched) {
|
|
67
|
-
return [];
|
|
68
|
-
}
|
|
69
|
-
const subNode = context.workflow.getNode(subNodeName);
|
|
70
|
-
return subNode ? getTreeNodeData(subNode, t, index, {
|
|
71
|
-
...context,
|
|
72
|
-
ancestorRunIndexes: [...context.ancestorRunIndexes, runIndex ?? 0],
|
|
73
|
-
parent: treeNode
|
|
74
|
-
}) : [];
|
|
75
|
-
})
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
function getTreeNodeData(node, runData, runIndex, context) {
|
|
79
|
-
const treeNode = createNode(node, context, runIndex ?? 0, runData);
|
|
80
|
-
const children = getChildNodes(treeNode, node, runIndex, context).sort(sortLogEntries);
|
|
81
|
-
if ((runData === void 0 || node.disabled) && children.length === 0) {
|
|
82
|
-
return [];
|
|
83
|
-
}
|
|
84
|
-
treeNode.children = children;
|
|
85
|
-
return [treeNode];
|
|
86
|
-
}
|
|
87
|
-
function getTotalConsumedTokens(...usage) {
|
|
88
|
-
return usage.reduce(addTokenUsageData, emptyTokenUsageData);
|
|
89
|
-
}
|
|
90
|
-
function getSubtreeTotalConsumedTokens(treeNode, includeSubWorkflow) {
|
|
91
|
-
const executionId = treeNode.executionId;
|
|
92
|
-
function calculate(currentNode) {
|
|
93
|
-
if (!includeSubWorkflow && currentNode.executionId !== executionId) {
|
|
94
|
-
return emptyTokenUsageData;
|
|
95
|
-
}
|
|
96
|
-
return getTotalConsumedTokens(
|
|
97
|
-
currentNode.consumedTokens,
|
|
98
|
-
...currentNode.children.map(calculate)
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
return calculate(treeNode);
|
|
102
|
-
}
|
|
103
|
-
function findLogEntryToAutoSelect(subTree) {
|
|
104
|
-
const entryWithError = findLogEntryRec((e) => !!e.runData?.error, subTree);
|
|
105
|
-
if (entryWithError) {
|
|
106
|
-
return entryWithError;
|
|
107
|
-
}
|
|
108
|
-
const entryForAiAgent = findLogEntryRec(
|
|
109
|
-
(entry) => entry.node.type === AGENT_LANGCHAIN_NODE_TYPE || entry.parent?.node.type === AGENT_LANGCHAIN_NODE_TYPE && isPlaceholderLog(entry.parent),
|
|
110
|
-
subTree
|
|
111
|
-
);
|
|
112
|
-
if (entryForAiAgent) {
|
|
113
|
-
return entryForAiAgent;
|
|
114
|
-
}
|
|
115
|
-
return subTree[subTree.length - 1];
|
|
116
|
-
}
|
|
117
|
-
function createLogTreeRec(context) {
|
|
118
|
-
const runData = context.data.resultData.runData;
|
|
119
|
-
return Object.entries(runData).flatMap(([nodeName, taskData]) => {
|
|
120
|
-
const node = context.workflow.getNode(nodeName);
|
|
121
|
-
if (node === null) {
|
|
122
|
-
return [];
|
|
123
|
-
}
|
|
124
|
-
const childNodes = context.workflow.getChildNodes(nodeName, "ALL_NON_MAIN");
|
|
125
|
-
if (childNodes.length === 0) {
|
|
126
|
-
return taskData.map((task, runIndex) => ({
|
|
127
|
-
node,
|
|
128
|
-
task,
|
|
129
|
-
runIndex,
|
|
130
|
-
nodeHasMultipleRuns: taskData.length > 1
|
|
131
|
-
}));
|
|
132
|
-
}
|
|
133
|
-
if (childNodes.some((child) => (runData[child] ?? []).length > 0)) {
|
|
134
|
-
return [];
|
|
135
|
-
}
|
|
136
|
-
const firstChild = context.workflow.getNode(childNodes[0]);
|
|
137
|
-
if (firstChild === null) {
|
|
138
|
-
return [];
|
|
139
|
-
}
|
|
140
|
-
return [{ node: firstChild, nodeHasMultipleRuns: false }];
|
|
141
|
-
}).flatMap(
|
|
142
|
-
({ node, runIndex, task, nodeHasMultipleRuns }) => getTreeNodeData(node, task, nodeHasMultipleRuns ? runIndex : void 0, context)
|
|
143
|
-
).sort(sortLogEntries);
|
|
144
|
-
}
|
|
145
|
-
function createLogTree(workflow, response, workflows = {}, subWorkflowData = {}) {
|
|
146
|
-
return createLogTreeRec({
|
|
147
|
-
parent: void 0,
|
|
148
|
-
ancestorRunIndexes: [],
|
|
149
|
-
executionId: response.id,
|
|
150
|
-
workflow,
|
|
151
|
-
workflows,
|
|
152
|
-
data: response.data ?? { resultData: { runData: {} } },
|
|
153
|
-
subWorkflowData
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
function findLogEntryRec(isMatched, entries) {
|
|
157
|
-
for (const entry of entries) {
|
|
158
|
-
if (isMatched(entry)) {
|
|
159
|
-
return entry;
|
|
160
|
-
}
|
|
161
|
-
const child = findLogEntryRec(isMatched, entry.children);
|
|
162
|
-
if (child) {
|
|
163
|
-
return child;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return void 0;
|
|
167
|
-
}
|
|
168
|
-
function findSelectedLogEntry(selection, entries, isExecuting) {
|
|
169
|
-
switch (selection.type) {
|
|
170
|
-
case "initial":
|
|
171
|
-
return isExecuting ? void 0 : findLogEntryToAutoSelect(entries);
|
|
172
|
-
case "none":
|
|
173
|
-
return void 0;
|
|
174
|
-
case "selected": {
|
|
175
|
-
const found = findLogEntryRec((e) => e.id === selection.entry.id, entries);
|
|
176
|
-
if (found === void 0 && !isExecuting) {
|
|
177
|
-
for (let runIndex = selection.entry.runIndex - 1; runIndex >= 0; runIndex--) {
|
|
178
|
-
const fallback = findLogEntryRec(
|
|
179
|
-
(e) => e.workflow.id === selection.entry.workflow.id && e.node.id === selection.entry.node.id && e.runIndex === runIndex,
|
|
180
|
-
entries
|
|
181
|
-
);
|
|
182
|
-
if (fallback !== void 0) {
|
|
183
|
-
return fallback;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
return found;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
function flattenLogEntries(entries, collapsedEntryIds, ret = []) {
|
|
192
|
-
for (const entry of entries) {
|
|
193
|
-
ret.push(entry);
|
|
194
|
-
if (!collapsedEntryIds[entry.id]) {
|
|
195
|
-
flattenLogEntries(entry.children, collapsedEntryIds, ret);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
return ret;
|
|
199
|
-
}
|
|
200
|
-
function getEntryAtRelativeIndex(entries, id, relativeIndex) {
|
|
201
|
-
const offset = entries.findIndex((e) => e.id === id);
|
|
202
|
-
return offset === -1 ? void 0 : entries[offset + relativeIndex];
|
|
203
|
-
}
|
|
204
|
-
function sortLogEntries(a, b) {
|
|
205
|
-
if (a.runData === void 0) {
|
|
206
|
-
return a.children.length > 0 ? sortLogEntries(a.children[0], b) : 0;
|
|
207
|
-
}
|
|
208
|
-
if (b.runData === void 0) {
|
|
209
|
-
return b.children.length > 0 ? sortLogEntries(a, b.children[0]) : 0;
|
|
210
|
-
}
|
|
211
|
-
if (a.runData.startTime === b.runData.startTime) {
|
|
212
|
-
return a.runData.executionIndex - b.runData.executionIndex;
|
|
213
|
-
}
|
|
214
|
-
return a.runData.startTime - b.runData.startTime;
|
|
215
|
-
}
|
|
216
|
-
function mergeStartData(startData, response) {
|
|
217
|
-
if (!response.data) {
|
|
218
|
-
return response;
|
|
219
|
-
}
|
|
220
|
-
const nodeNames = [
|
|
221
|
-
...new Set(
|
|
222
|
-
Object.keys(startData).concat(Object.keys(response.data.resultData.runData))
|
|
223
|
-
).values()
|
|
224
|
-
];
|
|
225
|
-
const runData = Object.fromEntries(
|
|
226
|
-
nodeNames.map((nodeName) => {
|
|
227
|
-
const tasks = response.data?.resultData.runData[nodeName] ?? [];
|
|
228
|
-
const mergedTasks = tasks.concat(
|
|
229
|
-
(startData[nodeName] ?? []).filter(
|
|
230
|
-
(task) => (
|
|
231
|
-
// To remove duplicate runs, we check start time in addition to execution index
|
|
232
|
-
// because nodes such as Wait and Form emits multiple websocket events with
|
|
233
|
-
// different execution index for a single run
|
|
234
|
-
tasks.every(
|
|
235
|
-
(t) => t.startTime < task.startTime && t.executionIndex !== task.executionIndex
|
|
236
|
-
)
|
|
237
|
-
)
|
|
238
|
-
).map((task) => ({
|
|
239
|
-
...task,
|
|
240
|
-
executionTime: 0,
|
|
241
|
-
executionStatus: "running"
|
|
242
|
-
}))
|
|
243
|
-
);
|
|
244
|
-
return [nodeName, mergedTasks];
|
|
245
|
-
})
|
|
246
|
-
);
|
|
247
|
-
return {
|
|
248
|
-
...response,
|
|
249
|
-
data: {
|
|
250
|
-
...response.data,
|
|
251
|
-
resultData: {
|
|
252
|
-
...response.data.resultData,
|
|
253
|
-
runData
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
function hasSubExecution(entry) {
|
|
259
|
-
return findSubExecutionLocator(entry) !== void 0;
|
|
260
|
-
}
|
|
261
|
-
function findSubExecutionLocator(entry) {
|
|
262
|
-
const metadata = entry.runData?.metadata?.subExecution;
|
|
263
|
-
if (metadata) {
|
|
264
|
-
return { workflowId: metadata.workflowId, executionId: metadata.executionId };
|
|
265
|
-
}
|
|
266
|
-
return parseErrorMetadata(entry.runData?.error)?.subExecution;
|
|
267
|
-
}
|
|
268
|
-
function getDepth(entry) {
|
|
269
|
-
let depth = 0;
|
|
270
|
-
let currentEntry = entry;
|
|
271
|
-
while (currentEntry.parent !== void 0) {
|
|
272
|
-
currentEntry = currentEntry.parent;
|
|
273
|
-
depth++;
|
|
274
|
-
}
|
|
275
|
-
return depth;
|
|
276
|
-
}
|
|
277
|
-
function getInputKey(node) {
|
|
278
|
-
if (node.type === MANUAL_CHAT_TRIGGER_NODE_TYPE && node.typeVersion < 1.1) {
|
|
279
|
-
return "input";
|
|
280
|
-
}
|
|
281
|
-
if (node.type === CHAT_TRIGGER_NODE_TYPE) {
|
|
282
|
-
return "chatInput";
|
|
283
|
-
}
|
|
284
|
-
return "chatInput";
|
|
285
|
-
}
|
|
286
|
-
function extractChatInput(workflow, resultData) {
|
|
287
|
-
const chatTrigger = workflow.nodes.find(isChatNode);
|
|
288
|
-
if (chatTrigger === void 0) {
|
|
289
|
-
return void 0;
|
|
290
|
-
}
|
|
291
|
-
const inputKey = getInputKey(chatTrigger);
|
|
292
|
-
const runData = (resultData.runData[chatTrigger.name] ?? [])[0];
|
|
293
|
-
const message = runData?.data?.[NodeConnectionTypes.Main]?.[0]?.[0]?.json?.[inputKey];
|
|
294
|
-
if (runData === void 0 || typeof message !== "string") {
|
|
295
|
-
return void 0;
|
|
296
|
-
}
|
|
297
|
-
return {
|
|
298
|
-
text: message,
|
|
299
|
-
sender: "user",
|
|
300
|
-
id: v4()
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
function extractBotResponse(resultData, executionId, emptyText2) {
|
|
304
|
-
const lastNodeExecuted = resultData.lastNodeExecuted;
|
|
305
|
-
if (!lastNodeExecuted) return void 0;
|
|
306
|
-
const nodeResponseDataArray = get(resultData.runData, lastNodeExecuted) ?? [];
|
|
307
|
-
const nodeResponseData = nodeResponseDataArray[nodeResponseDataArray.length - 1];
|
|
308
|
-
let responseMessage;
|
|
309
|
-
if (get(nodeResponseData, "error")) {
|
|
310
|
-
responseMessage = "[ERROR: " + get(nodeResponseData, "error.message") + "]";
|
|
311
|
-
} else {
|
|
312
|
-
const mainOutputs = get(nodeResponseData, "data.main");
|
|
313
|
-
let text;
|
|
314
|
-
if (mainOutputs && Array.isArray(mainOutputs)) {
|
|
315
|
-
for (const branch of mainOutputs) {
|
|
316
|
-
if (branch?.[0]?.json) {
|
|
317
|
-
const responseData = branch[0].json;
|
|
318
|
-
text = extractResponseText(responseData);
|
|
319
|
-
if (text) {
|
|
320
|
-
break;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
text = text ?? emptyText2;
|
|
326
|
-
if (!text) {
|
|
327
|
-
return void 0;
|
|
328
|
-
}
|
|
329
|
-
responseMessage = text;
|
|
330
|
-
}
|
|
331
|
-
return {
|
|
332
|
-
text: responseMessage,
|
|
333
|
-
sender: "bot",
|
|
334
|
-
id: executionId ?? v4()
|
|
335
|
-
};
|
|
336
|
-
}
|
|
337
|
-
function extractResponseText(responseData) {
|
|
338
|
-
if (!responseData || isEmpty(responseData)) {
|
|
339
|
-
return void 0;
|
|
340
|
-
}
|
|
341
|
-
const paths = ["output", "text", "response.text", "message"];
|
|
342
|
-
const matchedPath = paths.find((path) => get(responseData, path));
|
|
343
|
-
if (!matchedPath) return JSON.stringify(responseData, null, 2);
|
|
344
|
-
const matchedOutput = get(responseData, matchedPath);
|
|
345
|
-
if (typeof matchedOutput === "object") {
|
|
346
|
-
return "```json\n" + JSON.stringify(matchedOutput, null, 2) + "\n```";
|
|
347
|
-
}
|
|
348
|
-
return matchedOutput?.toString() ?? "";
|
|
349
|
-
}
|
|
350
|
-
function restoreChatHistory(workflowExecutionData, emptyText2) {
|
|
351
|
-
if (!workflowExecutionData?.data) {
|
|
352
|
-
return [];
|
|
353
|
-
}
|
|
354
|
-
const userMessage = extractChatInput(
|
|
355
|
-
workflowExecutionData.workflowData,
|
|
356
|
-
workflowExecutionData.data.resultData
|
|
357
|
-
);
|
|
358
|
-
const botMessage = extractBotResponse(
|
|
359
|
-
workflowExecutionData.data.resultData,
|
|
360
|
-
workflowExecutionData.id,
|
|
361
|
-
emptyText2
|
|
362
|
-
);
|
|
363
|
-
return [...userMessage ? [userMessage] : [], ...botMessage ? [botMessage] : []];
|
|
364
|
-
}
|
|
365
|
-
async function processFiles(data) {
|
|
366
|
-
if (!data || data.length === 0) return [];
|
|
367
|
-
const filePromises = data.map(async (file) => {
|
|
368
|
-
return new Promise((resolve, reject) => {
|
|
369
|
-
const reader = new FileReader();
|
|
370
|
-
reader.onload = () => resolve({
|
|
371
|
-
name: file.name,
|
|
372
|
-
type: file.type,
|
|
373
|
-
data: reader.result
|
|
374
|
-
});
|
|
375
|
-
reader.onerror = () => reject(new Error(`Error reading file: ${reader.error?.message ?? "Unknown error"}`));
|
|
376
|
-
reader.readAsDataURL(file);
|
|
377
|
-
});
|
|
378
|
-
});
|
|
379
|
-
return await Promise.all(filePromises);
|
|
380
|
-
}
|
|
381
|
-
function isSubNodeLog(logEntry) {
|
|
382
|
-
return logEntry.parent !== void 0 && logEntry.parent.executionId === logEntry.executionId;
|
|
383
|
-
}
|
|
384
|
-
function isPlaceholderLog(treeNode) {
|
|
385
|
-
return treeNode.runData === void 0;
|
|
386
|
-
}
|
|
387
|
-
function copyExecutionData(executionData) {
|
|
388
|
-
return {
|
|
389
|
-
...executionData,
|
|
390
|
-
data: {
|
|
391
|
-
...executionData.data,
|
|
392
|
-
resultData: {
|
|
393
|
-
...executionData.data?.resultData,
|
|
394
|
-
runData: Object.fromEntries(
|
|
395
|
-
Object.entries(executionData.data?.resultData.runData ?? {}).map(([k, v]) => [k, [...v]])
|
|
396
|
-
)
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
};
|
|
400
|
-
}
|
|
401
11
|
function useChatMessaging({
|
|
402
12
|
chatTrigger,
|
|
403
13
|
sessionId: sessionId2,
|
|
@@ -736,7 +346,7 @@ function useChatState(isReadOnly) {
|
|
|
736
346
|
displayExecution
|
|
737
347
|
};
|
|
738
348
|
}
|
|
739
|
-
const _sfc_main$
|
|
349
|
+
const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
740
350
|
__name: "LogsPanelHeader",
|
|
741
351
|
props: {
|
|
742
352
|
title: {},
|
|
@@ -776,395 +386,20 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
|
|
|
776
386
|
};
|
|
777
387
|
}
|
|
778
388
|
});
|
|
779
|
-
const container$
|
|
780
|
-
const clickable = "
|
|
781
|
-
const title$2 = "
|
|
782
|
-
const actions$1 = "
|
|
783
|
-
const style0$
|
|
784
|
-
container: container$
|
|
389
|
+
const container$7 = "_container_1y331_123";
|
|
390
|
+
const clickable = "_clickable_1y331_135";
|
|
391
|
+
const title$2 = "_title_1y331_143";
|
|
392
|
+
const actions$1 = "_actions_1y331_151";
|
|
393
|
+
const style0$9 = {
|
|
394
|
+
container: container$7,
|
|
785
395
|
clickable,
|
|
786
396
|
title: title$2,
|
|
787
397
|
actions: actions$1
|
|
788
398
|
};
|
|
789
|
-
const cssModules$b = {
|
|
790
|
-
"$style": style0$b
|
|
791
|
-
};
|
|
792
|
-
const LogsPanelHeader = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__cssModules", cssModules$b]]);
|
|
793
|
-
function useClearExecutionButtonVisible() {
|
|
794
|
-
const route = useRoute();
|
|
795
|
-
const sourceControlStore = useSourceControlStore();
|
|
796
|
-
const workflowsStore = useWorkflowsStore();
|
|
797
|
-
const workflowExecutionData = computed(() => workflowsStore.workflowExecutionData);
|
|
798
|
-
const isWorkflowRunning = computed(() => workflowsStore.isWorkflowRunning);
|
|
799
|
-
const isReadOnlyRoute = computed(() => !!route?.meta?.readOnlyCanvas);
|
|
800
|
-
const { editableWorkflow } = useCanvasOperations();
|
|
801
|
-
const nodeTypesStore = useNodeTypesStore();
|
|
802
|
-
const isReadOnlyEnvironment = computed(() => sourceControlStore.preferences.branchReadOnly);
|
|
803
|
-
const allTriggerNodesDisabled = computed(
|
|
804
|
-
() => editableWorkflow.value.nodes.filter((node) => node.type === START_NODE_TYPE || nodeTypesStore.isTriggerNode(node.type)).every((node) => node.disabled)
|
|
805
|
-
);
|
|
806
|
-
return computed(
|
|
807
|
-
() => !isReadOnlyRoute.value && !isReadOnlyEnvironment.value && !isWorkflowRunning.value && !allTriggerNodesDisabled.value && !!workflowExecutionData.value
|
|
808
|
-
);
|
|
809
|
-
}
|
|
810
|
-
const _sfc_main$h = /* @__PURE__ */ defineComponent({
|
|
811
|
-
__name: "LogsViewConsumedTokenCountText",
|
|
812
|
-
props: {
|
|
813
|
-
consumedTokens: {}
|
|
814
|
-
},
|
|
815
|
-
setup(__props) {
|
|
816
|
-
const locale = useI18n$1();
|
|
817
|
-
return (_ctx, _cache) => {
|
|
818
|
-
return _ctx.consumedTokens !== void 0 ? (openBlock(), createBlock(unref(N8nTooltip), {
|
|
819
|
-
key: 0,
|
|
820
|
-
enterable: false
|
|
821
|
-
}, {
|
|
822
|
-
content: withCtx(() => [
|
|
823
|
-
createVNode(_sfc_main$j, { "consumed-tokens": _ctx.consumedTokens }, null, 8, ["consumed-tokens"])
|
|
824
|
-
]),
|
|
825
|
-
default: withCtx(() => [
|
|
826
|
-
createBaseVNode("span", null, toDisplayString(unref(locale).baseText("runData.aiContentBlock.tokens", {
|
|
827
|
-
interpolate: {
|
|
828
|
-
count: unref(formatTokenUsageCount)(_ctx.consumedTokens, "total")
|
|
829
|
-
}
|
|
830
|
-
})), 1)
|
|
831
|
-
]),
|
|
832
|
-
_: 1
|
|
833
|
-
})) : createCommentVNode("", true);
|
|
834
|
-
};
|
|
835
|
-
}
|
|
836
|
-
});
|
|
837
|
-
var upperFirstExports = requireUpperFirst();
|
|
838
|
-
const upperFirst = /* @__PURE__ */ getDefaultExportFromCjs(upperFirstExports);
|
|
839
|
-
const _hoisted_1$e = { key: 0 };
|
|
840
|
-
const _sfc_main$g = /* @__PURE__ */ defineComponent({
|
|
841
|
-
__name: "LogsViewNodeName",
|
|
842
|
-
props: {
|
|
843
|
-
name: {},
|
|
844
|
-
isError: { type: Boolean },
|
|
845
|
-
isDeleted: { type: Boolean }
|
|
846
|
-
},
|
|
847
|
-
setup(__props) {
|
|
848
|
-
return (_ctx, _cache) => {
|
|
849
|
-
return openBlock(), createBlock(unref(N8nText), {
|
|
850
|
-
tag: "div",
|
|
851
|
-
bold: true,
|
|
852
|
-
size: "small",
|
|
853
|
-
class: normalizeClass(_ctx.$style.name),
|
|
854
|
-
color: _ctx.isError ? "danger" : void 0
|
|
855
|
-
}, {
|
|
856
|
-
default: withCtx(() => [
|
|
857
|
-
_ctx.isDeleted ? (openBlock(), createElementBlock("del", _hoisted_1$e, toDisplayString(_ctx.name), 1)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
858
|
-
createTextVNode(toDisplayString(_ctx.name), 1)
|
|
859
|
-
], 64))
|
|
860
|
-
]),
|
|
861
|
-
_: 1
|
|
862
|
-
}, 8, ["class", "color"]);
|
|
863
|
-
};
|
|
864
|
-
}
|
|
865
|
-
});
|
|
866
|
-
const name$1 = "_name_1t0q3_123";
|
|
867
|
-
const style0$a = {
|
|
868
|
-
name: name$1
|
|
869
|
-
};
|
|
870
|
-
const cssModules$a = {
|
|
871
|
-
"$style": style0$a
|
|
872
|
-
};
|
|
873
|
-
const LogsViewNodeName = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__cssModules", cssModules$a]]);
|
|
874
|
-
const _hoisted_1$d = ["aria-expanded", "aria-selected"];
|
|
875
|
-
const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
876
|
-
__name: "LogsOverviewRow",
|
|
877
|
-
props: {
|
|
878
|
-
data: {},
|
|
879
|
-
isSelected: { type: Boolean },
|
|
880
|
-
isReadOnly: { type: Boolean },
|
|
881
|
-
shouldShowTokenCountColumn: { type: Boolean },
|
|
882
|
-
isCompact: { type: Boolean },
|
|
883
|
-
latestInfo: {},
|
|
884
|
-
expanded: { type: Boolean },
|
|
885
|
-
canOpenNdv: { type: Boolean }
|
|
886
|
-
},
|
|
887
|
-
emits: ["toggleExpanded", "toggleSelected", "triggerPartialExecution", "openNdv"],
|
|
888
|
-
setup(__props, { emit: __emit }) {
|
|
889
|
-
const props = __props;
|
|
890
|
-
const emit = __emit;
|
|
891
|
-
const container2 = useTemplateRef("containerRef");
|
|
892
|
-
const locale = useI18n$1();
|
|
893
|
-
const now = useTimestamp({ interval: 1e3 });
|
|
894
|
-
const nodeTypeStore = useNodeTypesStore();
|
|
895
|
-
const type = computed(() => nodeTypeStore.getNodeType(props.data.node.type));
|
|
896
|
-
const isRunning = computed(() => props.data.runData?.executionStatus === "running");
|
|
897
|
-
const isWaiting = computed(() => props.data.runData?.executionStatus === "waiting");
|
|
898
|
-
const isSettled = computed(() => !isRunning.value && !isWaiting.value);
|
|
899
|
-
const isError = computed(() => !!props.data.runData?.error);
|
|
900
|
-
const statusTextKeyPath = computed(
|
|
901
|
-
() => isSettled.value ? "logs.overview.body.summaryText.in" : "logs.overview.body.summaryText.for"
|
|
902
|
-
);
|
|
903
|
-
const startedAtText = computed(() => {
|
|
904
|
-
if (props.data.runData === void 0) {
|
|
905
|
-
return "—";
|
|
906
|
-
}
|
|
907
|
-
const time = new Date(props.data.runData.startTime);
|
|
908
|
-
return locale.baseText("logs.overview.body.started", {
|
|
909
|
-
interpolate: {
|
|
910
|
-
time: `${toTime(time, true)}, ${toDayMonth(time)}`
|
|
911
|
-
}
|
|
912
|
-
});
|
|
913
|
-
});
|
|
914
|
-
const statusText = computed(() => upperFirst(props.data.runData?.executionStatus ?? ""));
|
|
915
|
-
const timeText = computed(
|
|
916
|
-
() => props.data.runData ? locale.displayTimer(
|
|
917
|
-
isSettled.value ? props.data.runData.executionTime : Math.floor((now.value - props.data.runData.startTime) / 1e3) * 1e3,
|
|
918
|
-
true
|
|
919
|
-
) : void 0
|
|
920
|
-
);
|
|
921
|
-
const subtreeConsumedTokens = computed(
|
|
922
|
-
() => props.shouldShowTokenCountColumn ? getSubtreeTotalConsumedTokens(props.data, false) : void 0
|
|
923
|
-
);
|
|
924
|
-
const hasChildren = computed(() => props.data.children.length > 0 || hasSubExecution(props.data));
|
|
925
|
-
const indents = computed(() => {
|
|
926
|
-
const ret = [];
|
|
927
|
-
let data = props.data;
|
|
928
|
-
while (data.parent !== void 0) {
|
|
929
|
-
const siblings = data.parent?.children ?? [];
|
|
930
|
-
const lastSibling = siblings[siblings.length - 1];
|
|
931
|
-
ret.unshift({ straight: lastSibling?.id !== data.id, curved: data === props.data });
|
|
932
|
-
data = data.parent;
|
|
933
|
-
}
|
|
934
|
-
return ret;
|
|
935
|
-
});
|
|
936
|
-
watch(
|
|
937
|
-
() => props.isSelected,
|
|
938
|
-
(isSelected) => {
|
|
939
|
-
void nextTick(() => {
|
|
940
|
-
if (isSelected) {
|
|
941
|
-
container2.value?.focus();
|
|
942
|
-
}
|
|
943
|
-
});
|
|
944
|
-
},
|
|
945
|
-
{ immediate: true }
|
|
946
|
-
);
|
|
947
|
-
return (_ctx, _cache) => {
|
|
948
|
-
return openBlock(), createElementBlock("div", {
|
|
949
|
-
ref: "containerRef",
|
|
950
|
-
role: "treeitem",
|
|
951
|
-
tabindex: "-1",
|
|
952
|
-
"aria-expanded": props.data.children.length > 0 && props.expanded,
|
|
953
|
-
"aria-selected": props.isSelected,
|
|
954
|
-
class: normalizeClass({
|
|
955
|
-
[_ctx.$style.container]: true,
|
|
956
|
-
[_ctx.$style.compact]: props.isCompact,
|
|
957
|
-
[_ctx.$style.error]: isError.value,
|
|
958
|
-
[_ctx.$style.selected]: props.isSelected
|
|
959
|
-
}),
|
|
960
|
-
onClick: _cache[3] || (_cache[3] = withModifiers(($event) => emit("toggleSelected"), ["stop"]))
|
|
961
|
-
}, [
|
|
962
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(indents.value, (indent2, level) => {
|
|
963
|
-
return openBlock(), createElementBlock("div", {
|
|
964
|
-
key: level,
|
|
965
|
-
class: normalizeClass({
|
|
966
|
-
[_ctx.$style.indent]: true,
|
|
967
|
-
[_ctx.$style.connectorCurved]: indent2.curved,
|
|
968
|
-
[_ctx.$style.connectorStraight]: indent2.straight
|
|
969
|
-
})
|
|
970
|
-
}, null, 2);
|
|
971
|
-
}), 128)),
|
|
972
|
-
createBaseVNode("div", {
|
|
973
|
-
class: normalizeClass(_ctx.$style.background),
|
|
974
|
-
style: normalizeStyle({ "--indent-depth": indents.value.length })
|
|
975
|
-
}, null, 6),
|
|
976
|
-
createVNode(NodeIcon, {
|
|
977
|
-
"node-type": type.value,
|
|
978
|
-
size: 16,
|
|
979
|
-
class: normalizeClass(_ctx.$style.icon)
|
|
980
|
-
}, null, 8, ["node-type", "class"]),
|
|
981
|
-
createVNode(LogsViewNodeName, {
|
|
982
|
-
class: normalizeClass(_ctx.$style.name),
|
|
983
|
-
name: _ctx.latestInfo?.name ?? props.data.node.name,
|
|
984
|
-
"is-error": isError.value,
|
|
985
|
-
"is-deleted": _ctx.latestInfo?.deleted ?? false
|
|
986
|
-
}, null, 8, ["class", "name", "is-error", "is-deleted"]),
|
|
987
|
-
!_ctx.isCompact ? (openBlock(), createBlock(unref(N8nText), {
|
|
988
|
-
key: 0,
|
|
989
|
-
tag: "div",
|
|
990
|
-
color: "text-light",
|
|
991
|
-
size: "small",
|
|
992
|
-
class: normalizeClass(_ctx.$style.timeTook)
|
|
993
|
-
}, {
|
|
994
|
-
default: withCtx(() => [
|
|
995
|
-
timeText.value !== void 0 ? (openBlock(), createBlock(unref(I18nT), {
|
|
996
|
-
key: 0,
|
|
997
|
-
keypath: statusTextKeyPath.value,
|
|
998
|
-
scope: "global"
|
|
999
|
-
}, {
|
|
1000
|
-
status: withCtx(() => [
|
|
1001
|
-
createVNode(unref(N8nText), {
|
|
1002
|
-
color: isError.value ? "danger" : void 0,
|
|
1003
|
-
bold: isError.value,
|
|
1004
|
-
size: "small"
|
|
1005
|
-
}, {
|
|
1006
|
-
default: withCtx(() => [
|
|
1007
|
-
isRunning.value ? (openBlock(), createBlock(AnimatedSpinner, {
|
|
1008
|
-
key: 0,
|
|
1009
|
-
class: normalizeClass(_ctx.$style.statusTextIcon)
|
|
1010
|
-
}, null, 8, ["class"])) : isWaiting.value ? (openBlock(), createBlock(unref(N8nIcon), {
|
|
1011
|
-
key: 1,
|
|
1012
|
-
icon: "status-waiting",
|
|
1013
|
-
class: normalizeClass(_ctx.$style.statusTextIcon)
|
|
1014
|
-
}, null, 8, ["class"])) : isError.value ? (openBlock(), createBlock(unref(N8nIcon), {
|
|
1015
|
-
key: 2,
|
|
1016
|
-
icon: "triangle-alert",
|
|
1017
|
-
class: normalizeClass(_ctx.$style.statusTextIcon)
|
|
1018
|
-
}, null, 8, ["class"])) : createCommentVNode("", true),
|
|
1019
|
-
createTextVNode(" " + toDisplayString(statusText.value), 1)
|
|
1020
|
-
]),
|
|
1021
|
-
_: 1
|
|
1022
|
-
}, 8, ["color", "bold"])
|
|
1023
|
-
]),
|
|
1024
|
-
time: withCtx(() => [
|
|
1025
|
-
createTextVNode(toDisplayString(timeText.value), 1)
|
|
1026
|
-
]),
|
|
1027
|
-
_: 1
|
|
1028
|
-
}, 8, ["keypath"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
1029
|
-
createTextVNode("—")
|
|
1030
|
-
], 64))
|
|
1031
|
-
]),
|
|
1032
|
-
_: 1
|
|
1033
|
-
}, 8, ["class"])) : createCommentVNode("", true),
|
|
1034
|
-
!_ctx.isCompact ? (openBlock(), createBlock(unref(N8nText), {
|
|
1035
|
-
key: 1,
|
|
1036
|
-
tag: "div",
|
|
1037
|
-
color: "text-light",
|
|
1038
|
-
size: "small",
|
|
1039
|
-
class: normalizeClass(_ctx.$style.startedAt)
|
|
1040
|
-
}, {
|
|
1041
|
-
default: withCtx(() => [
|
|
1042
|
-
createTextVNode(toDisplayString(startedAtText.value), 1)
|
|
1043
|
-
]),
|
|
1044
|
-
_: 1
|
|
1045
|
-
}, 8, ["class"])) : createCommentVNode("", true),
|
|
1046
|
-
!_ctx.isCompact && subtreeConsumedTokens.value !== void 0 ? (openBlock(), createBlock(unref(N8nText), {
|
|
1047
|
-
key: 2,
|
|
1048
|
-
tag: "div",
|
|
1049
|
-
color: "text-light",
|
|
1050
|
-
size: "small",
|
|
1051
|
-
class: normalizeClass(_ctx.$style.consumedTokens)
|
|
1052
|
-
}, {
|
|
1053
|
-
default: withCtx(() => [
|
|
1054
|
-
subtreeConsumedTokens.value.totalTokens > 0 && (props.data.children.length === 0 || !props.expanded) ? (openBlock(), createBlock(_sfc_main$h, {
|
|
1055
|
-
key: 0,
|
|
1056
|
-
"consumed-tokens": subtreeConsumedTokens.value
|
|
1057
|
-
}, null, 8, ["consumed-tokens"])) : createCommentVNode("", true)
|
|
1058
|
-
]),
|
|
1059
|
-
_: 1
|
|
1060
|
-
}, 8, ["class"])) : createCommentVNode("", true),
|
|
1061
|
-
isError.value && _ctx.isCompact ? (openBlock(), createBlock(unref(N8nIcon), {
|
|
1062
|
-
key: 3,
|
|
1063
|
-
size: "medium",
|
|
1064
|
-
color: "danger",
|
|
1065
|
-
icon: "triangle-alert",
|
|
1066
|
-
class: normalizeClass(_ctx.$style.compactErrorIcon)
|
|
1067
|
-
}, null, 8, ["class"])) : createCommentVNode("", true),
|
|
1068
|
-
!_ctx.isCompact || !props.latestInfo?.deleted ? (openBlock(), createBlock(unref(_sfc_main$k), {
|
|
1069
|
-
key: 4,
|
|
1070
|
-
type: "secondary",
|
|
1071
|
-
size: "small",
|
|
1072
|
-
icon: "square-pen",
|
|
1073
|
-
"icon-size": "medium",
|
|
1074
|
-
style: normalizeStyle({
|
|
1075
|
-
visibility: props.canOpenNdv ? "" : "hidden"
|
|
1076
|
-
}),
|
|
1077
|
-
disabled: props.latestInfo?.deleted,
|
|
1078
|
-
class: normalizeClass(_ctx.$style.openNdvButton),
|
|
1079
|
-
"aria-label": unref(locale).baseText("logs.overview.body.open"),
|
|
1080
|
-
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => emit("openNdv"), ["stop"]))
|
|
1081
|
-
}, null, 8, ["style", "disabled", "class", "aria-label"])) : createCommentVNode("", true),
|
|
1082
|
-
!_ctx.isCompact || !props.isReadOnly && !props.latestInfo?.deleted && !props.latestInfo?.disabled ? (openBlock(), createBlock(unref(_sfc_main$k), {
|
|
1083
|
-
key: 5,
|
|
1084
|
-
type: "secondary",
|
|
1085
|
-
size: "small",
|
|
1086
|
-
icon: "play",
|
|
1087
|
-
"aria-label": unref(locale).baseText("logs.overview.body.run"),
|
|
1088
|
-
class: normalizeClass([_ctx.$style.partialExecutionButton, indents.value.length > 0 ? _ctx.$style.unavailable : ""]),
|
|
1089
|
-
disabled: props.latestInfo?.deleted || props.latestInfo?.disabled,
|
|
1090
|
-
onClick: _cache[1] || (_cache[1] = withModifiers(($event) => emit("triggerPartialExecution"), ["stop"]))
|
|
1091
|
-
}, null, 8, ["aria-label", "class", "disabled"])) : createCommentVNode("", true),
|
|
1092
|
-
_ctx.isCompact && !hasChildren.value ? (openBlock(), createElementBlock(Fragment, { key: 6 }, [
|
|
1093
|
-
isRunning.value ? (openBlock(), createBlock(AnimatedSpinner, {
|
|
1094
|
-
key: 0,
|
|
1095
|
-
class: normalizeClass(_ctx.$style.statusIcon)
|
|
1096
|
-
}, null, 8, ["class"])) : isWaiting.value ? (openBlock(), createBlock(unref(N8nIcon), {
|
|
1097
|
-
key: 1,
|
|
1098
|
-
icon: "status-waiting",
|
|
1099
|
-
class: normalizeClass(_ctx.$style.statusIcon)
|
|
1100
|
-
}, null, 8, ["class"])) : createCommentVNode("", true)
|
|
1101
|
-
], 64)) : createCommentVNode("", true),
|
|
1102
|
-
!_ctx.isCompact || hasChildren.value ? (openBlock(), createBlock(unref(N8nButton), {
|
|
1103
|
-
key: 7,
|
|
1104
|
-
type: "secondary",
|
|
1105
|
-
size: "small",
|
|
1106
|
-
icon: props.expanded ? "chevron-down" : "chevron-up",
|
|
1107
|
-
"icon-size": "medium",
|
|
1108
|
-
square: true,
|
|
1109
|
-
style: normalizeStyle({
|
|
1110
|
-
visibility: hasChildren.value ? "" : "hidden"
|
|
1111
|
-
}),
|
|
1112
|
-
class: normalizeClass(_ctx.$style.toggleButton),
|
|
1113
|
-
"aria-label": unref(locale).baseText("logs.overview.body.toggleRow"),
|
|
1114
|
-
onClick: _cache[2] || (_cache[2] = withModifiers(($event) => emit("toggleExpanded"), ["stop"]))
|
|
1115
|
-
}, null, 8, ["icon", "style", "class", "aria-label"])) : createCommentVNode("", true)
|
|
1116
|
-
], 10, _hoisted_1$d);
|
|
1117
|
-
};
|
|
1118
|
-
}
|
|
1119
|
-
});
|
|
1120
|
-
const container$7 = "_container_6ygvb_123";
|
|
1121
|
-
const background = "_background_6ygvb_140";
|
|
1122
|
-
const selected = "_selected_6ygvb_149";
|
|
1123
|
-
const error = "_error_6ygvb_155";
|
|
1124
|
-
const indent = "_indent_6ygvb_159";
|
|
1125
|
-
const connectorCurved = "_connectorCurved_6ygvb_168";
|
|
1126
|
-
const connectorStraight = "_connectorStraight_6ygvb_178";
|
|
1127
|
-
const icon$3 = "_icon_6ygvb_187";
|
|
1128
|
-
const name = "_name_6ygvb_193";
|
|
1129
|
-
const timeTook = "_timeTook_6ygvb_199";
|
|
1130
|
-
const statusTextIcon = "_statusTextIcon_6ygvb_204";
|
|
1131
|
-
const startedAt = "_startedAt_6ygvb_209";
|
|
1132
|
-
const consumedTokens = "_consumedTokens_6ygvb_215";
|
|
1133
|
-
const compactErrorIcon = "_compactErrorIcon_6ygvb_222";
|
|
1134
|
-
const partialExecutionButton = "_partialExecutionButton_6ygvb_234";
|
|
1135
|
-
const openNdvButton = "_openNdvButton_6ygvb_235";
|
|
1136
|
-
const compact = "_compact_6ygvb_222";
|
|
1137
|
-
const unavailable = "_unavailable_6ygvb_245";
|
|
1138
|
-
const toggleButton = "_toggleButton_6ygvb_253";
|
|
1139
|
-
const statusIcon = "_statusIcon_6ygvb_277";
|
|
1140
|
-
const placeholder$1 = "_placeholder_6ygvb_285";
|
|
1141
|
-
const style0$9 = {
|
|
1142
|
-
container: container$7,
|
|
1143
|
-
background,
|
|
1144
|
-
selected,
|
|
1145
|
-
error,
|
|
1146
|
-
indent,
|
|
1147
|
-
connectorCurved,
|
|
1148
|
-
connectorStraight,
|
|
1149
|
-
icon: icon$3,
|
|
1150
|
-
name,
|
|
1151
|
-
timeTook,
|
|
1152
|
-
statusTextIcon,
|
|
1153
|
-
startedAt,
|
|
1154
|
-
consumedTokens,
|
|
1155
|
-
compactErrorIcon,
|
|
1156
|
-
partialExecutionButton,
|
|
1157
|
-
openNdvButton,
|
|
1158
|
-
compact,
|
|
1159
|
-
unavailable,
|
|
1160
|
-
toggleButton,
|
|
1161
|
-
statusIcon,
|
|
1162
|
-
placeholder: placeholder$1
|
|
1163
|
-
};
|
|
1164
399
|
const cssModules$9 = {
|
|
1165
400
|
"$style": style0$9
|
|
1166
401
|
};
|
|
1167
|
-
const
|
|
402
|
+
const LogsPanelHeader = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__cssModules", cssModules$9]]);
|
|
1168
403
|
const _sfc_main$e = /* @__PURE__ */ defineComponent({
|
|
1169
404
|
__name: "LogsViewExecutionSummary",
|
|
1170
405
|
props: {
|
|
@@ -1198,7 +433,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
|
|
|
1198
433
|
}, {
|
|
1199
434
|
default: withCtx(() => [
|
|
1200
435
|
createBaseVNode("span", null, toDisplayString(executionStatusText.value), 1),
|
|
1201
|
-
_ctx.consumedTokens.totalTokens > 0 ? (openBlock(), createBlock(_sfc_main$
|
|
436
|
+
_ctx.consumedTokens.totalTokens > 0 ? (openBlock(), createBlock(_sfc_main$g, {
|
|
1202
437
|
key: 0,
|
|
1203
438
|
"consumed-tokens": _ctx.consumedTokens
|
|
1204
439
|
}, null, 8, ["consumed-tokens"])) : createCommentVNode("", true)
|
|
@@ -1208,7 +443,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
|
|
|
1208
443
|
};
|
|
1209
444
|
}
|
|
1210
445
|
});
|
|
1211
|
-
const container$6 = "
|
|
446
|
+
const container$6 = "_container_1sayb_123";
|
|
1212
447
|
const style0$8 = {
|
|
1213
448
|
container: container$6
|
|
1214
449
|
};
|
|
@@ -1216,6 +451,23 @@ const cssModules$8 = {
|
|
|
1216
451
|
"$style": style0$8
|
|
1217
452
|
};
|
|
1218
453
|
const LogsViewExecutionSummary = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__cssModules", cssModules$8]]);
|
|
454
|
+
function useClearExecutionButtonVisible() {
|
|
455
|
+
const route = useRoute();
|
|
456
|
+
const sourceControlStore = useSourceControlStore();
|
|
457
|
+
const workflowsStore = useWorkflowsStore();
|
|
458
|
+
const workflowExecutionData = computed(() => workflowsStore.workflowExecutionData);
|
|
459
|
+
const isWorkflowRunning = computed(() => workflowsStore.isWorkflowRunning);
|
|
460
|
+
const isReadOnlyRoute = computed(() => !!route?.meta?.readOnlyCanvas);
|
|
461
|
+
const { editableWorkflow } = useCanvasOperations();
|
|
462
|
+
const nodeTypesStore = useNodeTypesStore();
|
|
463
|
+
const isReadOnlyEnvironment = computed(() => sourceControlStore.preferences.branchReadOnly);
|
|
464
|
+
const allTriggerNodesDisabled = computed(
|
|
465
|
+
() => editableWorkflow.value.nodes.filter((node) => node.type === START_NODE_TYPE || nodeTypesStore.isTriggerNode(node.type)).every((node) => node.disabled)
|
|
466
|
+
);
|
|
467
|
+
return computed(
|
|
468
|
+
() => !isReadOnlyRoute.value && !isReadOnlyEnvironment.value && !isWorkflowRunning.value && !allTriggerNodesDisabled.value && !!workflowExecutionData.value
|
|
469
|
+
);
|
|
470
|
+
}
|
|
1219
471
|
const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
1220
472
|
__name: "LogsOverviewPanel",
|
|
1221
473
|
props: {
|
|
@@ -1233,16 +485,14 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1233
485
|
setup(__props, { emit: __emit }) {
|
|
1234
486
|
const emit = __emit;
|
|
1235
487
|
const locale = useI18n$1();
|
|
1236
|
-
const router = useRouter();
|
|
1237
|
-
const runWorkflow = useRunWorkflow({ router });
|
|
1238
488
|
const isClearExecutionButtonVisible = useClearExecutionButtonVisible();
|
|
1239
|
-
const
|
|
489
|
+
const isEmpty = computed(() => __props.flatLogEntries.length === 0 || __props.execution === void 0);
|
|
1240
490
|
const switchViewOptions = computed(() => [
|
|
1241
491
|
{ label: locale.baseText("logs.overview.header.switch.overview"), value: "overview" },
|
|
1242
492
|
{ label: locale.baseText("logs.overview.header.switch.details"), value: "details" }
|
|
1243
493
|
]);
|
|
1244
494
|
const hasStaticScrollbar = getScrollbarWidth() > 0;
|
|
1245
|
-
const
|
|
495
|
+
const consumedTokens = computed(
|
|
1246
496
|
() => getTotalConsumedTokens(
|
|
1247
497
|
...__props.entries.map(
|
|
1248
498
|
(entry) => getSubtreeTotalConsumedTokens(
|
|
@@ -1253,54 +503,15 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1253
503
|
)
|
|
1254
504
|
)
|
|
1255
505
|
);
|
|
1256
|
-
const
|
|
1257
|
-
() =>
|
|
1258
|
-
);
|
|
1259
|
-
const isExpanded = computed(
|
|
1260
|
-
() => __props.flatLogEntries.reduce((acc, entry, index, arr) => {
|
|
1261
|
-
acc[entry.id] = arr[index + 1]?.parent?.id === entry.id;
|
|
1262
|
-
return acc;
|
|
1263
|
-
}, {})
|
|
506
|
+
const timeTook = computed(
|
|
507
|
+
() => __props.execution?.startedAt && __props.execution.stoppedAt ? +new Date(__props.execution.stoppedAt) - +new Date(__props.execution.startedAt) : void 0
|
|
1264
508
|
);
|
|
1265
|
-
const
|
|
1266
|
-
|
|
1267
|
-
{ itemHeight: 32 }
|
|
509
|
+
const shouldShowTokenCountColumn = computed(
|
|
510
|
+
() => consumedTokens.value.totalTokens > 0 || __props.entries.some((entry) => getSubtreeTotalConsumedTokens(entry, true).totalTokens > 0)
|
|
1268
511
|
);
|
|
1269
512
|
function handleSwitchView(value) {
|
|
1270
513
|
emit("select", value === "overview" ? void 0 : __props.flatLogEntries[0]);
|
|
1271
514
|
}
|
|
1272
|
-
async function handleTriggerPartialExecution(treeNode) {
|
|
1273
|
-
const latestName = __props.latestNodeInfo[treeNode.node.id]?.name ?? treeNode.node.name;
|
|
1274
|
-
if (latestName) {
|
|
1275
|
-
await runWorkflow.runWorkflow({ destinationNode: latestName });
|
|
1276
|
-
}
|
|
1277
|
-
}
|
|
1278
|
-
watch(
|
|
1279
|
-
[() => __props.execution?.status === "running", () => __props.flatLogEntries.length],
|
|
1280
|
-
async ([isRunning, flatEntryCount], [wasRunning]) => {
|
|
1281
|
-
await nextTick(() => {
|
|
1282
|
-
if (__props.selected === void 0 && (isRunning || wasRunning)) {
|
|
1283
|
-
virtualList.scrollTo(flatEntryCount - 1);
|
|
1284
|
-
}
|
|
1285
|
-
});
|
|
1286
|
-
},
|
|
1287
|
-
{ immediate: true }
|
|
1288
|
-
);
|
|
1289
|
-
watch(
|
|
1290
|
-
() => __props.selected?.id,
|
|
1291
|
-
async (selectedId) => {
|
|
1292
|
-
await nextTick(() => {
|
|
1293
|
-
if (selectedId === void 0) {
|
|
1294
|
-
return;
|
|
1295
|
-
}
|
|
1296
|
-
const index = virtualList.list.value.some((e) => e.data.id === selectedId) ? -1 : __props.flatLogEntries.findIndex((e) => e.id === selectedId);
|
|
1297
|
-
if (index >= 0) {
|
|
1298
|
-
virtualList.scrollTo(index);
|
|
1299
|
-
}
|
|
1300
|
-
});
|
|
1301
|
-
},
|
|
1302
|
-
{ immediate: true }
|
|
1303
|
-
);
|
|
1304
515
|
return (_ctx, _cache) => {
|
|
1305
516
|
return openBlock(), createElementBlock("div", {
|
|
1306
517
|
class: normalizeClass([_ctx.$style.container, hasStaticScrollbar ? _ctx.$style.staticScrollBar : ""]),
|
|
@@ -1341,10 +552,10 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1341
552
|
}, 8, ["title", "is-clickable"]),
|
|
1342
553
|
_ctx.isOpen ? (openBlock(), createElementBlock("div", {
|
|
1343
554
|
key: 0,
|
|
1344
|
-
class: normalizeClass([_ctx.$style.content,
|
|
555
|
+
class: normalizeClass([_ctx.$style.content, isEmpty.value ? _ctx.$style.empty : ""]),
|
|
1345
556
|
"data-test-id": "logs-overview-body"
|
|
1346
557
|
}, [
|
|
1347
|
-
|
|
558
|
+
isEmpty.value || _ctx.execution === void 0 ? (openBlock(), createBlock(unref(N8nText), {
|
|
1348
559
|
key: 0,
|
|
1349
560
|
tag: "p",
|
|
1350
561
|
size: "medium",
|
|
@@ -1361,33 +572,22 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1361
572
|
"data-test-id": "logs-overview-status",
|
|
1362
573
|
class: normalizeClass(_ctx.$style.summary),
|
|
1363
574
|
status: _ctx.execution.status,
|
|
1364
|
-
"consumed-tokens":
|
|
575
|
+
"consumed-tokens": consumedTokens.value,
|
|
1365
576
|
"start-time": +new Date(_ctx.execution.startedAt),
|
|
1366
|
-
"time-took":
|
|
577
|
+
"time-took": timeTook.value
|
|
1367
578
|
}, null, 8, ["class", "status", "consumed-tokens", "start-time", "time-took"]),
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
"latest-info": _ctx.latestNodeInfo[data.node.id],
|
|
1381
|
-
expanded: isExpanded.value[data.id],
|
|
1382
|
-
"can-open-ndv": data.executionId === _ctx.execution?.id,
|
|
1383
|
-
onToggleExpanded: ($event) => emit("toggleExpanded", data),
|
|
1384
|
-
onOpenNdv: ($event) => emit("openNdv", data),
|
|
1385
|
-
onTriggerPartialExecution: ($event) => handleTriggerPartialExecution(data),
|
|
1386
|
-
onToggleSelected: ($event) => emit("select", _ctx.selected?.id === data.id ? void 0 : data)
|
|
1387
|
-
}, 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"]);
|
|
1388
|
-
}), 128))
|
|
1389
|
-
], 16)
|
|
1390
|
-
], 16),
|
|
579
|
+
createVNode(LogsOverviewRows, {
|
|
580
|
+
"is-read-only": _ctx.isReadOnly,
|
|
581
|
+
selected: _ctx.selected,
|
|
582
|
+
"is-compact": _ctx.isCompact,
|
|
583
|
+
"should-show-token-count-column": shouldShowTokenCountColumn.value,
|
|
584
|
+
"latest-node-info": _ctx.latestNodeInfo,
|
|
585
|
+
"flat-log-entries": _ctx.flatLogEntries,
|
|
586
|
+
"can-open-ndv": true,
|
|
587
|
+
onToggleExpanded: _cache[2] || (_cache[2] = ($event) => emit("toggleExpanded", $event)),
|
|
588
|
+
onOpenNdv: _cache[3] || (_cache[3] = ($event) => emit("openNdv", $event)),
|
|
589
|
+
onSelect: _cache[4] || (_cache[4] = ($event) => emit("select", $event))
|
|
590
|
+
}, null, 8, ["is-read-only", "selected", "is-compact", "should-show-token-count-column", "latest-node-info", "flat-log-entries"]),
|
|
1391
591
|
createVNode(unref(N8nRadioButtons), {
|
|
1392
592
|
size: "small-medium",
|
|
1393
593
|
class: normalizeClass(_ctx.$style.switchViewButtons),
|
|
@@ -1401,15 +601,13 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1401
601
|
};
|
|
1402
602
|
}
|
|
1403
603
|
});
|
|
1404
|
-
const container$5 = "
|
|
1405
|
-
const clearButton = "
|
|
1406
|
-
const content$1 = "
|
|
1407
|
-
const empty = "
|
|
1408
|
-
const emptyText = "
|
|
1409
|
-
const summary = "
|
|
1410
|
-
const
|
|
1411
|
-
const staticScrollBar = "_staticScrollBar_pydb1_168";
|
|
1412
|
-
const switchViewButtons = "_switchViewButtons_pydb1_193";
|
|
604
|
+
const container$5 = "_container_svlfi_123";
|
|
605
|
+
const clearButton = "_clearButton_svlfi_133";
|
|
606
|
+
const content$1 = "_content_svlfi_139";
|
|
607
|
+
const empty = "_empty_svlfi_149";
|
|
608
|
+
const emptyText = "_emptyText_svlfi_154";
|
|
609
|
+
const summary = "_summary_svlfi_159";
|
|
610
|
+
const switchViewButtons = "_switchViewButtons_svlfi_163";
|
|
1413
611
|
const style0$7 = {
|
|
1414
612
|
container: container$5,
|
|
1415
613
|
clearButton,
|
|
@@ -1417,8 +615,6 @@ const style0$7 = {
|
|
|
1417
615
|
empty,
|
|
1418
616
|
emptyText,
|
|
1419
617
|
summary,
|
|
1420
|
-
tree,
|
|
1421
|
-
staticScrollBar,
|
|
1422
618
|
switchViewButtons
|
|
1423
619
|
};
|
|
1424
620
|
const cssModules$7 = {
|
|
@@ -4199,8 +3395,8 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
|
4199
3395
|
try {
|
|
4200
3396
|
const dataURL = await readFileAsDataURL(file);
|
|
4201
3397
|
fileSources.value[file.name] = dataURL;
|
|
4202
|
-
} catch (
|
|
4203
|
-
console.error("Error reading file:",
|
|
3398
|
+
} catch (error) {
|
|
3399
|
+
console.error("Error reading file:", error);
|
|
4204
3400
|
}
|
|
4205
3401
|
}
|
|
4206
3402
|
}
|
|
@@ -4419,8 +3615,8 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
|
4419
3615
|
waitingForChatResponse.value = false;
|
|
4420
3616
|
chatStore.waitingForResponse.value = false;
|
|
4421
3617
|
};
|
|
4422
|
-
} catch (
|
|
4423
|
-
console.error("Error setting up websocket connection",
|
|
3618
|
+
} catch (error) {
|
|
3619
|
+
console.error("Error setting up websocket connection", error);
|
|
4424
3620
|
}
|
|
4425
3621
|
}
|
|
4426
3622
|
}
|
|
@@ -4583,7 +3779,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
|
4583
3779
|
};
|
|
4584
3780
|
}
|
|
4585
3781
|
});
|
|
4586
|
-
const ChatInput = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-
|
|
3782
|
+
const ChatInput = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-71b23fec"]]);
|
|
4587
3783
|
const _sfc_main$9 = /* @__PURE__ */ defineComponent({
|
|
4588
3784
|
__name: "MessageTyping",
|
|
4589
3785
|
props: {
|
|
@@ -4736,8 +3932,8 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
|
|
|
4736
3932
|
};
|
|
4737
3933
|
}
|
|
4738
3934
|
});
|
|
4739
|
-
const container$4 = "
|
|
4740
|
-
const icon$2 = "
|
|
3935
|
+
const container$4 = "_container_1v2rk_123";
|
|
3936
|
+
const icon$2 = "_icon_1v2rk_129";
|
|
4741
3937
|
const style0$6 = {
|
|
4742
3938
|
container: container$4,
|
|
4743
3939
|
icon: icon$2
|
|
@@ -4780,8 +3976,8 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
|
4780
3976
|
};
|
|
4781
3977
|
}
|
|
4782
3978
|
});
|
|
4783
|
-
const container$3 = "
|
|
4784
|
-
const icon$1 = "
|
|
3979
|
+
const container$3 = "_container_14jp1_123";
|
|
3980
|
+
const icon$1 = "_icon_14jp1_129";
|
|
4785
3981
|
const style0$5 = {
|
|
4786
3982
|
container: container$3,
|
|
4787
3983
|
icon: icon$1
|
|
@@ -4928,7 +4124,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
4928
4124
|
content: unref(locale).baseText("chat.window.session.resetSession")
|
|
4929
4125
|
}, {
|
|
4930
4126
|
default: withCtx(() => [
|
|
4931
|
-
createVNode(unref(_sfc_main$
|
|
4127
|
+
createVNode(unref(_sfc_main$h), {
|
|
4932
4128
|
class: normalizeClass(_ctx.$style.newHeaderButton),
|
|
4933
4129
|
"data-test-id": "refresh-session-button",
|
|
4934
4130
|
outline: "",
|
|
@@ -5034,18 +4230,18 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
5034
4230
|
};
|
|
5035
4231
|
}
|
|
5036
4232
|
});
|
|
5037
|
-
const chat$1 = "
|
|
5038
|
-
const chatHeader = "
|
|
5039
|
-
const chatTitle = "
|
|
5040
|
-
const session = "
|
|
5041
|
-
const sessionId = "
|
|
5042
|
-
const copyable = "
|
|
5043
|
-
const headerButton = "
|
|
5044
|
-
const newHeaderButton = "
|
|
5045
|
-
const chatBody = "
|
|
5046
|
-
const messages = "
|
|
5047
|
-
const messagesInput = "
|
|
5048
|
-
const messagesHistory = "
|
|
4233
|
+
const chat$1 = "_chat_uw011_123";
|
|
4234
|
+
const chatHeader = "_chatHeader_uw011_151";
|
|
4235
|
+
const chatTitle = "_chatTitle_uw011_164";
|
|
4236
|
+
const session = "_session_uw011_168";
|
|
4237
|
+
const sessionId = "_sessionId_uw011_176";
|
|
4238
|
+
const copyable = "_copyable_uw011_182";
|
|
4239
|
+
const headerButton = "_headerButton_uw011_186";
|
|
4240
|
+
const newHeaderButton = "_newHeaderButton_uw011_191";
|
|
4241
|
+
const chatBody = "_chatBody_uw011_196";
|
|
4242
|
+
const messages = "_messages_uw011_205";
|
|
4243
|
+
const messagesInput = "_messagesInput_uw011_216";
|
|
4244
|
+
const messagesHistory = "_messagesHistory_uw011_250";
|
|
5049
4245
|
const style0$4 = {
|
|
5050
4246
|
chat: chat$1,
|
|
5051
4247
|
chatHeader,
|
|
@@ -5152,7 +4348,9 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
5152
4348
|
}, 8, ["class"])
|
|
5153
4349
|
]),
|
|
5154
4350
|
"header-end": withCtx((itemCountProps) => [
|
|
5155
|
-
createVNode(RunDataItemCount,
|
|
4351
|
+
createVNode(RunDataItemCount, mergeProps(itemCountProps, {
|
|
4352
|
+
search: displayMode.value === "schema" ? "" : itemCountProps.search
|
|
4353
|
+
}), null, 16, ["search"])
|
|
5156
4354
|
]),
|
|
5157
4355
|
"no-output-data": withCtx(() => [
|
|
5158
4356
|
createVNode(NDVEmptyState, {
|
|
@@ -5166,7 +4364,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
5166
4364
|
}, {
|
|
5167
4365
|
default: withCtx(() => [
|
|
5168
4366
|
withDirectives(createBaseVNode("span", null, null, 512), [
|
|
5169
|
-
[_directive_n8n_html, unref(waitingNodeTooltip)(_ctx.logEntry.node)]
|
|
4367
|
+
[_directive_n8n_html, unref(waitingNodeTooltip)(_ctx.logEntry.node, _ctx.logEntry.workflow)]
|
|
5170
4368
|
])
|
|
5171
4369
|
]),
|
|
5172
4370
|
_: 1
|
|
@@ -5206,8 +4404,8 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
5206
4404
|
};
|
|
5207
4405
|
}
|
|
5208
4406
|
});
|
|
5209
|
-
const component = "
|
|
5210
|
-
const title$1 = "
|
|
4407
|
+
const component = "_component_1v5g3_123";
|
|
4408
|
+
const title$1 = "_title_1v5g3_127";
|
|
5211
4409
|
const style0$3 = {
|
|
5212
4410
|
component,
|
|
5213
4411
|
title: title$1
|
|
@@ -5328,7 +4526,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
5328
4526
|
const ndvStore = useNDVStore();
|
|
5329
4527
|
const experimentalNdvStore = useExperimentalNdvStore();
|
|
5330
4528
|
const type = computed(() => nodeTypeStore.getNodeType(__props.logEntry.node.type));
|
|
5331
|
-
const
|
|
4529
|
+
const consumedTokens = computed(() => getSubtreeTotalConsumedTokens(__props.logEntry, false));
|
|
5332
4530
|
const isTriggerNode = computed(() => type.value?.group.includes("trigger"));
|
|
5333
4531
|
const container2 = useTemplateRef("container");
|
|
5334
4532
|
const resizer = useResizablePanel("N8N_LOGS_INPUT_PANEL_WIDTH", {
|
|
@@ -5382,7 +4580,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
5382
4580
|
key: 0,
|
|
5383
4581
|
class: normalizeClass(_ctx.$style.executionSummary),
|
|
5384
4582
|
status: _ctx.logEntry.runData.executionStatus ?? "unknown",
|
|
5385
|
-
"consumed-tokens":
|
|
4583
|
+
"consumed-tokens": consumedTokens.value,
|
|
5386
4584
|
"start-time": _ctx.logEntry.runData.startTime,
|
|
5387
4585
|
"time-took": _ctx.logEntry.runData.executionTime
|
|
5388
4586
|
}, null, 8, ["class", "status", "consumed-tokens", "start-time", "time-took"])) : createCommentVNode("", true)
|
|
@@ -5497,19 +4695,19 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
5497
4695
|
};
|
|
5498
4696
|
}
|
|
5499
4697
|
});
|
|
5500
|
-
const container$2 = "
|
|
5501
|
-
const header = "
|
|
5502
|
-
const actions = "
|
|
5503
|
-
const pressed = "
|
|
5504
|
-
const title = "
|
|
5505
|
-
const icon = "
|
|
5506
|
-
const executionSummary = "
|
|
5507
|
-
const content = "
|
|
5508
|
-
const outputPanel = "
|
|
5509
|
-
const inputResizer = "
|
|
5510
|
-
const collapsed = "
|
|
5511
|
-
const full = "
|
|
5512
|
-
const placeholder = "
|
|
4698
|
+
const container$2 = "_container_13967_123";
|
|
4699
|
+
const header = "_header_13967_132";
|
|
4700
|
+
const actions = "_actions_13967_136";
|
|
4701
|
+
const pressed = "_pressed_13967_142";
|
|
4702
|
+
const title = "_title_13967_146";
|
|
4703
|
+
const icon = "_icon_13967_152";
|
|
4704
|
+
const executionSummary = "_executionSummary_13967_156";
|
|
4705
|
+
const content = "_content_13967_160";
|
|
4706
|
+
const outputPanel = "_outputPanel_13967_168";
|
|
4707
|
+
const inputResizer = "_inputResizer_13967_173";
|
|
4708
|
+
const collapsed = "_collapsed_13967_177";
|
|
4709
|
+
const full = "_full_13967_177";
|
|
4710
|
+
const placeholder = "_placeholder_13967_181";
|
|
5513
4711
|
const style0$2 = {
|
|
5514
4712
|
container: container$2,
|
|
5515
4713
|
header,
|
|
@@ -5555,13 +4753,13 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
5555
4753
|
},
|
|
5556
4754
|
...__props.showPopOutButton ? [{ id: "popOut", label: popOutButtonText.value }] : []
|
|
5557
4755
|
]);
|
|
5558
|
-
function handleSelectMenuItem(
|
|
5559
|
-
switch (
|
|
4756
|
+
function handleSelectMenuItem(selected) {
|
|
4757
|
+
switch (selected) {
|
|
5560
4758
|
case "popOut":
|
|
5561
|
-
emit(
|
|
4759
|
+
emit(selected);
|
|
5562
4760
|
return;
|
|
5563
4761
|
case "toggleSyncSelection":
|
|
5564
|
-
emit(
|
|
4762
|
+
emit(selected);
|
|
5565
4763
|
return;
|
|
5566
4764
|
}
|
|
5567
4765
|
}
|
|
@@ -5575,7 +4773,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
5575
4773
|
content: popOutButtonText.value
|
|
5576
4774
|
}, {
|
|
5577
4775
|
default: withCtx(() => [
|
|
5578
|
-
createVNode(unref(_sfc_main$
|
|
4776
|
+
createVNode(unref(_sfc_main$h), {
|
|
5579
4777
|
icon: "pop-out",
|
|
5580
4778
|
type: "tertiary",
|
|
5581
4779
|
text: "",
|
|
@@ -5605,7 +4803,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
5605
4803
|
"z-index": tooltipZIndex.value
|
|
5606
4804
|
}, {
|
|
5607
4805
|
default: withCtx(() => [
|
|
5608
|
-
createVNode(unref(_sfc_main$
|
|
4806
|
+
createVNode(unref(_sfc_main$h), {
|
|
5609
4807
|
type: "tertiary",
|
|
5610
4808
|
text: "",
|
|
5611
4809
|
size: "small",
|
|
@@ -5621,7 +4819,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
5621
4819
|
};
|
|
5622
4820
|
}
|
|
5623
4821
|
});
|
|
5624
|
-
const container$1 = "
|
|
4822
|
+
const container$1 = "_container_yw9ej_123";
|
|
5625
4823
|
const style0$1 = {
|
|
5626
4824
|
container: container$1
|
|
5627
4825
|
};
|
|
@@ -5629,141 +4827,13 @@ const cssModules$1 = {
|
|
|
5629
4827
|
"$style": style0$1
|
|
5630
4828
|
};
|
|
5631
4829
|
const LogsPanelActions = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__cssModules", cssModules$1]]);
|
|
5632
|
-
function
|
|
5633
|
-
const throttled = shallowRef(state.value);
|
|
5634
|
-
watch(
|
|
5635
|
-
state,
|
|
5636
|
-
useThrottleFn(() => throttled.value = state.value, timeout, true, true)
|
|
5637
|
-
);
|
|
5638
|
-
return throttled;
|
|
5639
|
-
}
|
|
5640
|
-
function useLogsExecutionData(isEnabled) {
|
|
5641
|
-
const nodeHelpers = useNodeHelpers();
|
|
5642
|
-
const workflowsStore = useWorkflowsStore();
|
|
5643
|
-
const workflowState = injectWorkflowState();
|
|
5644
|
-
const toast = useToast();
|
|
5645
|
-
const state = ref();
|
|
5646
|
-
const updateInterval = computed(
|
|
5647
|
-
() => Object.keys(state.value?.startData ?? {}).length > 1 ? LOGS_EXECUTION_DATA_THROTTLE_DURATION : 0
|
|
5648
|
-
);
|
|
5649
|
-
const throttledState = useThrottle(state, updateInterval);
|
|
5650
|
-
const subWorkflowExecData = ref({});
|
|
5651
|
-
const subWorkflows = ref({});
|
|
5652
|
-
const workflow = computed(
|
|
5653
|
-
() => throttledState.value ? new Workflow({
|
|
5654
|
-
...throttledState.value.response.workflowData,
|
|
5655
|
-
nodeTypes: workflowsStore.getNodeTypes()
|
|
5656
|
-
}) : void 0
|
|
5657
|
-
);
|
|
5658
|
-
const latestNodeNameById = computed(
|
|
5659
|
-
() => Object.values(workflow.value?.nodes ?? {}).reduce(
|
|
5660
|
-
(acc, node) => {
|
|
5661
|
-
const nodeInStore = workflowsStore.getNodeById(node.id);
|
|
5662
|
-
acc[node.id] = {
|
|
5663
|
-
deleted: !nodeInStore,
|
|
5664
|
-
disabled: nodeInStore?.disabled ?? false,
|
|
5665
|
-
name: nodeInStore?.name ?? node.name
|
|
5666
|
-
};
|
|
5667
|
-
return acc;
|
|
5668
|
-
},
|
|
5669
|
-
{}
|
|
5670
|
-
)
|
|
5671
|
-
);
|
|
5672
|
-
const hasChat = computed(
|
|
5673
|
-
() => [Object.values(workflow.value?.nodes ?? {}), workflowsStore.workflow.nodes].some(
|
|
5674
|
-
(nodes) => nodes.some(isChatNode)
|
|
5675
|
-
)
|
|
5676
|
-
);
|
|
5677
|
-
const entries = computed(() => {
|
|
5678
|
-
if (!isEnabled.value || !throttledState.value || !workflow.value) {
|
|
5679
|
-
return [];
|
|
5680
|
-
}
|
|
5681
|
-
const mergedExecutionData = mergeStartData(
|
|
5682
|
-
throttledState.value.startData,
|
|
5683
|
-
throttledState.value.response
|
|
5684
|
-
);
|
|
5685
|
-
return createLogTree(
|
|
5686
|
-
workflow.value,
|
|
5687
|
-
mergedExecutionData,
|
|
5688
|
-
subWorkflows.value,
|
|
5689
|
-
subWorkflowExecData.value
|
|
5690
|
-
);
|
|
5691
|
-
});
|
|
5692
|
-
function resetExecutionData() {
|
|
5693
|
-
state.value = void 0;
|
|
5694
|
-
workflowState.setWorkflowExecutionData(null);
|
|
5695
|
-
nodeHelpers.updateNodesExecutionIssues();
|
|
5696
|
-
}
|
|
5697
|
-
async function loadSubExecution(logEntry) {
|
|
5698
|
-
const locator = findSubExecutionLocator(logEntry);
|
|
5699
|
-
if (!state.value || locator === void 0) {
|
|
5700
|
-
return;
|
|
5701
|
-
}
|
|
5702
|
-
try {
|
|
5703
|
-
const subExecution = await workflowsStore.fetchExecutionDataById(locator.executionId);
|
|
5704
|
-
const data = subExecution?.data ? parse(subExecution.data) : void 0;
|
|
5705
|
-
if (!data || !subExecution) {
|
|
5706
|
-
throw Error("Data is missing");
|
|
5707
|
-
}
|
|
5708
|
-
subWorkflowExecData.value[locator.executionId] = data;
|
|
5709
|
-
subWorkflows.value[locator.workflowId] = new Workflow({
|
|
5710
|
-
...subExecution.workflowData,
|
|
5711
|
-
nodeTypes: workflowsStore.getNodeTypes()
|
|
5712
|
-
});
|
|
5713
|
-
} catch (e) {
|
|
5714
|
-
toast.showError(e, "Unable to load sub execution");
|
|
5715
|
-
}
|
|
5716
|
-
}
|
|
5717
|
-
watch(
|
|
5718
|
-
// Fields that should trigger update
|
|
5719
|
-
[
|
|
5720
|
-
() => workflowsStore.workflowExecutionData?.id,
|
|
5721
|
-
() => workflowsStore.workflowExecutionData?.workflowData.id,
|
|
5722
|
-
() => workflowsStore.workflowExecutionData?.status,
|
|
5723
|
-
() => workflowsStore.workflowExecutionResultDataLastUpdate,
|
|
5724
|
-
() => workflowsStore.workflowExecutionStartedData
|
|
5725
|
-
],
|
|
5726
|
-
useThrottleFn(
|
|
5727
|
-
([executionId], [previousExecutionId]) => {
|
|
5728
|
-
state.value = workflowsStore.workflowExecutionData === null ? void 0 : {
|
|
5729
|
-
response: copyExecutionData(workflowsStore.workflowExecutionData),
|
|
5730
|
-
startData: workflowsStore.workflowExecutionStartedData?.[1] ?? {}
|
|
5731
|
-
};
|
|
5732
|
-
if (executionId !== previousExecutionId) {
|
|
5733
|
-
subWorkflowExecData.value = {};
|
|
5734
|
-
subWorkflows.value = {};
|
|
5735
|
-
}
|
|
5736
|
-
},
|
|
5737
|
-
updateInterval,
|
|
5738
|
-
true,
|
|
5739
|
-
true
|
|
5740
|
-
),
|
|
5741
|
-
{ immediate: true }
|
|
5742
|
-
);
|
|
5743
|
-
watch(
|
|
5744
|
-
() => workflowsStore.workflowId,
|
|
5745
|
-
(newId) => {
|
|
5746
|
-
if (newId === PLACEHOLDER_EMPTY_WORKFLOW_ID) {
|
|
5747
|
-
resetExecutionData();
|
|
5748
|
-
}
|
|
5749
|
-
}
|
|
5750
|
-
);
|
|
5751
|
-
return {
|
|
5752
|
-
execution: computed(() => throttledState.value?.response),
|
|
5753
|
-
entries,
|
|
5754
|
-
hasChat,
|
|
5755
|
-
latestNodeNameById,
|
|
5756
|
-
resetExecutionData,
|
|
5757
|
-
loadSubExecution
|
|
5758
|
-
};
|
|
5759
|
-
}
|
|
5760
|
-
function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
|
|
4830
|
+
function useLogsSelection(execution, tree, flatLogEntries, toggleExpand) {
|
|
5761
4831
|
const telemetry = useTelemetry();
|
|
5762
4832
|
const manualLogEntrySelection = shallowRef({ type: "initial" });
|
|
5763
4833
|
const nodeIdToSelect = shallowRef();
|
|
5764
4834
|
const isExecutionStopped = computed(() => execution.value?.stoppedAt !== void 0);
|
|
5765
|
-
const
|
|
5766
|
-
() => findSelectedLogEntry(manualLogEntrySelection.value,
|
|
4835
|
+
const selected = computed(
|
|
4836
|
+
() => findSelectedLogEntry(manualLogEntrySelection.value, tree.value, !isExecutionStopped.value)
|
|
5767
4837
|
);
|
|
5768
4838
|
const logsStore = useLogsStore();
|
|
5769
4839
|
const uiStore = useUIStore();
|
|
@@ -5793,7 +4863,7 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
|
|
|
5793
4863
|
if (entries.length === 0) {
|
|
5794
4864
|
return;
|
|
5795
4865
|
}
|
|
5796
|
-
const prevEntry =
|
|
4866
|
+
const prevEntry = selected.value ? getEntryAtRelativeIndex(entries, selected.value.id, -1) ?? entries[0] : entries[entries.length - 1];
|
|
5797
4867
|
manualLogEntrySelection.value = { type: "selected", entry: prevEntry };
|
|
5798
4868
|
syncSelectionToCanvasIfEnabled(prevEntry);
|
|
5799
4869
|
}
|
|
@@ -5802,12 +4872,12 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
|
|
|
5802
4872
|
if (entries.length === 0) {
|
|
5803
4873
|
return;
|
|
5804
4874
|
}
|
|
5805
|
-
const nextEntry =
|
|
4875
|
+
const nextEntry = selected.value ? getEntryAtRelativeIndex(entries, selected.value.id, 1) ?? entries[entries.length - 1] : entries[0];
|
|
5806
4876
|
manualLogEntrySelection.value = { type: "selected", entry: nextEntry };
|
|
5807
4877
|
syncSelectionToCanvasIfEnabled(nextEntry);
|
|
5808
4878
|
}
|
|
5809
4879
|
watch(
|
|
5810
|
-
|
|
4880
|
+
selected,
|
|
5811
4881
|
(sel) => {
|
|
5812
4882
|
if (sel) {
|
|
5813
4883
|
logsStore.setSubNodeSelected(isSubNodeLog(sel));
|
|
@@ -5819,12 +4889,12 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
|
|
|
5819
4889
|
[() => uiStore.lastSelectedNode, () => logsStore.isLogSelectionSyncedWithCanvas],
|
|
5820
4890
|
([selectedOnCanvas, shouldSync]) => {
|
|
5821
4891
|
const selectedNodeId = selectedOnCanvas ? workflowsStore.nodesByName[selectedOnCanvas]?.id : void 0;
|
|
5822
|
-
nodeIdToSelect.value = shouldSync && !canvasStore.hasRangeSelection &&
|
|
4892
|
+
nodeIdToSelect.value = shouldSync && !canvasStore.hasRangeSelection && selected.value?.node.id !== selectedNodeId ? selectedNodeId : void 0;
|
|
5823
4893
|
},
|
|
5824
4894
|
{ immediate: true }
|
|
5825
4895
|
);
|
|
5826
4896
|
watch(
|
|
5827
|
-
[
|
|
4897
|
+
[tree, nodeIdToSelect],
|
|
5828
4898
|
([latestTree, id]) => {
|
|
5829
4899
|
if (id === void 0) {
|
|
5830
4900
|
return;
|
|
@@ -5843,27 +4913,7 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
|
|
|
5843
4913
|
},
|
|
5844
4914
|
{ immediate: true }
|
|
5845
4915
|
);
|
|
5846
|
-
return { selected
|
|
5847
|
-
}
|
|
5848
|
-
function useLogsTreeExpand(entries, loadSubExecution) {
|
|
5849
|
-
const collapsedEntries = shallowRef({});
|
|
5850
|
-
const flatLogEntries = computed(
|
|
5851
|
-
() => flattenLogEntries(entries.value, collapsedEntries.value)
|
|
5852
|
-
);
|
|
5853
|
-
function toggleExpanded(treeNode, expand) {
|
|
5854
|
-
if (hasSubExecution(treeNode) && treeNode.children.length === 0) {
|
|
5855
|
-
void loadSubExecution(treeNode);
|
|
5856
|
-
return;
|
|
5857
|
-
}
|
|
5858
|
-
collapsedEntries.value = {
|
|
5859
|
-
...collapsedEntries.value,
|
|
5860
|
-
[treeNode.id]: expand === void 0 ? !collapsedEntries.value[treeNode.id] : !expand
|
|
5861
|
-
};
|
|
5862
|
-
}
|
|
5863
|
-
return {
|
|
5864
|
-
flatLogEntries,
|
|
5865
|
-
toggleExpanded
|
|
5866
|
-
};
|
|
4916
|
+
return { selected, select, selectPrev, selectNext };
|
|
5867
4917
|
}
|
|
5868
4918
|
function isStyle(node) {
|
|
5869
4919
|
return node instanceof HTMLStyleElement || node instanceof HTMLLinkElement && node.rel === "stylesheet";
|
|
@@ -6160,9 +5210,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
6160
5210
|
refreshSession,
|
|
6161
5211
|
displayExecution
|
|
6162
5212
|
} = useChatState(props.isReadOnly);
|
|
6163
|
-
const { entries, execution, hasChat, latestNodeNameById, resetExecutionData, loadSubExecution } = useLogsExecutionData(isOpen);
|
|
5213
|
+
const { entries, execution, hasChat, latestNodeNameById, resetExecutionData, loadSubExecution } = useLogsExecutionData({ isEnabled: isOpen });
|
|
6164
5214
|
const { flatLogEntries, toggleExpanded } = useLogsTreeExpand(entries, loadSubExecution);
|
|
6165
|
-
const { selected
|
|
5215
|
+
const { selected, select, selectNext, selectPrev } = useLogsSelection(
|
|
6166
5216
|
execution,
|
|
6167
5217
|
entries,
|
|
6168
5218
|
flatLogEntries,
|
|
@@ -6170,7 +5220,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
6170
5220
|
);
|
|
6171
5221
|
const inputTableColumnCollapsing = ref();
|
|
6172
5222
|
const outputTableColumnCollapsing = ref();
|
|
6173
|
-
const isLogDetailsOpen = computed(() => isOpen.value &&
|
|
5223
|
+
const isLogDetailsOpen = computed(() => isOpen.value && selected.value !== void 0);
|
|
6174
5224
|
const isLogDetailsVisuallyOpen = computed(
|
|
6175
5225
|
() => isLogDetailsOpen.value && !isCollapsingDetailsPanel.value
|
|
6176
5226
|
);
|
|
@@ -6184,10 +5234,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
6184
5234
|
onToggleSyncSelection: logsStore.toggleLogSelectionSync
|
|
6185
5235
|
}));
|
|
6186
5236
|
const inputCollapsingColumnName = computed(
|
|
6187
|
-
() => inputTableColumnCollapsing.value?.nodeName ===
|
|
5237
|
+
() => inputTableColumnCollapsing.value?.nodeName === selected.value?.node.name ? inputTableColumnCollapsing.value?.columnName ?? null : null
|
|
6188
5238
|
);
|
|
6189
5239
|
const outputCollapsingColumnName = computed(
|
|
6190
|
-
() => outputTableColumnCollapsing.value?.nodeName ===
|
|
5240
|
+
() => outputTableColumnCollapsing.value?.nodeName === selected.value?.node.name ? outputTableColumnCollapsing.value?.columnName ?? null : null
|
|
6191
5241
|
);
|
|
6192
5242
|
const keyMap = computed(() => ({
|
|
6193
5243
|
j: selectNext,
|
|
@@ -6195,8 +5245,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
6195
5245
|
Escape: () => select(void 0),
|
|
6196
5246
|
ArrowDown: selectNext,
|
|
6197
5247
|
ArrowUp: selectPrev,
|
|
6198
|
-
Space: () =>
|
|
6199
|
-
Enter: () =>
|
|
5248
|
+
Space: () => selected.value && toggleExpanded(selected.value),
|
|
5249
|
+
Enter: () => selected.value && handleOpenNdv(selected.value),
|
|
6200
5250
|
...isPoppedOut.value ? {
|
|
6201
5251
|
// We need shortcuts for toggling input/output panel in the pop-out window only
|
|
6202
5252
|
// because these are also implemented in the canvas
|
|
@@ -6221,10 +5271,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
6221
5271
|
});
|
|
6222
5272
|
}
|
|
6223
5273
|
function handleChangeInputTableColumnCollapsing(columnName) {
|
|
6224
|
-
inputTableColumnCollapsing.value = columnName &&
|
|
5274
|
+
inputTableColumnCollapsing.value = columnName && selected.value ? { nodeName: selected.value.node.name, columnName } : void 0;
|
|
6225
5275
|
}
|
|
6226
5276
|
function handleChangeOutputTableColumnCollapsing(columnName) {
|
|
6227
|
-
outputTableColumnCollapsing.value = columnName &&
|
|
5277
|
+
outputTableColumnCollapsing.value = columnName && selected.value ? { nodeName: selected.value.node.name, columnName } : void 0;
|
|
6228
5278
|
}
|
|
6229
5279
|
return (_ctx, _cache) => {
|
|
6230
5280
|
return openBlock(), createElementBlock("div", {
|
|
@@ -6311,7 +5361,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
6311
5361
|
"is-open": unref(isOpen),
|
|
6312
5362
|
"is-read-only": _ctx.isReadOnly,
|
|
6313
5363
|
"is-compact": isLogDetailsVisuallyOpen.value,
|
|
6314
|
-
selected: unref(
|
|
5364
|
+
selected: unref(selected),
|
|
6315
5365
|
execution: unref(execution),
|
|
6316
5366
|
entries: unref(entries),
|
|
6317
5367
|
"latest-node-info": unref(latestNodeNameById),
|
|
@@ -6331,13 +5381,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
6331
5381
|
]),
|
|
6332
5382
|
_: 1
|
|
6333
5383
|
}, 8, ["class", "width", "style", "is-resizing-enabled", "window", "onResize"]),
|
|
6334
|
-
isLogDetailsVisuallyOpen.value && unref(
|
|
5384
|
+
isLogDetailsVisuallyOpen.value && unref(selected) ? (openBlock(), createBlock(LogsDetailsPanel, {
|
|
6335
5385
|
key: 0,
|
|
6336
5386
|
class: normalizeClass(_ctx.$style.logDetails),
|
|
6337
5387
|
"is-open": unref(isOpen),
|
|
6338
|
-
"log-entry": unref(
|
|
5388
|
+
"log-entry": unref(selected),
|
|
6339
5389
|
window: unref(popOutWindow),
|
|
6340
|
-
"latest-info": unref(latestNodeNameById)[unref(
|
|
5390
|
+
"latest-info": unref(latestNodeNameById)[unref(selected).node.id],
|
|
6341
5391
|
panels: unref(logsStore).detailsState,
|
|
6342
5392
|
"collapsing-input-table-column-name": inputCollapsingColumnName.value,
|
|
6343
5393
|
"collapsing-output-table-column-name": outputCollapsingColumnName.value,
|
|
@@ -6363,15 +5413,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
6363
5413
|
};
|
|
6364
5414
|
}
|
|
6365
5415
|
});
|
|
6366
|
-
const popOutContent = "
|
|
6367
|
-
const resizeWrapper = "
|
|
6368
|
-
const poppedOut = "
|
|
6369
|
-
const container = "
|
|
6370
|
-
const chat = "
|
|
6371
|
-
const logsContainer = "
|
|
6372
|
-
const overviewResizer = "
|
|
6373
|
-
const logsOverview = "
|
|
6374
|
-
const logsDetails = "
|
|
5416
|
+
const popOutContent = "_popOutContent_17exv_123";
|
|
5417
|
+
const resizeWrapper = "_resizeWrapper_17exv_129";
|
|
5418
|
+
const poppedOut = "_poppedOut_17exv_136";
|
|
5419
|
+
const container = "_container_17exv_140";
|
|
5420
|
+
const chat = "_chat_17exv_149";
|
|
5421
|
+
const logsContainer = "_logsContainer_17exv_153";
|
|
5422
|
+
const overviewResizer = "_overviewResizer_17exv_163";
|
|
5423
|
+
const logsOverview = "_logsOverview_17exv_171";
|
|
5424
|
+
const logsDetails = "_logsDetails_17exv_175";
|
|
6375
5425
|
const style0 = {
|
|
6376
5426
|
popOutContent,
|
|
6377
5427
|
resizeWrapper,
|