n8n-editor-ui 1.85.2 → 1.86.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-B2Xk-4o2.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-DofUIs9S.js} +1 -1
  2. package/dist/assets/{AuthView-Bhr2Ols-.js → AuthView-CyY2quTd.js} +2 -2
  3. package/dist/assets/{CanvasChatSwitch-E9vu2jW8.js → CanvasChatSwitch-BTInPgKl.js} +413 -99
  4. package/dist/assets/{CanvasChatSwitch-BcSDHC-c.css → CanvasChatSwitch-CRtE2Fld.css} +284 -46
  5. package/dist/assets/{ChangePasswordView-BzAEcqVw.js → ChangePasswordView-Db-MkXhZ.js} +3 -3
  6. package/dist/assets/CollectionParameter-BD3jmKi_.js +4 -0
  7. package/dist/assets/{CredentialsView-CZiEXdjH.js → CredentialsView-CLr_6U2B.js} +6 -6
  8. package/dist/assets/{ErrorView-C1QywuMY.js → ErrorView-CUS5vnCW.js} +1 -1
  9. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-l5VZIkoy.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-D15zjPBZ.js} +2 -2
  10. package/dist/assets/{ExecutionsView-Bo0Nk8lV.js → ExecutionsView-1df-oH5P.js} +8 -8
  11. package/dist/assets/{ExecutionsView-JCKikuIS.css → ExecutionsView-BnBpSqVn.css} +2 -2
  12. package/dist/assets/{FileSaver.min-D3VgyjMF.js → FileSaver.min-DLKMtSuf.js} +1 -1
  13. package/dist/assets/{FixedCollectionParameter-RpfOY9Ho.js → FixedCollectionParameter-CcqTLBeP.js} +1 -1
  14. package/dist/assets/{ForgotMyPasswordView-DPTddCxG.js → ForgotMyPasswordView-BHRWkO2H.js} +3 -3
  15. package/dist/assets/{useOverview-BqIOGpWx.js → InsightsSummary-CyilLKXz.js} +5 -14
  16. package/dist/assets/{Logo-CxllxUni.js → Logo-DbXTFYA8.js} +1 -1
  17. package/dist/assets/{MainHeader-9gTxUJIR.js → MainHeader-BfQR9Td3.js} +10 -10
  18. package/dist/assets/{MainSidebar-CRJML8mh.js → MainSidebar-CDUegYGN.js} +2 -4
  19. package/dist/assets/{NodeCreation-zoYjBJl6.js → NodeCreation-BBXRRxZa.js} +4 -4
  20. package/dist/assets/{NodeCreator-D-qBRyBy.js → NodeCreator-BiyvtIjb.js} +10 -26
  21. package/dist/assets/{NodeDetailsView-C1z3N5z_.css → NodeDetailsView-BcVu3kf0.css} +2 -2
  22. package/dist/assets/{NodeDetailsView-C1iBFaC1.js → NodeDetailsView-Ph7FVpa8.js} +21 -18
  23. package/dist/assets/{NodeView-Bio-FnnF.js → NodeView-BEJ48TF4.js} +14 -14
  24. package/dist/assets/{ProjectCardBadge-BEflW6oP.js → ProjectCardBadge-B7cCM6Eo.js} +69 -36
  25. package/dist/assets/{ProjectCardBadge-C78ap7Rc.css → ProjectCardBadge-t3v64i1e.css} +18 -13
  26. package/dist/assets/{ProjectHeader-DK3_g_D8.js → ProjectHeader-BjPaep-H.js} +33 -7
  27. package/dist/assets/{ProjectHeader-B-a6_GH6.css → ProjectHeader-BsBpG-Mj.css} +7 -7
  28. package/dist/assets/{ProjectSettings-CLMy_-YC.js → ProjectSettings-C1By1g0Z.js} +3 -3
  29. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-CSazgsi8.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-UHiXbqwy.js} +2 -2
  30. package/dist/assets/{ResourcesListLayout-CBvvL0VM.js → ResourcesListLayout-CiiXWGd5.js} +1 -1
  31. package/dist/assets/{RunDataAi-C-tu9GrI.js → RunDataAi-CQE0VYut.js} +115 -72
  32. package/dist/assets/{RunDataJson-ClpS_600.js → RunDataJson-BY9cOxFp.js} +12 -12
  33. package/dist/assets/{RunDataJsonActions-gWW8Qkt_.js → RunDataJsonActions-CuFjccfe.js} +2 -2
  34. package/dist/assets/{RunDataSearch-Dgv5JYk-.js → RunDataSearch-afEc-21Y.js} +1 -1
  35. package/dist/assets/{RunDataTable-nsOk35pD.js → RunDataTable-N6yWFXKt.js} +2 -2
  36. package/dist/assets/{SamlOnboarding-C5TSdGcx.js → SamlOnboarding-HDQzVmha.js} +3 -3
  37. package/dist/assets/{SettingsApiView-CzQG1ofR.js → SettingsApiView-DQMZT3uc.js} +1 -1
  38. package/dist/assets/{SettingsCommunityNodesView-D_F3n2NO.js → SettingsCommunityNodesView-BlQT_0E8.js} +5 -5
  39. package/dist/assets/{SettingsExternalSecrets-BUgKlMoR.js → SettingsExternalSecrets-BL_3qoNS.js} +1 -1
  40. package/dist/assets/{SettingsLdapView-CAmuVErd.js → SettingsLdapView-BMsfXg-A.js} +1 -1
  41. package/dist/assets/{SettingsLogStreamingView-DLkHrsx5.js → SettingsLogStreamingView-Bm5vaSO2.js} +1 -1
  42. package/dist/assets/{SettingsPersonalView-2elwsG0f.js → SettingsPersonalView-Djl1VXnE.js} +2 -2
  43. package/dist/assets/{SettingsSourceControl-BD426GUo.js → SettingsSourceControl-A-9nD8hG.js} +1 -1
  44. package/dist/assets/{SettingsSso-B-7lLoTI.js → SettingsSso-DZCscZY6.js} +1 -1
  45. package/dist/assets/{SettingsUsageAndPlan-EUWVJYe2.js → SettingsUsageAndPlan-Rd5AGlNl.js} +1 -1
  46. package/dist/assets/{SettingsUsersView-C3GbTYvU.js → SettingsUsersView-NEahsGVs.js} +1 -1
  47. package/dist/assets/{SettingsView-DSMM_8SL.js → SettingsView-CeXAUGXE.js} +1 -1
  48. package/dist/assets/{SetupView-CexY8Lic.js → SetupView-BI7oJfg0.js} +3 -3
  49. package/dist/assets/{SetupWorkflowCredentialsButton-BpLp754t.js → SetupWorkflowCredentialsButton-DMZX1S1F.js} +1 -1
  50. package/dist/assets/{SetupWorkflowFromTemplateView-CLvS9Kda.js → SetupWorkflowFromTemplateView-DZsPVdhN.js} +3 -3
  51. package/dist/assets/{SigninView-CYkcm3hG.js → SigninView-CzVnEKyz.js} +3 -3
  52. package/dist/assets/{SignoutView-C2HutrZm.js → SignoutView-C4ynr4AN.js} +1 -1
  53. package/dist/assets/{SignupView-B-o-ka0Z.js → SignupView-9nwGonm9.js} +3 -3
  54. package/dist/assets/{TemplateDetails-C20G_lj4.js → TemplateDetails-DT1tI4AF.js} +1 -1
  55. package/dist/assets/{TemplateList-DQzcYS6n.js → TemplateList-DGPm_Qol.js} +1 -1
  56. package/dist/assets/{TemplatesCollectionView-DEEMhmYZ.js → TemplatesCollectionView-DwXY5s5G.js} +5 -5
  57. package/dist/assets/{TemplatesSearchView-S6802uNr.js → TemplatesSearchView-D0R7uF40.js} +3 -3
  58. package/dist/assets/{TemplatesView-CT7S5O4K.js → TemplatesView-BZ-ntkfi.js} +1 -1
  59. package/dist/assets/{TemplatesWorkflowView-BMd9OmqA.js → TemplatesWorkflowView-TwVAHvD7.js} +5 -5
  60. package/dist/assets/{TestDefinitionEditView-BXhOuJrU.css → TestDefinitionEditView-C3nnWQ4Q.css} +0 -125
  61. package/dist/assets/{TestDefinitionEditView-5kDGEtaD.js → TestDefinitionEditView-o2Gc4BjN.js} +23 -139
  62. package/dist/assets/{TestDefinitionListView-BM-hghAY.js → TestDefinitionListView-BuUWjPAl.js} +1 -1
  63. package/dist/assets/{TestDefinitionNewView-CNN-qAmL.js → TestDefinitionNewView-DmSFNxfn.js} +2 -2
  64. package/dist/assets/{TestDefinitionRootView-S8g84AaK.js → TestDefinitionRootView-1dNmGZUI.js} +1 -1
  65. package/dist/assets/{VariablesView-D90WCfYK.js → VariablesView-D46tH9pw.js} +3 -3
  66. package/dist/assets/{WorkerView-BHVIRKm_.js → WorkerView-G0K849qT.js} +7 -7
  67. package/dist/assets/{WorkflowActivator-BsceIfln.js → WorkflowActivator-DfalOPsa.js} +2 -2
  68. package/dist/assets/{WorkflowExecutionsInfoAccordion-DxGIzmq4.js → WorkflowExecutionsInfoAccordion-BcD7ZskD.js} +1 -1
  69. package/dist/assets/{WorkflowExecutionsLandingPage-czqJYUnQ.js → WorkflowExecutionsLandingPage-BhPbJi5K.js} +2 -2
  70. package/dist/assets/{WorkflowExecutionsPreview-BzCGXWj0.js → WorkflowExecutionsPreview-CowaFwPg.js} +5 -5
  71. package/dist/assets/{WorkflowExecutionsView-syep-_N0.js → WorkflowExecutionsView-BAojAjIM.js} +6 -6
  72. package/dist/assets/{WorkflowHistory-CmHn_hnX.js → WorkflowHistory-Bj5_YFN8.js} +3 -3
  73. package/dist/assets/{WorkflowOnboardingView-BmhaZBkH.js → WorkflowOnboardingView-D9peqUJs.js} +1 -1
  74. package/dist/assets/{WorkflowPreview-BN13256Q.js → WorkflowPreview-gflk06YT.js} +1 -1
  75. package/dist/assets/{WorkflowsView-r9qJOUEb.css → WorkflowsView-CJB9aI6A.css} +27 -41
  76. package/dist/assets/{WorkflowsView-6qbtftll.js → WorkflowsView-CmgKYCQ6.js} +74 -139
  77. package/dist/assets/{easyAiWorkflowUtils-C7LfXIgb.js → easyAiWorkflowUtils-CLssJdgl.js} +1 -1
  78. package/dist/assets/{global-link-actions-znEIb0N4.js → global-link-actions-BphqczCY.js} +1 -1
  79. package/dist/assets/{import-curl-BsKs3fYs.js → import-curl-C9KhAemD.js} +1 -1
  80. package/dist/assets/{index-CgXKy7t-.css → index-BaqhUIB7.css} +55 -54
  81. package/dist/assets/{index-Cjz62pAo.js → index-C0DaAYgf.js} +1 -1
  82. package/dist/assets/{index-DZljH0cm.js → index-CkOV8f0Z.js} +2469 -2490
  83. package/dist/assets/{pickBy-DlIFPp_M.js → pickBy-DUugkW7s.js} +1 -1
  84. package/dist/assets/{pushConnection.store-DHLcz9cC.js → pushConnection.store-Cb2TGyrZ.js} +1 -1
  85. package/dist/assets/{templateActions-ClDjWPHA.js → templateActions-Czp13jCM.js} +1 -1
  86. package/dist/assets/{useBeforeUnload-BFlrxvKb.js → useBeforeUnload-BBbiw-FV.js} +1 -1
  87. package/dist/assets/{useCanvasMapping-CJcAsQmx.css → useCanvasMapping-BkGr1HdJ.css} +29 -28
  88. package/dist/assets/{useCanvasMapping-C0PMQVwg.js → useCanvasMapping-Cla--atl.js} +71 -56
  89. package/dist/assets/{useCanvasOperations-2Ca5hPmu.js → useCanvasOperations-FyzGfva5.js} +14 -13
  90. package/dist/assets/{useClearExecutionButtonVisible-D8unhL-H.js → useClearExecutionButtonVisible-fESJZE5R.js} +2 -2
  91. package/dist/assets/{useExecutionDebugging-MiAgkS54.js → useExecutionDebugging-D4s4CdaL.js} +1 -1
  92. package/dist/assets/{useExecutionHelpers-CgD9G_XU.js → useExecutionHelpers-Bm91b8wb.js} +1 -1
  93. package/dist/assets/{useImportCurlCommand-D6LUnncf.js → useImportCurlCommand-BPNuR5ZX.js} +2 -2
  94. package/dist/assets/{usePushConnection-DAhrfl2L.js → usePushConnection-BbQhNUm8.js} +14 -6
  95. package/dist/assets/{useRunWorkflow-sGIs6NeH.js → useRunWorkflow-DnbQqqcB.js} +8 -2
  96. package/dist/assets/{useTestDefinitionForm-TDiKTq9o.js → useTestDefinitionForm-ZJngcsSH.js} +1 -31
  97. package/dist/assets/{useWorkflowActivate-C_GRAYoC.js → useWorkflowActivate-CkCvd-g6.js} +1 -1
  98. package/dist/index.html +2 -2
  99. package/package.json +1 -1
  100. package/dist/assets/CollectionParameter-XKkHxrwX.js +0 -4
  101. /package/dist/assets/{useOverview-DcRuPjLJ.css → InsightsSummary-DcRuPjLJ.css} +0 -0
@@ -1,10 +1,10 @@
1
- import { aY as inject, aZ as isRef, i as createElementBlock, g as openBlock, k as createBaseVNode, d as defineComponent, q as computed, j as createVNode, e as createBlock, f as createCommentVNode, m as unref, t as toDisplayString, J as withModifiers, _ as _export_sfc, a_ as toRefs, r as ref, o as onMounted, n as normalizeClass, x as renderSlot, a$ as normalizeProps, b0 as guardReactiveProps, b1 as resolveDynamicComponent, b2 as mergeProps, b3 as VueMarkdown, F as Fragment, D as renderList, b4 as markdownLink, b5 as useFileDialog, b6 as onUnmounted, B as normalizeStyle, aB as withDirectives, b7 as vModelText, H as withKeys, w as withCtx, I as watch, h as resolveComponent, l as createTextVNode, b8 as useClipboard, a as useToast, c as useI18n$1, aR as N8nTooltip, b9 as N8nButton, aT as _sfc_main$e, aV as createSlots, aK as useStorage, ba as watchEffect, y as onBeforeUnmount, K as useDebounce, bb as provide, bc as useProvideTooltipAppendTo, bd as IsInPiPWindowSymbol, be as NodeConnectionTypes, bf as get, bg as last, bh as isEmpty, aj as useMessage, ak as MODAL_CONFIRM, bi as v4, bj as MANUAL_CHAT_TRIGGER_NODE_TYPE, bk as CHAT_TRIGGER_NODE_TYPE, bl as CHAIN_SUMMARIZATION_LANGCHAIN_NODE_TYPE, bm as AI_SUBCATEGORY, bn as AI_CATEGORY_AGENTS, bo as AI_CATEGORY_CHAINS, bp as AI_CODE_NODE_TYPE, bq as getNodeInputs, br as getConnectionTypes, bs as getNodeOutputs, bt as CHAT_TRIGGER_NODE_TYPE$1, T as useWorkflowsStore, bu as useNodeTypesStore, a1 as useCanvasStore, b as useRouter, bv as useNodeHelpers, V as VIEWS, bw as useTemplateRef, bx as N8nResizeWrapper, ah as useTelemetry, by as N8nText, bz as useStyles, p as useSettingsStore } from "./index-DZljH0cm.js";
2
- import { H as HighlightJS, R as RunDataAi } from "./RunDataAi-C-tu9GrI.js";
3
- import { u as usePinnedData } from "./useCanvasOperations-2Ca5hPmu.js";
4
- import { u as useRunWorkflow } from "./useRunWorkflow-sGIs6NeH.js";
5
- import { u as useClearExecutionButtonVisible } from "./useClearExecutionButtonVisible-D8unhL-H.js";
6
- import "./useExecutionHelpers-CgD9G_XU.js";
7
- import "./pushConnection.store-DHLcz9cC.js";
1
+ import { aY as inject, aZ as isRef, i as createElementBlock, g as openBlock, k as createBaseVNode, d as defineComponent, q as computed, j as createVNode, e as createBlock, f as createCommentVNode, m as unref, t as toDisplayString, J as withModifiers, _ as _export_sfc, a_ as toRefs, r as ref, o as onMounted, n as normalizeClass, x as renderSlot, a$ as normalizeProps, b0 as guardReactiveProps, b1 as resolveDynamicComponent, b2 as mergeProps, b3 as VueMarkdown, F as Fragment, D as renderList, b4 as markdownLink, b5 as useFileDialog, b6 as onUnmounted, B as normalizeStyle, aB as withDirectives, b7 as vModelText, H as withKeys, w as withCtx, I as watch, h as resolveComponent, l as createTextVNode, b8 as N8nText, b9 as useClipboard, a as useToast, c as useI18n$1, aR as N8nTooltip, ba as N8nButton, aT as _sfc_main$g, aV as createSlots, aK as useStorage, bb as watchEffect, y as onBeforeUnmount, K as useDebounce, bc as provide, bd as useProvideTooltipAppendTo, be as IsInPiPWindowSymbol, bf as NodeConnectionTypes, bg as get, bh as last, bi as isEmpty, aj as useMessage, ak as MODAL_CONFIRM, bj as v4, bk as MANUAL_CHAT_TRIGGER_NODE_TYPE, bl as CHAT_TRIGGER_NODE_TYPE, bm as CHAIN_SUMMARIZATION_LANGCHAIN_NODE_TYPE, bn as AI_SUBCATEGORY, bo as AI_CATEGORY_AGENTS, bp as AI_CATEGORY_CHAINS, bq as AI_CODE_NODE_TYPE, br as getNodeInputs, bs as getConnectionTypes, bt as getNodeOutputs, bu as CHAT_TRIGGER_NODE_TYPE$1, T as useWorkflowsStore, bv as useNodeTypesStore, a1 as useCanvasStore, b as useRouter, bw as useNodeHelpers, V as VIEWS, bx as useTemplateRef, by as N8nResizeWrapper, ah as useTelemetry, bz as _sfc_main$i, bA as ElTree, bB as N8nRadioButtons, bC as useStyles, p as useSettingsStore } from "./index-CkOV8f0Z.js";
2
+ import { H as HighlightJS, R as RunDataAi, f as formatTokenUsageCount, _ as _sfc_main$h, g as getSubtreeTotalConsumedTokens, a as getTreeNodeData, c as createAiData, b as getTotalConsumedTokens } from "./RunDataAi-CQE0VYut.js";
3
+ import { u as usePinnedData, a as upperFirst } from "./useCanvasOperations-FyzGfva5.js";
4
+ import { u as useRunWorkflow } from "./useRunWorkflow-DnbQqqcB.js";
5
+ import { u as useClearExecutionButtonVisible } from "./useClearExecutionButtonVisible-fESJZE5R.js";
6
+ import "./useExecutionHelpers-Bm91b8wb.js";
7
+ import "./pushConnection.store-Cb2TGyrZ.js";
8
8
  function bash(hljs) {
9
9
  const regex = hljs.regex;
10
10
  const VAR = {};
@@ -2605,7 +2605,7 @@ function render$2(_ctx, _cache) {
2605
2605
  }
2606
2606
  const IconPreview = { name: "mdi-openInNew", render: render$2 };
2607
2607
  const _hoisted_1$7 = { class: "chat-file-name" };
2608
- const _sfc_main$d = /* @__PURE__ */ defineComponent({
2608
+ const _sfc_main$f = /* @__PURE__ */ defineComponent({
2609
2609
  __name: "ChatFile",
2610
2610
  props: {
2611
2611
  file: {},
@@ -2655,7 +2655,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
2655
2655
  };
2656
2656
  }
2657
2657
  });
2658
- const ChatFile = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-70b9370d"]]);
2658
+ const ChatFile = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-70b9370d"]]);
2659
2659
  const _hoisted_1$6 = {
2660
2660
  key: 0,
2661
2661
  class: "chat-message-actions"
@@ -2664,7 +2664,7 @@ const _hoisted_2$3 = {
2664
2664
  key: 2,
2665
2665
  class: "chat-message-files"
2666
2666
  };
2667
- const _sfc_main$c = /* @__PURE__ */ defineComponent({
2667
+ const _sfc_main$e = /* @__PURE__ */ defineComponent({
2668
2668
  __name: "Message",
2669
2669
  props: {
2670
2670
  message: {}
@@ -2846,7 +2846,7 @@ const _hoisted_7 = {
2846
2846
  key: 0,
2847
2847
  class: "chat-files"
2848
2848
  };
2849
- const _sfc_main$b = /* @__PURE__ */ defineComponent({
2849
+ const _sfc_main$d = /* @__PURE__ */ defineComponent({
2850
2850
  __name: "Input",
2851
2851
  props: {
2852
2852
  placeholder: { default: "inputPlaceholder" }
@@ -3051,8 +3051,8 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
3051
3051
  };
3052
3052
  }
3053
3053
  });
3054
- const ChatInput = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-9f775274"]]);
3055
- const _sfc_main$a = /* @__PURE__ */ defineComponent({
3054
+ const ChatInput = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-9f775274"]]);
3055
+ const _sfc_main$c = /* @__PURE__ */ defineComponent({
3056
3056
  __name: "MessageTyping",
3057
3057
  props: {
3058
3058
  animation: { default: "bouncing" }
@@ -3077,7 +3077,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
3077
3077
  messageContainer.value?.scrollToView();
3078
3078
  });
3079
3079
  return (_ctx, _cache) => {
3080
- return openBlock(), createBlock(unref(_sfc_main$c), {
3080
+ return openBlock(), createBlock(unref(_sfc_main$e), {
3081
3081
  ref_key: "messageContainer",
3082
3082
  ref: messageContainer,
3083
3083
  class: normalizeClass(classes.value),
@@ -3105,7 +3105,7 @@ const _hoisted_3 = {
3105
3105
  key: 1,
3106
3106
  class: "chat-messages-list"
3107
3107
  };
3108
- const _sfc_main$9 = /* @__PURE__ */ defineComponent({
3108
+ const _sfc_main$b = /* @__PURE__ */ defineComponent({
3109
3109
  __name: "MessagesList",
3110
3110
  props: {
3111
3111
  messages: {},
@@ -3147,13 +3147,13 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
3147
3147
  ])
3148
3148
  ])) : (openBlock(), createElementBlock("div", _hoisted_3, [
3149
3149
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(initialMessages), (initialMessage) => {
3150
- return openBlock(), createBlock(_sfc_main$c, {
3150
+ return openBlock(), createBlock(_sfc_main$e, {
3151
3151
  key: initialMessage.id,
3152
3152
  message: initialMessage
3153
3153
  }, null, 8, ["message"]);
3154
3154
  }), 128)),
3155
3155
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.messages, (message) => {
3156
- return openBlock(), createBlock(_sfc_main$c, {
3156
+ return openBlock(), createBlock(_sfc_main$e, {
3157
3157
  key: message.id,
3158
3158
  ref_for: true,
3159
3159
  ref_key: "messageComponents",
@@ -3166,12 +3166,12 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
3166
3166
  _: 2
3167
3167
  }, 1032, ["message"]);
3168
3168
  }), 128)),
3169
- unref(waitingForResponse) ? (openBlock(), createBlock(_sfc_main$a, { key: 0 })) : createCommentVNode("", true)
3169
+ unref(waitingForResponse) ? (openBlock(), createBlock(_sfc_main$c, { key: 0 })) : createCommentVNode("", true)
3170
3170
  ]));
3171
3171
  };
3172
3172
  }
3173
3173
  });
3174
- const _sfc_main$8 = /* @__PURE__ */ defineComponent({
3174
+ const _sfc_main$a = /* @__PURE__ */ defineComponent({
3175
3175
  __name: "MessageOptionTooltip",
3176
3176
  props: {
3177
3177
  placement: {
@@ -3206,17 +3206,17 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
3206
3206
  };
3207
3207
  }
3208
3208
  });
3209
- const container$5 = "_container_pqtqf_123";
3210
- const icon$1 = "_icon_pqtqf_129";
3211
- const style0$7 = {
3212
- container: container$5,
3213
- icon: icon$1
3209
+ const container$6 = "_container_pqtqf_123";
3210
+ const icon$2 = "_icon_pqtqf_129";
3211
+ const style0$8 = {
3212
+ container: container$6,
3213
+ icon: icon$2
3214
3214
  };
3215
- const cssModules$7 = {
3216
- "$style": style0$7
3215
+ const cssModules$8 = {
3216
+ "$style": style0$8
3217
3217
  };
3218
- const MessageOptionTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__cssModules", cssModules$7]]);
3219
- const _sfc_main$7 = /* @__PURE__ */ defineComponent({
3218
+ const MessageOptionTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__cssModules", cssModules$8]]);
3219
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
3220
3220
  __name: "MessageOptionAction",
3221
3221
  props: {
3222
3222
  label: {
@@ -3257,17 +3257,17 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
3257
3257
  };
3258
3258
  }
3259
3259
  });
3260
- const container$4 = "_container_u1r1u_123";
3261
- const icon = "_icon_u1r1u_129";
3262
- const style0$6 = {
3263
- container: container$4,
3264
- icon
3260
+ const container$5 = "_container_u1r1u_123";
3261
+ const icon$1 = "_icon_u1r1u_129";
3262
+ const style0$7 = {
3263
+ container: container$5,
3264
+ icon: icon$1
3265
3265
  };
3266
- const cssModules$6 = {
3267
- "$style": style0$6
3266
+ const cssModules$7 = {
3267
+ "$style": style0$7
3268
3268
  };
3269
- const MessageOptionAction = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__cssModules", cssModules$6]]);
3270
- const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3269
+ const MessageOptionAction = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__cssModules", cssModules$7]]);
3270
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
3271
3271
  __name: "PanelHeader",
3272
3272
  props: {
3273
3273
  title: {}
@@ -3280,9 +3280,16 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3280
3280
  class: normalizeClass(_ctx.$style.container),
3281
3281
  onClick: _cache[0] || (_cache[0] = ($event) => emit("click"))
3282
3282
  }, [
3283
- createBaseVNode("span", {
3284
- class: normalizeClass(_ctx.$style.title)
3285
- }, toDisplayString(_ctx.title), 3),
3283
+ createVNode(unref(N8nText), {
3284
+ class: normalizeClass(_ctx.$style.title),
3285
+ bold: true,
3286
+ size: "small"
3287
+ }, {
3288
+ default: withCtx(() => [
3289
+ createTextVNode(toDisplayString(_ctx.title), 1)
3290
+ ]),
3291
+ _: 1
3292
+ }, 8, ["class"]),
3286
3293
  createBaseVNode("div", {
3287
3294
  class: normalizeClass(_ctx.$style.actions)
3288
3295
  }, [
@@ -3292,20 +3299,20 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3292
3299
  };
3293
3300
  }
3294
3301
  });
3295
- const container$3 = "_container_oxcgo_123";
3296
- const title = "_title_oxcgo_145";
3297
- const actions$1 = "_actions_oxcgo_151";
3298
- const style0$5 = {
3299
- container: container$3,
3302
+ const container$4 = "_container_u9nuz_123";
3303
+ const title = "_title_u9nuz_144";
3304
+ const actions$1 = "_actions_u9nuz_149";
3305
+ const style0$6 = {
3306
+ container: container$4,
3300
3307
  title,
3301
3308
  actions: actions$1
3302
3309
  };
3303
- const cssModules$5 = {
3304
- "$style": style0$5
3310
+ const cssModules$6 = {
3311
+ "$style": style0$6
3305
3312
  };
3306
- const PanelHeader = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__cssModules", cssModules$5]]);
3313
+ const PanelHeader = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__cssModules", cssModules$6]]);
3307
3314
  const _hoisted_1$1 = ["onClick"];
3308
- const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3315
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
3309
3316
  __name: "ChatMessagesPanel",
3310
3317
  props: {
3311
3318
  pastChatMessages: {},
@@ -3422,7 +3429,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3422
3429
  content: unref(locale).baseText("chat.window.session.resetSession")
3423
3430
  }, {
3424
3431
  default: withCtx(() => [
3425
- createVNode(unref(_sfc_main$e), {
3432
+ createVNode(unref(_sfc_main$g), {
3426
3433
  class: normalizeClass(_ctx.$style.headerButton),
3427
3434
  "data-test-id": "refresh-session-button",
3428
3435
  outline: "",
@@ -3462,7 +3469,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3462
3469
  ]),
3463
3470
  _: 1
3464
3471
  }),
3465
- createVNode(unref(_sfc_main$e), {
3472
+ createVNode(unref(_sfc_main$g), {
3466
3473
  class: normalizeClass(_ctx.$style.headerButton),
3467
3474
  "data-test-id": "refresh-session-button",
3468
3475
  outline: "",
@@ -3472,7 +3479,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3472
3479
  title: unref(locale).baseText("chat.window.session.reset"),
3473
3480
  onClick: onRefreshSession
3474
3481
  }, null, 8, ["class", "title"]),
3475
- _ctx.showCloseButton ? (openBlock(), createBlock(unref(_sfc_main$e), {
3482
+ _ctx.showCloseButton ? (openBlock(), createBlock(unref(_sfc_main$g), {
3476
3483
  key: 0,
3477
3484
  class: normalizeClass(_ctx.$style.headerButton),
3478
3485
  outline: "",
@@ -3487,7 +3494,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3487
3494
  key: 2,
3488
3495
  class: normalizeClass(_ctx.$style.chatBody)
3489
3496
  }, [
3490
- createVNode(_sfc_main$9, {
3497
+ createVNode(_sfc_main$b, {
3491
3498
  messages: _ctx.messages,
3492
3499
  class: normalizeClass(_ctx.$style.messages),
3493
3500
  "empty-text": _ctx.isNewLogsEnabled ? unref(locale).baseText("chat.window.chat.emptyChatMessage.v2") : void 0
@@ -3568,17 +3575,17 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3568
3575
  };
3569
3576
  }
3570
3577
  });
3571
- const chat$2 = "_chat_fs224_123";
3572
- const chatHeader = "_chatHeader_fs224_148";
3573
- const chatTitle = "_chatTitle_fs224_161";
3574
- const session = "_session_fs224_165";
3575
- const sessionId = "_sessionId_fs224_173";
3576
- const copyable = "_copyable_fs224_179";
3577
- const headerButton = "_headerButton_fs224_183";
3578
- const chatBody = "_chatBody_fs224_188";
3579
- const messages = "_messages_fs224_197";
3580
- const messagesInput = "_messagesInput_fs224_208";
3581
- const style0$4 = {
3578
+ const chat$2 = "_chat_14fd2_123";
3579
+ const chatHeader = "_chatHeader_14fd2_148";
3580
+ const chatTitle = "_chatTitle_14fd2_161";
3581
+ const session = "_session_14fd2_165";
3582
+ const sessionId = "_sessionId_14fd2_173";
3583
+ const copyable = "_copyable_14fd2_179";
3584
+ const headerButton = "_headerButton_14fd2_183";
3585
+ const chatBody = "_chatBody_14fd2_188";
3586
+ const messages = "_messages_14fd2_197";
3587
+ const messagesInput = "_messagesInput_14fd2_208";
3588
+ const style0$5 = {
3582
3589
  chat: chat$2,
3583
3590
  chatHeader,
3584
3591
  chatTitle,
@@ -3590,13 +3597,13 @@ const style0$4 = {
3590
3597
  messages,
3591
3598
  messagesInput
3592
3599
  };
3593
- const cssModules$4 = {
3594
- "$style": style0$4
3600
+ const cssModules$5 = {
3601
+ "$style": style0$5
3595
3602
  };
3596
- const ChatMessagesPanel = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__cssModules", cssModules$4]]);
3603
+ const ChatMessagesPanel = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__cssModules", cssModules$5]]);
3597
3604
  const _hoisted_1 = { class: "meta" };
3598
3605
  const _hoisted_2 = { key: 0 };
3599
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3606
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3600
3607
  __name: "ChatLogsPanel",
3601
3608
  props: {
3602
3609
  node: {},
@@ -3643,17 +3650,17 @@ const logsWrapper = "_logsWrapper_1n9n2_140";
3643
3650
  const logsTitle = "_logsTitle_1n9n2_149";
3644
3651
  const logs$1 = "_logs_1n9n2_123";
3645
3652
  const actions = "_actions_1n9n2_159";
3646
- const style0$3 = {
3653
+ const style0$4 = {
3647
3654
  logsHeader,
3648
3655
  logsWrapper,
3649
3656
  logsTitle,
3650
3657
  logs: logs$1,
3651
3658
  actions
3652
3659
  };
3653
- const cssModules$3 = {
3654
- "$style": style0$3
3660
+ const cssModules$4 = {
3661
+ "$style": style0$4
3655
3662
  };
3656
- const ChatLogsPanel = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__cssModules", cssModules$3]]);
3663
+ const ChatLogsPanel = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__cssModules", cssModules$4]]);
3657
3664
  const LOCAL_STORAGE_PANEL_HEIGHT = "N8N_CANVAS_CHAT_HEIGHT";
3658
3665
  const LOCAL_STORAGE_PANEL_WIDTH = "N8N_CANVAS_CHAT_WIDTH";
3659
3666
  const MAX_WIDTH_PERCENTAGE = 0.8;
@@ -4227,7 +4234,7 @@ function useChatState(isDisabled, onWindowResize) {
4227
4234
  displayExecution
4228
4235
  };
4229
4236
  }
4230
- const _sfc_main$3 = /* @__PURE__ */ defineComponent({
4237
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
4231
4238
  __name: "CanvasChat",
4232
4239
  setup(__props, { expose: __expose }) {
4233
4240
  const workflowsStore = useWorkflowsStore();
@@ -4390,23 +4397,222 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
4390
4397
  const resizeWrapper$1 = "_resizeWrapper_1aajp_124";
4391
4398
  const pipContent$1 = "_pipContent_1aajp_129";
4392
4399
  const empty$1 = "_empty_1aajp_140";
4393
- const container$2 = "_container_1aajp_146";
4400
+ const container$3 = "_container_1aajp_146";
4394
4401
  const chatResizer = "_chatResizer_1aajp_154";
4395
4402
  const footer = "_footer_1aajp_161";
4396
4403
  const chat$1 = "_chat_1aajp_154";
4397
4404
  const inner = "_inner_1aajp_180";
4398
4405
  const logs = "_logs_1aajp_188";
4399
- const style0$2 = {
4406
+ const style0$3 = {
4400
4407
  resizeWrapper: resizeWrapper$1,
4401
4408
  pipContent: pipContent$1,
4402
4409
  empty: empty$1,
4403
- container: container$2,
4410
+ container: container$3,
4404
4411
  chatResizer,
4405
4412
  footer,
4406
4413
  chat: chat$1,
4407
4414
  inner,
4408
4415
  logs
4409
4416
  };
4417
+ const cssModules$3 = {
4418
+ "$style": style0$3
4419
+ };
4420
+ const __unplugin_components_0$1 = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__cssModules", cssModules$3]]);
4421
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
4422
+ __name: "ConsumedTokenCountText",
4423
+ props: {
4424
+ consumedTokens: {}
4425
+ },
4426
+ setup(__props) {
4427
+ const locale = useI18n$1();
4428
+ return (_ctx, _cache) => {
4429
+ const _component_ConsumedTokensDetails = _sfc_main$h;
4430
+ return _ctx.consumedTokens !== void 0 ? (openBlock(), createBlock(unref(N8nTooltip), {
4431
+ key: 0,
4432
+ enterable: false
4433
+ }, {
4434
+ content: withCtx(() => [
4435
+ createVNode(_component_ConsumedTokensDetails, { "consumed-tokens": _ctx.consumedTokens }, null, 8, ["consumed-tokens"])
4436
+ ]),
4437
+ default: withCtx(() => [
4438
+ createBaseVNode("span", null, toDisplayString(unref(locale).baseText("runData.aiContentBlock.tokens", {
4439
+ interpolate: {
4440
+ count: unref(formatTokenUsageCount)(_ctx.consumedTokens, "total")
4441
+ }
4442
+ })), 1)
4443
+ ]),
4444
+ _: 1
4445
+ })) : createCommentVNode("", true);
4446
+ };
4447
+ }
4448
+ });
4449
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
4450
+ __name: "LogsOverviewRow",
4451
+ props: {
4452
+ data: {},
4453
+ node: {},
4454
+ isSelected: { type: Boolean },
4455
+ shouldShowConsumedTokens: { type: Boolean }
4456
+ },
4457
+ emits: ["toggleExpanded"],
4458
+ setup(__props, { emit: __emit }) {
4459
+ const props = __props;
4460
+ const emit = __emit;
4461
+ const locale = useI18n$1();
4462
+ const workflowsStore = useWorkflowsStore();
4463
+ const nodeTypeStore = useNodeTypesStore();
4464
+ const node = computed(() => workflowsStore.nodesByName[props.data.node]);
4465
+ const runData = computed(
4466
+ () => node.value ? workflowsStore.workflowExecutionData?.data?.resultData.runData[node.value.name]?.[props.data.runIndex] : void 0
4467
+ );
4468
+ const type = computed(() => node.value ? nodeTypeStore.getNodeType(node.value.type) : void 0);
4469
+ const depth = computed(() => (props.node.level ?? 1) - 1);
4470
+ const timeTookText = computed(() => {
4471
+ const finalStatuses = ["crashed", "error", "success"];
4472
+ const status = runData.value?.executionStatus;
4473
+ if (!status) {
4474
+ return "";
4475
+ }
4476
+ const statusText = upperFirst(status);
4477
+ return finalStatuses.includes(status) ? locale.baseText("logs.overview.body.summaryText", {
4478
+ interpolate: {
4479
+ status: statusText,
4480
+ time: locale.displayTimer(runData.value.executionTime, true)
4481
+ }
4482
+ }) : statusText;
4483
+ });
4484
+ const startedAtText = computed(
4485
+ () => locale.baseText("logs.overview.body.started", {
4486
+ interpolate: {
4487
+ time: new Date(runData.value?.startTime ?? 0).toISOString()
4488
+ // TODO: confirm date format
4489
+ }
4490
+ })
4491
+ );
4492
+ const subtreeConsumedTokens = computed(
4493
+ () => props.shouldShowConsumedTokens ? getSubtreeTotalConsumedTokens(props.data) : void 0
4494
+ );
4495
+ function isLastChild(level) {
4496
+ let parent = props.data.parent;
4497
+ let data = props.data;
4498
+ for (let i = 0; i < depth.value - level; i++) {
4499
+ data = parent;
4500
+ parent = parent?.parent;
4501
+ }
4502
+ const siblings = parent?.children ?? [];
4503
+ return data === siblings[siblings.length - 1];
4504
+ }
4505
+ return (_ctx, _cache) => {
4506
+ const _component_NodeIcon = _sfc_main$i;
4507
+ return node.value !== void 0 ? (openBlock(), createElementBlock("div", {
4508
+ key: 0,
4509
+ class: normalizeClass({ [_ctx.$style.container]: true, [_ctx.$style.selected]: props.isSelected })
4510
+ }, [
4511
+ (openBlock(true), createElementBlock(Fragment, null, renderList(depth.value, (level) => {
4512
+ return openBlock(), createElementBlock("div", {
4513
+ key: level,
4514
+ class: normalizeClass({
4515
+ [_ctx.$style.indent]: true,
4516
+ [_ctx.$style.connectorCurved]: level === depth.value,
4517
+ [_ctx.$style.connectorStraight]: !isLastChild(level)
4518
+ })
4519
+ }, null, 2);
4520
+ }), 128)),
4521
+ createVNode(_component_NodeIcon, {
4522
+ "node-type": type.value,
4523
+ size: 16,
4524
+ class: normalizeClass(_ctx.$style.icon)
4525
+ }, null, 8, ["node-type", "class"]),
4526
+ createVNode(unref(N8nText), {
4527
+ tag: "div",
4528
+ bold: true,
4529
+ size: "small",
4530
+ class: normalizeClass(_ctx.$style.name)
4531
+ }, {
4532
+ default: withCtx(() => [
4533
+ createTextVNode(toDisplayString(node.value.name), 1)
4534
+ ]),
4535
+ _: 1
4536
+ }, 8, ["class"]),
4537
+ createVNode(unref(N8nText), {
4538
+ tag: "div",
4539
+ color: "text-light",
4540
+ size: "small",
4541
+ class: normalizeClass(_ctx.$style.timeTook)
4542
+ }, {
4543
+ default: withCtx(() => [
4544
+ createTextVNode(toDisplayString(timeTookText.value), 1)
4545
+ ]),
4546
+ _: 1
4547
+ }, 8, ["class"]),
4548
+ createVNode(unref(N8nText), {
4549
+ tag: "div",
4550
+ color: "text-light",
4551
+ size: "small",
4552
+ class: normalizeClass(_ctx.$style.startedAt)
4553
+ }, {
4554
+ default: withCtx(() => [
4555
+ createTextVNode(toDisplayString(startedAtText.value), 1)
4556
+ ]),
4557
+ _: 1
4558
+ }, 8, ["class"]),
4559
+ subtreeConsumedTokens.value !== void 0 ? (openBlock(), createBlock(unref(N8nText), {
4560
+ key: 0,
4561
+ tag: "div",
4562
+ color: "text-light",
4563
+ size: "small",
4564
+ class: normalizeClass(_ctx.$style.consumedTokens)
4565
+ }, {
4566
+ default: withCtx(() => [
4567
+ subtreeConsumedTokens.value.totalTokens > 0 && (props.data.children.length === 0 || !props.node.expanded) ? (openBlock(), createBlock(_sfc_main$4, {
4568
+ key: 0,
4569
+ "consumed-tokens": subtreeConsumedTokens.value
4570
+ }, null, 8, ["consumed-tokens"])) : createCommentVNode("", true)
4571
+ ]),
4572
+ _: 1
4573
+ }, 8, ["class"])) : createCommentVNode("", true),
4574
+ createBaseVNode("div", null, [
4575
+ createVNode(unref(_sfc_main$g), {
4576
+ type: "secondary",
4577
+ size: "medium",
4578
+ icon: props.node.expanded ? "chevron-down" : "chevron-up",
4579
+ style: normalizeStyle({
4580
+ visibility: props.data.children.length === 0 ? "hidden" : "",
4581
+ color: "var(--color-text-base)"
4582
+ // give higher specificity than the style from the component itself
4583
+ }),
4584
+ class: normalizeClass(_ctx.$style.toggleButton),
4585
+ onClick: _cache[0] || (_cache[0] = withModifiers(($event) => emit("toggleExpanded", props.node), ["stop"]))
4586
+ }, null, 8, ["icon", "style", "class"])
4587
+ ])
4588
+ ], 2)) : createCommentVNode("", true);
4589
+ };
4590
+ }
4591
+ });
4592
+ const container$2 = "_container_16ks1_123";
4593
+ const toggleButton = "_toggleButton_16ks1_135";
4594
+ const icon = "_icon_16ks1_141";
4595
+ const selected = "_selected_16ks1_149";
4596
+ const indent = "_indent_16ks1_149";
4597
+ const connectorCurved = "_connectorCurved_16ks1_161";
4598
+ const connectorStraight = "_connectorStraight_16ks1_171";
4599
+ const name = "_name_16ks1_185";
4600
+ const timeTook = "_timeTook_16ks1_190";
4601
+ const startedAt = "_startedAt_16ks1_196";
4602
+ const consumedTokens = "_consumedTokens_16ks1_202";
4603
+ const style0$2 = {
4604
+ container: container$2,
4605
+ toggleButton,
4606
+ icon,
4607
+ selected,
4608
+ indent,
4609
+ connectorCurved,
4610
+ connectorStraight,
4611
+ name,
4612
+ timeTook,
4613
+ startedAt,
4614
+ consumedTokens
4615
+ };
4410
4616
  const cssModules$2 = {
4411
4617
  "$style": style0$2
4412
4618
  };
@@ -4414,20 +4620,74 @@ const __unplugin_components_0 = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__cs
4414
4620
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4415
4621
  __name: "LogsOverviewPanel",
4416
4622
  props: {
4417
- isOpen: { type: Boolean }
4623
+ isOpen: { type: Boolean },
4624
+ node: {}
4418
4625
  },
4419
4626
  emits: ["clickHeader"],
4420
4627
  setup(__props, { emit: __emit }) {
4421
4628
  const emit = __emit;
4422
4629
  const locale = useI18n$1();
4630
+ const telemetry = useTelemetry();
4423
4631
  const workflowsStore = useWorkflowsStore();
4424
4632
  const nodeHelpers = useNodeHelpers();
4425
4633
  const isClearExecutionButtonVisible = useClearExecutionButtonVisible();
4634
+ const workflow = computed(() => workflowsStore.getCurrentWorkflow());
4635
+ const executionTree = computed(
4636
+ () => __props.node ? getTreeNodeData(
4637
+ __props.node.name,
4638
+ workflow.value,
4639
+ createAiData(__props.node.name, workflow.value, workflowsStore.getWorkflowResultDataByNodeName)
4640
+ ) : []
4641
+ );
4642
+ const isEmpty2 = computed(() => workflowsStore.workflowExecutionData === null);
4643
+ const switchViewOptions = computed(() => [
4644
+ { label: locale.baseText("logs.overview.header.switch.details"), value: "details" },
4645
+ { label: locale.baseText("logs.overview.header.switch.overview"), value: "overview" }
4646
+ ]);
4647
+ const executionStatusText = computed(() => {
4648
+ const execution = workflowsStore.workflowExecutionData;
4649
+ if (!execution) {
4650
+ return void 0;
4651
+ }
4652
+ if (execution.startedAt && execution.stoppedAt) {
4653
+ return locale.baseText("logs.overview.body.summaryText", {
4654
+ interpolate: {
4655
+ status: upperFirst(execution.status),
4656
+ time: locale.displayTimer(
4657
+ +new Date(execution.stoppedAt) - +new Date(execution.startedAt),
4658
+ true
4659
+ )
4660
+ }
4661
+ });
4662
+ }
4663
+ return upperFirst(execution.status);
4664
+ });
4665
+ const consumedTokens2 = computed(
4666
+ () => getTotalConsumedTokens(...executionTree.value.map(getSubtreeTotalConsumedTokens))
4667
+ );
4668
+ const selectedRun = ref(void 0);
4426
4669
  function onClearExecutionData() {
4427
4670
  workflowsStore.setWorkflowExecutionData(null);
4428
4671
  nodeHelpers.updateNodesExecutionIssues();
4429
4672
  }
4673
+ function handleClickNode(clicked) {
4674
+ if (selectedRun.value?.node === clicked.node && selectedRun.value.runIndex === clicked.runIndex) {
4675
+ selectedRun.value = void 0;
4676
+ return;
4677
+ }
4678
+ selectedRun.value = { node: clicked.node, runIndex: clicked.runIndex };
4679
+ telemetry.track("User selected node in log view", {
4680
+ node_type: workflowsStore.nodesByName[clicked.node].type,
4681
+ node_id: workflowsStore.nodesByName[clicked.node].id,
4682
+ execution_id: workflowsStore.workflowExecutionData?.id,
4683
+ workflow_id: workflow.value.id
4684
+ });
4685
+ }
4686
+ function handleToggleExpanded(treeNode) {
4687
+ treeNode.expanded = !treeNode.expanded;
4688
+ }
4430
4689
  return (_ctx, _cache) => {
4690
+ const _component_LogsOverviewRow = __unplugin_components_0;
4431
4691
  return openBlock(), createElementBlock("div", {
4432
4692
  class: normalizeClass(_ctx.$style.container)
4433
4693
  }, [
@@ -4462,9 +4722,10 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4462
4722
  }, 8, ["title"]),
4463
4723
  _ctx.isOpen ? (openBlock(), createElementBlock("div", {
4464
4724
  key: 0,
4465
- class: normalizeClass([_ctx.$style.content, _ctx.$style.empty])
4725
+ class: normalizeClass([_ctx.$style.content, isEmpty2.value ? _ctx.$style.empty : ""])
4466
4726
  }, [
4467
- createVNode(unref(N8nText), {
4727
+ isEmpty2.value ? (openBlock(), createBlock(unref(N8nText), {
4728
+ key: 0,
4468
4729
  tag: "p",
4469
4730
  size: "medium",
4470
4731
  color: "text-base",
@@ -4474,21 +4735,75 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
4474
4735
  createTextVNode(toDisplayString(unref(locale).baseText("logs.overview.body.empty.message")), 1)
4475
4736
  ]),
4476
4737
  _: 1
4477
- }, 8, ["class"])
4738
+ }, 8, ["class"])) : (openBlock(), createElementBlock("div", {
4739
+ key: 1,
4740
+ class: normalizeClass(_ctx.$style.scrollable)
4741
+ }, [
4742
+ executionStatusText.value !== void 0 ? (openBlock(), createBlock(unref(N8nText), {
4743
+ key: 0,
4744
+ tag: "div",
4745
+ color: "text-light",
4746
+ size: "small",
4747
+ class: normalizeClass(_ctx.$style.summary)
4748
+ }, {
4749
+ default: withCtx(() => [
4750
+ createBaseVNode("span", null, toDisplayString(executionStatusText.value), 1),
4751
+ consumedTokens2.value.totalTokens > 0 ? (openBlock(), createBlock(_sfc_main$4, {
4752
+ key: 0,
4753
+ "consumed-tokens": consumedTokens2.value
4754
+ }, null, 8, ["consumed-tokens"])) : createCommentVNode("", true)
4755
+ ]),
4756
+ _: 1
4757
+ }, 8, ["class"])) : createCommentVNode("", true),
4758
+ executionTree.value.length > 0 ? (openBlock(), createBlock(unref(ElTree), {
4759
+ key: 1,
4760
+ class: normalizeClass(_ctx.$style.tree),
4761
+ indent: 0,
4762
+ data: executionTree.value,
4763
+ "expand-on-click-node": false,
4764
+ "default-expand-all": true,
4765
+ onNodeClick: handleClickNode
4766
+ }, {
4767
+ default: withCtx(({ node: elTreeNode, data }) => [
4768
+ createVNode(_component_LogsOverviewRow, {
4769
+ data,
4770
+ node: elTreeNode,
4771
+ "is-selected": data.node === selectedRun.value?.node && data.runIndex === selectedRun.value?.runIndex,
4772
+ "should-show-consumed-tokens": consumedTokens2.value.totalTokens > 0,
4773
+ onToggleExpanded: handleToggleExpanded
4774
+ }, null, 8, ["data", "node", "is-selected", "should-show-consumed-tokens"])
4775
+ ]),
4776
+ _: 1
4777
+ }, 8, ["class", "data"])) : createCommentVNode("", true),
4778
+ createVNode(unref(N8nRadioButtons), {
4779
+ size: "medium",
4780
+ class: normalizeClass(_ctx.$style.switchViewButtons),
4781
+ "model-value": selectedRun.value ? "details" : "overview",
4782
+ options: switchViewOptions.value
4783
+ }, null, 8, ["class", "model-value", "options"])
4784
+ ], 2))
4478
4785
  ], 2)) : createCommentVNode("", true)
4479
4786
  ], 2);
4480
4787
  };
4481
4788
  }
4482
4789
  });
4483
- const container$1 = "_container_wrmwc_123";
4484
- const content = "_content_wrmwc_131";
4485
- const empty = "_empty_wrmwc_135";
4486
- const emptyText = "_emptyText_wrmwc_141";
4790
+ const container$1 = "_container_ok07h_123";
4791
+ const content = "_content_ok07h_132";
4792
+ const empty = "_empty_ok07h_141";
4793
+ const emptyText = "_emptyText_ok07h_146";
4794
+ const scrollable = "_scrollable_ok07h_151";
4795
+ const summary = "_summary_ok07h_158";
4796
+ const tree = "_tree_ok07h_170";
4797
+ const switchViewButtons = "_switchViewButtons_ok07h_177";
4487
4798
  const style0$1 = {
4488
4799
  container: container$1,
4489
4800
  content,
4490
4801
  empty,
4491
- emptyText
4802
+ emptyText,
4803
+ scrollable,
4804
+ summary,
4805
+ tree,
4806
+ switchViewButtons
4492
4807
  };
4493
4808
  const cssModules$1 = {
4494
4809
  "$style": style0$1
@@ -4512,10 +4827,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4512
4827
  const locales = useI18n$1();
4513
4828
  const telemetry = useTelemetry();
4514
4829
  const { rootStyles, height, chatWidth, onWindowResize, onResizeDebounced, onResizeChatDebounced } = useResize(container2);
4515
- const { currentSessionId, messages: messages2, sendMessage, refreshSession, displayExecution } = useChatState(
4516
- ref(false),
4517
- onWindowResize
4518
- );
4830
+ const { currentSessionId, messages: messages2, connectedNode, sendMessage, refreshSession, displayExecution } = useChatState(ref(false), onWindowResize);
4519
4831
  const appStyles = useStyles();
4520
4832
  const tooltipZIndex = computed(() => appStyles.APP_Z_INDEXES.ASK_ASSISTANT_FLOATING_BUTTON + 100);
4521
4833
  const { canPopOut, isPoppedOut, pipWindow } = usePiPWindow({
@@ -4578,7 +4890,8 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4578
4890
  createBaseVNode("div", {
4579
4891
  ref_key: "container",
4580
4892
  ref: container2,
4581
- class: normalizeClass(_ctx.$style.container)
4893
+ class: normalizeClass([_ctx.$style.container, "ignore-key-press-canvas"]),
4894
+ tabindex: "0"
4582
4895
  }, [
4583
4896
  hasChat.value ? (openBlock(), createBlock(unref(N8nResizeWrapper), {
4584
4897
  key: 0,
@@ -4609,6 +4922,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4609
4922
  }, 8, ["is-resizing-enabled", "width", "class", "window", "onResize"])) : createCommentVNode("", true),
4610
4923
  createVNode(LogsOverviewPanel, {
4611
4924
  "is-open": panelState.value !== "closed",
4925
+ node: unref(connectedNode),
4612
4926
  onClickHeader: handleClickHeader
4613
4927
  }, {
4614
4928
  actions: withCtx(() => [
@@ -4618,7 +4932,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4618
4932
  content: unref(locales).baseText("runData.panel.actions.popOut")
4619
4933
  }, {
4620
4934
  default: withCtx(() => [
4621
- createVNode(unref(_sfc_main$e), {
4935
+ createVNode(unref(_sfc_main$g), {
4622
4936
  icon: "pop-out",
4623
4937
  type: "secondary",
4624
4938
  size: "small",
@@ -4636,7 +4950,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4636
4950
  )
4637
4951
  }, {
4638
4952
  default: withCtx(() => [
4639
- createVNode(unref(_sfc_main$e), {
4953
+ createVNode(unref(_sfc_main$g), {
4640
4954
  type: "secondary",
4641
4955
  size: "small",
4642
4956
  "icon-size": "medium",
@@ -4649,7 +4963,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4649
4963
  }, 8, ["z-index", "content"])) : createCommentVNode("", true)
4650
4964
  ]),
4651
4965
  _: 1
4652
- }, 8, ["is-open"])
4966
+ }, 8, ["is-open", "node"])
4653
4967
  ], 2)
4654
4968
  ]),
4655
4969
  _: 1
@@ -4659,11 +4973,11 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4659
4973
  };
4660
4974
  }
4661
4975
  });
4662
- const resizeWrapper = "_resizeWrapper_1brak_124";
4663
- const pipContent = "_pipContent_1brak_129";
4664
- const isOpen = "_isOpen_1brak_145";
4665
- const container = "_container_1brak_152";
4666
- const chat = "_chat_1brak_160";
4976
+ const resizeWrapper = "_resizeWrapper_4rmz8_124";
4977
+ const pipContent = "_pipContent_4rmz8_129";
4978
+ const isOpen = "_isOpen_4rmz8_142";
4979
+ const container = "_container_4rmz8_149";
4980
+ const chat = "_chat_4rmz8_158";
4667
4981
  const style0 = {
4668
4982
  resizeWrapper,
4669
4983
  pipContent,
@@ -4680,7 +4994,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4680
4994
  setup(__props) {
4681
4995
  const { isNewLogsEnabled } = useSettingsStore();
4682
4996
  return (_ctx, _cache) => {
4683
- const _component_CanvasChat = __unplugin_components_0;
4997
+ const _component_CanvasChat = __unplugin_components_0$1;
4684
4998
  return unref(isNewLogsEnabled) ? (openBlock(), createBlock(LogsPanel, { key: 0 })) : (openBlock(), createBlock(_component_CanvasChat, { key: 1 }));
4685
4999
  };
4686
5000
  }