n8n-editor-ui 1.97.1 → 1.98.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 (127) hide show
  1. package/dist/assets/{AnimatedSpinner-15ZZp0OO.js → AnimatedSpinner-CeafaU8r.js} +1 -1
  2. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CrF4ktlo.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-B6tcMuMJ.js} +1 -1
  3. package/dist/assets/{AuthView-64US-Z-m.js → AuthView-DcxHdw3B.js} +2 -2
  4. package/dist/assets/{CanvasChatSwitch-CaiSjHFG.css → AuthView-jgkkdJYL.css} +29 -90
  5. package/dist/assets/{ChangePasswordView-Y_vO8rQ4.js → ChangePasswordView-C-_Y-Wdn.js} +3 -3
  6. package/dist/assets/CollectionParameter-Dal7qnlG.js +4 -0
  7. package/dist/assets/{CredentialsView-B90NtMag.js → CredentialsView-B4AQUpNx.js} +7 -7
  8. package/dist/assets/DemoFooter-DV5GQmvM.js +22 -0
  9. package/dist/assets/{ErrorView-B5-OZKdh.js → ErrorView-OKh_lVSY.js} +1 -1
  10. package/dist/assets/{EvaluationsRootView-6cGJTYGC.js → EvaluationsRootView-D2dmekKB.js} +25 -18
  11. package/dist/assets/{EvaluationsView-DkIkcLrr.js → EvaluationsView-CKUqX-AI.js} +3 -3
  12. package/dist/assets/{ExecutionsTime--_6xBkkx.css → ExecutionsTime-BDLkVZem.css} +25 -17
  13. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-hCFNZKpq.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-C-Hx4KA-.js} +52 -15
  14. package/dist/assets/{ExecutionsView-cA-SzEOo.js → ExecutionsView-WztTT6H6.js} +8 -8
  15. package/dist/assets/{FileSaver.min-Bv-Q_h7m.js → FileSaver.min-sGd5mes-.js} +1 -1
  16. package/dist/assets/{FixedCollectionParameter-3cfdvUwK.js → FixedCollectionParameter-Cn2WDdQw.js} +2 -2
  17. package/dist/assets/{FixedCollectionParameter-CgLfAVkQ.css → FixedCollectionParameter-DjlaZyUQ.css} +18 -18
  18. package/dist/assets/{ForgotMyPasswordView-Cv7uhij6.js → ForgotMyPasswordView-DxQoCGIP.js} +3 -3
  19. package/dist/assets/{InsightsChartAverageRuntime-Cr7taDDn.js → InsightsChartAverageRuntime-CB5N_io5.js} +4 -4
  20. package/dist/assets/{InsightsChartFailed-Cm5FrmfQ.js → InsightsChartFailed-Y-mbC7CD.js} +4 -4
  21. package/dist/assets/{InsightsChartFailureRate-Ci-cBou0.js → InsightsChartFailureRate-6zPSfC-G.js} +4 -4
  22. package/dist/assets/{InsightsChartTimeSaved-CMBBA9I4.js → InsightsChartTimeSaved-Bih3Ry4R.js} +4 -4
  23. package/dist/assets/{InsightsChartTotal-Dxn2bjBB.js → InsightsChartTotal-N-9xWBIy.js} +4 -4
  24. package/dist/assets/{InsightsDashboard-BvqZMhnh.js → InsightsDashboard-DN5PbVTp.js} +10 -10
  25. package/dist/assets/{InsightsPaywall-4Vl-4bws.js → InsightsPaywall-CV34iKyQ.js} +1 -1
  26. package/dist/assets/{InsightsSummary-CTzqNpAf.js → InsightsSummary-b-sHA8wL.js} +1 -1
  27. package/dist/assets/{InsightsTableWorkflows-DgCECSSh.js → InsightsTableWorkflows-Cz3GFggF.js} +2 -2
  28. package/dist/assets/{Logo-B8GIjJ79.js → Logo-CTlaJzVH.js} +1 -1
  29. package/dist/assets/{LogsPanel-D7j-yJQx.css → LogsPanel-DVSP-ORT.css} +896 -896
  30. package/dist/assets/{LogsPanel-CsNXIuce.js → LogsPanel-Dfj2Ol1s.js} +4768 -4594
  31. package/dist/assets/{MainHeader-B2RGao3U.js → MainHeader-BHGtRsRJ.js} +84 -94
  32. package/dist/assets/{MainHeader-CGwvFs2B.css → MainHeader-BRl77CT3.css} +27 -26
  33. package/dist/assets/{MainSidebar-E0ePOcg-.js → MainSidebar-BGXtPjO-.js} +32 -20
  34. package/dist/assets/{NodeCreation-B6jElzI2.js → NodeCreation-DfKAwFJq.js} +3 -3
  35. package/dist/assets/{NodeCreator-Bd2BI_OU.js → NodeCreator-D1mNPRWq.js} +20 -5
  36. package/dist/assets/{NodeDetailsView-BLMLHNQw.js → NodeDetailsView-DIo1g1iE.js} +628 -2203
  37. package/dist/assets/{NodeDetailsView-6JHPI3t-.css → NodeDetailsView-DWA1ZgwG.css} +349 -1000
  38. package/dist/assets/{NodeView-C4qNUqxt.js → NodeView-CFUh-L67.js} +2817 -548
  39. package/dist/assets/{NodeView-BdvXMmMp.css → NodeView-Duifly4c.css} +1274 -32
  40. package/dist/assets/{ProjectCardBadge-be4FNX6y.js → ProjectCardBadge-CWPzWiZa.js} +1 -1
  41. package/dist/assets/{ProjectHeader-CsHp0dpi.js → ProjectHeader-Ddqs2fwN.js} +2 -2
  42. package/dist/assets/{ProjectSettings-BgunHp-2.css → ProjectSettings-8tvaQJye.css} +9 -10
  43. package/dist/assets/{ProjectSettings-t5UigWKy.js → ProjectSettings-DFwkW9xy.js} +9 -9
  44. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-Dpfsxn-o.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-CTSX9GvK.js} +1 -1
  45. package/dist/assets/{ResourcesListLayout-DLThke_K.js → ResourcesListLayout-DZR7Zzzo.js} +2 -2
  46. package/dist/assets/{RunData-XsmLcFYS.css → RunData-B5_okvCv.css} +205 -205
  47. package/dist/assets/{RunData-u5uBr_cv.js → RunData-D_KDVdF4.js} +1085 -1632
  48. package/dist/assets/{RunDataJson-CeZYY8D_.js → RunDataJson-LDc1ImEr.js} +6 -6
  49. package/dist/assets/{RunDataJsonActions-BRAsiSnM.js → RunDataJsonActions-DH83rAfY.js} +1 -1
  50. package/dist/assets/{RunDataParsedAiContent-C1lte0Et.js → RunDataParsedAiContent-BU8uoK2N.js} +4 -4
  51. package/dist/assets/{RunDataSearch-BP_FSk35.js → RunDataSearch-DGVpnOkl.js} +1 -1
  52. package/dist/assets/{RunDataTable-CQghTfxP.js → RunDataTable-CSRGOCHh.js} +2 -2
  53. package/dist/assets/{SamlOnboarding-CWTnplHM.js → SamlOnboarding-CQ4b1hlf.js} +3 -3
  54. package/dist/assets/{SettingsApiView-BskWDsE-.js → SettingsApiView-DHQc2KYI.js} +1 -1
  55. package/dist/assets/{SettingsCommunityNodesView-JUjLtmC0.js → SettingsCommunityNodesView-C9utcS3k.js} +4 -4
  56. package/dist/assets/{SettingsExternalSecrets-BOJ40YuL.js → SettingsExternalSecrets-DcD2lv4W.js} +1 -1
  57. package/dist/assets/{SettingsLdapView-CT-V5pbv.js → SettingsLdapView-DiL_dbfx.js} +1 -1
  58. package/dist/assets/{SettingsLogStreamingView-_G1aTzAD.js → SettingsLogStreamingView-CN_D-m7S.js} +1 -1
  59. package/dist/assets/{SettingsPersonalView-CwV8ImYG.css → SettingsPersonalView-Bt8bL5tJ.css} +19 -15
  60. package/dist/assets/{SettingsPersonalView-BzzZLVh4.js → SettingsPersonalView-DutmrxU7.js} +58 -10
  61. package/dist/assets/{SettingsSourceControl-Bte_2m43.js → SettingsSourceControl-DeBjBqNW.js} +2 -2
  62. package/dist/assets/{SettingsSso-Di8rSq_x.js → SettingsSso-xIee31bc.js} +1 -1
  63. package/dist/assets/{SettingsUsageAndPlan-CwaYHjbQ.js → SettingsUsageAndPlan-Dv-wky39.js} +1 -1
  64. package/dist/assets/{SettingsUsersView-DQbemH_k.js → SettingsUsersView-JfPgtJEV.js} +1 -1
  65. package/dist/assets/{SettingsView-DhqdV7_S.js → SettingsView-CHu8eepA.js} +1 -1
  66. package/dist/assets/{SetupView-BOZr75Am.js → SetupView-UIS9B4wr.js} +3 -3
  67. package/dist/assets/{SetupWorkflowCredentialsButton-DFtZhM9C.js → SetupWorkflowCredentialsButton-Bs2dYq3b.js} +1 -1
  68. package/dist/assets/{SetupWorkflowFromTemplateView-CTMDcuGm.js → SetupWorkflowFromTemplateView-BTFARopX.js} +3 -3
  69. package/dist/assets/{SigninView-DY-vQ0LU.js → SigninView-B1eEz_t4.js} +12 -4
  70. package/dist/assets/{SignoutView-B8rfrg6C.js → SignoutView-CV1Qsb3z.js} +1 -1
  71. package/dist/assets/{SignupView-BxrYV76w.js → SignupView-C2cyiw-C.js} +3 -3
  72. package/dist/assets/{TemplateDetails-DVQ2nLZj.js → TemplateDetails-MawFSspH.js} +1 -1
  73. package/dist/assets/{TemplateList-DPouUB38.js → TemplateList-AnYGr5-6.js} +1 -1
  74. package/dist/assets/{TemplatesCollectionView-O7noND46.js → TemplatesCollectionView-xd0kx-UE.js} +5 -5
  75. package/dist/assets/{TemplatesSearchView-Bg5DxRv0.js → TemplatesSearchView-ngTSHAkQ.js} +30 -3
  76. package/dist/assets/{TemplatesView-BnzdRWmO.js → TemplatesView-BAX6LGxX.js} +1 -1
  77. package/dist/assets/{TemplatesWorkflowView-B_6tDGsp.js → TemplatesWorkflowView-DGd4xJ_J.js} +5 -5
  78. package/dist/assets/{VariablesView-BrzvF0ZW.css → VariablesView-2BSJPXRB.css} +5 -5
  79. package/dist/assets/{VariablesView-DzrhNxAe.js → VariablesView-CwEnfQxV.js} +5 -5
  80. package/dist/assets/{WorkerView-CC1X8IeJ.js → WorkerView-DtXiHaTA.js} +6 -6
  81. package/dist/assets/{WorkflowExecutionsPreview-D7jTJ8GL.css → WorkflowActivator-C0R6Yly0.css} +162 -160
  82. package/dist/assets/{WorkflowActivator-C30ojCUO.js → WorkflowActivator-CLLu_k_M.js} +14 -261
  83. package/dist/assets/{WorkflowExecutionsInfoAccordion-XaZEx8v7.js → WorkflowExecutionsInfoAccordion-vFGtC4-o.js} +3 -3
  84. package/dist/assets/{WorkflowExecutionsLandingPage-8aAYw87x.js → WorkflowExecutionsLandingPage-Dp7WJMF0.js} +2 -2
  85. package/dist/assets/WorkflowExecutionsPreview-BgpOEXPG.css +711 -0
  86. package/dist/assets/WorkflowExecutionsPreview-w7h7YCEJ.js +812 -0
  87. package/dist/assets/{WorkflowExecutionsView-DR67gC3V.js → WorkflowExecutionsView-BzKlwTMm.js} +8 -9
  88. package/dist/assets/{WorkflowExecutionsView-CZziPgtr.css → WorkflowExecutionsView-_l8AgWIb.css} +2 -2
  89. package/dist/assets/{WorkflowHistory-eAJEV9yu.js → WorkflowHistory-CT3kO5Sn.js} +18 -18
  90. package/dist/assets/{WorkflowOnboardingView-BjyAt8Oq.js → WorkflowOnboardingView-C3gpu3_i.js} +1 -1
  91. package/dist/assets/{WorkflowPreview-BxWA_Uiv.js → WorkflowPreview-BZm3MTEb.js} +1 -1
  92. package/dist/assets/{WorkflowsView-iKkH1nVB.js → WorkflowsView-4eqdgz9H.js} +46 -50
  93. package/dist/assets/{WorkflowsView-CQvTAWQ0.css → WorkflowsView-meCWhW8Y.css} +21 -20
  94. package/dist/assets/canvas-C0_KeJmQ.js +5 -0
  95. package/dist/assets/{chartjs.utils-CC0SyVUG.js → chartjs.utils-Bv6lUve-.js} +2 -2
  96. package/dist/assets/{easyAiWorkflowUtils-H7-jyGZy.js → easyAiWorkflowUtils-DRIGIHJ7.js} +1 -1
  97. package/dist/assets/{en-D5Q1-BWp.js → en-BcWgUFsO.js} +17 -4
  98. package/dist/assets/{global-link-actions-zn0GER90.js → global-link-actions-BF0Tj_I9.js} +1 -1
  99. package/dist/assets/{import-curl-D7BhanPS.js → import-curl-DsHxi7kp.js} +1 -1
  100. package/dist/assets/{index-B4xpaMaK.css → index-B-xWz5mo.css} +418 -370
  101. package/dist/assets/{index-HDYArLT1.js → index-Bpsc-Tmx.js} +58887 -67576
  102. package/dist/assets/{index-CAyQE60i.js → index-DHKtGXZ1.js} +1 -1
  103. package/dist/assets/pickBy-DIPqytvl.js +27 -0
  104. package/dist/assets/{polyfills-J2x06Gdp.js → polyfills-deFGRMT9.js} +0 -44
  105. package/dist/assets/{templateActions-CxINaftd.js → templateActions-qdbZojQ1.js} +1 -1
  106. package/dist/assets/{useBeforeUnload-DkY263Ue.js → useBeforeUnload-B2awFcaP.js} +1 -1
  107. package/dist/assets/{useExecutionDebugging-BrUGp6HK.js → useExecutionDebugging-CYIymPhg.js} +1 -1
  108. package/dist/assets/{useExecutionHelpers-Dulw8xCc.js → useExecutionHelpers-nG7T98Lv.js} +1 -1
  109. package/dist/assets/{useImportCurlCommand-CjFFwjFi.js → useImportCurlCommand-DVjZNYjv.js} +2 -2
  110. package/dist/assets/{useProjectPages-DGU7KQ6y.js → useProjectPages-p-uBP4T5.js} +1 -1
  111. package/dist/assets/{usePushConnection-4FO744xJ.js → usePushConnection-B7DMiByn.js} +22 -23
  112. package/dist/assets/{useWorkflowActivate-CUShgia-.js → useWorkflowActivate-CNqz_pHl.js} +4 -3
  113. package/dist/index.html +3 -3
  114. package/package.json +1 -1
  115. package/tsconfig.json +9 -1
  116. package/vite.config.mts +10 -2
  117. package/dist/assets/AuthView-D4i2WDPk.css +0 -408
  118. package/dist/assets/CanvasChatSwitch-D1N7Xp_1.js +0 -275
  119. package/dist/assets/CollectionParameter-DOqrZmRA.js +0 -4
  120. package/dist/assets/DemoFooter-DpmRLCPd.js +0 -23
  121. package/dist/assets/RunDataAi-D9VLFXIf.css +0 -443
  122. package/dist/assets/RunDataAi-DZzXTVdi.js +0 -466
  123. package/dist/assets/WorkflowActivator-CL2wacc7.css +0 -1084
  124. package/dist/assets/WorkflowExecutionsPreview-CpAsFXP1.js +0 -683
  125. package/dist/assets/canvas-BzAUJmlt.js +0 -24
  126. package/dist/assets/pickBy-2p7dSPXv.js +0 -16
  127. package/dist/assets/useWorkflowSaving-oozcXWTy.js +0 -66
@@ -1,7 +1,7 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RunDataTable-CQghTfxP.js","assets/index-HDYArLT1.js","assets/index-B4xpaMaK.css","assets/useExecutionHelpers-Dulw8xCc.js","assets/RunDataTable-CUxj7dHx.css","assets/RunDataJson-CeZYY8D_.js","assets/FileSaver.min-Bv-Q_h7m.js","assets/RunDataJson-BH9HLoGC.css","assets/RunDataParsedAiContent-C1lte0Et.js","assets/RunDataParsedAiContent-9EEUzCKp.css","assets/RunDataSearch-BP_FSk35.js","assets/RunDataSearch-R6qtl0Jf.css"])))=>i.map(i=>d[i]);
2
- import { eZ as hasKey, cb as getDefaultExportFromCjs, d as defineComponent, r as ref, e_ as MarkdownIt, q as computed, aq as h, b2 as isRef, e$ as isReactive, f0 as isProxy, er as toRaw, f1 as AGENT_LANGCHAIN_NODE_TYPE, bg as useClipboard, a as useToast, f2 as useAIAssistantHelpers, bz as useNodeTypesStore, as as useNDVStore, Z as useRootStore, eN as useAssistantStore, H as useUIStore, f3 as MAX_DISPLAY_DATA_SIZE, eP as isCommunityPackageName, c as useI18n, h as resolveComponent, bN as resolveDirective, i as createElementBlock, g as openBlock, n as normalizeClass, k as createBaseVNode, f as createCommentVNode, aA as withDirectives, t as toDisplayString, j as createVNode, m as unref, f4 as InlineAskAssistantButton, w as withCtx, aT as _sfc_main$b, l as createTextVNode, F as Fragment, D as renderList, f5 as NEW_ASSISTANT_SESSION_MODAL, cT as sanitizeHtml, by as NodeConnectionTypes, f6 as isObjectEmpty, bf as N8nText, b3 as withModifiers, _ as _export_sfc, f7 as requireVue, f8 as sanitizeHtml$1, f9 as sanitizeHtmlExports, Q as useWorkflowsStore, o as onMounted, dd as jsonParse, e as createBlock, bA as useNodeHelpers, aR as N8nTooltip, aS as N8nLink, X as watch, bM as N8nRadioButtons, aV as createSlots, bJ as N8nIcon, a0 as useSourceControlStore, eO as useSchemaPreviewStore, R as useRoute, bL as toRef, bl as usePinnedData, fa as useNodeType, e1 as storeToRefs, fb as TRIMMED_TASK_DATA_CONNECTIONS_KEY, fc as executionDataToJson, fd as NODE_TYPES_EXCLUDED_FROM_OUTPUT_NAME_APPEND, fe as CORE_NODES_CATEGORY, ff as computedAsync, bW as ndvEventBus, ag as useTelemetry, y as onBeforeUnmount, aJ as useStorage, fg as LOCAL_STORAGE_PIN_DATA_DISCOVERY_NDV_FLAG, fh as dataPinningEventBus, fi as LOCAL_STORAGE_PIN_DATA_DISCOVERY_CANVAS_FLAG, fj as searchInObject, bw as getConnectionTypes, fk as isObject, fl as MAX_DISPLAY_DATA_SIZE_SCHEMA_VIEW, fm as HTML_NODE_TYPE, x as renderSlot, dl as N8nCallout, fn as DATA_PINNING_DOCS_URL, aB as vShow, cN as Suspense, dk as defineAsyncComponent, b5 as normalizeProps, b8 as mergeProps, bh as N8nButton, fo as _sfc_main$c, fp as N8nSelect, fq as N8nTabs, b6 as guardReactiveProps, fr as _sfc_main$d, fs as JsonEditor, ft as DATA_EDITING_DOCS_URL, eB as InfoTip, fu as N8nBlockUi, ao as __vitePreload, c6 as isPresent, bx as getNodeOutputs, fv as getGenericHints, fw as clearJsonKey, fx as TEST_PIN_DATA, aP as useExternalHooks, fy as isEmpty, cK as isEqual } from "./index-HDYArLT1.js";
3
- import { F as FileSaver_minExports } from "./FileSaver.min-Bv-Q_h7m.js";
4
- import { u as useExecutionHelpers } from "./useExecutionHelpers-Dulw8xCc.js";
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RunDataTable-CSRGOCHh.js","assets/index-Bpsc-Tmx.js","assets/index-B-xWz5mo.css","assets/useExecutionHelpers-nG7T98Lv.js","assets/RunDataTable-CUxj7dHx.css","assets/RunDataJson-LDc1ImEr.js","assets/FileSaver.min-sGd5mes-.js","assets/RunDataJson-BH9HLoGC.css","assets/RunDataParsedAiContent-BU8uoK2N.js","assets/RunDataParsedAiContent-9EEUzCKp.css","assets/RunDataSearch-DGVpnOkl.js","assets/RunDataSearch-R6qtl0Jf.css"])))=>i.map(i=>d[i]);
2
+ import { fF as hasKey, d as defineComponent, i as createElementBlock, g as openBlock, j as createVNode, k as createBaseVNode, m as unref, br as N8nText, w as withCtx, l as createTextVNode, t as toDisplayString, c as useI18n, bv as formatTokenUsageCount, bw as getDefaultExportFromCjs, r as ref, fG as MarkdownIt, q as computed, au as h, fH as requireVue, fI as sanitizeHtml, fJ as sanitizeHtmlExports, _ as _export_sfc, P as useWorkflowsStore, o as onMounted, e2 as jsonParse, fK as base64DecodeUTF8, e as createBlock, n as normalizeClass, bn as useNodeHelpers, h as resolveComponent, f as createCommentVNode, bB as withModifiers, bU as useClipboard, a as useToast, fL as useAIAssistantHelpers, bt as useNodeTypesStore, aw as useNDVStore, Y as useRootStore, fw as useAssistantStore, G as useUIStore, fM as MAX_DISPLAY_DATA_SIZE, cO as isCommunityPackageName, bV as resolveDirective, aE as withDirectives, fN as InlineAskAssistantButton, aX as _sfc_main$b, F as Fragment, C as renderList, fO as NEW_ASSISTANT_SESSION_MODAL, dK as sanitizeHtml$1, aV as N8nTooltip, aW as N8nLink, W as watch, bJ as N8nRadioButtons, aZ as createSlots, bE as N8nIcon, $ as useSourceControlStore, fx as useSchemaPreviewStore, Q as useRoute, bH as toRef, bl as usePinnedData, fP as useNodeType, eL as storeToRefs, fQ as TRIMMED_TASK_DATA_CONNECTIONS_KEY, bb as NodeConnectionTypes, fR as executionDataToJson, fS as NODE_TYPES_EXCLUDED_FROM_OUTPUT_NAME_APPEND, fT as CORE_NODES_CATEGORY, fU as computedAsync, fV as parseAiContent, c9 as ndvEventBus, ai as useTelemetry, v as onBeforeUnmount, aN as useStorage, fW as LOCAL_STORAGE_PIN_DATA_DISCOVERY_NDV_FLAG, fX as dataPinningEventBus, fY as LOCAL_STORAGE_PIN_DATA_DISCOVERY_CANVAS_FLAG, fZ as searchInObject, d9 as getConnectionTypes, f_ as isObject, f$ as MAX_DISPLAY_DATA_SIZE_SCHEMA_VIEW, g0 as HTML_NODE_TYPE, x as renderSlot, e9 as N8nCallout, g1 as DATA_PINNING_DOCS_URL, aF as vShow, dD as Suspense, e8 as defineAsyncComponent, bM as normalizeProps, bI as mergeProps, bF as N8nButton, g2 as N8nSelect, g3 as _sfc_main$c, g4 as N8nTabs, bN as guardReactiveProps, g5 as _sfc_main$d, g6 as JsonEditor, fj as InfoTip, g7 as DATA_EDITING_DOCS_URL, g8 as N8nBlockUi, as as __vitePreload, dI as getNodeOutputs, g9 as getGenericHints, ga as clearJsonKey, gb as TEST_PIN_DATA, aT as useExternalHooks, cl as isPresent, gc as isEmpty, d3 as isEqual } from "./index-Bpsc-Tmx.js";
3
+ import { F as FileSaver_minExports } from "./FileSaver.min-sGd5mes-.js";
4
+ import { u as useExecutionHelpers } from "./useExecutionHelpers-nG7T98Lv.js";
5
5
  function responseHasSubworkflowData(response) {
6
6
  return ["executionId", "workflowId"].every(
7
7
  (x) => hasKey(response, x) && typeof response[x] === "string"
@@ -43,6 +43,46 @@ const ViewableMimeTypes = [
43
43
  "video/ogg",
44
44
  "video/webm"
45
45
  ];
46
+ const _sfc_main$a = /* @__PURE__ */ defineComponent({
47
+ __name: "ConsumedTokensDetails",
48
+ props: {
49
+ consumedTokens: {}
50
+ },
51
+ setup(__props) {
52
+ const i18n = useI18n();
53
+ return (_ctx, _cache) => {
54
+ return openBlock(), createElementBlock("div", null, [
55
+ createVNode(unref(N8nText), {
56
+ bold: true,
57
+ size: "small"
58
+ }, {
59
+ default: withCtx(() => [
60
+ createTextVNode(toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens.prompt")) + " " + toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens", {
61
+ interpolate: {
62
+ count: unref(formatTokenUsageCount)(_ctx.consumedTokens, "prompt")
63
+ }
64
+ })), 1)
65
+ ]),
66
+ _: 1
67
+ }),
68
+ _cache[0] || (_cache[0] = createBaseVNode("br", null, null, -1)),
69
+ createVNode(unref(N8nText), {
70
+ bold: true,
71
+ size: "small"
72
+ }, {
73
+ default: withCtx(() => [
74
+ createTextVNode(toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens.completion")) + " " + toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens", {
75
+ interpolate: {
76
+ count: unref(formatTokenUsageCount)(_ctx.consumedTokens, "completion")
77
+ }
78
+ })), 1)
79
+ ]),
80
+ _: 1
81
+ })
82
+ ]);
83
+ };
84
+ }
85
+ });
46
86
  var core;
47
87
  var hasRequiredCore;
48
88
  function requireCore() {
@@ -1608,1286 +1648,45 @@ const VueMarkdown = defineComponent({
1608
1648
  return () => h("div", { innerHTML: content.value });
1609
1649
  }
1610
1650
  });
1611
- function createNode(parent, nodeName, currentDepth, runIndex, r, children = []) {
1612
- return {
1613
- parent,
1614
- node: nodeName,
1615
- id: `${nodeName}:${runIndex}`,
1616
- depth: currentDepth,
1617
- startTime: r?.data?.metadata?.startTime ?? 0,
1618
- runIndex,
1619
- children,
1620
- consumedTokens: getConsumedTokens(r?.data)
1621
- };
1622
- }
1623
- function getTreeNodeData(nodeName, workflow, aiData, runIndex) {
1624
- return getTreeNodeDataRec(void 0, nodeName, 0, workflow, aiData, runIndex);
1625
- }
1626
- function getTreeNodeDataRec(parent, nodeName, currentDepth, workflow, aiData, runIndex) {
1627
- const connections = workflow.connectionsByDestinationNode[nodeName];
1628
- const resultData = aiData?.filter(
1629
- (data) => data.node === nodeName && (runIndex === void 0 || runIndex === data.runIndex)
1630
- ) ?? [];
1631
- if (!connections) {
1632
- return resultData.map((d) => createNode(parent, nodeName, currentDepth, d.runIndex, d));
1633
- }
1634
- const filteredAiData = currentDepth === 0 ? aiData?.filter(({ data }) => {
1635
- if (!data?.source || data.source.every((source) => source === null)) {
1636
- return true;
1637
- }
1638
- return data.source.some(
1639
- (source) => source?.previousNode === nodeName && (runIndex === void 0 || source.previousNodeRun === runIndex)
1640
- );
1641
- }) : aiData;
1642
- const connectedSubNodes = workflow.getParentNodes(nodeName, "ALL_NON_MAIN", 1);
1643
- const treeNode = createNode(parent, nodeName, currentDepth, runIndex ?? 0);
1644
- const children = (filteredAiData ?? []).flatMap(
1645
- (data) => connectedSubNodes.includes(data.node) && (runIndex === void 0 || data.runIndex === runIndex) ? getTreeNodeDataRec(treeNode, data.node, currentDepth + 1, workflow, aiData, data.runIndex) : []
1646
- );
1647
- treeNode.children = children;
1648
- if (resultData.length) {
1649
- return resultData.map(
1650
- (r) => createNode(parent, nodeName, currentDepth, r.runIndex, r, children)
1651
- );
1652
- }
1653
- return [treeNode];
1654
- }
1655
- function createAiData(nodeName, workflow, getWorkflowResultDataByNodeName) {
1656
- return workflow.getParentNodes(nodeName, "ALL_NON_MAIN").flatMap(
1657
- (node) => (getWorkflowResultDataByNodeName(node) ?? []).map((task, index) => ({ node, task, index }))
1658
- ).sort((a, b) => {
1659
- if (a.task.executionIndex !== void 0 && b.task.executionIndex !== void 0) {
1660
- return a.task.executionIndex - b.task.executionIndex;
1661
- }
1662
- const aTime = a.task.startTime ?? 0;
1663
- const bTime = b.task.startTime ?? 0;
1664
- return aTime - bTime;
1665
- }).map(({ node, task, index }) => ({
1666
- data: getReferencedData(task, false)[0],
1667
- node,
1668
- runIndex: index
1669
- }));
1670
- }
1671
- function getReferencedData(taskData, withInput, withOutput) {
1672
- if (!taskData) {
1673
- return [];
1674
- }
1675
- const returnData = [];
1676
- function addFunction(data, inOut) {
1677
- if (!data) {
1678
- return;
1679
- }
1680
- Object.keys(data).map((type) => {
1681
- returnData.push({
1682
- data: data[type][0],
1683
- inOut,
1684
- type,
1685
- // Include source information in AI content to track which node triggered the execution
1686
- // This enables filtering in the UI to show only relevant executions
1687
- source: taskData.source,
1688
- metadata: {
1689
- executionTime: taskData.executionTime,
1690
- startTime: taskData.startTime,
1691
- subExecution: taskData.metadata?.subExecution
1651
+ var vueJsonPretty$1 = { exports: {} };
1652
+ var vueJsonPretty = vueJsonPretty$1.exports;
1653
+ var hasRequiredVueJsonPretty;
1654
+ function requireVueJsonPretty() {
1655
+ if (hasRequiredVueJsonPretty) return vueJsonPretty$1.exports;
1656
+ hasRequiredVueJsonPretty = 1;
1657
+ (function(module, exports) {
1658
+ !function(e, t) {
1659
+ module.exports = t(requireVue());
1660
+ }(vueJsonPretty, function(e) {
1661
+ return function() {
1662
+ var t = { 789: function(t2) {
1663
+ t2.exports = e;
1664
+ } }, n = {};
1665
+ function o(e2) {
1666
+ var r2 = n[e2];
1667
+ if (void 0 !== r2) return r2.exports;
1668
+ var l = n[e2] = { exports: {} };
1669
+ return t[e2](l, l.exports, o), l.exports;
1692
1670
  }
1693
- });
1694
- });
1695
- }
1696
- if (withInput) {
1697
- addFunction(taskData.inputOverride, "input");
1698
- }
1699
- {
1700
- addFunction(taskData.data, "output");
1701
- }
1702
- return returnData;
1703
- }
1704
- const emptyTokenUsageData = {
1705
- completionTokens: 0,
1706
- promptTokens: 0,
1707
- totalTokens: 0,
1708
- isEstimate: false
1709
- };
1710
- function addTokenUsageData(one, another) {
1711
- return {
1712
- completionTokens: one.completionTokens + another.completionTokens,
1713
- promptTokens: one.promptTokens + another.promptTokens,
1714
- totalTokens: one.totalTokens + another.totalTokens,
1715
- isEstimate: one.isEstimate || another.isEstimate
1716
- };
1717
- }
1718
- function getConsumedTokens(outputRun) {
1719
- if (!outputRun?.data) {
1720
- return emptyTokenUsageData;
1721
- }
1722
- const tokenUsage = outputRun.data.reduce(
1723
- (acc, curr) => {
1724
- const tokenUsageData = curr.json?.tokenUsage ?? curr.json?.tokenUsageEstimate;
1725
- if (!tokenUsageData) return acc;
1726
- return addTokenUsageData(acc, {
1727
- ...tokenUsageData,
1728
- isEstimate: !!curr.json.tokenUsageEstimate
1729
- });
1730
- },
1731
- emptyTokenUsageData
1732
- );
1733
- return tokenUsage;
1734
- }
1735
- function formatTokenUsageCount(usage, field) {
1736
- const count = field === "total" ? usage.totalTokens : field === "completion" ? usage.completionTokens : usage.promptTokens;
1737
- return usage.isEstimate ? `~${count}` : count.toLocaleString();
1738
- }
1739
- function getConsumedTokensV2(task) {
1740
- if (!task.data) {
1741
- return emptyTokenUsageData;
1742
- }
1743
- const tokenUsage = Object.values(task.data).flat().flat().reduce((acc, curr) => {
1744
- const tokenUsageData = curr?.json?.tokenUsage ?? curr?.json?.tokenUsageEstimate;
1745
- if (!tokenUsageData) return acc;
1746
- return addTokenUsageData(acc, {
1747
- ...tokenUsageData,
1748
- isEstimate: !!curr?.json.tokenUsageEstimate
1749
- });
1750
- }, emptyTokenUsageData);
1751
- return tokenUsage;
1752
- }
1753
- function createNodeV2(node, context, runIndex, runData, children = []) {
1754
- return {
1755
- parent: context.parent,
1756
- node,
1757
- id: `${context.workflow.id}:${node.name}:${context.executionId}:${runIndex}`,
1758
- depth: context.depth,
1759
- runIndex,
1760
- runData,
1761
- children,
1762
- consumedTokens: getConsumedTokensV2(runData),
1763
- workflow: context.workflow,
1764
- executionId: context.executionId,
1765
- execution: context.data
1766
- };
1767
- }
1768
- function getTreeNodeDataV2(nodeName, runData, runIndex, context) {
1769
- const node = context.workflow.getNode(nodeName);
1770
- return node ? getTreeNodeDataRecV2(node, runData, context, runIndex) : [];
1771
- }
1772
- function getChildNodes(treeNode, node, runIndex, context) {
1773
- if (hasSubExecution(treeNode)) {
1774
- const workflowId = treeNode.runData.metadata?.subExecution?.workflowId;
1775
- const executionId = treeNode.runData.metadata?.subExecution?.executionId;
1776
- const workflow = workflowId ? context.workflows[workflowId] : void 0;
1777
- const subWorkflowRunData = executionId ? context.subWorkflowData[executionId] : void 0;
1778
- if (!workflow || !subWorkflowRunData || !executionId) {
1779
- return [];
1780
- }
1781
- return createLogTreeRec({
1782
- ...context,
1783
- parent: treeNode,
1784
- depth: context.depth + 1,
1785
- workflow,
1786
- executionId,
1787
- data: subWorkflowRunData
1788
- });
1789
- }
1790
- const connectedSubNodes = context.workflow.getParentNodes(node.name, "ALL_NON_MAIN", 1);
1791
- const isExecutionRoot = treeNode.parent === void 0 || treeNode.executionId !== treeNode.parent.executionId;
1792
- return connectedSubNodes.flatMap(
1793
- (subNodeName) => (context.data.resultData.runData[subNodeName] ?? []).flatMap((t, index) => {
1794
- const isMatched = isExecutionRoot && t.source.some((source) => source !== null) ? t.source.some(
1795
- (source) => source?.previousNode === node.name && (runIndex === void 0 || source.previousNodeRun === runIndex)
1796
- ) : runIndex === void 0 || index === runIndex;
1797
- if (!isMatched) {
1798
- return [];
1799
- }
1800
- const subNode = context.workflow.getNode(subNodeName);
1801
- return subNode ? getTreeNodeDataRecV2(
1802
- subNode,
1803
- t,
1804
- { ...context, depth: context.depth + 1, parent: treeNode },
1805
- index
1806
- ) : [];
1807
- })
1808
- );
1809
- }
1810
- function getTreeNodeDataRecV2(node, runData, context, runIndex) {
1811
- const treeNode = createNodeV2(node, context, runIndex ?? 0, runData);
1812
- const children = getChildNodes(treeNode, node, runIndex, context).sort(sortLogEntries);
1813
- treeNode.children = children;
1814
- return [treeNode];
1815
- }
1816
- function getTotalConsumedTokens(...usage) {
1817
- return usage.reduce(addTokenUsageData, emptyTokenUsageData);
1818
- }
1819
- function getSubtreeTotalConsumedTokens(treeNode, includeSubWorkflow) {
1820
- const executionId = treeNode.executionId;
1821
- function calculate(currentNode) {
1822
- if (!includeSubWorkflow && currentNode.executionId !== executionId) {
1823
- return emptyTokenUsageData;
1824
- }
1825
- return getTotalConsumedTokens(
1826
- currentNode.consumedTokens,
1827
- ...currentNode.children.map(calculate)
1828
- );
1829
- }
1830
- return calculate(treeNode);
1831
- }
1832
- function findLogEntryToAutoSelectRec(subTree, depth) {
1833
- for (const entry of subTree) {
1834
- if (entry.runData?.error) {
1835
- return entry;
1836
- }
1837
- const childAutoSelect = findLogEntryToAutoSelectRec(entry.children, depth + 1);
1838
- if (childAutoSelect) {
1839
- return childAutoSelect;
1840
- }
1841
- if (entry.node.type === AGENT_LANGCHAIN_NODE_TYPE) {
1842
- return entry;
1843
- }
1844
- }
1845
- return depth === 0 ? subTree[0] : void 0;
1846
- }
1847
- function createLogTree(workflow, response, workflows = {}, subWorkflowData = {}) {
1848
- return createLogTreeRec({
1849
- parent: void 0,
1850
- depth: 0,
1851
- executionId: response.id,
1852
- workflow,
1853
- workflows,
1854
- data: response.data ?? { resultData: { runData: {} } },
1855
- subWorkflowData
1856
- });
1857
- }
1858
- function createLogTreeRec(context) {
1859
- const runs = Object.entries(context.data.resultData.runData).flatMap(
1860
- ([nodeName, taskData]) => context.workflow.getChildNodes(nodeName, "ALL_NON_MAIN").length > 0 || context.workflow.getNode(nodeName)?.disabled ? [] : taskData.map((task, runIndex) => ({
1861
- nodeName,
1862
- runData: task,
1863
- runIndex,
1864
- nodeHasMultipleRuns: taskData.length > 1
1865
- }))
1866
- ).sort(sortLogEntries);
1867
- return runs.flatMap(
1868
- ({ nodeName, runIndex, runData, nodeHasMultipleRuns }) => getTreeNodeDataV2(nodeName, runData, nodeHasMultipleRuns ? runIndex : void 0, context)
1869
- );
1870
- }
1871
- function findLogEntryRec(isMatched, entries) {
1872
- for (const entry of entries) {
1873
- if (isMatched(entry)) {
1874
- return entry;
1875
- }
1876
- const child = findLogEntryRec(isMatched, entry.children);
1877
- if (child) {
1878
- return child;
1879
- }
1880
- }
1881
- return void 0;
1882
- }
1883
- function findSelectedLogEntry(selection, entries) {
1884
- switch (selection.type) {
1885
- case "initial":
1886
- return findLogEntryToAutoSelectRec(entries, 0);
1887
- case "none":
1888
- return void 0;
1889
- case "selected": {
1890
- const entry = findLogEntryRec((e) => e.id === selection.id, entries);
1891
- if (entry) {
1892
- return entry;
1893
- }
1894
- return findLogEntryToAutoSelectRec(entries, 0);
1895
- }
1896
- }
1897
- }
1898
- function deepToRaw(sourceObj) {
1899
- const seen = /* @__PURE__ */ new WeakMap();
1900
- const objectIterator = (input) => {
1901
- if (seen.has(input)) {
1902
- return input;
1903
- }
1904
- if (input !== null && typeof input === "object") {
1905
- seen.set(input, true);
1906
- }
1907
- if (Array.isArray(input)) {
1908
- return input.map((item) => objectIterator(item));
1909
- }
1910
- if (isRef(input) || isReactive(input) || isProxy(input)) {
1911
- return objectIterator(toRaw(input));
1912
- }
1913
- if (input !== null && typeof input === "object" && Object.getPrototypeOf(input) === Object.prototype) {
1914
- return Object.keys(input).reduce((acc, key) => {
1915
- acc[key] = objectIterator(input[key]);
1916
- return acc;
1917
- }, {});
1918
- }
1919
- return input;
1920
- };
1921
- return objectIterator(sourceObj);
1922
- }
1923
- function flattenLogEntries(entries, collapsedEntryIds, ret = []) {
1924
- for (const entry of entries) {
1925
- ret.push(entry);
1926
- if (!collapsedEntryIds[entry.id]) {
1927
- flattenLogEntries(entry.children, collapsedEntryIds, ret);
1928
- }
1929
- }
1930
- return ret;
1931
- }
1932
- function getEntryAtRelativeIndex(entries, id, relativeIndex) {
1933
- const offset = entries.findIndex((e) => e.id === id);
1934
- return offset === -1 ? void 0 : entries[offset + relativeIndex];
1935
- }
1936
- function sortLogEntries(a, b) {
1937
- if (a.runData.startTime === b.runData.startTime) {
1938
- return a.runData.executionIndex - b.runData.executionIndex;
1939
- }
1940
- return a.runData.startTime - b.runData.startTime;
1941
- }
1942
- function mergeStartData(startData, response) {
1943
- if (!response.data) {
1944
- return response;
1945
- }
1946
- const nodeNames = [
1947
- ...new Set(
1948
- Object.keys(startData).concat(Object.keys(response.data.resultData.runData))
1949
- ).values()
1950
- ];
1951
- const runData = Object.fromEntries(
1952
- nodeNames.map((nodeName) => {
1953
- const tasks = response.data?.resultData.runData[nodeName] ?? [];
1954
- const mergedTasks = tasks.concat(
1955
- (startData[nodeName] ?? []).filter(
1956
- (task) => (
1957
- // To remove duplicate runs, we check start time in addition to execution index
1958
- // because nodes such as Wait and Form emits multiple websocket events with
1959
- // different execution index for a single run
1960
- tasks.every(
1961
- (t) => t.startTime < task.startTime && t.executionIndex !== task.executionIndex
1962
- )
1963
- )
1964
- ).map((task) => ({
1965
- ...task,
1966
- executionTime: 0,
1967
- executionStatus: "running"
1968
- }))
1969
- );
1970
- return [nodeName, mergedTasks];
1971
- })
1972
- );
1973
- return {
1974
- ...response,
1975
- data: {
1976
- ...response.data,
1977
- resultData: {
1978
- ...response.data.resultData,
1979
- runData
1980
- }
1981
- }
1982
- };
1983
- }
1984
- function hasSubExecution(entry) {
1985
- return !!entry.runData.metadata?.subExecution;
1986
- }
1987
- function getDepth(entry) {
1988
- let depth = 0;
1989
- let currentEntry = entry;
1990
- while (currentEntry.parent !== void 0) {
1991
- currentEntry = currentEntry.parent;
1992
- depth++;
1993
- }
1994
- return depth;
1995
- }
1996
- const _hoisted_1$8 = { class: "node-error-view__header" };
1997
- const _hoisted_2$4 = {
1998
- class: "node-error-view__header-message",
1999
- "data-test-id": "node-error-message"
2000
- };
2001
- const _hoisted_3$3 = {
2002
- key: 0,
2003
- "data-test-id": "node-error-description",
2004
- class: "node-error-view__header-description"
2005
- };
2006
- const _hoisted_4$3 = { key: 1 };
2007
- const _hoisted_5$3 = {
2008
- key: 2,
2009
- class: "node-error-view__button",
2010
- "data-test-id": "node-error-view-ask-assistant-button"
2011
- };
2012
- const _hoisted_6$2 = {
2013
- key: 0,
2014
- class: "node-error-view__info"
2015
- };
2016
- const _hoisted_7$2 = { class: "node-error-view__info-header" };
2017
- const _hoisted_8$2 = { class: "node-error-view__info-title" };
2018
- const _hoisted_9$2 = { class: "copy-button" };
2019
- const _hoisted_10 = { class: "node-error-view__info-content" };
2020
- const _hoisted_11 = {
2021
- key: 0,
2022
- class: "node-error-view__details"
2023
- };
2024
- const _hoisted_12 = { class: "node-error-view__details-summary" };
2025
- const _hoisted_13 = { class: "node-error-view__details-content" };
2026
- const _hoisted_14 = {
2027
- key: 0,
2028
- class: "node-error-view__details-row"
2029
- };
2030
- const _hoisted_15 = { class: "node-error-view__details-label" };
2031
- const _hoisted_16 = { class: "node-error-view__details-value" };
2032
- const _hoisted_17 = {
2033
- key: 1,
2034
- class: "node-error-view__details-row"
2035
- };
2036
- const _hoisted_18 = { class: "node-error-view__details-label" };
2037
- const _hoisted_19 = { class: "node-error-view__details-value" };
2038
- const _hoisted_20 = {
2039
- key: 2,
2040
- class: "node-error-view__details-row"
2041
- };
2042
- const _hoisted_21 = { class: "node-error-view__details-label" };
2043
- const _hoisted_22 = { class: "node-error-view__details-value" };
2044
- const _hoisted_23 = {
2045
- key: 3,
2046
- class: "node-error-view__details-row"
2047
- };
2048
- const _hoisted_24 = { class: "node-error-view__details-label" };
2049
- const _hoisted_25 = { class: "node-error-view__details-value" };
2050
- const _hoisted_26 = {
2051
- key: 4,
2052
- class: "node-error-view__details-row"
2053
- };
2054
- const _hoisted_27 = { class: "node-error-view__details-label" };
2055
- const _hoisted_28 = { class: "node-error-view__details-value" };
2056
- const _hoisted_29 = { class: "node-error-view__details" };
2057
- const _hoisted_30 = { class: "node-error-view__details-summary" };
2058
- const _hoisted_31 = { class: "node-error-view__details-content" };
2059
- const _hoisted_32 = {
2060
- key: 0,
2061
- class: "node-error-view__details-row"
2062
- };
2063
- const _hoisted_33 = { class: "node-error-view__details-label" };
2064
- const _hoisted_34 = { class: "node-error-view__details-value" };
2065
- const _hoisted_35 = {
2066
- key: 1,
2067
- class: "node-error-view__details-row"
2068
- };
2069
- const _hoisted_36 = { class: "node-error-view__details-label" };
2070
- const _hoisted_37 = { class: "node-error-view__details-value" };
2071
- const _hoisted_38 = {
2072
- key: 2,
2073
- class: "node-error-view__details-row"
2074
- };
2075
- const _hoisted_39 = { class: "node-error-view__details-label" };
2076
- const _hoisted_40 = { class: "node-error-view__details-value" };
2077
- const _hoisted_41 = {
2078
- key: 3,
2079
- class: "node-error-view__details-row"
2080
- };
2081
- const _hoisted_42 = { class: "node-error-view__details-label" };
2082
- const _hoisted_43 = { class: "node-error-view__details-value" };
2083
- const _hoisted_44 = {
2084
- key: 4,
2085
- class: "node-error-view__details-row"
2086
- };
2087
- const _hoisted_45 = { class: "node-error-view__details-label" };
2088
- const _hoisted_46 = { class: "node-error-view__details-value" };
2089
- const _hoisted_47 = { class: "node-error-view__details-row" };
2090
- const _hoisted_48 = { class: "node-error-view__details-label" };
2091
- const _hoisted_49 = { class: "node-error-view__details-value" };
2092
- const _hoisted_50 = {
2093
- key: 5,
2094
- class: "node-error-view__details-row"
2095
- };
2096
- const _hoisted_51 = { class: "node-error-view__details-label" };
2097
- const _hoisted_52 = { class: "node-error-view__details-value" };
2098
- const _hoisted_53 = {
2099
- key: 6,
2100
- class: "node-error-view__details-row"
2101
- };
2102
- const _hoisted_54 = { class: "node-error-view__details-label" };
2103
- const _hoisted_55 = { class: "node-error-view__details-value" };
2104
- const _hoisted_56 = {
2105
- key: 7,
2106
- class: "node-error-view__details-row"
2107
- };
2108
- const _hoisted_57 = { class: "node-error-view__details-label" };
2109
- const _hoisted_58 = { class: "node-error-view__details-value" };
2110
- const _hoisted_59 = {
2111
- key: 8,
2112
- class: "node-error-view__details-row"
2113
- };
2114
- const _hoisted_60 = { class: "node-error-view__details-label" };
2115
- const _hoisted_61 = { class: "node-error-view__details-value" };
2116
- const _sfc_main$a = /* @__PURE__ */ defineComponent({
2117
- __name: "NodeErrorView",
2118
- props: {
2119
- error: {},
2120
- showDetails: { type: Boolean },
2121
- compact: { type: Boolean }
2122
- },
2123
- setup(__props) {
2124
- const props = __props;
2125
- const clipboard = useClipboard();
2126
- const toast = useToast();
2127
- const i18n = useI18n();
2128
- const assistantHelpers = useAIAssistantHelpers();
2129
- const nodeTypesStore = useNodeTypesStore();
2130
- const ndvStore = useNDVStore();
2131
- const rootStore = useRootStore();
2132
- const assistantStore = useAssistantStore();
2133
- const uiStore = useUIStore();
2134
- const displayCause = computed(() => {
2135
- return JSON.stringify(props.error.cause ?? "").length < MAX_DISPLAY_DATA_SIZE;
2136
- });
2137
- const node = computed(() => {
2138
- return props.error.node || ndvStore.activeNode;
2139
- });
2140
- const parameters = computed(() => {
2141
- if (!node.value) {
2142
- return [];
2143
- }
2144
- const nodeType = nodeTypesStore.getNodeType(node.value.type, node.value.typeVersion);
2145
- if (nodeType === null) {
2146
- return [];
2147
- }
2148
- return nodeType.properties;
2149
- });
2150
- const n8nVersion = computed(() => {
2151
- const baseUrl = rootStore.urlBaseEditor;
2152
- let instanceType = "Self Hosted";
2153
- if (baseUrl.includes("n8n.cloud")) {
2154
- instanceType = "Cloud";
2155
- }
2156
- return rootStore.versionCli + ` (${instanceType})`;
2157
- });
2158
- const hasManyInputItems = computed(() => {
2159
- return ndvStore.ndvInputData.length > 1;
2160
- });
2161
- const nodeDefaultName = computed(() => {
2162
- if (!node.value) {
2163
- return "Node";
2164
- }
2165
- const nodeType = nodeTypesStore.getNodeType(node.value.type, node.value.typeVersion);
2166
- return nodeType?.defaults?.name || node.value.name;
2167
- });
2168
- const prepareRawMessages = computed(() => {
2169
- const returnData = [];
2170
- if (!props.error.messages?.length) {
2171
- return [];
2172
- }
2173
- const errorMessage = getErrorMessage();
2174
- Array.from(new Set(props.error.messages)).forEach((message) => {
2175
- const isParsable = /^\d{3} - \{/.test(message);
2176
- const parts = isParsable ? message.split(" - ").map((part) => part.trim()) : [];
2177
- for (const part of parts) {
2178
- try {
2179
- const parsed = JSON.parse(part);
2180
- if (typeof parsed === "object") {
2181
- returnData.push(parsed);
2182
- return;
2183
- }
2184
- } catch (error) {
2185
- }
2186
- }
2187
- if (message === errorMessage) return;
2188
- returnData.push(message);
2189
- });
2190
- return returnData;
2191
- });
2192
- const isAskAssistantAvailable = computed(() => {
2193
- if (!node.value || isSubNodeError.value) {
2194
- return false;
2195
- }
2196
- const isCustomNode = node.value.type === void 0 || isCommunityPackageName(node.value.type);
2197
- return assistantStore.canShowAssistantButtonsOnCanvas && !isCustomNode && !nodeIsHidden();
2198
- });
2199
- const assistantAlreadyAsked = computed(() => {
2200
- return assistantStore.isNodeErrorActive({
2201
- error: assistantHelpers.simplifyErrorForAssistant(props.error),
2202
- node: props.error.node || ndvStore.activeNode
2203
- });
2204
- });
2205
- const isSubNodeError = computed(() => {
2206
- return props.error.name === "NodeOperationError" && props.error.functionality === "configuration-node";
2207
- });
2208
- function nodeVersionTag(nodeType) {
2209
- if (!nodeType || "hidden" in nodeType && nodeType.hidden) {
2210
- return i18n.baseText("nodeSettings.deprecated");
2211
- }
2212
- const latestNodeVersion = Math.max(...nodeTypesStore.getNodeVersions(nodeType.type));
2213
- if (latestNodeVersion === nodeType.typeVersion) {
2214
- return i18n.baseText("nodeSettings.latest");
2215
- }
2216
- return i18n.baseText("nodeSettings.latestVersion", {
2217
- interpolate: { version: latestNodeVersion.toString() }
2218
- });
2219
- }
2220
- function prepareDescription(description) {
2221
- return sanitizeHtml(description.replace(/`(.*?)`/g, "<code>$1</code>"));
2222
- }
2223
- function getErrorDescription() {
2224
- if (props.error.context?.descriptionKey) {
2225
- const interpolate = {
2226
- nodeCause: props.error.context.nodeCause,
2227
- runIndex: props.error.context.runIndex ?? "0",
2228
- itemIndex: props.error.context.itemIndex ?? "0"
2229
- };
2230
- return prepareDescription(
2231
- i18n.baseText(
2232
- `nodeErrorView.description.${props.error.context.descriptionKey}`,
2233
- { interpolate }
2234
- )
2235
- );
2236
- }
2237
- if (!props.error.context?.descriptionTemplate) {
2238
- return prepareDescription(props.error.description ?? "");
2239
- }
2240
- const parameterName = parameterDisplayName(props.error.context.parameter);
2241
- return prepareDescription(
2242
- props.error.context.descriptionTemplate.replace(/%%PARAMETER%%/g, parameterName)
2243
- );
2244
- }
2245
- function addItemIndexSuffix(message) {
2246
- let itemIndexSuffix = "";
2247
- if (hasManyInputItems.value && props.error?.context?.itemIndex !== void 0) {
2248
- itemIndexSuffix = `item ${props.error.context.itemIndex}`;
2249
- }
2250
- if (message.includes(itemIndexSuffix)) return message;
2251
- return `${message} [${itemIndexSuffix}]`;
2252
- }
2253
- function getErrorMessage() {
2254
- let message = "";
2255
- const isNonEmptyString = (value) => !!value && typeof value === "string";
2256
- if (isSubNodeError.value) {
2257
- message = i18n.baseText("nodeErrorView.errorSubNode", {
2258
- interpolate: { node: props.error.node.name }
2259
- });
2260
- } else if (isNonEmptyString(props.error.message) && (props.error.message === props.error.description || !props.error.context?.messageTemplate)) {
2261
- message = props.error.message;
2262
- } else if (isNonEmptyString(props.error.context?.messageTemplate) && isNonEmptyString(props.error.context?.parameter)) {
2263
- const parameterName = parameterDisplayName(props.error.context.parameter);
2264
- message = props.error.context.messageTemplate.replace(/%%PARAMETER%%/g, parameterName);
2265
- } else if (Array.isArray(props.error.messages) && props.error.messages.length > 0) {
2266
- message = props.error.messages[0];
2267
- }
2268
- return addItemIndexSuffix(message);
2269
- }
2270
- function parameterDisplayName(path, fullPath = true) {
2271
- try {
2272
- const params = getParameterName(parameters.value, path.split("."));
2273
- if (!params.length) {
2274
- throw new Error();
2275
- }
2276
- if (!fullPath) {
2277
- return params.pop().displayName;
2278
- }
2279
- return params.map((parameter) => parameter.displayName).join(" > ");
2280
- } catch (error) {
2281
- return `Could not find parameter "${path}"`;
2282
- }
2283
- }
2284
- function getParameterName(params, pathParts) {
2285
- let currentParameterName = pathParts.shift();
2286
- if (currentParameterName === void 0) {
2287
- return [];
2288
- }
2289
- const arrayMatch = currentParameterName.match(/(.*)\[([\d])\]$/);
2290
- if (arrayMatch !== null && arrayMatch.length > 0) {
2291
- currentParameterName = arrayMatch[1];
2292
- }
2293
- const currentParameter = params.find(
2294
- (parameter) => parameter.name === currentParameterName
2295
- );
2296
- if (currentParameter === void 0) {
2297
- throw new Error(`Could not find parameter "${currentParameterName}"`);
2298
- }
2299
- if (pathParts.length === 0) {
2300
- return [currentParameter];
2301
- }
2302
- if (currentParameter.hasOwnProperty("options")) {
2303
- return [
2304
- currentParameter,
2305
- ...getParameterName(currentParameter.options, pathParts)
2306
- ];
2307
- }
2308
- if (currentParameter.hasOwnProperty("values")) {
2309
- return [
2310
- currentParameter,
2311
- ...getParameterName(currentParameter.values, pathParts)
2312
- ];
2313
- }
2314
- return [currentParameter];
2315
- }
2316
- function copyErrorDetails() {
2317
- const error = props.error;
2318
- const errorInfo = {
2319
- errorMessage: getErrorMessage()
2320
- };
2321
- if (error.description) {
2322
- errorInfo.errorDescription = error.description;
2323
- }
2324
- const errorDetails = {};
2325
- if (error?.messages?.length) {
2326
- errorDetails.rawErrorMessage = error.messages;
2327
- }
2328
- if ("httpCode" in error && error.httpCode) {
2329
- errorDetails.httpCode = error.httpCode;
2330
- }
2331
- if (error.context && error.context.data) {
2332
- errorDetails.errorData = error.context.data;
2333
- }
2334
- if (error.extra) {
2335
- errorDetails.errorExtra = error.extra;
2336
- }
2337
- errorInfo.errorDetails = errorDetails;
2338
- const n8nDetails = {};
2339
- if (error.node) {
2340
- n8nDetails.nodeName = error.node.name;
2341
- n8nDetails.nodeType = error.node.type;
2342
- n8nDetails.nodeVersion = error.node.typeVersion;
2343
- if (error.node?.parameters?.resource) {
2344
- n8nDetails.resource = error.node.parameters.resource;
2345
- }
2346
- if (error?.node?.parameters?.operation) {
2347
- n8nDetails.operation = error.node.parameters.operation;
2348
- }
2349
- }
2350
- if (error.context) {
2351
- if (error.context.itemIndex !== void 0) {
2352
- n8nDetails.itemIndex = error.context.itemIndex;
2353
- }
2354
- if (error.context.runIndex !== void 0) {
2355
- n8nDetails.runIndex = error.context.runIndex;
2356
- }
2357
- if (error.context.parameter !== void 0) {
2358
- n8nDetails.parameter = error.context.parameter;
2359
- }
2360
- if (error.context.causeDetailed) {
2361
- n8nDetails.causeDetailed = error.context.causeDetailed;
2362
- }
2363
- }
2364
- if (error.timestamp) {
2365
- n8nDetails.time = new Date(error.timestamp).toLocaleString();
2366
- }
2367
- n8nDetails.n8nVersion = n8nVersion.value;
2368
- n8nDetails.binaryDataMode = rootStore.binaryDataMode;
2369
- if (error.cause) {
2370
- n8nDetails.cause = error.cause;
2371
- }
2372
- n8nDetails.stackTrace = error.stack?.split("\n");
2373
- errorInfo.n8nDetails = n8nDetails;
2374
- void clipboard.copy(JSON.stringify(errorInfo, null, 2));
2375
- copySuccess();
2376
- }
2377
- function copySuccess() {
2378
- toast.showMessage({
2379
- title: i18n.baseText("nodeErrorView.showMessage.title"),
2380
- type: "info"
2381
- });
2382
- }
2383
- function nodeIsHidden() {
2384
- const nodeType = nodeTypesStore.getNodeType(node?.value.type);
2385
- return nodeType?.hidden ?? false;
2386
- }
2387
- const onOpenErrorNodeDetailClick = () => {
2388
- ndvStore.activeNodeName = props.error.node.name;
2389
- };
2390
- async function onAskAssistantClick() {
2391
- const { message, lineNumber, description } = props.error;
2392
- const sessionInProgress = !assistantStore.isSessionEnded;
2393
- const errorHelp = {
2394
- error: {
2395
- name: props.error.name,
2396
- message,
2397
- lineNumber,
2398
- description: description ?? getErrorDescription(),
2399
- type: "type" in props.error ? props.error.type : void 0
2400
- },
2401
- node: node.value
2402
- };
2403
- if (sessionInProgress) {
2404
- uiStore.openModalWithData({
2405
- name: NEW_ASSISTANT_SESSION_MODAL,
2406
- data: { context: { errorHelp } }
2407
- });
2408
- return;
2409
- }
2410
- await assistantStore.initErrorHelper(errorHelp);
2411
- assistantStore.trackUserOpenedAssistant({
2412
- source: "error",
2413
- task: "error",
2414
- has_existing_session: false
2415
- });
2416
- }
2417
- return (_ctx, _cache) => {
2418
- const _component_n8n_button = resolveComponent("n8n-button");
2419
- const _component_n8n_tooltip = resolveComponent("n8n-tooltip");
2420
- const _component_font_awesome_icon = resolveComponent("font-awesome-icon");
2421
- const _directive_n8n_html = resolveDirective("n8n-html");
2422
- return openBlock(), createElementBlock("div", {
2423
- class: normalizeClass(["node-error-view", props.compact ? "node-error-view_compact" : ""])
2424
- }, [
2425
- createBaseVNode("div", _hoisted_1$8, [
2426
- createBaseVNode("div", _hoisted_2$4, [
2427
- createBaseVNode("div", null, toDisplayString(getErrorMessage()), 1)
2428
- ]),
2429
- (_ctx.error.description || _ctx.error.context?.descriptionKey) && !isSubNodeError.value ? withDirectives((openBlock(), createElementBlock("div", _hoisted_3$3, null, 512)), [
2430
- [_directive_n8n_html, getErrorDescription()]
2431
- ]) : createCommentVNode("", true),
2432
- isSubNodeError.value ? (openBlock(), createElementBlock("div", _hoisted_4$3, [
2433
- createVNode(_component_n8n_button, {
2434
- icon: "arrow-right",
2435
- type: "secondary",
2436
- label: unref(i18n).baseText("pushConnection.executionError.openNode"),
2437
- class: "node-error-view__button",
2438
- "data-test-id": "node-error-view-open-node-button",
2439
- onClick: onOpenErrorNodeDetailClick
2440
- }, null, 8, ["label"])
2441
- ])) : createCommentVNode("", true),
2442
- isAskAssistantAvailable.value ? (openBlock(), createElementBlock("div", _hoisted_5$3, [
2443
- createVNode(InlineAskAssistantButton, {
2444
- asked: assistantAlreadyAsked.value,
2445
- onClick: onAskAssistantClick
2446
- }, null, 8, ["asked"])
2447
- ])) : createCommentVNode("", true)
2448
- ]),
2449
- _ctx.showDetails ? (openBlock(), createElementBlock("div", _hoisted_6$2, [
2450
- createBaseVNode("div", _hoisted_7$2, [
2451
- createBaseVNode("p", _hoisted_8$2, toDisplayString(unref(i18n).baseText("nodeErrorView.details.title")), 1),
2452
- createVNode(_component_n8n_tooltip, {
2453
- class: "item",
2454
- content: unref(i18n).baseText("nodeErrorView.copyToClipboard.tooltip"),
2455
- placement: "left"
2456
- }, {
2457
- default: withCtx(() => [
2458
- createBaseVNode("div", _hoisted_9$2, [
2459
- createVNode(unref(_sfc_main$b), {
2460
- icon: "copy",
2461
- type: "secondary",
2462
- size: "mini",
2463
- text: true,
2464
- "transparent-background": "transparent",
2465
- onClick: copyErrorDetails
2466
- })
2467
- ])
2468
- ]),
2469
- _: 1
2470
- }, 8, ["content"])
2471
- ]),
2472
- createBaseVNode("div", _hoisted_10, [
2473
- "httpCode" in _ctx.error && _ctx.error.httpCode || prepareRawMessages.value.length || _ctx.error?.context?.data || _ctx.error.extra ? (openBlock(), createElementBlock("details", _hoisted_11, [
2474
- createBaseVNode("summary", _hoisted_12, [
2475
- createVNode(_component_font_awesome_icon, {
2476
- class: "node-error-view__details-icon",
2477
- icon: "angle-right"
2478
- }),
2479
- createTextVNode(" " + toDisplayString(unref(i18n).baseText("nodeErrorView.details.from", {
2480
- interpolate: { node: `${nodeDefaultName.value}` }
2481
- })), 1)
2482
- ]),
2483
- createBaseVNode("div", _hoisted_13, [
2484
- "httpCode" in _ctx.error && _ctx.error.httpCode ? (openBlock(), createElementBlock("div", _hoisted_14, [
2485
- createBaseVNode("p", _hoisted_15, toDisplayString(unref(i18n).baseText("nodeErrorView.errorCode")), 1),
2486
- createBaseVNode("p", _hoisted_16, [
2487
- createBaseVNode("code", null, toDisplayString(_ctx.error.httpCode), 1)
2488
- ])
2489
- ])) : createCommentVNode("", true),
2490
- prepareRawMessages.value.length ? (openBlock(), createElementBlock("div", _hoisted_17, [
2491
- createBaseVNode("p", _hoisted_18, toDisplayString(unref(i18n).baseText("nodeErrorView.details.rawMessages")), 1),
2492
- createBaseVNode("div", _hoisted_19, [
2493
- (openBlock(true), createElementBlock(Fragment, null, renderList(prepareRawMessages.value, (msg, index) => {
2494
- return openBlock(), createElementBlock("div", { key: index }, [
2495
- createBaseVNode("pre", null, [
2496
- createBaseVNode("code", null, toDisplayString(msg), 1)
2497
- ])
2498
- ]);
2499
- }), 128))
2500
- ])
2501
- ])) : createCommentVNode("", true),
2502
- _ctx.error?.context?.data ? (openBlock(), createElementBlock("div", _hoisted_20, [
2503
- createBaseVNode("p", _hoisted_21, toDisplayString(unref(i18n).baseText("nodeErrorView.details.errorData")), 1),
2504
- createBaseVNode("div", _hoisted_22, [
2505
- createBaseVNode("pre", null, [
2506
- createBaseVNode("code", null, toDisplayString(_ctx.error.context.data), 1)
2507
- ])
2508
- ])
2509
- ])) : createCommentVNode("", true),
2510
- _ctx.error.extra ? (openBlock(), createElementBlock("div", _hoisted_23, [
2511
- createBaseVNode("p", _hoisted_24, toDisplayString(unref(i18n).baseText("nodeErrorView.details.errorExtra")), 1),
2512
- createBaseVNode("div", _hoisted_25, [
2513
- createBaseVNode("pre", null, [
2514
- createBaseVNode("code", null, toDisplayString(_ctx.error.extra), 1)
2515
- ])
2516
- ])
2517
- ])) : createCommentVNode("", true),
2518
- _ctx.error.context && _ctx.error.context.request ? (openBlock(), createElementBlock("div", _hoisted_26, [
2519
- createBaseVNode("p", _hoisted_27, toDisplayString(unref(i18n).baseText("nodeErrorView.details.request")), 1),
2520
- createBaseVNode("div", _hoisted_28, [
2521
- createBaseVNode("pre", null, [
2522
- createBaseVNode("code", null, toDisplayString(_ctx.error.context.request), 1)
2523
- ])
2524
- ])
2525
- ])) : createCommentVNode("", true)
2526
- ])
2527
- ])) : createCommentVNode("", true),
2528
- createBaseVNode("details", _hoisted_29, [
2529
- createBaseVNode("summary", _hoisted_30, [
2530
- createVNode(_component_font_awesome_icon, {
2531
- class: "node-error-view__details-icon",
2532
- icon: "angle-right"
2533
- }),
2534
- createTextVNode(" " + toDisplayString(unref(i18n).baseText("nodeErrorView.details.info")), 1)
2535
- ]),
2536
- createBaseVNode("div", _hoisted_31, [
2537
- _ctx.error.context && _ctx.error.context.itemIndex !== void 0 ? (openBlock(), createElementBlock("div", _hoisted_32, [
2538
- createBaseVNode("p", _hoisted_33, toDisplayString(unref(i18n).baseText("nodeErrorView.itemIndex")), 1),
2539
- createBaseVNode("p", _hoisted_34, [
2540
- createBaseVNode("code", null, toDisplayString(_ctx.error.context.itemIndex), 1)
2541
- ])
2542
- ])) : createCommentVNode("", true),
2543
- _ctx.error.context && _ctx.error.context.runIndex !== void 0 ? (openBlock(), createElementBlock("div", _hoisted_35, [
2544
- createBaseVNode("p", _hoisted_36, toDisplayString(unref(i18n).baseText("nodeErrorView.runIndex")), 1),
2545
- createBaseVNode("p", _hoisted_37, [
2546
- createBaseVNode("code", null, toDisplayString(_ctx.error.context.runIndex), 1)
2547
- ])
2548
- ])) : createCommentVNode("", true),
2549
- _ctx.error.context && _ctx.error.context.parameter !== void 0 ? (openBlock(), createElementBlock("div", _hoisted_38, [
2550
- createBaseVNode("p", _hoisted_39, toDisplayString(unref(i18n).baseText("nodeErrorView.inParameter")), 1),
2551
- createBaseVNode("p", _hoisted_40, [
2552
- createBaseVNode("code", null, toDisplayString(parameterDisplayName(`${_ctx.error.context.parameter}`)), 1)
2553
- ])
2554
- ])) : createCommentVNode("", true),
2555
- _ctx.error.node && _ctx.error.node.type ? (openBlock(), createElementBlock("div", _hoisted_41, [
2556
- createBaseVNode("p", _hoisted_42, toDisplayString(unref(i18n).baseText("nodeErrorView.details.nodeType")), 1),
2557
- createBaseVNode("p", _hoisted_43, [
2558
- createBaseVNode("code", null, toDisplayString(_ctx.error.node.type), 1)
2559
- ])
2560
- ])) : createCommentVNode("", true),
2561
- _ctx.error.node && _ctx.error.node.typeVersion ? (openBlock(), createElementBlock("div", _hoisted_44, [
2562
- createBaseVNode("p", _hoisted_45, toDisplayString(unref(i18n).baseText("nodeErrorView.details.nodeVersion")), 1),
2563
- createBaseVNode("p", _hoisted_46, [
2564
- createBaseVNode("code", null, [
2565
- createBaseVNode("span", null, toDisplayString(_ctx.error.node.typeVersion + " "), 1),
2566
- createBaseVNode("span", null, "(" + toDisplayString(nodeVersionTag(_ctx.error.node)) + ")", 1)
2567
- ])
2568
- ])
2569
- ])) : createCommentVNode("", true),
2570
- createBaseVNode("div", _hoisted_47, [
2571
- createBaseVNode("p", _hoisted_48, toDisplayString(unref(i18n).baseText("nodeErrorView.details.n8nVersion")), 1),
2572
- createBaseVNode("p", _hoisted_49, [
2573
- createBaseVNode("code", null, toDisplayString(n8nVersion.value), 1)
2574
- ])
2575
- ]),
2576
- _ctx.error.timestamp ? (openBlock(), createElementBlock("div", _hoisted_50, [
2577
- createBaseVNode("p", _hoisted_51, toDisplayString(unref(i18n).baseText("nodeErrorView.time")), 1),
2578
- createBaseVNode("p", _hoisted_52, [
2579
- createBaseVNode("code", null, toDisplayString(new Date(_ctx.error.timestamp).toLocaleString()), 1)
2580
- ])
2581
- ])) : createCommentVNode("", true),
2582
- _ctx.error.cause && displayCause.value ? (openBlock(), createElementBlock("div", _hoisted_53, [
2583
- createBaseVNode("p", _hoisted_54, toDisplayString(unref(i18n).baseText("nodeErrorView.details.errorCause")), 1),
2584
- createBaseVNode("pre", _hoisted_55, [
2585
- createBaseVNode("code", null, toDisplayString(_ctx.error.cause), 1)
2586
- ])
2587
- ])) : createCommentVNode("", true),
2588
- _ctx.error.context && _ctx.error.context.causeDetailed ? (openBlock(), createElementBlock("div", _hoisted_56, [
2589
- createBaseVNode("p", _hoisted_57, toDisplayString(unref(i18n).baseText("nodeErrorView.details.causeDetailed")), 1),
2590
- createBaseVNode("pre", _hoisted_58, [
2591
- createBaseVNode("code", null, toDisplayString(_ctx.error.context.causeDetailed), 1)
2592
- ])
2593
- ])) : createCommentVNode("", true),
2594
- _ctx.error.stack ? (openBlock(), createElementBlock("div", _hoisted_59, [
2595
- createBaseVNode("p", _hoisted_60, toDisplayString(unref(i18n).baseText("nodeErrorView.details.stackTrace")), 1),
2596
- createBaseVNode("pre", _hoisted_61, [
2597
- createBaseVNode("code", null, toDisplayString(_ctx.error.stack), 1)
2598
- ])
2599
- ])) : createCommentVNode("", true)
2600
- ])
2601
- ])
2602
- ])
2603
- ])) : createCommentVNode("", true)
2604
- ], 2);
2605
- };
2606
- }
2607
- });
2608
- const fallbackParser = (execData) => ({
2609
- type: "json",
2610
- data: execData,
2611
- parsed: false
2612
- });
2613
- const outputTypeParsers = {
2614
- [NodeConnectionTypes.AiLanguageModel](execData) {
2615
- const response = execData.response ?? execData;
2616
- if (!response) throw new Error("No response from Language Model");
2617
- if (Array.isArray(response?.messages) && response?.messages.length === 1 && typeof response?.messages[0] === "string") {
2618
- return {
2619
- type: "text",
2620
- data: response.messages[0],
2621
- parsed: true
2622
- };
2623
- }
2624
- if (response.messages && Array.isArray(response.messages)) {
2625
- return outputTypeParsers[NodeConnectionTypes.AiMemory](execData);
2626
- }
2627
- if (response.generations) {
2628
- const generations = response.generations;
2629
- const content = generations.map((generation) => {
2630
- if (generation?.text) return generation.text;
2631
- if (Array.isArray(generation)) {
2632
- return generation.map((item) => item.text ?? item).join("\n\n").trim();
2633
- }
2634
- return generation;
2635
- });
2636
- return {
2637
- type: "json",
2638
- data: content,
2639
- parsed: true
2640
- };
2641
- }
2642
- return {
2643
- type: "json",
2644
- data: response,
2645
- parsed: true
2646
- };
2647
- },
2648
- [NodeConnectionTypes.AiTool]: fallbackParser,
2649
- [NodeConnectionTypes.AiAgent]: fallbackParser,
2650
- [NodeConnectionTypes.AiMemory](execData) {
2651
- const chatHistory = execData.chatHistory ?? execData.messages ?? execData?.response?.chat_history;
2652
- if (Array.isArray(chatHistory)) {
2653
- const responseText = chatHistory.map((content) => {
2654
- if (content.type === "constructor" && content.id?.includes("messages") && content.kwargs) {
2655
- let message = String(content.kwargs.content);
2656
- if (Array.isArray(message)) {
2657
- message = message.map((item) => {
2658
- const { type, image_url } = item;
2659
- if (type === "image_url" && typeof image_url === "object" && typeof image_url.url === "string") {
2660
- return `![Input image](${image_url.url})`;
2661
- } else if (typeof image_url === "string") {
2662
- return `![Input image](${image_url})`;
2663
- }
2664
- return item.text;
2665
- }).join("\n");
2666
- }
2667
- if (Object.keys(content.kwargs.additional_kwargs).length) {
2668
- message += ` (${JSON.stringify(content.kwargs.additional_kwargs)})`;
2669
- }
2670
- if (content.id.includes("HumanMessage")) {
2671
- message = `**Human:** ${String(message).trim()}`;
2672
- } else if (content.id.includes("AIMessage")) {
2673
- message = `**AI:** ${message}`;
2674
- } else if (content.id.includes("SystemMessage")) {
2675
- message = `**System Message:** ${message}`;
2676
- }
2677
- return message;
2678
- }
2679
- return "";
2680
- }).join("\n\n");
2681
- if (responseText.length === 0) {
2682
- return fallbackParser(execData);
2683
- }
2684
- return {
2685
- type: "markdown",
2686
- data: responseText,
2687
- parsed: true
2688
- };
2689
- }
2690
- return fallbackParser(execData);
2691
- },
2692
- [NodeConnectionTypes.AiOutputParser]: fallbackParser,
2693
- [NodeConnectionTypes.AiRetriever]: fallbackParser,
2694
- [NodeConnectionTypes.AiVectorStore](execData) {
2695
- if (execData.documents) {
2696
- return {
2697
- type: "json",
2698
- data: execData.documents,
2699
- parsed: true
2700
- };
2701
- }
2702
- return fallbackParser(execData);
2703
- },
2704
- [NodeConnectionTypes.AiEmbedding](execData) {
2705
- if (execData.documents) {
2706
- return {
2707
- type: "json",
2708
- data: execData.documents,
2709
- parsed: true
2710
- };
2711
- }
2712
- return fallbackParser(execData);
2713
- },
2714
- [NodeConnectionTypes.AiDocument](execData) {
2715
- if (execData.documents) {
2716
- return {
2717
- type: "json",
2718
- data: execData.documents,
2719
- parsed: true
2720
- };
2721
- }
2722
- return fallbackParser(execData);
2723
- },
2724
- [NodeConnectionTypes.AiTextSplitter](execData) {
2725
- const arrayData = Array.isArray(execData.response) ? execData.response : [execData.textSplitter];
2726
- return {
2727
- type: "text",
2728
- data: arrayData.join("\n\n"),
2729
- parsed: true
2730
- };
2731
- }
2732
- };
2733
- function parseAiContent(executionData, endpointType) {
2734
- if ([NodeConnectionTypes.AiChain, NodeConnectionTypes.Main].includes(
2735
- endpointType
2736
- )) {
2737
- return executionData.map((data) => ({ raw: data.json, parsedContent: null }));
2738
- }
2739
- const contentJson = executionData.map((node) => {
2740
- const hasBinaryData = !isObjectEmpty(node.binary);
2741
- return hasBinaryData ? node.binary : node.json;
2742
- });
2743
- const parser = outputTypeParsers[endpointType];
2744
- if (!parser)
2745
- return [
2746
- {
2747
- raw: contentJson.filter((item) => item !== void 0),
2748
- parsedContent: null
2749
- }
2750
- ];
2751
- return contentJson.filter((c) => c !== void 0).map((c) => ({ raw: c, parsedContent: parser(c) }));
2752
- }
2753
- const _sfc_main$9 = /* @__PURE__ */ defineComponent({
2754
- __name: "ConsumedTokensDetails",
2755
- props: {
2756
- consumedTokens: {}
2757
- },
2758
- setup(__props) {
2759
- const i18n = useI18n();
2760
- return (_ctx, _cache) => {
2761
- return openBlock(), createElementBlock("div", null, [
2762
- createVNode(unref(N8nText), {
2763
- bold: true,
2764
- size: "small"
2765
- }, {
2766
- default: withCtx(() => [
2767
- createTextVNode(toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens.prompt")) + " " + toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens", {
2768
- interpolate: {
2769
- count: unref(formatTokenUsageCount)(_ctx.consumedTokens, "prompt")
2770
- }
2771
- })), 1)
2772
- ]),
2773
- _: 1
2774
- }),
2775
- _cache[0] || (_cache[0] = createBaseVNode("br", null, null, -1)),
2776
- createVNode(unref(N8nText), {
2777
- bold: true,
2778
- size: "small"
2779
- }, {
2780
- default: withCtx(() => [
2781
- createTextVNode(toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens.completion")) + " " + toDisplayString(unref(i18n).baseText("runData.aiContentBlock.tokens", {
2782
- interpolate: {
2783
- count: unref(formatTokenUsageCount)(_ctx.consumedTokens, "completion")
2784
- }
2785
- })), 1)
2786
- ]),
2787
- _: 1
2788
- })
2789
- ]);
2790
- };
2791
- }
2792
- });
2793
- const _hoisted_1$7 = ["href"];
2794
- const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2795
- __name: "ViewSubExecution",
2796
- props: {
2797
- taskMetadata: {},
2798
- displayMode: {},
2799
- inline: { type: Boolean, default: false }
2800
- },
2801
- setup(__props) {
2802
- const { trackOpeningRelatedExecution, resolveRelatedExecutionUrl } = useExecutionHelpers();
2803
- const i18n = useI18n();
2804
- const props = __props;
2805
- const hasRelatedExecution = computed(() => {
2806
- return Boolean(props.taskMetadata.subExecution ?? props.taskMetadata.parentExecution);
2807
- });
2808
- function getExecutionLinkLabel(task) {
2809
- if (task.parentExecution) {
2810
- return i18n.baseText("runData.openParentExecution", {
2811
- interpolate: { id: task.parentExecution.executionId }
2812
- });
2813
- }
2814
- if (task.subExecution) {
2815
- if (props.taskMetadata.subExecutionsCount === 1) {
2816
- return i18n.baseText("runData.openSubExecutionSingle");
2817
- } else {
2818
- return i18n.baseText("runData.openSubExecutionWithId", {
2819
- interpolate: { id: task.subExecution.executionId }
2820
- });
2821
- }
2822
- }
2823
- return;
2824
- }
2825
- return (_ctx, _cache) => {
2826
- const _component_N8nIcon = resolveComponent("N8nIcon");
2827
- return hasRelatedExecution.value ? (openBlock(), createElementBlock("a", {
2828
- key: 0,
2829
- class: normalizeClass({ [_ctx.$style.relatedExecutionInfo]: !_ctx.inline }),
2830
- "data-test-id": "related-execution-link",
2831
- href: unref(resolveRelatedExecutionUrl)(_ctx.taskMetadata),
2832
- target: "_blank",
2833
- onClick: _cache[0] || (_cache[0] = withModifiers(($event) => unref(trackOpeningRelatedExecution)(_ctx.taskMetadata, _ctx.displayMode), ["stop"]))
2834
- }, [
2835
- createVNode(_component_N8nIcon, {
2836
- icon: "external-link-alt",
2837
- size: "xsmall"
2838
- }),
2839
- createTextVNode(" " + toDisplayString(getExecutionLinkLabel(_ctx.taskMetadata)), 1)
2840
- ], 10, _hoisted_1$7)) : createCommentVNode("", true);
2841
- };
2842
- }
2843
- });
2844
- const relatedExecutionInfo = "_relatedExecutionInfo_saqms_123";
2845
- const style0$4 = {
2846
- relatedExecutionInfo
2847
- };
2848
- const cssModules$4 = {
2849
- "$style": style0$4
2850
- };
2851
- const ViewSubExecution = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__cssModules", cssModules$4]]);
2852
- var vueJsonPretty$1 = { exports: {} };
2853
- var vueJsonPretty = vueJsonPretty$1.exports;
2854
- var hasRequiredVueJsonPretty;
2855
- function requireVueJsonPretty() {
2856
- if (hasRequiredVueJsonPretty) return vueJsonPretty$1.exports;
2857
- hasRequiredVueJsonPretty = 1;
2858
- (function(module, exports) {
2859
- !function(e, t) {
2860
- module.exports = t(requireVue());
2861
- }(vueJsonPretty, function(e) {
2862
- return function() {
2863
- var t = { 789: function(t2) {
2864
- t2.exports = e;
2865
- } }, n = {};
2866
- function o(e2) {
2867
- var r2 = n[e2];
2868
- if (void 0 !== r2) return r2.exports;
2869
- var l = n[e2] = { exports: {} };
2870
- return t[e2](l, l.exports, o), l.exports;
2871
- }
2872
- o.d = function(e2, t2) {
2873
- for (var n2 in t2) o.o(t2, n2) && !o.o(e2, n2) && Object.defineProperty(e2, n2, { enumerable: true, get: t2[n2] });
2874
- }, o.o = function(e2, t2) {
2875
- return Object.prototype.hasOwnProperty.call(e2, t2);
2876
- }, o.r = function(e2) {
2877
- "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e2, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e2, "__esModule", { value: true });
2878
- };
2879
- var r = {};
2880
- return function() {
2881
- function e2(e3, t3) {
2882
- (null == t3 || t3 > e3.length) && (t3 = e3.length);
2883
- for (var n3 = 0, o2 = new Array(t3); n3 < t3; n3++) o2[n3] = e3[n3];
2884
- return o2;
2885
- }
2886
- function t2(t3, n3) {
2887
- if (t3) {
2888
- if ("string" == typeof t3) return e2(t3, n3);
2889
- var o2 = Object.prototype.toString.call(t3).slice(8, -1);
2890
- return "Object" === o2 && t3.constructor && (o2 = t3.constructor.name), "Map" === o2 || "Set" === o2 ? Array.from(t3) : "Arguments" === o2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o2) ? e2(t3, n3) : void 0;
1671
+ o.d = function(e2, t2) {
1672
+ for (var n2 in t2) o.o(t2, n2) && !o.o(e2, n2) && Object.defineProperty(e2, n2, { enumerable: true, get: t2[n2] });
1673
+ }, o.o = function(e2, t2) {
1674
+ return Object.prototype.hasOwnProperty.call(e2, t2);
1675
+ }, o.r = function(e2) {
1676
+ "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e2, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e2, "__esModule", { value: true });
1677
+ };
1678
+ var r = {};
1679
+ return function() {
1680
+ function e2(e3, t3) {
1681
+ (null == t3 || t3 > e3.length) && (t3 = e3.length);
1682
+ for (var n3 = 0, o2 = new Array(t3); n3 < t3; n3++) o2[n3] = e3[n3];
1683
+ return o2;
1684
+ }
1685
+ function t2(t3, n3) {
1686
+ if (t3) {
1687
+ if ("string" == typeof t3) return e2(t3, n3);
1688
+ var o2 = Object.prototype.toString.call(t3).slice(8, -1);
1689
+ return "Object" === o2 && t3.constructor && (o2 = t3.constructor.name), "Map" === o2 || "Set" === o2 ? Array.from(t3) : "Arguments" === o2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o2) ? e2(t3, n3) : void 0;
2891
1690
  }
2892
1691
  }
2893
1692
  function n2(n3) {
@@ -3059,344 +1858,956 @@ function requireVueJsonPretty() {
3059
1858
  }
3060
1859
  return n3;
3061
1860
  }
3062
- function C(e3) {
3063
- for (var t3 = 1; t3 < arguments.length; t3++) {
3064
- var n3 = null != arguments[t3] ? arguments[t3] : {};
3065
- t3 % 2 ? m(Object(n3), true).forEach(function(t4) {
3066
- l(e3, t4, n3[t4]);
3067
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e3, Object.getOwnPropertyDescriptors(n3)) : m(Object(n3)).forEach(function(t4) {
3068
- Object.defineProperty(e3, t4, Object.getOwnPropertyDescriptor(n3, t4));
3069
- });
1861
+ function C(e3) {
1862
+ for (var t3 = 1; t3 < arguments.length; t3++) {
1863
+ var n3 = null != arguments[t3] ? arguments[t3] : {};
1864
+ t3 % 2 ? m(Object(n3), true).forEach(function(t4) {
1865
+ l(e3, t4, n3[t4]);
1866
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e3, Object.getOwnPropertyDescriptors(n3)) : m(Object(n3)).forEach(function(t4) {
1867
+ Object.defineProperty(e3, t4, Object.getOwnPropertyDescriptor(n3, t4));
1868
+ });
1869
+ }
1870
+ return e3;
1871
+ }
1872
+ var k = (0, a.defineComponent)({ name: "Tree", props: C(C({}, b), {}, { data: { type: [String, Number, Boolean, Array, Object], default: null }, deep: { type: Number, default: 1 / 0 }, pathCollapsible: { type: Function, default: function() {
1873
+ return false;
1874
+ } }, rootPath: { type: String, default: "root" }, virtual: { type: Boolean, default: false }, height: { type: Number, default: 400 }, itemHeight: { type: Number, default: 20 }, selectedValue: { type: [String, Array], default: function() {
1875
+ return "";
1876
+ } }, collapsedOnClickBrackets: { type: Boolean, default: true }, style: Object, onSelectedChange: { type: Function } }), slots: ["renderNodeKey", "renderNodeValue"], emits: ["nodeClick", "bracketsClick", "iconClick", "selectedChange", "update:selectedValue", "update:data"], setup: function(e3, o2) {
1877
+ var r2 = o2.emit, c2 = o2.slots, i2 = (0, a.ref)(), u2 = (0, a.computed)(function() {
1878
+ return p(e3.data, e3.rootPath);
1879
+ }), d2 = function(t3) {
1880
+ return u2.value.reduce(function(n3, o3) {
1881
+ var r3, a2 = o3.level >= t3, c3 = null === (r3 = e3.pathCollapsible) || void 0 === r3 ? void 0 : r3.call(e3, o3);
1882
+ return "objectStart" !== o3.type && "arrayStart" !== o3.type || !a2 && !c3 ? n3 : C(C({}, n3), {}, l({}, o3.path, 1));
1883
+ }, {});
1884
+ }, s2 = (0, a.reactive)({ translateY: 0, visibleData: null, hiddenPaths: d2(e3.deep) }), h3 = (0, a.computed)(function() {
1885
+ for (var e4 = null, t3 = [], n3 = u2.value.length, o3 = 0; o3 < n3; o3++) {
1886
+ var r3 = C(C({}, u2.value[o3]), {}, { id: o3 }), l2 = s2.hiddenPaths[r3.path];
1887
+ if (e4 && e4.path === r3.path) {
1888
+ var a2 = "objectStart" === e4.type, c3 = C(C(C({}, r3), e4), {}, { showComma: r3.showComma, content: a2 ? "{...}" : "[...]", type: a2 ? "objectCollapsed" : "arrayCollapsed" });
1889
+ e4 = null, t3.push(c3);
1890
+ } else {
1891
+ if (l2 && !e4) {
1892
+ e4 = r3;
1893
+ continue;
1894
+ }
1895
+ if (e4) continue;
1896
+ t3.push(r3);
1897
+ }
1898
+ }
1899
+ return t3;
1900
+ }), y2 = (0, a.computed)(function() {
1901
+ var t3 = e3.selectedValue;
1902
+ return t3 && "multiple" === e3.selectableType && Array.isArray(t3) ? t3 : [t3];
1903
+ }), v2 = (0, a.computed)(function() {
1904
+ return !e3.selectableType || e3.selectOnClickNode || e3.showSelectController ? "" : "When selectableType is not null, selectOnClickNode and showSelectController cannot be false at the same time, because this will cause the selection to fail.";
1905
+ }), b2 = function() {
1906
+ var t3 = h3.value;
1907
+ if (e3.virtual) {
1908
+ var n3, o3 = e3.height / e3.itemHeight, r3 = (null === (n3 = i2.value) || void 0 === n3 ? void 0 : n3.scrollTop) || 0, l2 = Math.floor(r3 / e3.itemHeight), a2 = l2 < 0 ? 0 : l2 + o3 > t3.length ? t3.length - o3 : l2;
1909
+ a2 < 0 && (a2 = 0);
1910
+ var c3 = a2 + o3;
1911
+ s2.translateY = a2 * e3.itemHeight, s2.visibleData = t3.filter(function(e4, t4) {
1912
+ return t4 >= a2 && t4 < c3;
1913
+ });
1914
+ } else s2.visibleData = t3;
1915
+ }, m2 = function() {
1916
+ b2();
1917
+ }, k2 = function(o3) {
1918
+ var l2, a2, c3 = o3.path, i3 = e3.selectableType;
1919
+ if ("multiple" === i3) {
1920
+ var u3 = y2.value.findIndex(function(e4) {
1921
+ return e4 === c3;
1922
+ }), d3 = n2(y2.value);
1923
+ -1 !== u3 ? d3.splice(u3, 1) : d3.push(c3), r2("update:selectedValue", d3), r2("selectedChange", d3, n2(y2.value));
1924
+ } else if ("single" === i3 && y2.value[0] !== c3) {
1925
+ var s3 = (l2 = y2.value, a2 = 1, function(e4) {
1926
+ if (Array.isArray(e4)) return e4;
1927
+ }(l2) || function(e4, t3) {
1928
+ var n3 = null == e4 ? null : "undefined" != typeof Symbol && e4[Symbol.iterator] || e4["@@iterator"];
1929
+ if (null != n3) {
1930
+ var o4, r3, l3 = [], a3 = true, c4 = false;
1931
+ try {
1932
+ for (n3 = n3.call(e4); !(a3 = (o4 = n3.next()).done) && (l3.push(o4.value), !t3 || l3.length !== t3); a3 = true) ;
1933
+ } catch (e5) {
1934
+ c4 = true, r3 = e5;
1935
+ } finally {
1936
+ try {
1937
+ a3 || null == n3.return || n3.return();
1938
+ } finally {
1939
+ if (c4) throw r3;
1940
+ }
1941
+ }
1942
+ return l3;
1943
+ }
1944
+ }(l2, a2) || t2(l2, a2) || function() {
1945
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
1946
+ }())[0], p2 = c3;
1947
+ r2("update:selectedValue", p2), r2("selectedChange", p2, s3);
1948
+ }
1949
+ }, w = function(e4) {
1950
+ r2("nodeClick", e4);
1951
+ }, N = function(e4, t3) {
1952
+ if (e4) s2.hiddenPaths = C(C({}, s2.hiddenPaths), {}, l({}, t3, 1));
1953
+ else {
1954
+ var n3 = C({}, s2.hiddenPaths);
1955
+ delete n3[t3], s2.hiddenPaths = n3;
1956
+ }
1957
+ }, j = function(t3, n3) {
1958
+ e3.collapsedOnClickBrackets && N(t3, n3), r2("bracketsClick", t3);
1959
+ }, S = function(e4, t3) {
1960
+ N(e4, t3), r2("iconClick", e4);
1961
+ }, O = function(t3, n3) {
1962
+ var o3 = f(e3.data), l2 = e3.rootPath;
1963
+ new Function("data", "val", "data".concat(n3.slice(l2.length), "=val"))(o3, t3), r2("update:data", o3);
1964
+ };
1965
+ return (0, a.watchEffect)(function() {
1966
+ v2.value && function(e4) {
1967
+ throw new Error("[VueJSONPretty] ".concat(e4));
1968
+ }(v2.value);
1969
+ }), (0, a.watchEffect)(function() {
1970
+ h3.value && b2();
1971
+ }), (0, a.watch)(function() {
1972
+ return e3.deep;
1973
+ }, function(e4) {
1974
+ e4 && (s2.hiddenPaths = d2(e4));
1975
+ }), function() {
1976
+ var t3, n3, o3 = null !== (t3 = e3.renderNodeKey) && void 0 !== t3 ? t3 : c2.renderNodeKey, r3 = null !== (n3 = e3.renderNodeValue) && void 0 !== n3 ? n3 : c2.renderNodeValue, l2 = s2.visibleData && s2.visibleData.map(function(t4) {
1977
+ return (0, a.createVNode)(g, { key: t4.id, node: t4, collapsed: !!s2.hiddenPaths[t4.path], showDoubleQuotes: e3.showDoubleQuotes, showLength: e3.showLength, checked: y2.value.includes(t4.path), selectableType: e3.selectableType, showLine: e3.showLine, showLineNumber: e3.showLineNumber, showSelectController: e3.showSelectController, selectOnClickNode: e3.selectOnClickNode, nodeSelectable: e3.nodeSelectable, highlightSelectedNode: e3.highlightSelectedNode, editable: e3.editable, editableTrigger: e3.editableTrigger, showIcon: e3.showIcon, showKeyValueSpace: e3.showKeyValueSpace, renderNodeKey: o3, renderNodeValue: r3, onNodeClick: w, onBracketsClick: j, onIconClick: S, onSelectedChange: k2, onValueChange: O, style: e3.itemHeight && 20 !== e3.itemHeight ? { lineHeight: "".concat(e3.itemHeight, "px") } : {} }, null);
1978
+ });
1979
+ return (0, a.createVNode)("div", { ref: i2, class: { "vjs-tree": true, "is-virtual": e3.virtual }, onScroll: e3.virtual ? m2 : void 0, style: e3.showLineNumber ? C({ paddingLeft: "".concat(12 * Number(u2.value.length.toString().length), "px") }, e3.style) : e3.style }, [e3.virtual ? (0, a.createVNode)("div", { class: "vjs-tree-list", style: { height: "".concat(e3.height, "px") } }, [(0, a.createVNode)("div", { class: "vjs-tree-list-holder", style: { height: "".concat(h3.value.length * e3.itemHeight, "px") } }, [(0, a.createVNode)("div", { class: "vjs-tree-list-holder-inner", style: { transform: "translateY(".concat(s2.translateY, "px)") } }, [l2])])]) : l2]);
1980
+ };
1981
+ } });
1982
+ }(), r;
1983
+ }();
1984
+ });
1985
+ })(vueJsonPretty$1);
1986
+ return vueJsonPretty$1.exports;
1987
+ }
1988
+ var vueJsonPrettyExports = requireVueJsonPretty();
1989
+ const VueJsonPretty = /* @__PURE__ */ getDefaultExportFromCjs(vueJsonPrettyExports);
1990
+ const sanitizeOptions = {
1991
+ allowVulnerableTags: false,
1992
+ enforceHtmlBoundary: false,
1993
+ disallowedTagsMode: "discard",
1994
+ allowedTags: [...sanitizeHtmlExports.defaults.allowedTags, "style", "img", "title"],
1995
+ allowedAttributes: {
1996
+ ...sanitizeHtmlExports.defaults.allowedAttributes,
1997
+ "*": ["class", "style"]
1998
+ },
1999
+ transformTags: {
2000
+ head: ""
2001
+ }
2002
+ };
2003
+ const _sfc_main$9 = {
2004
+ name: "RunDataHtml",
2005
+ props: {
2006
+ inputHtml: {
2007
+ type: String,
2008
+ required: true
2009
+ }
2010
+ },
2011
+ computed: {
2012
+ sanitizedHtml() {
2013
+ return sanitizeHtml(this.inputHtml, sanitizeOptions);
2014
+ }
2015
+ }
2016
+ };
2017
+ const _hoisted_1$8 = ["srcdoc"];
2018
+ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
2019
+ return openBlock(), createElementBlock("iframe", {
2020
+ class: "__html-display",
2021
+ srcdoc: $options.sanitizedHtml
2022
+ }, null, 8, _hoisted_1$8);
2023
+ }
2024
+ const RunDataHtml = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render]]);
2025
+ const RunDataHtml$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2026
+ __proto__: null,
2027
+ default: RunDataHtml
2028
+ }, Symbol.toStringTag, { value: "Module" }));
2029
+ const _hoisted_1$7 = { key: 0 };
2030
+ const _hoisted_2$4 = { key: 1 };
2031
+ const _hoisted_3$3 = { key: 2 };
2032
+ const _hoisted_4$3 = {
2033
+ key: 0,
2034
+ controls: "",
2035
+ autoplay: ""
2036
+ };
2037
+ const _hoisted_5$3 = ["src", "type"];
2038
+ const _hoisted_6$2 = {
2039
+ key: 1,
2040
+ controls: "",
2041
+ autoplay: ""
2042
+ };
2043
+ const _hoisted_7$2 = ["src", "type"];
2044
+ const _hoisted_8$2 = ["src"];
2045
+ const _hoisted_9$2 = ["src"];
2046
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2047
+ __name: "BinaryDataDisplayEmbed",
2048
+ props: {
2049
+ binaryData: {}
2050
+ },
2051
+ setup(__props) {
2052
+ const props = __props;
2053
+ const isLoading = ref(true);
2054
+ const embedSource = ref("");
2055
+ const error = ref(false);
2056
+ const data = ref("");
2057
+ const workflowsStore = useWorkflowsStore();
2058
+ const i18n = useI18n();
2059
+ const embedClass = computed(() => {
2060
+ return [props.binaryData.fileType ?? "other"];
2061
+ });
2062
+ onMounted(async () => {
2063
+ const { id, data: binaryData, fileName, fileType, mimeType } = props.binaryData;
2064
+ const isJSONData = fileType === "json";
2065
+ const isHTMLData = fileType === "html";
2066
+ if (!id) {
2067
+ if (isJSONData || isHTMLData) {
2068
+ data.value = isJSONData ? jsonParse(base64DecodeUTF8(binaryData)) : base64DecodeUTF8(binaryData);
2069
+ } else {
2070
+ embedSource.value = `data:${mimeType};charset=utf-8;base64,${binaryData}`;
2071
+ }
2072
+ } else {
2073
+ try {
2074
+ const binaryUrl = workflowsStore.getBinaryUrl(id, "view", fileName ?? "", mimeType);
2075
+ if (isJSONData || isHTMLData) {
2076
+ const fetchedData = await fetch(binaryUrl, { credentials: "include" });
2077
+ data.value = await (isJSONData ? fetchedData.json() : fetchedData.text());
2078
+ } else {
2079
+ embedSource.value = binaryUrl;
2080
+ }
2081
+ } catch (e) {
2082
+ error.value = true;
2083
+ }
2084
+ }
2085
+ isLoading.value = false;
2086
+ });
2087
+ return (_ctx, _cache) => {
2088
+ return openBlock(), createElementBlock("span", null, [
2089
+ isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_1$7, "Loading binary data...")) : error.value ? (openBlock(), createElementBlock("div", _hoisted_2$4, "Error loading binary data")) : (openBlock(), createElementBlock("span", _hoisted_3$3, [
2090
+ _ctx.binaryData.fileType === "video" ? (openBlock(), createElementBlock("video", _hoisted_4$3, [
2091
+ createBaseVNode("source", {
2092
+ src: embedSource.value,
2093
+ type: _ctx.binaryData.mimeType
2094
+ }, null, 8, _hoisted_5$3),
2095
+ createTextVNode(" " + toDisplayString(unref(i18n).baseText("binaryDataDisplay.yourBrowserDoesNotSupport")), 1)
2096
+ ])) : _ctx.binaryData.fileType === "audio" ? (openBlock(), createElementBlock("audio", _hoisted_6$2, [
2097
+ createBaseVNode("source", {
2098
+ src: embedSource.value,
2099
+ type: _ctx.binaryData.mimeType
2100
+ }, null, 8, _hoisted_7$2),
2101
+ createTextVNode(" " + toDisplayString(unref(i18n).baseText("binaryDataDisplay.yourBrowserDoesNotSupport")), 1)
2102
+ ])) : _ctx.binaryData.fileType === "image" ? (openBlock(), createElementBlock("img", {
2103
+ key: 2,
2104
+ src: embedSource.value
2105
+ }, null, 8, _hoisted_8$2)) : _ctx.binaryData.fileType === "json" ? (openBlock(), createBlock(unref(VueJsonPretty), {
2106
+ key: 3,
2107
+ data: data.value,
2108
+ deep: 3,
2109
+ "show-length": true
2110
+ }, null, 8, ["data"])) : _ctx.binaryData.fileType === "html" ? (openBlock(), createBlock(RunDataHtml, {
2111
+ key: 4,
2112
+ "input-html": data.value
2113
+ }, null, 8, ["input-html"])) : (openBlock(), createElementBlock("embed", {
2114
+ key: 5,
2115
+ src: embedSource.value,
2116
+ class: normalizeClass(["binary-data", embedClass.value])
2117
+ }, null, 10, _hoisted_9$2))
2118
+ ]))
2119
+ ]);
2120
+ };
2121
+ }
2122
+ });
2123
+ const _hoisted_1$6 = { class: "binary-data-window-wrapper" };
2124
+ const _hoisted_2$3 = { key: 0 };
2125
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2126
+ __name: "BinaryDataDisplay",
2127
+ props: {
2128
+ displayData: {},
2129
+ windowVisible: { type: Boolean }
2130
+ },
2131
+ emits: ["close"],
2132
+ setup(__props, { emit: __emit }) {
2133
+ const props = __props;
2134
+ const emit = __emit;
2135
+ const nodeHelpers = useNodeHelpers();
2136
+ const workflowsStore = useWorkflowsStore();
2137
+ const i18n = useI18n();
2138
+ const workflowRunData = computed(() => {
2139
+ const workflowExecution = workflowsStore.getWorkflowExecution;
2140
+ if (workflowExecution === null) {
2141
+ return null;
2142
+ }
2143
+ const executionData = workflowExecution.data;
2144
+ return executionData ? executionData.resultData.runData : null;
2145
+ });
2146
+ const binaryData = computed(() => {
2147
+ if (typeof props.displayData.node !== "string" || typeof props.displayData.key !== "string" || typeof props.displayData.runIndex !== "number" || typeof props.displayData.index !== "number" || typeof props.displayData.outputIndex !== "number") {
2148
+ return null;
2149
+ }
2150
+ const binaryDataLocal = nodeHelpers.getBinaryData(
2151
+ workflowRunData.value,
2152
+ props.displayData.node,
2153
+ props.displayData.runIndex,
2154
+ props.displayData.outputIndex
2155
+ );
2156
+ if (binaryDataLocal.length === 0) {
2157
+ return null;
2158
+ }
2159
+ if (props.displayData.index >= binaryDataLocal.length || binaryDataLocal[props.displayData.index][props.displayData.key] === void 0) {
2160
+ return null;
2161
+ }
2162
+ const binaryDataItem = binaryDataLocal[props.displayData.index][props.displayData.key];
2163
+ return binaryDataItem;
2164
+ });
2165
+ function closeWindow() {
2166
+ emit("close");
2167
+ return false;
2168
+ }
2169
+ return (_ctx, _cache) => {
2170
+ const _component_n8n_button = resolveComponent("n8n-button");
2171
+ return _ctx.windowVisible ? (openBlock(), createElementBlock("div", {
2172
+ key: 0,
2173
+ class: normalizeClass(["binary-data-window", binaryData.value?.fileType])
2174
+ }, [
2175
+ createVNode(_component_n8n_button, {
2176
+ size: "small",
2177
+ class: "binary-data-window-back",
2178
+ title: unref(i18n).baseText("binaryDataDisplay.backToOverviewPage"),
2179
+ icon: "arrow-left",
2180
+ label: unref(i18n).baseText("binaryDataDisplay.backToList"),
2181
+ onClick: withModifiers(closeWindow, ["stop"])
2182
+ }, null, 8, ["title", "label"]),
2183
+ createBaseVNode("div", _hoisted_1$6, [
2184
+ !binaryData.value ? (openBlock(), createElementBlock("div", _hoisted_2$3, toDisplayString(unref(i18n).baseText("binaryDataDisplay.noDataFoundToDisplay")), 1)) : (openBlock(), createBlock(_sfc_main$8, {
2185
+ key: 1,
2186
+ "binary-data": binaryData.value
2187
+ }, null, 8, ["binary-data"]))
2188
+ ])
2189
+ ], 2)) : createCommentVNode("", true);
2190
+ };
2191
+ }
2192
+ });
2193
+ const _hoisted_1$5 = { class: "node-error-view__header" };
2194
+ const _hoisted_2$2 = {
2195
+ class: "node-error-view__header-message",
2196
+ "data-test-id": "node-error-message"
2197
+ };
2198
+ const _hoisted_3$2 = {
2199
+ key: 0,
2200
+ "data-test-id": "node-error-description",
2201
+ class: "node-error-view__header-description"
2202
+ };
2203
+ const _hoisted_4$2 = { key: 1 };
2204
+ const _hoisted_5$2 = {
2205
+ key: 2,
2206
+ class: "node-error-view__button",
2207
+ "data-test-id": "node-error-view-ask-assistant-button"
2208
+ };
2209
+ const _hoisted_6$1 = {
2210
+ key: 0,
2211
+ class: "node-error-view__info"
2212
+ };
2213
+ const _hoisted_7$1 = { class: "node-error-view__info-header" };
2214
+ const _hoisted_8$1 = { class: "node-error-view__info-title" };
2215
+ const _hoisted_9$1 = { class: "copy-button" };
2216
+ const _hoisted_10 = { class: "node-error-view__info-content" };
2217
+ const _hoisted_11 = {
2218
+ key: 0,
2219
+ class: "node-error-view__details"
2220
+ };
2221
+ const _hoisted_12 = { class: "node-error-view__details-summary" };
2222
+ const _hoisted_13 = { class: "node-error-view__details-content" };
2223
+ const _hoisted_14 = {
2224
+ key: 0,
2225
+ class: "node-error-view__details-row"
2226
+ };
2227
+ const _hoisted_15 = { class: "node-error-view__details-label" };
2228
+ const _hoisted_16 = { class: "node-error-view__details-value" };
2229
+ const _hoisted_17 = {
2230
+ key: 1,
2231
+ class: "node-error-view__details-row"
2232
+ };
2233
+ const _hoisted_18 = { class: "node-error-view__details-label" };
2234
+ const _hoisted_19 = { class: "node-error-view__details-value" };
2235
+ const _hoisted_20 = {
2236
+ key: 2,
2237
+ class: "node-error-view__details-row"
2238
+ };
2239
+ const _hoisted_21 = { class: "node-error-view__details-label" };
2240
+ const _hoisted_22 = { class: "node-error-view__details-value" };
2241
+ const _hoisted_23 = {
2242
+ key: 3,
2243
+ class: "node-error-view__details-row"
2244
+ };
2245
+ const _hoisted_24 = { class: "node-error-view__details-label" };
2246
+ const _hoisted_25 = { class: "node-error-view__details-value" };
2247
+ const _hoisted_26 = {
2248
+ key: 4,
2249
+ class: "node-error-view__details-row"
2250
+ };
2251
+ const _hoisted_27 = { class: "node-error-view__details-label" };
2252
+ const _hoisted_28 = { class: "node-error-view__details-value" };
2253
+ const _hoisted_29 = { class: "node-error-view__details" };
2254
+ const _hoisted_30 = { class: "node-error-view__details-summary" };
2255
+ const _hoisted_31 = { class: "node-error-view__details-content" };
2256
+ const _hoisted_32 = {
2257
+ key: 0,
2258
+ class: "node-error-view__details-row"
2259
+ };
2260
+ const _hoisted_33 = { class: "node-error-view__details-label" };
2261
+ const _hoisted_34 = { class: "node-error-view__details-value" };
2262
+ const _hoisted_35 = {
2263
+ key: 1,
2264
+ class: "node-error-view__details-row"
2265
+ };
2266
+ const _hoisted_36 = { class: "node-error-view__details-label" };
2267
+ const _hoisted_37 = { class: "node-error-view__details-value" };
2268
+ const _hoisted_38 = {
2269
+ key: 2,
2270
+ class: "node-error-view__details-row"
2271
+ };
2272
+ const _hoisted_39 = { class: "node-error-view__details-label" };
2273
+ const _hoisted_40 = { class: "node-error-view__details-value" };
2274
+ const _hoisted_41 = {
2275
+ key: 3,
2276
+ class: "node-error-view__details-row"
2277
+ };
2278
+ const _hoisted_42 = { class: "node-error-view__details-label" };
2279
+ const _hoisted_43 = { class: "node-error-view__details-value" };
2280
+ const _hoisted_44 = {
2281
+ key: 4,
2282
+ class: "node-error-view__details-row"
2283
+ };
2284
+ const _hoisted_45 = { class: "node-error-view__details-label" };
2285
+ const _hoisted_46 = { class: "node-error-view__details-value" };
2286
+ const _hoisted_47 = { class: "node-error-view__details-row" };
2287
+ const _hoisted_48 = { class: "node-error-view__details-label" };
2288
+ const _hoisted_49 = { class: "node-error-view__details-value" };
2289
+ const _hoisted_50 = {
2290
+ key: 5,
2291
+ class: "node-error-view__details-row"
2292
+ };
2293
+ const _hoisted_51 = { class: "node-error-view__details-label" };
2294
+ const _hoisted_52 = { class: "node-error-view__details-value" };
2295
+ const _hoisted_53 = {
2296
+ key: 6,
2297
+ class: "node-error-view__details-row"
2298
+ };
2299
+ const _hoisted_54 = { class: "node-error-view__details-label" };
2300
+ const _hoisted_55 = { class: "node-error-view__details-value" };
2301
+ const _hoisted_56 = {
2302
+ key: 7,
2303
+ class: "node-error-view__details-row"
2304
+ };
2305
+ const _hoisted_57 = { class: "node-error-view__details-label" };
2306
+ const _hoisted_58 = { class: "node-error-view__details-value" };
2307
+ const _hoisted_59 = {
2308
+ key: 8,
2309
+ class: "node-error-view__details-row"
2310
+ };
2311
+ const _hoisted_60 = { class: "node-error-view__details-label" };
2312
+ const _hoisted_61 = { class: "node-error-view__details-value" };
2313
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2314
+ __name: "NodeErrorView",
2315
+ props: {
2316
+ error: {},
2317
+ showDetails: { type: Boolean },
2318
+ compact: { type: Boolean }
2319
+ },
2320
+ setup(__props) {
2321
+ const props = __props;
2322
+ const clipboard = useClipboard();
2323
+ const toast = useToast();
2324
+ const i18n = useI18n();
2325
+ const assistantHelpers = useAIAssistantHelpers();
2326
+ const nodeTypesStore = useNodeTypesStore();
2327
+ const ndvStore = useNDVStore();
2328
+ const rootStore = useRootStore();
2329
+ const assistantStore = useAssistantStore();
2330
+ const uiStore = useUIStore();
2331
+ const displayCause = computed(() => {
2332
+ return JSON.stringify(props.error.cause ?? "").length < MAX_DISPLAY_DATA_SIZE;
2333
+ });
2334
+ const node = computed(() => {
2335
+ return props.error.node || ndvStore.activeNode;
2336
+ });
2337
+ const parameters = computed(() => {
2338
+ if (!node.value) {
2339
+ return [];
2340
+ }
2341
+ const nodeType = nodeTypesStore.getNodeType(node.value.type, node.value.typeVersion);
2342
+ if (nodeType === null) {
2343
+ return [];
2344
+ }
2345
+ return nodeType.properties;
2346
+ });
2347
+ const n8nVersion = computed(() => {
2348
+ const baseUrl = rootStore.urlBaseEditor;
2349
+ let instanceType = "Self Hosted";
2350
+ if (baseUrl.includes("n8n.cloud")) {
2351
+ instanceType = "Cloud";
2352
+ }
2353
+ return rootStore.versionCli + ` (${instanceType})`;
2354
+ });
2355
+ const hasManyInputItems = computed(() => {
2356
+ return ndvStore.ndvInputData.length > 1;
2357
+ });
2358
+ const nodeDefaultName = computed(() => {
2359
+ if (!node.value) {
2360
+ return "Node";
2361
+ }
2362
+ const nodeType = nodeTypesStore.getNodeType(node.value.type, node.value.typeVersion);
2363
+ return nodeType?.defaults?.name || node.value.name;
2364
+ });
2365
+ const prepareRawMessages = computed(() => {
2366
+ const returnData = [];
2367
+ if (!props.error.messages?.length) {
2368
+ return [];
2369
+ }
2370
+ const errorMessage = getErrorMessage();
2371
+ Array.from(new Set(props.error.messages)).forEach((message) => {
2372
+ const isParsable = /^\d{3} - \{/.test(message);
2373
+ const parts = isParsable ? message.split(" - ").map((part) => part.trim()) : [];
2374
+ for (const part of parts) {
2375
+ try {
2376
+ const parsed = JSON.parse(part);
2377
+ if (typeof parsed === "object") {
2378
+ returnData.push(parsed);
2379
+ return;
3070
2380
  }
3071
- return e3;
2381
+ } catch (error) {
3072
2382
  }
3073
- var k = (0, a.defineComponent)({ name: "Tree", props: C(C({}, b), {}, { data: { type: [String, Number, Boolean, Array, Object], default: null }, deep: { type: Number, default: 1 / 0 }, pathCollapsible: { type: Function, default: function() {
3074
- return false;
3075
- } }, rootPath: { type: String, default: "root" }, virtual: { type: Boolean, default: false }, height: { type: Number, default: 400 }, itemHeight: { type: Number, default: 20 }, selectedValue: { type: [String, Array], default: function() {
3076
- return "";
3077
- } }, collapsedOnClickBrackets: { type: Boolean, default: true }, style: Object, onSelectedChange: { type: Function } }), slots: ["renderNodeKey", "renderNodeValue"], emits: ["nodeClick", "bracketsClick", "iconClick", "selectedChange", "update:selectedValue", "update:data"], setup: function(e3, o2) {
3078
- var r2 = o2.emit, c2 = o2.slots, i2 = (0, a.ref)(), u2 = (0, a.computed)(function() {
3079
- return p(e3.data, e3.rootPath);
3080
- }), d2 = function(t3) {
3081
- return u2.value.reduce(function(n3, o3) {
3082
- var r3, a2 = o3.level >= t3, c3 = null === (r3 = e3.pathCollapsible) || void 0 === r3 ? void 0 : r3.call(e3, o3);
3083
- return "objectStart" !== o3.type && "arrayStart" !== o3.type || !a2 && !c3 ? n3 : C(C({}, n3), {}, l({}, o3.path, 1));
3084
- }, {});
3085
- }, s2 = (0, a.reactive)({ translateY: 0, visibleData: null, hiddenPaths: d2(e3.deep) }), h3 = (0, a.computed)(function() {
3086
- for (var e4 = null, t3 = [], n3 = u2.value.length, o3 = 0; o3 < n3; o3++) {
3087
- var r3 = C(C({}, u2.value[o3]), {}, { id: o3 }), l2 = s2.hiddenPaths[r3.path];
3088
- if (e4 && e4.path === r3.path) {
3089
- var a2 = "objectStart" === e4.type, c3 = C(C(C({}, r3), e4), {}, { showComma: r3.showComma, content: a2 ? "{...}" : "[...]", type: a2 ? "objectCollapsed" : "arrayCollapsed" });
3090
- e4 = null, t3.push(c3);
3091
- } else {
3092
- if (l2 && !e4) {
3093
- e4 = r3;
3094
- continue;
3095
- }
3096
- if (e4) continue;
3097
- t3.push(r3);
3098
- }
3099
- }
3100
- return t3;
3101
- }), y2 = (0, a.computed)(function() {
3102
- var t3 = e3.selectedValue;
3103
- return t3 && "multiple" === e3.selectableType && Array.isArray(t3) ? t3 : [t3];
3104
- }), v2 = (0, a.computed)(function() {
3105
- return !e3.selectableType || e3.selectOnClickNode || e3.showSelectController ? "" : "When selectableType is not null, selectOnClickNode and showSelectController cannot be false at the same time, because this will cause the selection to fail.";
3106
- }), b2 = function() {
3107
- var t3 = h3.value;
3108
- if (e3.virtual) {
3109
- var n3, o3 = e3.height / e3.itemHeight, r3 = (null === (n3 = i2.value) || void 0 === n3 ? void 0 : n3.scrollTop) || 0, l2 = Math.floor(r3 / e3.itemHeight), a2 = l2 < 0 ? 0 : l2 + o3 > t3.length ? t3.length - o3 : l2;
3110
- a2 < 0 && (a2 = 0);
3111
- var c3 = a2 + o3;
3112
- s2.translateY = a2 * e3.itemHeight, s2.visibleData = t3.filter(function(e4, t4) {
3113
- return t4 >= a2 && t4 < c3;
3114
- });
3115
- } else s2.visibleData = t3;
3116
- }, m2 = function() {
3117
- b2();
3118
- }, k2 = function(o3) {
3119
- var l2, a2, c3 = o3.path, i3 = e3.selectableType;
3120
- if ("multiple" === i3) {
3121
- var u3 = y2.value.findIndex(function(e4) {
3122
- return e4 === c3;
3123
- }), d3 = n2(y2.value);
3124
- -1 !== u3 ? d3.splice(u3, 1) : d3.push(c3), r2("update:selectedValue", d3), r2("selectedChange", d3, n2(y2.value));
3125
- } else if ("single" === i3 && y2.value[0] !== c3) {
3126
- var s3 = (l2 = y2.value, a2 = 1, function(e4) {
3127
- if (Array.isArray(e4)) return e4;
3128
- }(l2) || function(e4, t3) {
3129
- var n3 = null == e4 ? null : "undefined" != typeof Symbol && e4[Symbol.iterator] || e4["@@iterator"];
3130
- if (null != n3) {
3131
- var o4, r3, l3 = [], a3 = true, c4 = false;
3132
- try {
3133
- for (n3 = n3.call(e4); !(a3 = (o4 = n3.next()).done) && (l3.push(o4.value), !t3 || l3.length !== t3); a3 = true) ;
3134
- } catch (e5) {
3135
- c4 = true, r3 = e5;
3136
- } finally {
3137
- try {
3138
- a3 || null == n3.return || n3.return();
3139
- } finally {
3140
- if (c4) throw r3;
3141
- }
3142
- }
3143
- return l3;
3144
- }
3145
- }(l2, a2) || t2(l2, a2) || function() {
3146
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
3147
- }())[0], p2 = c3;
3148
- r2("update:selectedValue", p2), r2("selectedChange", p2, s3);
3149
- }
3150
- }, w = function(e4) {
3151
- r2("nodeClick", e4);
3152
- }, N = function(e4, t3) {
3153
- if (e4) s2.hiddenPaths = C(C({}, s2.hiddenPaths), {}, l({}, t3, 1));
3154
- else {
3155
- var n3 = C({}, s2.hiddenPaths);
3156
- delete n3[t3], s2.hiddenPaths = n3;
3157
- }
3158
- }, j = function(t3, n3) {
3159
- e3.collapsedOnClickBrackets && N(t3, n3), r2("bracketsClick", t3);
3160
- }, S = function(e4, t3) {
3161
- N(e4, t3), r2("iconClick", e4);
3162
- }, O = function(t3, n3) {
3163
- var o3 = f(e3.data), l2 = e3.rootPath;
3164
- new Function("data", "val", "data".concat(n3.slice(l2.length), "=val"))(o3, t3), r2("update:data", o3);
3165
- };
3166
- return (0, a.watchEffect)(function() {
3167
- v2.value && function(e4) {
3168
- throw new Error("[VueJSONPretty] ".concat(e4));
3169
- }(v2.value);
3170
- }), (0, a.watchEffect)(function() {
3171
- h3.value && b2();
3172
- }), (0, a.watch)(function() {
3173
- return e3.deep;
3174
- }, function(e4) {
3175
- e4 && (s2.hiddenPaths = d2(e4));
3176
- }), function() {
3177
- var t3, n3, o3 = null !== (t3 = e3.renderNodeKey) && void 0 !== t3 ? t3 : c2.renderNodeKey, r3 = null !== (n3 = e3.renderNodeValue) && void 0 !== n3 ? n3 : c2.renderNodeValue, l2 = s2.visibleData && s2.visibleData.map(function(t4) {
3178
- return (0, a.createVNode)(g, { key: t4.id, node: t4, collapsed: !!s2.hiddenPaths[t4.path], showDoubleQuotes: e3.showDoubleQuotes, showLength: e3.showLength, checked: y2.value.includes(t4.path), selectableType: e3.selectableType, showLine: e3.showLine, showLineNumber: e3.showLineNumber, showSelectController: e3.showSelectController, selectOnClickNode: e3.selectOnClickNode, nodeSelectable: e3.nodeSelectable, highlightSelectedNode: e3.highlightSelectedNode, editable: e3.editable, editableTrigger: e3.editableTrigger, showIcon: e3.showIcon, showKeyValueSpace: e3.showKeyValueSpace, renderNodeKey: o3, renderNodeValue: r3, onNodeClick: w, onBracketsClick: j, onIconClick: S, onSelectedChange: k2, onValueChange: O, style: e3.itemHeight && 20 !== e3.itemHeight ? { lineHeight: "".concat(e3.itemHeight, "px") } : {} }, null);
3179
- });
3180
- return (0, a.createVNode)("div", { ref: i2, class: { "vjs-tree": true, "is-virtual": e3.virtual }, onScroll: e3.virtual ? m2 : void 0, style: e3.showLineNumber ? C({ paddingLeft: "".concat(12 * Number(u2.value.length.toString().length), "px") }, e3.style) : e3.style }, [e3.virtual ? (0, a.createVNode)("div", { class: "vjs-tree-list", style: { height: "".concat(e3.height, "px") } }, [(0, a.createVNode)("div", { class: "vjs-tree-list-holder", style: { height: "".concat(h3.value.length * e3.itemHeight, "px") } }, [(0, a.createVNode)("div", { class: "vjs-tree-list-holder-inner", style: { transform: "translateY(".concat(s2.translateY, "px)") } }, [l2])])]) : l2]);
3181
- };
3182
- } });
3183
- }(), r;
3184
- }();
2383
+ }
2384
+ if (message === errorMessage) return;
2385
+ returnData.push(message);
2386
+ });
2387
+ return returnData;
3185
2388
  });
3186
- })(vueJsonPretty$1);
3187
- return vueJsonPretty$1.exports;
3188
- }
3189
- var vueJsonPrettyExports = requireVueJsonPretty();
3190
- const VueJsonPretty = /* @__PURE__ */ getDefaultExportFromCjs(vueJsonPrettyExports);
3191
- const sanitizeOptions = {
3192
- allowVulnerableTags: false,
3193
- enforceHtmlBoundary: false,
3194
- disallowedTagsMode: "discard",
3195
- allowedTags: [...sanitizeHtmlExports.defaults.allowedTags, "style", "img", "title"],
3196
- allowedAttributes: {
3197
- ...sanitizeHtmlExports.defaults.allowedAttributes,
3198
- "*": ["class", "style"]
3199
- },
3200
- transformTags: {
3201
- head: ""
3202
- }
3203
- };
3204
- const _sfc_main$7 = {
3205
- name: "RunDataHtml",
3206
- props: {
3207
- inputHtml: {
3208
- type: String,
3209
- required: true
2389
+ const isAskAssistantAvailable = computed(() => {
2390
+ if (!node.value || isSubNodeError.value) {
2391
+ return false;
2392
+ }
2393
+ const isCustomNode = node.value.type === void 0 || isCommunityPackageName(node.value.type);
2394
+ return assistantStore.canShowAssistantButtonsOnCanvas && !isCustomNode && !nodeIsHidden();
2395
+ });
2396
+ const assistantAlreadyAsked = computed(() => {
2397
+ return assistantStore.isNodeErrorActive({
2398
+ error: assistantHelpers.simplifyErrorForAssistant(props.error),
2399
+ node: props.error.node || ndvStore.activeNode
2400
+ });
2401
+ });
2402
+ const isSubNodeError = computed(() => {
2403
+ return props.error.name === "NodeOperationError" && props.error.functionality === "configuration-node";
2404
+ });
2405
+ function nodeVersionTag(nodeType) {
2406
+ if (!nodeType || "hidden" in nodeType && nodeType.hidden) {
2407
+ return i18n.baseText("nodeSettings.deprecated");
2408
+ }
2409
+ const latestNodeVersion = Math.max(...nodeTypesStore.getNodeVersions(nodeType.type));
2410
+ if (latestNodeVersion === nodeType.typeVersion) {
2411
+ return i18n.baseText("nodeSettings.latest");
2412
+ }
2413
+ return i18n.baseText("nodeSettings.latestVersion", {
2414
+ interpolate: { version: latestNodeVersion.toString() }
2415
+ });
2416
+ }
2417
+ function prepareDescription(description) {
2418
+ return sanitizeHtml$1(description.replace(/`(.*?)`/g, "<code>$1</code>"));
2419
+ }
2420
+ function getErrorDescription() {
2421
+ if (props.error.context?.descriptionKey) {
2422
+ const interpolate = {
2423
+ nodeCause: props.error.context.nodeCause,
2424
+ runIndex: props.error.context.runIndex ?? "0",
2425
+ itemIndex: props.error.context.itemIndex ?? "0"
2426
+ };
2427
+ return prepareDescription(
2428
+ i18n.baseText(
2429
+ `nodeErrorView.description.${props.error.context.descriptionKey}`,
2430
+ { interpolate }
2431
+ )
2432
+ );
2433
+ }
2434
+ if (!props.error.context?.descriptionTemplate) {
2435
+ return prepareDescription(props.error.description ?? "");
2436
+ }
2437
+ const parameterName = parameterDisplayName(props.error.context.parameter);
2438
+ return prepareDescription(
2439
+ props.error.context.descriptionTemplate.replace(/%%PARAMETER%%/g, parameterName)
2440
+ );
2441
+ }
2442
+ function addItemIndexSuffix(message) {
2443
+ let itemIndexSuffix = "";
2444
+ if (hasManyInputItems.value && props.error?.context?.itemIndex !== void 0) {
2445
+ itemIndexSuffix = `item ${props.error.context.itemIndex}`;
2446
+ }
2447
+ if (message.includes(itemIndexSuffix)) return message;
2448
+ return `${message} [${itemIndexSuffix}]`;
2449
+ }
2450
+ function getErrorMessage() {
2451
+ let message = "";
2452
+ const isNonEmptyString = (value) => !!value && typeof value === "string";
2453
+ if (isSubNodeError.value) {
2454
+ message = i18n.baseText("nodeErrorView.errorSubNode", {
2455
+ interpolate: { node: props.error.node.name }
2456
+ });
2457
+ } else if (isNonEmptyString(props.error.message) && (props.error.message === props.error.description || !props.error.context?.messageTemplate)) {
2458
+ message = props.error.message;
2459
+ } else if (isNonEmptyString(props.error.context?.messageTemplate) && isNonEmptyString(props.error.context?.parameter)) {
2460
+ const parameterName = parameterDisplayName(props.error.context.parameter);
2461
+ message = props.error.context.messageTemplate.replace(/%%PARAMETER%%/g, parameterName);
2462
+ } else if (Array.isArray(props.error.messages) && props.error.messages.length > 0) {
2463
+ message = props.error.messages[0];
2464
+ }
2465
+ return addItemIndexSuffix(message);
2466
+ }
2467
+ function parameterDisplayName(path, fullPath = true) {
2468
+ try {
2469
+ const params = getParameterName(parameters.value, path.split("."));
2470
+ if (!params.length) {
2471
+ throw new Error();
2472
+ }
2473
+ if (!fullPath) {
2474
+ return params.pop().displayName;
2475
+ }
2476
+ return params.map((parameter) => parameter.displayName).join(" > ");
2477
+ } catch (error) {
2478
+ return `Could not find parameter "${path}"`;
2479
+ }
3210
2480
  }
3211
- },
3212
- computed: {
3213
- sanitizedHtml() {
3214
- return sanitizeHtml$1(this.inputHtml, sanitizeOptions);
2481
+ function getParameterName(params, pathParts) {
2482
+ let currentParameterName = pathParts.shift();
2483
+ if (currentParameterName === void 0) {
2484
+ return [];
2485
+ }
2486
+ const arrayMatch = currentParameterName.match(/(.*)\[([\d])\]$/);
2487
+ if (arrayMatch !== null && arrayMatch.length > 0) {
2488
+ currentParameterName = arrayMatch[1];
2489
+ }
2490
+ const currentParameter = params.find(
2491
+ (parameter) => parameter.name === currentParameterName
2492
+ );
2493
+ if (currentParameter === void 0) {
2494
+ throw new Error(`Could not find parameter "${currentParameterName}"`);
2495
+ }
2496
+ if (pathParts.length === 0) {
2497
+ return [currentParameter];
2498
+ }
2499
+ if (currentParameter.hasOwnProperty("options")) {
2500
+ return [
2501
+ currentParameter,
2502
+ ...getParameterName(currentParameter.options, pathParts)
2503
+ ];
2504
+ }
2505
+ if (currentParameter.hasOwnProperty("values")) {
2506
+ return [
2507
+ currentParameter,
2508
+ ...getParameterName(currentParameter.values, pathParts)
2509
+ ];
2510
+ }
2511
+ return [currentParameter];
3215
2512
  }
3216
- }
3217
- };
3218
- const _hoisted_1$6 = ["srcdoc"];
3219
- function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
3220
- return openBlock(), createElementBlock("iframe", {
3221
- class: "__html-display",
3222
- srcdoc: $options.sanitizedHtml
3223
- }, null, 8, _hoisted_1$6);
3224
- }
3225
- const RunDataHtml = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render]]);
3226
- const RunDataHtml$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3227
- __proto__: null,
3228
- default: RunDataHtml
3229
- }, Symbol.toStringTag, { value: "Module" }));
3230
- const _hoisted_1$5 = { key: 0 };
3231
- const _hoisted_2$3 = { key: 1 };
3232
- const _hoisted_3$2 = { key: 2 };
3233
- const _hoisted_4$2 = {
3234
- key: 0,
3235
- controls: "",
3236
- autoplay: ""
3237
- };
3238
- const _hoisted_5$2 = ["src", "type"];
3239
- const _hoisted_6$1 = {
3240
- key: 1,
3241
- controls: "",
3242
- autoplay: ""
3243
- };
3244
- const _hoisted_7$1 = ["src", "type"];
3245
- const _hoisted_8$1 = ["src"];
3246
- const _hoisted_9$1 = ["src"];
3247
- const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3248
- __name: "BinaryDataDisplayEmbed",
3249
- props: {
3250
- binaryData: {}
3251
- },
3252
- setup(__props) {
3253
- const props = __props;
3254
- const isLoading = ref(true);
3255
- const embedSource = ref("");
3256
- const error = ref(false);
3257
- const data = ref("");
3258
- const workflowsStore = useWorkflowsStore();
3259
- const i18n = useI18n();
3260
- const embedClass = computed(() => {
3261
- return [props.binaryData.fileType ?? "other"];
3262
- });
3263
- onMounted(async () => {
3264
- const { id, data: binaryData, fileName, fileType, mimeType } = props.binaryData;
3265
- const isJSONData = fileType === "json";
3266
- const isHTMLData = fileType === "html";
3267
- if (!id) {
3268
- if (isJSONData || isHTMLData) {
3269
- data.value = jsonParse(atob(binaryData));
3270
- } else {
3271
- embedSource.value = "data:" + mimeType + ";base64," + binaryData;
2513
+ function copyErrorDetails() {
2514
+ const error = props.error;
2515
+ const errorInfo = {
2516
+ errorMessage: getErrorMessage()
2517
+ };
2518
+ if (error.description) {
2519
+ errorInfo.errorDescription = error.description;
2520
+ }
2521
+ const errorDetails = {};
2522
+ if (error?.messages?.length) {
2523
+ errorDetails.rawErrorMessage = error.messages;
2524
+ }
2525
+ if ("httpCode" in error && error.httpCode) {
2526
+ errorDetails.httpCode = error.httpCode;
2527
+ }
2528
+ if (error.context && error.context.data) {
2529
+ errorDetails.errorData = error.context.data;
2530
+ }
2531
+ if (error.extra) {
2532
+ errorDetails.errorExtra = error.extra;
2533
+ }
2534
+ errorInfo.errorDetails = errorDetails;
2535
+ const n8nDetails = {};
2536
+ if (error.node) {
2537
+ n8nDetails.nodeName = error.node.name;
2538
+ n8nDetails.nodeType = error.node.type;
2539
+ n8nDetails.nodeVersion = error.node.typeVersion;
2540
+ if (error.node?.parameters?.resource) {
2541
+ n8nDetails.resource = error.node.parameters.resource;
3272
2542
  }
3273
- } else {
3274
- try {
3275
- const binaryUrl = workflowsStore.getBinaryUrl(id, "view", fileName ?? "", mimeType);
3276
- if (isJSONData || isHTMLData) {
3277
- const fetchedData = await fetch(binaryUrl, { credentials: "include" });
3278
- data.value = await (isJSONData ? fetchedData.json() : fetchedData.text());
3279
- } else {
3280
- embedSource.value = binaryUrl;
3281
- }
3282
- } catch (e) {
3283
- error.value = true;
2543
+ if (error?.node?.parameters?.operation) {
2544
+ n8nDetails.operation = error.node.parameters.operation;
3284
2545
  }
3285
2546
  }
3286
- isLoading.value = false;
3287
- });
3288
- return (_ctx, _cache) => {
3289
- return openBlock(), createElementBlock("span", null, [
3290
- isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_1$5, "Loading binary data...")) : error.value ? (openBlock(), createElementBlock("div", _hoisted_2$3, "Error loading binary data")) : (openBlock(), createElementBlock("span", _hoisted_3$2, [
3291
- _ctx.binaryData.fileType === "video" ? (openBlock(), createElementBlock("video", _hoisted_4$2, [
3292
- createBaseVNode("source", {
3293
- src: embedSource.value,
3294
- type: _ctx.binaryData.mimeType
3295
- }, null, 8, _hoisted_5$2),
3296
- createTextVNode(" " + toDisplayString(unref(i18n).baseText("binaryDataDisplay.yourBrowserDoesNotSupport")), 1)
3297
- ])) : _ctx.binaryData.fileType === "audio" ? (openBlock(), createElementBlock("audio", _hoisted_6$1, [
3298
- createBaseVNode("source", {
3299
- src: embedSource.value,
3300
- type: _ctx.binaryData.mimeType
3301
- }, null, 8, _hoisted_7$1),
3302
- createTextVNode(" " + toDisplayString(unref(i18n).baseText("binaryDataDisplay.yourBrowserDoesNotSupport")), 1)
3303
- ])) : _ctx.binaryData.fileType === "image" ? (openBlock(), createElementBlock("img", {
3304
- key: 2,
3305
- src: embedSource.value
3306
- }, null, 8, _hoisted_8$1)) : _ctx.binaryData.fileType === "json" ? (openBlock(), createBlock(unref(VueJsonPretty), {
3307
- key: 3,
3308
- data: data.value,
3309
- deep: 3,
3310
- "show-length": true
3311
- }, null, 8, ["data"])) : _ctx.binaryData.fileType === "html" ? (openBlock(), createBlock(RunDataHtml, {
3312
- key: 4,
3313
- "input-html": data.value
3314
- }, null, 8, ["input-html"])) : (openBlock(), createElementBlock("embed", {
3315
- key: 5,
3316
- src: embedSource.value,
3317
- class: normalizeClass(["binary-data", embedClass.value])
3318
- }, null, 10, _hoisted_9$1))
3319
- ]))
3320
- ]);
3321
- };
3322
- }
3323
- });
3324
- const _hoisted_1$4 = { class: "binary-data-window-wrapper" };
3325
- const _hoisted_2$2 = { key: 0 };
3326
- const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3327
- __name: "BinaryDataDisplay",
3328
- props: {
3329
- displayData: {},
3330
- windowVisible: { type: Boolean }
3331
- },
3332
- emits: ["close"],
3333
- setup(__props, { emit: __emit }) {
3334
- const props = __props;
3335
- const emit = __emit;
3336
- const nodeHelpers = useNodeHelpers();
3337
- const workflowsStore = useWorkflowsStore();
3338
- const i18n = useI18n();
3339
- const workflowRunData = computed(() => {
3340
- const workflowExecution = workflowsStore.getWorkflowExecution;
3341
- if (workflowExecution === null) {
3342
- return null;
2547
+ if (error.context) {
2548
+ if (error.context.itemIndex !== void 0) {
2549
+ n8nDetails.itemIndex = error.context.itemIndex;
2550
+ }
2551
+ if (error.context.runIndex !== void 0) {
2552
+ n8nDetails.runIndex = error.context.runIndex;
2553
+ }
2554
+ if (error.context.parameter !== void 0) {
2555
+ n8nDetails.parameter = error.context.parameter;
2556
+ }
2557
+ if (error.context.causeDetailed) {
2558
+ n8nDetails.causeDetailed = error.context.causeDetailed;
2559
+ }
3343
2560
  }
3344
- const executionData = workflowExecution.data;
3345
- return executionData ? executionData.resultData.runData : null;
3346
- });
3347
- const binaryData = computed(() => {
3348
- if (typeof props.displayData.node !== "string" || typeof props.displayData.key !== "string" || typeof props.displayData.runIndex !== "number" || typeof props.displayData.index !== "number" || typeof props.displayData.outputIndex !== "number") {
3349
- return null;
2561
+ if (error.timestamp) {
2562
+ n8nDetails.time = new Date(error.timestamp).toLocaleString();
3350
2563
  }
3351
- const binaryDataLocal = nodeHelpers.getBinaryData(
3352
- workflowRunData.value,
3353
- props.displayData.node,
3354
- props.displayData.runIndex,
3355
- props.displayData.outputIndex
3356
- );
3357
- if (binaryDataLocal.length === 0) {
3358
- return null;
2564
+ n8nDetails.n8nVersion = n8nVersion.value;
2565
+ n8nDetails.binaryDataMode = rootStore.binaryDataMode;
2566
+ if (error.cause) {
2567
+ n8nDetails.cause = error.cause;
3359
2568
  }
3360
- if (props.displayData.index >= binaryDataLocal.length || binaryDataLocal[props.displayData.index][props.displayData.key] === void 0) {
3361
- return null;
2569
+ n8nDetails.stackTrace = error.stack?.split("\n");
2570
+ errorInfo.n8nDetails = n8nDetails;
2571
+ void clipboard.copy(JSON.stringify(errorInfo, null, 2));
2572
+ copySuccess();
2573
+ }
2574
+ function copySuccess() {
2575
+ toast.showMessage({
2576
+ title: i18n.baseText("nodeErrorView.showMessage.title"),
2577
+ type: "info"
2578
+ });
2579
+ }
2580
+ function nodeIsHidden() {
2581
+ const nodeType = nodeTypesStore.getNodeType(node?.value.type);
2582
+ return nodeType?.hidden ?? false;
2583
+ }
2584
+ const onOpenErrorNodeDetailClick = () => {
2585
+ ndvStore.activeNodeName = props.error.node.name;
2586
+ };
2587
+ async function onAskAssistantClick() {
2588
+ const { message, lineNumber, description } = props.error;
2589
+ const sessionInProgress = !assistantStore.isSessionEnded;
2590
+ const errorHelp = {
2591
+ error: {
2592
+ name: props.error.name,
2593
+ message,
2594
+ lineNumber,
2595
+ description: description ?? getErrorDescription(),
2596
+ type: "type" in props.error ? props.error.type : void 0
2597
+ },
2598
+ node: node.value
2599
+ };
2600
+ if (sessionInProgress) {
2601
+ uiStore.openModalWithData({
2602
+ name: NEW_ASSISTANT_SESSION_MODAL,
2603
+ data: { context: { errorHelp } }
2604
+ });
2605
+ return;
3362
2606
  }
3363
- const binaryDataItem = binaryDataLocal[props.displayData.index][props.displayData.key];
3364
- return binaryDataItem;
3365
- });
3366
- function closeWindow() {
3367
- emit("close");
3368
- return false;
2607
+ await assistantStore.initErrorHelper(errorHelp);
2608
+ assistantStore.trackUserOpenedAssistant({
2609
+ source: "error",
2610
+ task: "error",
2611
+ has_existing_session: false
2612
+ });
3369
2613
  }
3370
2614
  return (_ctx, _cache) => {
3371
2615
  const _component_n8n_button = resolveComponent("n8n-button");
3372
- return _ctx.windowVisible ? (openBlock(), createElementBlock("div", {
3373
- key: 0,
3374
- class: normalizeClass(["binary-data-window", binaryData.value?.fileType])
2616
+ const _component_n8n_tooltip = resolveComponent("n8n-tooltip");
2617
+ const _component_font_awesome_icon = resolveComponent("font-awesome-icon");
2618
+ const _directive_n8n_html = resolveDirective("n8n-html");
2619
+ return openBlock(), createElementBlock("div", {
2620
+ class: normalizeClass(["node-error-view", props.compact ? "node-error-view_compact" : ""])
3375
2621
  }, [
3376
- createVNode(_component_n8n_button, {
3377
- size: "small",
3378
- class: "binary-data-window-back",
3379
- title: unref(i18n).baseText("binaryDataDisplay.backToOverviewPage"),
3380
- icon: "arrow-left",
3381
- label: unref(i18n).baseText("binaryDataDisplay.backToList"),
3382
- onClick: withModifiers(closeWindow, ["stop"])
3383
- }, null, 8, ["title", "label"]),
3384
- createBaseVNode("div", _hoisted_1$4, [
3385
- !binaryData.value ? (openBlock(), createElementBlock("div", _hoisted_2$2, toDisplayString(unref(i18n).baseText("binaryDataDisplay.noDataFoundToDisplay")), 1)) : (openBlock(), createBlock(_sfc_main$6, {
3386
- key: 1,
3387
- "binary-data": binaryData.value
3388
- }, null, 8, ["binary-data"]))
3389
- ])
3390
- ], 2)) : createCommentVNode("", true);
2622
+ createBaseVNode("div", _hoisted_1$5, [
2623
+ createBaseVNode("div", _hoisted_2$2, [
2624
+ createBaseVNode("div", null, toDisplayString(getErrorMessage()), 1)
2625
+ ]),
2626
+ (_ctx.error.description || _ctx.error.context?.descriptionKey) && !isSubNodeError.value ? withDirectives((openBlock(), createElementBlock("div", _hoisted_3$2, null, 512)), [
2627
+ [_directive_n8n_html, getErrorDescription()]
2628
+ ]) : createCommentVNode("", true),
2629
+ isSubNodeError.value ? (openBlock(), createElementBlock("div", _hoisted_4$2, [
2630
+ createVNode(_component_n8n_button, {
2631
+ icon: "arrow-right",
2632
+ type: "secondary",
2633
+ label: unref(i18n).baseText("pushConnection.executionError.openNode"),
2634
+ class: "node-error-view__button",
2635
+ "data-test-id": "node-error-view-open-node-button",
2636
+ onClick: onOpenErrorNodeDetailClick
2637
+ }, null, 8, ["label"])
2638
+ ])) : createCommentVNode("", true),
2639
+ isAskAssistantAvailable.value ? (openBlock(), createElementBlock("div", _hoisted_5$2, [
2640
+ createVNode(InlineAskAssistantButton, {
2641
+ asked: assistantAlreadyAsked.value,
2642
+ onClick: onAskAssistantClick
2643
+ }, null, 8, ["asked"])
2644
+ ])) : createCommentVNode("", true)
2645
+ ]),
2646
+ _ctx.showDetails ? (openBlock(), createElementBlock("div", _hoisted_6$1, [
2647
+ createBaseVNode("div", _hoisted_7$1, [
2648
+ createBaseVNode("p", _hoisted_8$1, toDisplayString(unref(i18n).baseText("nodeErrorView.details.title")), 1),
2649
+ createVNode(_component_n8n_tooltip, {
2650
+ class: "item",
2651
+ content: unref(i18n).baseText("nodeErrorView.copyToClipboard.tooltip"),
2652
+ placement: "left"
2653
+ }, {
2654
+ default: withCtx(() => [
2655
+ createBaseVNode("div", _hoisted_9$1, [
2656
+ createVNode(unref(_sfc_main$b), {
2657
+ icon: "copy",
2658
+ type: "secondary",
2659
+ size: "mini",
2660
+ text: true,
2661
+ "transparent-background": "transparent",
2662
+ onClick: copyErrorDetails
2663
+ })
2664
+ ])
2665
+ ]),
2666
+ _: 1
2667
+ }, 8, ["content"])
2668
+ ]),
2669
+ createBaseVNode("div", _hoisted_10, [
2670
+ "httpCode" in _ctx.error && _ctx.error.httpCode || prepareRawMessages.value.length || _ctx.error?.context?.data || _ctx.error.extra ? (openBlock(), createElementBlock("details", _hoisted_11, [
2671
+ createBaseVNode("summary", _hoisted_12, [
2672
+ createVNode(_component_font_awesome_icon, {
2673
+ class: "node-error-view__details-icon",
2674
+ icon: "angle-right"
2675
+ }),
2676
+ createTextVNode(" " + toDisplayString(unref(i18n).baseText("nodeErrorView.details.from", {
2677
+ interpolate: { node: `${nodeDefaultName.value}` }
2678
+ })), 1)
2679
+ ]),
2680
+ createBaseVNode("div", _hoisted_13, [
2681
+ "httpCode" in _ctx.error && _ctx.error.httpCode ? (openBlock(), createElementBlock("div", _hoisted_14, [
2682
+ createBaseVNode("p", _hoisted_15, toDisplayString(unref(i18n).baseText("nodeErrorView.errorCode")), 1),
2683
+ createBaseVNode("p", _hoisted_16, [
2684
+ createBaseVNode("code", null, toDisplayString(_ctx.error.httpCode), 1)
2685
+ ])
2686
+ ])) : createCommentVNode("", true),
2687
+ prepareRawMessages.value.length ? (openBlock(), createElementBlock("div", _hoisted_17, [
2688
+ createBaseVNode("p", _hoisted_18, toDisplayString(unref(i18n).baseText("nodeErrorView.details.rawMessages")), 1),
2689
+ createBaseVNode("div", _hoisted_19, [
2690
+ (openBlock(true), createElementBlock(Fragment, null, renderList(prepareRawMessages.value, (msg, index) => {
2691
+ return openBlock(), createElementBlock("div", { key: index }, [
2692
+ createBaseVNode("pre", null, [
2693
+ createBaseVNode("code", null, toDisplayString(msg), 1)
2694
+ ])
2695
+ ]);
2696
+ }), 128))
2697
+ ])
2698
+ ])) : createCommentVNode("", true),
2699
+ _ctx.error?.context?.data ? (openBlock(), createElementBlock("div", _hoisted_20, [
2700
+ createBaseVNode("p", _hoisted_21, toDisplayString(unref(i18n).baseText("nodeErrorView.details.errorData")), 1),
2701
+ createBaseVNode("div", _hoisted_22, [
2702
+ createBaseVNode("pre", null, [
2703
+ createBaseVNode("code", null, toDisplayString(_ctx.error.context.data), 1)
2704
+ ])
2705
+ ])
2706
+ ])) : createCommentVNode("", true),
2707
+ _ctx.error.extra ? (openBlock(), createElementBlock("div", _hoisted_23, [
2708
+ createBaseVNode("p", _hoisted_24, toDisplayString(unref(i18n).baseText("nodeErrorView.details.errorExtra")), 1),
2709
+ createBaseVNode("div", _hoisted_25, [
2710
+ createBaseVNode("pre", null, [
2711
+ createBaseVNode("code", null, toDisplayString(_ctx.error.extra), 1)
2712
+ ])
2713
+ ])
2714
+ ])) : createCommentVNode("", true),
2715
+ _ctx.error.context && _ctx.error.context.request ? (openBlock(), createElementBlock("div", _hoisted_26, [
2716
+ createBaseVNode("p", _hoisted_27, toDisplayString(unref(i18n).baseText("nodeErrorView.details.request")), 1),
2717
+ createBaseVNode("div", _hoisted_28, [
2718
+ createBaseVNode("pre", null, [
2719
+ createBaseVNode("code", null, toDisplayString(_ctx.error.context.request), 1)
2720
+ ])
2721
+ ])
2722
+ ])) : createCommentVNode("", true)
2723
+ ])
2724
+ ])) : createCommentVNode("", true),
2725
+ createBaseVNode("details", _hoisted_29, [
2726
+ createBaseVNode("summary", _hoisted_30, [
2727
+ createVNode(_component_font_awesome_icon, {
2728
+ class: "node-error-view__details-icon",
2729
+ icon: "angle-right"
2730
+ }),
2731
+ createTextVNode(" " + toDisplayString(unref(i18n).baseText("nodeErrorView.details.info")), 1)
2732
+ ]),
2733
+ createBaseVNode("div", _hoisted_31, [
2734
+ _ctx.error.context && _ctx.error.context.itemIndex !== void 0 ? (openBlock(), createElementBlock("div", _hoisted_32, [
2735
+ createBaseVNode("p", _hoisted_33, toDisplayString(unref(i18n).baseText("nodeErrorView.itemIndex")), 1),
2736
+ createBaseVNode("p", _hoisted_34, [
2737
+ createBaseVNode("code", null, toDisplayString(_ctx.error.context.itemIndex), 1)
2738
+ ])
2739
+ ])) : createCommentVNode("", true),
2740
+ _ctx.error.context && _ctx.error.context.runIndex !== void 0 ? (openBlock(), createElementBlock("div", _hoisted_35, [
2741
+ createBaseVNode("p", _hoisted_36, toDisplayString(unref(i18n).baseText("nodeErrorView.runIndex")), 1),
2742
+ createBaseVNode("p", _hoisted_37, [
2743
+ createBaseVNode("code", null, toDisplayString(_ctx.error.context.runIndex), 1)
2744
+ ])
2745
+ ])) : createCommentVNode("", true),
2746
+ _ctx.error.context && _ctx.error.context.parameter !== void 0 ? (openBlock(), createElementBlock("div", _hoisted_38, [
2747
+ createBaseVNode("p", _hoisted_39, toDisplayString(unref(i18n).baseText("nodeErrorView.inParameter")), 1),
2748
+ createBaseVNode("p", _hoisted_40, [
2749
+ createBaseVNode("code", null, toDisplayString(parameterDisplayName(`${_ctx.error.context.parameter}`)), 1)
2750
+ ])
2751
+ ])) : createCommentVNode("", true),
2752
+ _ctx.error.node && _ctx.error.node.type ? (openBlock(), createElementBlock("div", _hoisted_41, [
2753
+ createBaseVNode("p", _hoisted_42, toDisplayString(unref(i18n).baseText("nodeErrorView.details.nodeType")), 1),
2754
+ createBaseVNode("p", _hoisted_43, [
2755
+ createBaseVNode("code", null, toDisplayString(_ctx.error.node.type), 1)
2756
+ ])
2757
+ ])) : createCommentVNode("", true),
2758
+ _ctx.error.node && _ctx.error.node.typeVersion ? (openBlock(), createElementBlock("div", _hoisted_44, [
2759
+ createBaseVNode("p", _hoisted_45, toDisplayString(unref(i18n).baseText("nodeErrorView.details.nodeVersion")), 1),
2760
+ createBaseVNode("p", _hoisted_46, [
2761
+ createBaseVNode("code", null, [
2762
+ createBaseVNode("span", null, toDisplayString(_ctx.error.node.typeVersion + " "), 1),
2763
+ createBaseVNode("span", null, "(" + toDisplayString(nodeVersionTag(_ctx.error.node)) + ")", 1)
2764
+ ])
2765
+ ])
2766
+ ])) : createCommentVNode("", true),
2767
+ createBaseVNode("div", _hoisted_47, [
2768
+ createBaseVNode("p", _hoisted_48, toDisplayString(unref(i18n).baseText("nodeErrorView.details.n8nVersion")), 1),
2769
+ createBaseVNode("p", _hoisted_49, [
2770
+ createBaseVNode("code", null, toDisplayString(n8nVersion.value), 1)
2771
+ ])
2772
+ ]),
2773
+ _ctx.error.timestamp ? (openBlock(), createElementBlock("div", _hoisted_50, [
2774
+ createBaseVNode("p", _hoisted_51, toDisplayString(unref(i18n).baseText("nodeErrorView.time")), 1),
2775
+ createBaseVNode("p", _hoisted_52, [
2776
+ createBaseVNode("code", null, toDisplayString(new Date(_ctx.error.timestamp).toLocaleString()), 1)
2777
+ ])
2778
+ ])) : createCommentVNode("", true),
2779
+ _ctx.error.cause && displayCause.value ? (openBlock(), createElementBlock("div", _hoisted_53, [
2780
+ createBaseVNode("p", _hoisted_54, toDisplayString(unref(i18n).baseText("nodeErrorView.details.errorCause")), 1),
2781
+ createBaseVNode("pre", _hoisted_55, [
2782
+ createBaseVNode("code", null, toDisplayString(_ctx.error.cause), 1)
2783
+ ])
2784
+ ])) : createCommentVNode("", true),
2785
+ _ctx.error.context && _ctx.error.context.causeDetailed ? (openBlock(), createElementBlock("div", _hoisted_56, [
2786
+ createBaseVNode("p", _hoisted_57, toDisplayString(unref(i18n).baseText("nodeErrorView.details.causeDetailed")), 1),
2787
+ createBaseVNode("pre", _hoisted_58, [
2788
+ createBaseVNode("code", null, toDisplayString(_ctx.error.context.causeDetailed), 1)
2789
+ ])
2790
+ ])) : createCommentVNode("", true),
2791
+ _ctx.error.stack ? (openBlock(), createElementBlock("div", _hoisted_59, [
2792
+ createBaseVNode("p", _hoisted_60, toDisplayString(unref(i18n).baseText("nodeErrorView.details.stackTrace")), 1),
2793
+ createBaseVNode("pre", _hoisted_61, [
2794
+ createBaseVNode("code", null, toDisplayString(_ctx.error.stack), 1)
2795
+ ])
2796
+ ])) : createCommentVNode("", true)
2797
+ ])
2798
+ ])
2799
+ ])
2800
+ ])) : createCommentVNode("", true)
2801
+ ], 2);
3391
2802
  };
3392
2803
  }
3393
2804
  });
3394
- const _hoisted_1$3 = { key: 0 };
2805
+ const _hoisted_1$4 = { key: 0 };
3395
2806
  const _hoisted_2$1 = { key: 1 };
3396
2807
  const _hoisted_3$1 = { key: 2 };
3397
2808
  const _hoisted_4$1 = { key: 0 };
3398
2809
  const _hoisted_5$1 = { key: 1 };
3399
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
2810
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3400
2811
  __name: "RunDataPinButton",
3401
2812
  props: {
3402
2813
  tooltipContentsVisibility: {},
@@ -3418,7 +2829,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3418
2829
  visible: visible.value
3419
2830
  }, {
3420
2831
  content: withCtx(() => [
3421
- props.tooltipContentsVisibility.binaryDataTooltipContent ? (openBlock(), createElementBlock("div", _hoisted_1$3, toDisplayString(unref(locale).baseText("ndv.pinData.pin.binary")), 1)) : props.tooltipContentsVisibility.pinDataDiscoveryTooltipContent ? (openBlock(), createElementBlock("div", _hoisted_2$1, toDisplayString(unref(locale).baseText("node.discovery.pinData.ndv")), 1)) : (openBlock(), createElementBlock("div", _hoisted_3$1, [
2832
+ props.tooltipContentsVisibility.binaryDataTooltipContent ? (openBlock(), createElementBlock("div", _hoisted_1$4, toDisplayString(unref(locale).baseText("ndv.pinData.pin.binary")), 1)) : props.tooltipContentsVisibility.pinDataDiscoveryTooltipContent ? (openBlock(), createElementBlock("div", _hoisted_2$1, toDisplayString(unref(locale).baseText("node.discovery.pinData.ndv")), 1)) : (openBlock(), createElementBlock("div", _hoisted_3$1, [
3422
2833
  _ctx.pinnedData.hasData.value ? (openBlock(), createElementBlock("div", _hoisted_4$1, [
3423
2834
  createBaseVNode("strong", null, toDisplayString(unref(locale).baseText("ndv.pinData.unpin.title")), 1)
3424
2835
  ])) : (openBlock(), createElementBlock("div", _hoisted_5$1, [
@@ -3461,13 +2872,72 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3461
2872
  }
3462
2873
  });
3463
2874
  const pinDataButton = "_pinDataButton_12tk2_123";
3464
- const style0$3 = {
2875
+ const style0$4 = {
3465
2876
  pinDataButton
3466
2877
  };
2878
+ const cssModules$4 = {
2879
+ "$style": style0$4
2880
+ };
2881
+ const RunDataPinButton = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__cssModules", cssModules$4]]);
2882
+ const _hoisted_1$3 = ["href"];
2883
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
2884
+ __name: "ViewSubExecution",
2885
+ props: {
2886
+ taskMetadata: {},
2887
+ displayMode: {},
2888
+ inline: { type: Boolean, default: false }
2889
+ },
2890
+ setup(__props) {
2891
+ const { trackOpeningRelatedExecution, resolveRelatedExecutionUrl } = useExecutionHelpers();
2892
+ const i18n = useI18n();
2893
+ const props = __props;
2894
+ const hasRelatedExecution = computed(() => {
2895
+ return Boolean(props.taskMetadata.subExecution ?? props.taskMetadata.parentExecution);
2896
+ });
2897
+ function getExecutionLinkLabel(task) {
2898
+ if (task.parentExecution) {
2899
+ return i18n.baseText("runData.openParentExecution", {
2900
+ interpolate: { id: task.parentExecution.executionId }
2901
+ });
2902
+ }
2903
+ if (task.subExecution) {
2904
+ if (props.taskMetadata.subExecutionsCount === 1) {
2905
+ return i18n.baseText("runData.openSubExecutionSingle");
2906
+ } else {
2907
+ return i18n.baseText("runData.openSubExecutionWithId", {
2908
+ interpolate: { id: task.subExecution.executionId }
2909
+ });
2910
+ }
2911
+ }
2912
+ return;
2913
+ }
2914
+ return (_ctx, _cache) => {
2915
+ const _component_N8nIcon = resolveComponent("N8nIcon");
2916
+ return hasRelatedExecution.value ? (openBlock(), createElementBlock("a", {
2917
+ key: 0,
2918
+ class: normalizeClass({ [_ctx.$style.relatedExecutionInfo]: !_ctx.inline }),
2919
+ "data-test-id": "related-execution-link",
2920
+ href: unref(resolveRelatedExecutionUrl)(_ctx.taskMetadata),
2921
+ target: "_blank",
2922
+ onClick: _cache[0] || (_cache[0] = withModifiers(($event) => unref(trackOpeningRelatedExecution)(_ctx.taskMetadata, _ctx.displayMode), ["stop"]))
2923
+ }, [
2924
+ createVNode(_component_N8nIcon, {
2925
+ icon: "external-link-alt",
2926
+ size: "xsmall"
2927
+ }),
2928
+ createTextVNode(" " + toDisplayString(getExecutionLinkLabel(_ctx.taskMetadata)), 1)
2929
+ ], 10, _hoisted_1$3)) : createCommentVNode("", true);
2930
+ };
2931
+ }
2932
+ });
2933
+ const relatedExecutionInfo = "_relatedExecutionInfo_saqms_123";
2934
+ const style0$3 = {
2935
+ relatedExecutionInfo
2936
+ };
3467
2937
  const cssModules$3 = {
3468
2938
  "$style": style0$3
3469
2939
  };
3470
- const RunDataPinButton = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__cssModules", cssModules$3]]);
2940
+ const ViewSubExecution = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__cssModules", cssModules$3]]);
3471
2941
  const _hoisted_1$2 = { key: 0 };
3472
2942
  const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3473
2943
  __name: "RunDataItemCount",
@@ -3723,22 +3193,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
3723
3193
  emits: ["search", "runChange", "itemHover", "linkRun", "unlinkRun", "activatePane", "tableMounted", "displayModeChange"],
3724
3194
  setup(__props, { expose: __expose, emit: __emit }) {
3725
3195
  const LazyRunDataTable = defineAsyncComponent(
3726
- async () => await __vitePreload(() => import("./RunDataTable-CQghTfxP.js"), true ? __vite__mapDeps([0,1,2,3,4]) : void 0)
3196
+ async () => await __vitePreload(() => import("./RunDataTable-CSRGOCHh.js"), true ? __vite__mapDeps([0,1,2,3,4]) : void 0)
3727
3197
  );
3728
3198
  const LazyRunDataJson = defineAsyncComponent(
3729
- async () => await __vitePreload(() => import("./RunDataJson-CeZYY8D_.js"), true ? __vite__mapDeps([5,1,2,6,3,7]) : void 0)
3199
+ async () => await __vitePreload(() => import("./RunDataJson-LDc1ImEr.js"), true ? __vite__mapDeps([5,1,2,6,3,7]) : void 0)
3730
3200
  );
3731
3201
  const LazyRunDataSchema = defineAsyncComponent(
3732
- async () => await __vitePreload(() => import("./index-HDYArLT1.js").then((n) => n.ij), true ? __vite__mapDeps([1,2]) : void 0)
3202
+ async () => await __vitePreload(() => import("./index-Bpsc-Tmx.js").then((n) => n.iu), true ? __vite__mapDeps([1,2]) : void 0)
3733
3203
  );
3734
3204
  const LazyRunDataHtml = defineAsyncComponent(
3735
3205
  async () => await __vitePreload(() => Promise.resolve().then(() => RunDataHtml$1), true ? void 0 : void 0)
3736
3206
  );
3737
3207
  const LazyRunDataAi = defineAsyncComponent(
3738
- async () => await __vitePreload(() => import("./RunDataParsedAiContent-C1lte0Et.js"), true ? __vite__mapDeps([8,1,2,6,3,9]) : void 0)
3208
+ async () => await __vitePreload(() => import("./RunDataParsedAiContent-BU8uoK2N.js"), true ? __vite__mapDeps([8,1,2,6,3,9]) : void 0)
3739
3209
  );
3740
3210
  const LazyRunDataSearch = defineAsyncComponent(
3741
- async () => await __vitePreload(() => import("./RunDataSearch-BP_FSk35.js"), true ? __vite__mapDeps([10,1,2,11]) : void 0)
3211
+ async () => await __vitePreload(() => import("./RunDataSearch-DGVpnOkl.js"), true ? __vite__mapDeps([10,1,2,11]) : void 0)
3742
3212
  );
3743
3213
  const props = __props;
3744
3214
  const emit = __emit;
@@ -4678,7 +4148,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4678
4148
  ]),
4679
4149
  _: 1
4680
4150
  }, 8, ["class"])) : createCommentVNode("", true),
4681
- binaryDataDisplayData.value ? (openBlock(), createBlock(_sfc_main$5, {
4151
+ binaryDataDisplayData.value ? (openBlock(), createBlock(_sfc_main$7, {
4682
4152
  key: 1,
4683
4153
  "window-visible": binaryDataDisplayVisible.value,
4684
4154
  "display-data": binaryDataDisplayData.value,
@@ -4973,7 +4443,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4973
4443
  key: 2,
4974
4444
  class: normalizeClass(_ctx.$style.stretchVertically)
4975
4445
  }, [
4976
- createVNode(_sfc_main$a, {
4446
+ createVNode(_sfc_main$6, {
4977
4447
  compact: _ctx.compact,
4978
4448
  error: subworkflowExecutionError.value,
4979
4449
  class: normalizeClass(_ctx.$style.errorDisplay),
@@ -5068,14 +4538,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5068
4538
  ]),
5069
4539
  _: 1
5070
4540
  }, 8, ["class"])) : _ctx.$slots["content"] ? (openBlock(), createElementBlock("div", _hoisted_2, [
5071
- workflowRunErrorAsNodeError.value ? (openBlock(), createBlock(_sfc_main$a, {
4541
+ workflowRunErrorAsNodeError.value ? (openBlock(), createBlock(_sfc_main$6, {
5072
4542
  key: 0,
5073
4543
  error: workflowRunErrorAsNodeError.value,
5074
4544
  class: normalizeClass(_ctx.$style.inlineError),
5075
4545
  compact: _ctx.compact
5076
4546
  }, null, 8, ["error", "class", "compact"])) : createCommentVNode("", true),
5077
4547
  renderSlot(_ctx.$slots, "content", {}, void 0, true)
5078
- ])) : workflowRunErrorAsNodeError.value ? (openBlock(), createBlock(_sfc_main$a, {
4548
+ ])) : workflowRunErrorAsNodeError.value ? (openBlock(), createBlock(_sfc_main$6, {
5079
4549
  key: 2,
5080
4550
  error: workflowRunErrorAsNodeError.value,
5081
4551
  class: normalizeClass(_ctx.$style.dataDisplay),
@@ -5526,30 +4996,13 @@ const style0 = {
5526
4996
  const cssModules = {
5527
4997
  "$style": style0
5528
4998
  };
5529
- const RunData = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cssModules], ["__scopeId", "data-v-2931a4da"]]);
4999
+ const RunData = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cssModules], ["__scopeId", "data-v-44a9b4ca"]]);
5530
5000
  export {
5531
5001
  HighlightJS as H,
5532
5002
  RunData as R,
5533
5003
  VueMarkdown as V,
5534
- _sfc_main$9 as _,
5535
- getTotalConsumedTokens as a,
5536
- findSelectedLogEntry as b,
5537
- createLogTree as c,
5538
- deepToRaw as d,
5539
- getEntryAtRelativeIndex as e,
5540
- formatTokenUsageCount as f,
5541
- getSubtreeTotalConsumedTokens as g,
5542
- hasSubExecution as h,
5543
- getDepth as i,
5544
- findLogEntryRec as j,
5545
- flattenLogEntries as k,
5546
- _sfc_main$a as l,
5547
- mergeStartData as m,
5548
- getConsumedTokens as n,
5549
- ViewSubExecution as o,
5550
- parseAiContent as p,
5551
- createAiData as q,
5552
- getTreeNodeData as r,
5553
- getReferencedData as s,
5554
- VueJsonPretty as t
5004
+ _sfc_main$a as _,
5005
+ VueJsonPretty as a,
5006
+ _sfc_main$6 as b,
5007
+ ViewSubExecution as c
5555
5008
  };