n8n-editor-ui 1.101.0 → 1.102.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.
- package/dist/assets/{ActionDropdown-BujIG0Jq.js → ActionDropdown-D-JmCYsp.js} +2 -2
- package/dist/assets/{AnimatedSpinner-B5cpb6Fs.js → AnimatedSpinner-BiuDg2x2.js} +1 -1
- package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BPigGQTI.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-Bp194Fz4.js} +1 -1
- package/dist/assets/{AuthView-BOTPYtpM.js → AuthView-DF-20OPE.js} +2 -2
- package/dist/assets/{ChangePasswordView-DbeC55bz.js → ChangePasswordView-DSn8-M1-.js} +3 -3
- package/dist/assets/CollectionParameter-Bz5DzZqs.js +4 -0
- package/dist/assets/{CredentialsView-DUh5K-2r.js → CredentialsView-IQx76pD4.js} +8 -8
- package/dist/assets/{DemoFooter-BXPfbNJE.js → DemoFooter-49OiW0k2.js} +8 -7
- package/dist/assets/{EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-CDDQIxv5.js → EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-FNKd4r6R.js} +1 -1
- package/dist/assets/{EntityNotFound-CBUuOOYw.js → EntityNotFound-DScKsOtg.js} +1 -1
- package/dist/assets/{EntityUnAuthorised-7xgN3ECo.js → EntityUnAuthorised-DweZmhgI.js} +1 -1
- package/dist/assets/{ErrorView-BVfcsoOa.js → ErrorView-CNDVS4gm.js} +4 -4
- package/dist/assets/{EvaluationsRootView-BjrpKDj-.js → EvaluationsRootView-81SdPChp.js} +19 -27
- package/dist/assets/{EvaluationsView-DdmFZCH-.js → EvaluationsView-BAyQWPF9.js} +7 -7
- package/dist/assets/{ExecutionsTime-kMSlccIr.css → ExecutionsTime-DkME6I3E.css} +26 -19
- package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-Ctx5Ybnr.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-Qw7S05EC.js} +23 -21
- package/dist/assets/{ExecutionsView-8BjGHy2I.js → ExecutionsView--yDyvnL8.js} +15 -16
- package/dist/assets/{ExecutionsView-DSsowKj4.css → ExecutionsView-BHBePl1_.css} +1 -1
- package/dist/assets/{FileSaver.min-C5wzcK59.js → FileSaver.min-CeGSkamF.js} +1 -1
- package/dist/assets/{FixedCollectionParameter-DjlaZyUQ.css → FixedCollectionParameter-CEzpjeQZ.css} +18 -18
- package/dist/assets/{FixedCollectionParameter-BrPQ5Vay.js → FixedCollectionParameter-tgbkzIuD.js} +7 -7
- package/dist/assets/{ForgotMyPasswordView-L0afefc1.js → ForgotMyPasswordView-CVwKac4K.js} +3 -3
- package/dist/assets/{InfoAccordion-CEk3XG5b.js → InfoAccordion-75IQV-_q.js} +1 -1
- package/dist/assets/{InsightsChartAverageRuntime-BrwBWr_R.js → InsightsChartAverageRuntime-C4C4zghF.js} +4 -4
- package/dist/assets/{InsightsChartFailed-ILKWvikG.js → InsightsChartFailed-DyhWE17m.js} +4 -4
- package/dist/assets/{InsightsChartFailureRate-D1AVYwU7.js → InsightsChartFailureRate-B09GcGvY.js} +4 -4
- package/dist/assets/{InsightsChartTimeSaved-D49Rwn6-.js → InsightsChartTimeSaved-DGzFyou3.js} +4 -4
- package/dist/assets/{InsightsChartTotal-Bs-pUgA3.js → InsightsChartTotal-fIUzF41H.js} +4 -4
- package/dist/assets/{InsightsDashboard-BIC4uZpW.js → InsightsDashboard-Qhv7fScv.js} +10 -10
- package/dist/assets/{InsightsPaywall-DmwFI-6e.js → InsightsPaywall-C3-la0kD.js} +1 -1
- package/dist/assets/{InsightsSummary-D9lEzWNT.js → InsightsSummary-CJgV5s0y.js} +14 -13
- package/dist/assets/{InsightsSummary-DzGQpM5h.css → InsightsSummary-DTFIhBF3.css} +25 -27
- package/dist/assets/InsightsTableWorkflows-P5OHXu1Y.js +177 -0
- package/dist/assets/{Logo-DNxOhbuV.js → Logo-8MWdHUz0.js} +1 -1
- package/dist/assets/{LogsPanel-DvWnD7rJ.js → LogsPanel-BabpRONg.js} +279 -212
- package/dist/assets/{LogsPanel-D5R6F35L.css → LogsPanel-Bvy4ANV7.css} +106 -61
- package/dist/assets/{MainHeader-BVHIuVVT.js → MainHeader-0ppftO6b.js} +10 -10
- package/dist/assets/{MainSidebar-CEHr93uL.js → MainSidebar-BnXOkYK4.js} +23 -16
- package/dist/assets/{MainSidebar-DqrgzqvZ.css → MainSidebar-CaLHZgDB.css} +2 -2
- package/dist/assets/{InsightsTableWorkflows-CC8t-sAL.js → N8nDataTableServer-Cx18Zd1O.js} +9 -181
- package/dist/assets/{NodeCreation-Bq5626Ha.js → NodeCreation-DKbc91uY.js} +7 -7
- package/dist/assets/{NodeCreator-Dk0sNXFZ.css → NodeCreator-DWE25utr.css} +51 -58
- package/dist/assets/{NodeCreator-D7xT3ogw.js → NodeCreator-xRYJHbTG.js} +118 -112
- package/dist/assets/NodeDetailsView-CPVE5S8P.js +1155 -0
- package/dist/assets/NodeDetailsView-CaTI-1QQ.css +668 -0
- package/dist/assets/NodeDetailsViewV2-5pxsZwAo.js +1061 -0
- package/dist/assets/NodeDetailsViewV2-BxNx4ZUM.css +506 -0
- package/dist/assets/{NodeView-DL8JxnMc.css → NodeView-Cgf2HuDk.css} +263 -110
- package/dist/assets/{NodeView-DoR46iB5.js → NodeView-DYjZmKNE.js} +580 -409
- package/dist/assets/{ProjectHeader-DSKKwiQ0.js → ProjectHeader-e8JosKaj.js} +5 -5
- package/dist/assets/{ProjectSettings-C3sMIDHh.js → ProjectSettings-DNKcVLkd.js} +201 -25
- package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-cnANEo9o.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-EuKDPqQH.js} +3 -3
- package/dist/assets/{ResourcesListLayout-BVbjqFbc.js → ResourcesListLayout-C4y0iPmg.js} +4 -4
- package/dist/assets/{RunData-DG20AzLo.js → RunData-D3xzjO33.js} +124 -99
- package/dist/assets/{RunData-B5_okvCv.css → RunData-DuKNwYqe.css} +99 -85
- package/dist/assets/{RunDataJson-7okRLIES.js → RunDataJson-D5YFtOcJ.js} +16 -20
- package/dist/assets/{RunDataJsonActions-DrgwFS0W.css → RunDataJsonActions-B2jW3_UG.css} +3 -5
- package/dist/assets/{RunDataJsonActions-Qkg8HmUd.js → RunDataJsonActions-BWvs4coo.js} +15 -16
- package/dist/assets/{RunDataParsedAiContent-DRO1Bjsh.js → RunDataParsedAiContent-BYISiW-I.js} +12 -12
- package/dist/assets/{RunDataParsedAiContent-9EEUzCKp.css → RunDataParsedAiContent-wfIiKsq7.css} +16 -13
- package/dist/assets/{RunDataSearch-R6qtl0Jf.css → RunDataSearch-2eEalFoi.css} +8 -7
- package/dist/assets/{RunDataSearch-D5eQUWvi.js → RunDataSearch-oo3_BoLt.js} +4 -4
- package/dist/assets/{RunDataTable-CJmmTtEp.js → RunDataTable-6rCOQNCX.js} +126 -54
- package/dist/assets/{RunDataTable-CykHIwNT.css → RunDataTable-CTBtmQIs.css} +84 -44
- package/dist/assets/{SamlOnboarding-ClxYfm5z.js → SamlOnboarding-BG-gGcbY.js} +3 -3
- package/dist/assets/{SettingsApiView-Ds7FYVrN.js → SettingsApiView-Bmlbp7pD.js} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-QKvLs6gi.js → SettingsCommunityNodesView-4DWd4UiC.js} +32 -6
- package/dist/assets/{SettingsExternalSecrets-d1KDgYYp.css → SettingsExternalSecrets-BAX9ENm9.css} +9 -6
- package/dist/assets/{SettingsExternalSecrets-DGRdvsMy.js → SettingsExternalSecrets-hpUcipWw.js} +17 -13
- package/dist/assets/{SettingsLdapView-C_LJwixk.js → SettingsLdapView-7p7L95v9.js} +1 -1
- package/dist/assets/{SettingsLogStreamingView-CaEJvgJ9.js → SettingsLogStreamingView-4CpWJqj_.js} +1 -1
- package/dist/assets/{SettingsPersonalView-DlwXaGDs.js → SettingsPersonalView-9iP06ihA.js} +11 -3
- package/dist/assets/{SettingsSourceControl-B6eULOfX.js → SettingsSourceControl-BGjWhqqJ.js} +5 -5
- package/dist/assets/{SettingsSso-5zcg-J4E.js → SettingsSso-ChOyD3kc.js} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-CMBvYdjo.js → SettingsUsageAndPlan-jP8nn4Rh.js} +1 -1
- package/dist/assets/SettingsUsersView-BhfbqjxW.js +861 -0
- package/dist/assets/SettingsUsersView-BuZbf1jq.css +446 -0
- package/dist/assets/{SettingsView-Bawwm19P.css → SettingsView-4yzof_Pb.css} +4 -4
- package/dist/assets/{SettingsView-BuDKhqwZ.js → SettingsView-DTFEdRdj.js} +14 -14
- package/dist/assets/{SetupView-DSaQcQDF.js → SetupView-CXuAO6tx.js} +3 -3
- package/dist/assets/{SetupWorkflowCredentialsButton-BWISZAxq.js → SetupWorkflowCredentialsButton-Bj4rSqAV.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-CfDWCwoA.js → SetupWorkflowFromTemplateView-DG8Ml3A0.js} +8 -12
- package/dist/assets/{SigninView-BpjyswHb.js → SigninView-KmmptKWN.js} +7 -3
- package/dist/assets/{SignoutView-f_CoUl4S.js → SignoutView-8rAPEX_X.js} +1 -1
- package/dist/assets/{SignupView-q3f9g3P9.js → SignupView-ZYUP6f-Y.js} +3 -3
- package/dist/assets/{TableBase-DruQl-SO.js → TableBase-7XxrB0dw.js} +1 -1
- package/dist/assets/{Tags-DbmKHzWo.js → Tags-C8Jnw74N.js} +1 -1
- package/dist/assets/{TemplateDetails-DP_5pkzG.js → TemplateDetails-Bk1ixuRQ.js} +2 -2
- package/dist/assets/{TemplateList-y8Aumcsb.js → TemplateList-9SAC8OGn.js} +6 -3
- package/dist/assets/{TemplatesCollectionView-VdQpHtxs.js → TemplatesCollectionView-CLZDJ4HM.js} +6 -6
- package/dist/assets/{TemplatesSearchView-BUcYRVEK.js → TemplatesSearchView-DRzdGp3s.js} +8 -8
- package/dist/assets/{TemplatesView-4DUEEEtD.js → TemplatesView-V6ud-nM5.js} +3 -3
- package/dist/assets/{TemplatesWorkflowView--zUXMB8f.js → TemplatesWorkflowView-CLb4CuR2.js} +6 -6
- package/dist/assets/{NodeDetailsView-DB-5JPUD.js → TriggerPanel-BOC7PYsi.js} +498 -1415
- package/dist/assets/{NodeDetailsView-BaIj2qAa.css → TriggerPanel-DRpKKKun.css} +296 -903
- package/dist/assets/{VariablesView-DoWb0Vtv.js → VariablesView-BDzhSaxw.js} +6 -6
- package/dist/assets/{VariablesView-Kog_9PMT.css → VariablesView-Bh0OeH4s.css} +6 -6
- package/dist/assets/{WorkerView-D56d7XJA.js → WorkerView-C2A7cYkr.js} +9 -9
- package/dist/assets/{WorkflowActivator-CQxaDCfA.js → WorkflowActivator-BmIzNsA8.js} +8 -8
- package/dist/assets/{WorkflowActivator-BJPsIkXE.css → WorkflowActivator-DhLX6i1H.css} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-D9p_ZqmA.js → WorkflowExecutionsInfoAccordion-Cn4GRGO_.js} +6 -6
- package/dist/assets/{WorkflowExecutionsLandingPage-CymYth6K.js → WorkflowExecutionsLandingPage-s-dIgG6D.js} +3 -3
- package/dist/assets/{WorkflowExecutionsPreview-DRvf3WQC.js → WorkflowExecutionsPreview-BE7NfRAa.js} +12 -12
- package/dist/assets/{WorkflowExecutionsView-DxiIaUKV.js → WorkflowExecutionsView-DFmBdF-B.js} +16 -16
- package/dist/assets/{WorkflowHistory-DBPIq2u7.js → WorkflowHistory-3wO0nQYD.js} +4 -4
- package/dist/assets/{WorkflowOnboardingView-D4QKSetf.js → WorkflowOnboardingView-mBVE6x-i.js} +1 -1
- package/dist/assets/{WorkflowPreview-D3YRZjYi.js → WorkflowPreview-DlNMFCKn.js} +1 -1
- package/dist/assets/{WorkflowsView-ipf8KKwB.css → WorkflowsView-CyJbJBc8.css} +25 -21
- package/dist/assets/{WorkflowsView-DPADmBVd.js → WorkflowsView-DsAOuPT0.js} +77 -72
- package/dist/assets/{chartjs.utils-Cou_ISuU.js → chartjs.utils-BywXqBmg.js} +2 -2
- package/dist/assets/{en-DzZibgm_.js → en-CcKAtA8V.js} +45 -5
- package/dist/assets/{global-link-actions-olwfH36z.js → global-link-actions-BzAw9ZbO.js} +1 -1
- package/dist/assets/{import-curl-DD21H3kK.js → import-curl-1LWAxRTV.js} +1 -1
- package/dist/assets/{index-uJOu4Uio.js → index-B6A1nL2x.js} +1 -1
- package/dist/assets/{index-BzamKJpD.css → index-C66_v3sX.css} +1302 -1279
- package/dist/assets/{index-7S5ADieN.js → index-V0GOmfo8.js} +40721 -34933
- package/dist/assets/{pickBy-DPxZbMic.js → pickBy-CtRItcCT.js} +1 -1
- package/dist/assets/{templateActions-DJJfyIhq.js → templateActions-DpIzx0ws.js} +2 -2
- package/dist/assets/{useBeforeUnload-DveXGtGN.js → useBeforeUnload-B0EP7Q2i.js} +1 -1
- package/dist/assets/{useExecutionDebugging-DM4nhx6D.js → useExecutionDebugging-AwlOA2KI.js} +2 -1
- package/dist/assets/{useExecutionHelpers-BfF56crp.js → useExecutionHelpers-DvBwGIzz.js} +1 -1
- package/dist/assets/{useImportCurlCommand-BAgQhwtE.js → useImportCurlCommand-DIFC7Epr.js} +2 -2
- package/dist/assets/{useKeybindings-CV0VsjNP.js → useKeybindings-CduQ2pi5.js} +4 -4
- package/dist/assets/{useProjectPages-DgMGWOaO.js → useProjectPages-DmNmAOdq.js} +1 -1
- package/dist/assets/{usePushConnection-D8SE-itT.js → usePushConnection-Dyd5__87.js} +6 -12
- package/dist/assets/{useWorkflowActivate-BKz3N1SO.js → useWorkflowActivate-z9iwP6OY.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/vite.config.mts +2 -2
- package/dist/assets/CollectionParameter-CExdr4jd.js +0 -4
- package/dist/assets/SettingsUsersView-BL3TAhT8.js +0 -338
- package/dist/assets/SettingsUsersView-By12E2li.css +0 -143
|
@@ -1,33 +1,10 @@
|
|
|
1
|
-
import { bl as
|
|
2
|
-
import { p as parseErrorMetadata, _ as _sfc_main$j, H as HighlightJS, V as VueMarkdown, R as RunData } from "./RunData-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import "./
|
|
6
|
-
import "./
|
|
7
|
-
|
|
8
|
-
var objectProto = Object.prototype;
|
|
9
|
-
var hasOwnProperty = objectProto.hasOwnProperty;
|
|
10
|
-
function isEmpty(value) {
|
|
11
|
-
if (value == null) {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
if (isArrayLike(value) && (isArray(value) || typeof value == "string" || typeof value.splice == "function" || isBuffer(value) || isTypedArray(value) || isArguments(value))) {
|
|
15
|
-
return !value.length;
|
|
16
|
-
}
|
|
17
|
-
var tag = getTag(value);
|
|
18
|
-
if (tag == mapTag || tag == setTag) {
|
|
19
|
-
return !value.size;
|
|
20
|
-
}
|
|
21
|
-
if (isPrototype(value)) {
|
|
22
|
-
return !baseKeys(value).length;
|
|
23
|
-
}
|
|
24
|
-
for (var key in value) {
|
|
25
|
-
if (hasOwnProperty.call(value, key)) {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
1
|
+
import { bl as addTokenUsageData, bm as emptyTokenUsageData, bn as isChatNode, bo as NodeConnectionTypes, bp as v4, bq as get, br as isRef, bs as isReactive, bt as isProxy, bu as toRaw, bv as AGENT_LANGCHAIN_NODE_TYPE, bw as MANUAL_CHAT_TRIGGER_NODE_TYPE, bx as CHAT_TRIGGER_NODE_TYPE, by as isEmpty, a as useToast, r as ref, x as computed, c as useI18n$1, bz as usePinnedData, aA as useMessage, aB as MODAL_CONFIRM, a4 as useWorkflowsStore, bA as useLogsStore, b as useRouter, bB as useNodeHelpers, bC as useRunWorkflow, V as VIEWS, bD as chatEventBus, aa as watch, bE as provide, d as defineComponent, h as createElementBlock, g as openBlock, n as normalizeClass, i as createVNode, j as createBaseVNode, l as unref, p as N8nText, w as withCtx, J as renderSlot, k as createTextVNode, t as toDisplayString, _ as _export_sfc, a5 as useRoute, ae as useSourceControlStore, bF as useCanvasOperations, bG as useNodeTypesStore, bH as START_NODE_TYPE, e as createBlock, f as createCommentVNode, $ as N8nTooltip, bI as formatTokenUsageCount, bJ as getDefaultExportFromCjs, bK as requireUpperFirst, F as Fragment, ar as useTemplateRef, bL as useTimestamp, bM as toTime, bN as toDayMonth, bO as withModifiers, y as renderList, P as normalizeStyle, bP as _sfc_main$k, bQ as I18nT, N as N8nIcon, a0 as _sfc_main$l, q as N8nButton, K as nextTick, bR as getScrollbarWidth, bS as useVirtualList, bT as toRef, D as mergeProps, H as N8nRadioButtons, bU as inject, bV as toRefs, o as onMounted, bW as normalizeProps, bX as guardReactiveProps, bY as resolveDynamicComponent, bZ as markdownLink, b_ as useFileDialog, b$ as onUnmounted, aU as withDirectives, c0 as vModelText, a_ as withKeys, c1 as useAttrs, c2 as useClipboard, bh as createSlots, aM as useNDVStore, c3 as PiPWindowSymbol, c4 as resolveDirective, a1 as N8nLink, c5 as waitingNodeTooltip, aP as useLocalStorage, c6 as LOG_DETAILS_PANEL_STATE, c7 as KeyboardShortcutTooltip, c8 as N8nResizeWrapper, c9 as useStyles, ca as Workflow, cb as useThrottleFn, cc as parse, cd as shallowRef, T as useUIStore, ad as useCanvasStore, ay as useTelemetry, ce as onScopeDispose, I as onBeforeUnmount, cf as applyThemeToBody, cg as useProvideTooltipAppendTo, ch as LOGS_PANEL_STATE, ci as LOCAL_STORAGE_PANEL_HEIGHT, cj as LOCAL_STORAGE_OVERVIEW_PANEL_WIDTH, ck as LOCAL_STORAGE_PANEL_WIDTH, cl as useActiveElement, cm as ndvEventBus } from "./index-V0GOmfo8.js";
|
|
2
|
+
import { p as parseErrorMetadata, _ as _sfc_main$j, H as HighlightJS, V as VueMarkdown, R as RunData } from "./RunData-D3xzjO33.js";
|
|
3
|
+
import { _ as __unplugin_components_1 } from "./AnimatedSpinner-BiuDg2x2.js";
|
|
4
|
+
import { N as N8nActionDropdown } from "./ActionDropdown-D-JmCYsp.js";
|
|
5
|
+
import { c as canvasEventBus, u as useKeybindings } from "./useKeybindings-CduQ2pi5.js";
|
|
6
|
+
import "./FileSaver.min-CeGSkamF.js";
|
|
7
|
+
import "./useExecutionHelpers-DvBwGIzz.js";
|
|
31
8
|
const TOOL_EXECUTOR_NODE_NAME = "PartialExecutionToolExecutor";
|
|
32
9
|
function getConsumedTokens(task) {
|
|
33
10
|
if (!task.data) {
|
|
@@ -47,8 +24,9 @@ function createNode(node, context, runIndex, runData, children = []) {
|
|
|
47
24
|
return {
|
|
48
25
|
parent: context.parent,
|
|
49
26
|
node,
|
|
50
|
-
|
|
51
|
-
|
|
27
|
+
// The ID consists of workflow ID, node ID and run index (including ancestor's), which
|
|
28
|
+
// makes it possible to identify the same log across different executions
|
|
29
|
+
id: `${context.workflow.id}:${node.id}:${[...context.ancestorRunIndexes, runIndex].join(":")}`,
|
|
52
30
|
runIndex,
|
|
53
31
|
runData,
|
|
54
32
|
children,
|
|
@@ -69,7 +47,7 @@ function getChildNodes(treeNode, node, runIndex, context) {
|
|
|
69
47
|
return createLogTreeRec({
|
|
70
48
|
...context,
|
|
71
49
|
parent: treeNode,
|
|
72
|
-
|
|
50
|
+
ancestorRunIndexes: [...context.ancestorRunIndexes, runIndex ?? 0],
|
|
73
51
|
workflow,
|
|
74
52
|
executionId: subExecutionLocator.executionId,
|
|
75
53
|
data: subWorkflowRunData
|
|
@@ -88,7 +66,7 @@ function getChildNodes(treeNode, node, runIndex, context) {
|
|
|
88
66
|
const subNode = context.workflow.getNode(subNodeName);
|
|
89
67
|
return subNode ? getTreeNodeData(subNode, t, index, {
|
|
90
68
|
...context,
|
|
91
|
-
|
|
69
|
+
ancestorRunIndexes: [...context.ancestorRunIndexes, runIndex ?? 0],
|
|
92
70
|
parent: treeNode
|
|
93
71
|
}) : [];
|
|
94
72
|
})
|
|
@@ -119,28 +97,24 @@ function getSubtreeTotalConsumedTokens(treeNode, includeSubWorkflow) {
|
|
|
119
97
|
}
|
|
120
98
|
return calculate(treeNode);
|
|
121
99
|
}
|
|
122
|
-
function
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
const childAutoSelect = findLogEntryToAutoSelectRec(entry.children, depth + 1);
|
|
128
|
-
if (childAutoSelect) {
|
|
129
|
-
return childAutoSelect;
|
|
130
|
-
}
|
|
131
|
-
if (entry.node.type === AGENT_LANGCHAIN_NODE_TYPE) {
|
|
132
|
-
if (isPlaceholderLog(entry) && entry.children.length > 0) {
|
|
133
|
-
return entry.children[0];
|
|
134
|
-
}
|
|
135
|
-
return entry;
|
|
136
|
-
}
|
|
100
|
+
function findLogEntryToAutoSelect(subTree) {
|
|
101
|
+
const entryWithError = findLogEntryRec((e) => !!e.runData?.error, subTree);
|
|
102
|
+
if (entryWithError) {
|
|
103
|
+
return entryWithError;
|
|
137
104
|
}
|
|
138
|
-
|
|
105
|
+
const entryForAiAgent = findLogEntryRec(
|
|
106
|
+
(entry) => entry.node.type === AGENT_LANGCHAIN_NODE_TYPE || entry.parent?.node.type === AGENT_LANGCHAIN_NODE_TYPE && isPlaceholderLog(entry.parent),
|
|
107
|
+
subTree
|
|
108
|
+
);
|
|
109
|
+
if (entryForAiAgent) {
|
|
110
|
+
return entryForAiAgent;
|
|
111
|
+
}
|
|
112
|
+
return subTree[subTree.length - 1];
|
|
139
113
|
}
|
|
140
114
|
function createLogTree(workflow, response, workflows = {}, subWorkflowData = {}) {
|
|
141
115
|
return createLogTreeRec({
|
|
142
116
|
parent: void 0,
|
|
143
|
-
|
|
117
|
+
ancestorRunIndexes: [],
|
|
144
118
|
executionId: response.id,
|
|
145
119
|
workflow,
|
|
146
120
|
workflows,
|
|
@@ -188,18 +162,26 @@ function findLogEntryRec(isMatched, entries) {
|
|
|
188
162
|
}
|
|
189
163
|
return void 0;
|
|
190
164
|
}
|
|
191
|
-
function findSelectedLogEntry(selection, entries) {
|
|
165
|
+
function findSelectedLogEntry(selection, entries, isExecuting) {
|
|
192
166
|
switch (selection.type) {
|
|
193
167
|
case "initial":
|
|
194
|
-
return
|
|
168
|
+
return isExecuting ? void 0 : findLogEntryToAutoSelect(entries);
|
|
195
169
|
case "none":
|
|
196
170
|
return void 0;
|
|
197
171
|
case "selected": {
|
|
198
|
-
const
|
|
199
|
-
if (
|
|
200
|
-
|
|
172
|
+
const found = findLogEntryRec((e) => e.id === selection.entry.id, entries);
|
|
173
|
+
if (found === void 0 && !isExecuting) {
|
|
174
|
+
for (let runIndex = selection.entry.runIndex - 1; runIndex >= 0; runIndex--) {
|
|
175
|
+
const fallback = findLogEntryRec(
|
|
176
|
+
(e) => e.workflow.id === selection.entry.workflow.id && e.node.id === selection.entry.node.id && e.runIndex === runIndex,
|
|
177
|
+
entries
|
|
178
|
+
);
|
|
179
|
+
if (fallback !== void 0) {
|
|
180
|
+
return fallback;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
201
183
|
}
|
|
202
|
-
return
|
|
184
|
+
return found;
|
|
203
185
|
}
|
|
204
186
|
}
|
|
205
187
|
}
|
|
@@ -757,12 +739,10 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
|
|
|
757
739
|
var upperFirstExports = requireUpperFirst();
|
|
758
740
|
const upperFirst = /* @__PURE__ */ getDefaultExportFromCjs(upperFirstExports);
|
|
759
741
|
const _hoisted_1$e = { key: 0 };
|
|
760
|
-
const _hoisted_2$3 = { key: 1 };
|
|
761
742
|
const _sfc_main$g = /* @__PURE__ */ defineComponent({
|
|
762
743
|
__name: "LogsViewNodeName",
|
|
763
744
|
props: {
|
|
764
745
|
name: {},
|
|
765
|
-
latestName: {},
|
|
766
746
|
isError: { type: Boolean },
|
|
767
747
|
isDeleted: { type: Boolean }
|
|
768
748
|
},
|
|
@@ -776,8 +756,9 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
|
|
|
776
756
|
color: _ctx.isError ? "danger" : void 0
|
|
777
757
|
}, {
|
|
778
758
|
default: withCtx(() => [
|
|
779
|
-
_ctx.isDeleted
|
|
780
|
-
|
|
759
|
+
_ctx.isDeleted ? (openBlock(), createElementBlock("del", _hoisted_1$e, toDisplayString(_ctx.name), 1)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
760
|
+
createTextVNode(toDisplayString(_ctx.name), 1)
|
|
761
|
+
], 64))
|
|
781
762
|
]),
|
|
782
763
|
_: 1
|
|
783
764
|
}, 8, ["class", "color"]);
|
|
@@ -814,10 +795,13 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
|
814
795
|
const now = useTimestamp({ interval: 1e3 });
|
|
815
796
|
const nodeTypeStore = useNodeTypesStore();
|
|
816
797
|
const type = computed(() => nodeTypeStore.getNodeType(props.data.node.type));
|
|
817
|
-
const
|
|
818
|
-
|
|
819
|
-
);
|
|
798
|
+
const isRunning = computed(() => props.data.runData?.executionStatus === "running");
|
|
799
|
+
const isWaiting = computed(() => props.data.runData?.executionStatus === "waiting");
|
|
800
|
+
const isSettled = computed(() => !isRunning.value && !isWaiting.value);
|
|
820
801
|
const isError = computed(() => !!props.data.runData?.error);
|
|
802
|
+
const statusTextKeyPath = computed(
|
|
803
|
+
() => isSettled.value ? "logs.overview.body.summaryText.in" : "logs.overview.body.summaryText.for"
|
|
804
|
+
);
|
|
821
805
|
const startedAtText = computed(() => {
|
|
822
806
|
if (props.data.runData === void 0) {
|
|
823
807
|
return "—";
|
|
@@ -840,17 +824,17 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
|
840
824
|
() => props.shouldShowTokenCountColumn ? getSubtreeTotalConsumedTokens(props.data, false) : void 0
|
|
841
825
|
);
|
|
842
826
|
const hasChildren = computed(() => props.data.children.length > 0 || hasSubExecution(props.data));
|
|
843
|
-
|
|
844
|
-
|
|
827
|
+
const indents = computed(() => {
|
|
828
|
+
const ret = [];
|
|
845
829
|
let data = props.data;
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
830
|
+
while (data.parent !== void 0) {
|
|
831
|
+
const siblings = data.parent?.children ?? [];
|
|
832
|
+
const lastSibling = siblings[siblings.length - 1];
|
|
833
|
+
ret.unshift({ straight: lastSibling?.id !== data.id, curved: data === props.data });
|
|
834
|
+
data = data.parent;
|
|
849
835
|
}
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
return data === void 0 && lastSibling === void 0 || data?.node === lastSibling?.node && data?.runIndex === lastSibling?.runIndex;
|
|
853
|
-
}
|
|
836
|
+
return ret;
|
|
837
|
+
});
|
|
854
838
|
watch(
|
|
855
839
|
() => props.isSelected,
|
|
856
840
|
(isSelected) => {
|
|
@@ -864,6 +848,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
|
864
848
|
);
|
|
865
849
|
return (_ctx, _cache) => {
|
|
866
850
|
const _component_NodeIcon = _sfc_main$k;
|
|
851
|
+
const _component_AnimatedSpinner = __unplugin_components_1;
|
|
867
852
|
return openBlock(), createElementBlock("div", {
|
|
868
853
|
ref: "containerRef",
|
|
869
854
|
role: "treeitem",
|
|
@@ -878,19 +863,19 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
|
878
863
|
}),
|
|
879
864
|
onClick: _cache[3] || (_cache[3] = withModifiers(($event) => emit("toggleSelected"), ["stop"]))
|
|
880
865
|
}, [
|
|
881
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(
|
|
866
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(indents.value, (indent2, level) => {
|
|
882
867
|
return openBlock(), createElementBlock("div", {
|
|
883
868
|
key: level,
|
|
884
869
|
class: normalizeClass({
|
|
885
870
|
[_ctx.$style.indent]: true,
|
|
886
|
-
[_ctx.$style.connectorCurved]:
|
|
887
|
-
[_ctx.$style.connectorStraight]:
|
|
871
|
+
[_ctx.$style.connectorCurved]: indent2.curved,
|
|
872
|
+
[_ctx.$style.connectorStraight]: indent2.straight
|
|
888
873
|
})
|
|
889
874
|
}, null, 2);
|
|
890
875
|
}), 128)),
|
|
891
876
|
createBaseVNode("div", {
|
|
892
877
|
class: normalizeClass(_ctx.$style.background),
|
|
893
|
-
style: normalizeStyle({ "--indent-depth":
|
|
878
|
+
style: normalizeStyle({ "--indent-depth": indents.value.length })
|
|
894
879
|
}, null, 6),
|
|
895
880
|
createVNode(_component_NodeIcon, {
|
|
896
881
|
"node-type": type.value,
|
|
@@ -899,11 +884,10 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
|
899
884
|
}, null, 8, ["node-type", "class"]),
|
|
900
885
|
createVNode(LogsViewNodeName, {
|
|
901
886
|
class: normalizeClass(_ctx.$style.name),
|
|
902
|
-
|
|
903
|
-
name: props.data.node.name,
|
|
887
|
+
name: _ctx.latestInfo?.name ?? props.data.node.name,
|
|
904
888
|
"is-error": isError.value,
|
|
905
889
|
"is-deleted": _ctx.latestInfo?.deleted ?? false
|
|
906
|
-
}, null, 8, ["class", "
|
|
890
|
+
}, null, 8, ["class", "name", "is-error", "is-deleted"]),
|
|
907
891
|
!_ctx.isCompact ? (openBlock(), createBlock(unref(N8nText), {
|
|
908
892
|
key: 0,
|
|
909
893
|
tag: "div",
|
|
@@ -912,38 +896,39 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
|
912
896
|
class: normalizeClass(_ctx.$style.timeTook)
|
|
913
897
|
}, {
|
|
914
898
|
default: withCtx(() => [
|
|
915
|
-
|
|
899
|
+
timeText.value !== void 0 ? (openBlock(), createBlock(unref(I18nT), {
|
|
916
900
|
key: 0,
|
|
917
|
-
keypath:
|
|
901
|
+
keypath: statusTextKeyPath.value
|
|
918
902
|
}, {
|
|
919
903
|
status: withCtx(() => [
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
bold: true,
|
|
904
|
+
createVNode(unref(N8nText), {
|
|
905
|
+
color: isError.value ? "danger" : void 0,
|
|
906
|
+
bold: isError.value,
|
|
924
907
|
size: "small"
|
|
925
908
|
}, {
|
|
926
909
|
default: withCtx(() => [
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
class: normalizeClass(_ctx.$style.
|
|
930
|
-
}, null, 8, ["class"]),
|
|
910
|
+
isRunning.value ? (openBlock(), createBlock(_component_AnimatedSpinner, {
|
|
911
|
+
key: 0,
|
|
912
|
+
class: normalizeClass(_ctx.$style.statusTextIcon)
|
|
913
|
+
}, null, 8, ["class"])) : isWaiting.value ? (openBlock(), createBlock(unref(N8nIcon), {
|
|
914
|
+
key: 1,
|
|
915
|
+
icon: "status-waiting",
|
|
916
|
+
class: normalizeClass(_ctx.$style.statusTextIcon)
|
|
917
|
+
}, null, 8, ["class"])) : isError.value ? (openBlock(), createBlock(unref(N8nIcon), {
|
|
918
|
+
key: 2,
|
|
919
|
+
icon: "triangle-alert",
|
|
920
|
+
class: normalizeClass(_ctx.$style.statusTextIcon)
|
|
921
|
+
}, null, 8, ["class"])) : createCommentVNode("", true),
|
|
931
922
|
createTextVNode(" " + toDisplayString(statusText.value), 1)
|
|
932
923
|
]),
|
|
933
924
|
_: 1
|
|
934
|
-
}
|
|
935
|
-
createTextVNode(toDisplayString(statusText.value), 1)
|
|
936
|
-
], 64))
|
|
925
|
+
}, 8, ["color", "bold"])
|
|
937
926
|
]),
|
|
938
927
|
time: withCtx(() => [
|
|
939
928
|
createTextVNode(toDisplayString(timeText.value), 1)
|
|
940
929
|
]),
|
|
941
930
|
_: 1
|
|
942
|
-
})) :
|
|
943
|
-
createTextVNode(toDisplayString(unref(locale).baseText("logs.overview.body.summaryText.for", {
|
|
944
|
-
interpolate: { status: statusText.value, time: timeText.value }
|
|
945
|
-
})), 1)
|
|
946
|
-
], 64)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
|
|
931
|
+
}, 8, ["keypath"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
947
932
|
createTextVNode("—")
|
|
948
933
|
], 64))
|
|
949
934
|
]),
|
|
@@ -980,19 +965,18 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
|
980
965
|
key: 3,
|
|
981
966
|
size: "medium",
|
|
982
967
|
color: "danger",
|
|
983
|
-
icon: "
|
|
968
|
+
icon: "triangle-alert",
|
|
984
969
|
class: normalizeClass(_ctx.$style.compactErrorIcon)
|
|
985
970
|
}, null, 8, ["class"])) : createCommentVNode("", true),
|
|
986
971
|
!_ctx.isCompact || !props.latestInfo?.deleted ? (openBlock(), createBlock(unref(_sfc_main$l), {
|
|
987
972
|
key: 4,
|
|
988
973
|
type: "secondary",
|
|
989
974
|
size: "small",
|
|
990
|
-
icon: "
|
|
975
|
+
icon: "square-pen",
|
|
991
976
|
"icon-size": "medium",
|
|
992
|
-
style: normalizeStyle(
|
|
993
|
-
visibility: props.canOpenNdv ? "" : "hidden"
|
|
994
|
-
|
|
995
|
-
}]),
|
|
977
|
+
style: normalizeStyle({
|
|
978
|
+
visibility: props.canOpenNdv ? "" : "hidden"
|
|
979
|
+
}),
|
|
996
980
|
disabled: props.latestInfo?.deleted,
|
|
997
981
|
class: normalizeClass(_ctx.$style.openNdvButton),
|
|
998
982
|
"aria-label": unref(locale).baseText("logs.overview.body.open"),
|
|
@@ -1003,23 +987,30 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
|
1003
987
|
type: "secondary",
|
|
1004
988
|
size: "small",
|
|
1005
989
|
icon: "play",
|
|
1006
|
-
style: { "color": "var(--color-text-base)" },
|
|
1007
990
|
"aria-label": unref(locale).baseText("logs.overview.body.run"),
|
|
1008
|
-
class: normalizeClass([_ctx.$style.partialExecutionButton,
|
|
991
|
+
class: normalizeClass([_ctx.$style.partialExecutionButton, indents.value.length > 0 ? _ctx.$style.unavailable : ""]),
|
|
1009
992
|
disabled: props.latestInfo?.deleted || props.latestInfo?.disabled,
|
|
1010
993
|
onClick: _cache[1] || (_cache[1] = withModifiers(($event) => emit("triggerPartialExecution"), ["stop"]))
|
|
1011
994
|
}, null, 8, ["aria-label", "class", "disabled"])) : createCommentVNode("", true),
|
|
995
|
+
_ctx.isCompact && !hasChildren.value ? (openBlock(), createElementBlock(Fragment, { key: 6 }, [
|
|
996
|
+
isRunning.value ? (openBlock(), createBlock(_component_AnimatedSpinner, {
|
|
997
|
+
key: 0,
|
|
998
|
+
class: normalizeClass(_ctx.$style.statusIcon)
|
|
999
|
+
}, null, 8, ["class"])) : isWaiting.value ? (openBlock(), createBlock(unref(N8nIcon), {
|
|
1000
|
+
key: 1,
|
|
1001
|
+
icon: "status-waiting",
|
|
1002
|
+
class: normalizeClass(_ctx.$style.statusIcon)
|
|
1003
|
+
}, null, 8, ["class"])) : createCommentVNode("", true)
|
|
1004
|
+
], 64)) : createCommentVNode("", true),
|
|
1012
1005
|
!_ctx.isCompact || hasChildren.value ? (openBlock(), createBlock(unref(N8nButton), {
|
|
1013
|
-
key:
|
|
1006
|
+
key: 7,
|
|
1014
1007
|
type: "secondary",
|
|
1015
1008
|
size: "small",
|
|
1016
1009
|
icon: props.expanded ? "chevron-down" : "chevron-up",
|
|
1017
1010
|
"icon-size": "medium",
|
|
1018
1011
|
square: true,
|
|
1019
1012
|
style: normalizeStyle({
|
|
1020
|
-
visibility: hasChildren.value ? "" : "hidden"
|
|
1021
|
-
color: "var(--color-text-base)"
|
|
1022
|
-
// give higher specificity than the style from the component itself
|
|
1013
|
+
visibility: hasChildren.value ? "" : "hidden"
|
|
1023
1014
|
}),
|
|
1024
1015
|
class: normalizeClass(_ctx.$style.toggleButton),
|
|
1025
1016
|
"aria-label": unref(locale).baseText("logs.overview.body.toggleRow"),
|
|
@@ -1029,25 +1020,27 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
|
1029
1020
|
};
|
|
1030
1021
|
}
|
|
1031
1022
|
});
|
|
1032
|
-
const container$7 = "
|
|
1033
|
-
const background = "
|
|
1034
|
-
const selected = "
|
|
1035
|
-
const error = "
|
|
1036
|
-
const indent = "
|
|
1037
|
-
const connectorCurved = "
|
|
1038
|
-
const connectorStraight = "
|
|
1039
|
-
const icon$3 = "
|
|
1040
|
-
const name = "
|
|
1041
|
-
const timeTook = "
|
|
1042
|
-
const
|
|
1043
|
-
const startedAt = "
|
|
1044
|
-
const consumedTokens = "
|
|
1045
|
-
const compactErrorIcon = "
|
|
1046
|
-
const partialExecutionButton = "
|
|
1047
|
-
const openNdvButton = "
|
|
1048
|
-
const compact = "
|
|
1049
|
-
const unavailable = "
|
|
1050
|
-
const toggleButton = "
|
|
1023
|
+
const container$7 = "_container_6ygvb_123";
|
|
1024
|
+
const background = "_background_6ygvb_140";
|
|
1025
|
+
const selected = "_selected_6ygvb_149";
|
|
1026
|
+
const error = "_error_6ygvb_155";
|
|
1027
|
+
const indent = "_indent_6ygvb_159";
|
|
1028
|
+
const connectorCurved = "_connectorCurved_6ygvb_168";
|
|
1029
|
+
const connectorStraight = "_connectorStraight_6ygvb_178";
|
|
1030
|
+
const icon$3 = "_icon_6ygvb_187";
|
|
1031
|
+
const name = "_name_6ygvb_193";
|
|
1032
|
+
const timeTook = "_timeTook_6ygvb_199";
|
|
1033
|
+
const statusTextIcon = "_statusTextIcon_6ygvb_204";
|
|
1034
|
+
const startedAt = "_startedAt_6ygvb_209";
|
|
1035
|
+
const consumedTokens = "_consumedTokens_6ygvb_215";
|
|
1036
|
+
const compactErrorIcon = "_compactErrorIcon_6ygvb_222";
|
|
1037
|
+
const partialExecutionButton = "_partialExecutionButton_6ygvb_234";
|
|
1038
|
+
const openNdvButton = "_openNdvButton_6ygvb_235";
|
|
1039
|
+
const compact = "_compact_6ygvb_222";
|
|
1040
|
+
const unavailable = "_unavailable_6ygvb_245";
|
|
1041
|
+
const toggleButton = "_toggleButton_6ygvb_253";
|
|
1042
|
+
const statusIcon = "_statusIcon_6ygvb_277";
|
|
1043
|
+
const placeholder$1 = "_placeholder_6ygvb_285";
|
|
1051
1044
|
const style0$9 = {
|
|
1052
1045
|
container: container$7,
|
|
1053
1046
|
background,
|
|
@@ -1059,7 +1052,7 @@ const style0$9 = {
|
|
|
1059
1052
|
icon: icon$3,
|
|
1060
1053
|
name,
|
|
1061
1054
|
timeTook,
|
|
1062
|
-
|
|
1055
|
+
statusTextIcon,
|
|
1063
1056
|
startedAt,
|
|
1064
1057
|
consumedTokens,
|
|
1065
1058
|
compactErrorIcon,
|
|
@@ -1067,7 +1060,9 @@ const style0$9 = {
|
|
|
1067
1060
|
openNdvButton,
|
|
1068
1061
|
compact,
|
|
1069
1062
|
unavailable,
|
|
1070
|
-
toggleButton
|
|
1063
|
+
toggleButton,
|
|
1064
|
+
statusIcon,
|
|
1065
|
+
placeholder: placeholder$1
|
|
1071
1066
|
};
|
|
1072
1067
|
const cssModules$9 = {
|
|
1073
1068
|
"$style": style0$9
|
|
@@ -1136,7 +1131,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1136
1131
|
flatLogEntries: {},
|
|
1137
1132
|
latestNodeInfo: {}
|
|
1138
1133
|
},
|
|
1139
|
-
emits: ["clickHeader", "select", "clearExecutionData", "openNdv", "toggleExpanded"
|
|
1134
|
+
emits: ["clickHeader", "select", "clearExecutionData", "openNdv", "toggleExpanded"],
|
|
1140
1135
|
setup(__props, { emit: __emit }) {
|
|
1141
1136
|
const emit = __emit;
|
|
1142
1137
|
const locale = useI18n$1();
|
|
@@ -1148,6 +1143,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1148
1143
|
{ label: locale.baseText("logs.overview.header.switch.overview"), value: "overview" },
|
|
1149
1144
|
{ label: locale.baseText("logs.overview.header.switch.details"), value: "details" }
|
|
1150
1145
|
]);
|
|
1146
|
+
const hasStaticScrollbar = getScrollbarWidth() > 0;
|
|
1151
1147
|
const consumedTokens2 = computed(
|
|
1152
1148
|
() => getTotalConsumedTokens(
|
|
1153
1149
|
...__props.entries.map(
|
|
@@ -1162,6 +1158,12 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1162
1158
|
const shouldShowTokenCountColumn = computed(
|
|
1163
1159
|
() => consumedTokens2.value.totalTokens > 0 || __props.entries.some((entry) => getSubtreeTotalConsumedTokens(entry, true).totalTokens > 0)
|
|
1164
1160
|
);
|
|
1161
|
+
const isExpanded = computed(
|
|
1162
|
+
() => __props.flatLogEntries.reduce((acc, entry, index, arr) => {
|
|
1163
|
+
acc[entry.id] = arr[index + 1]?.parent?.id === entry.id;
|
|
1164
|
+
return acc;
|
|
1165
|
+
}, {})
|
|
1166
|
+
);
|
|
1165
1167
|
const virtualList = useVirtualList(
|
|
1166
1168
|
toRef(() => __props.flatLogEntries),
|
|
1167
1169
|
{ itemHeight: 32 }
|
|
@@ -1169,13 +1171,6 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1169
1171
|
function handleSwitchView(value) {
|
|
1170
1172
|
emit("select", value === "overview" ? void 0 : __props.flatLogEntries[0]);
|
|
1171
1173
|
}
|
|
1172
|
-
function handleToggleExpanded(treeNode) {
|
|
1173
|
-
if (hasSubExecution(treeNode) && treeNode.children.length === 0) {
|
|
1174
|
-
emit("loadSubExecution", treeNode);
|
|
1175
|
-
return;
|
|
1176
|
-
}
|
|
1177
|
-
emit("toggleExpanded", treeNode);
|
|
1178
|
-
}
|
|
1179
1174
|
async function handleTriggerPartialExecution(treeNode) {
|
|
1180
1175
|
const latestName = __props.latestNodeInfo[treeNode.node.id]?.name ?? treeNode.node.name;
|
|
1181
1176
|
if (latestName) {
|
|
@@ -1183,20 +1178,34 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1183
1178
|
}
|
|
1184
1179
|
}
|
|
1185
1180
|
watch(
|
|
1186
|
-
() => __props.
|
|
1187
|
-
async (
|
|
1188
|
-
|
|
1189
|
-
|
|
1181
|
+
[() => __props.execution?.status === "running", () => __props.flatLogEntries.length],
|
|
1182
|
+
async ([isRunning, flatEntryCount], [wasRunning]) => {
|
|
1183
|
+
await nextTick(() => {
|
|
1184
|
+
if (__props.selected === void 0 && (isRunning || wasRunning)) {
|
|
1185
|
+
virtualList.scrollTo(flatEntryCount - 1);
|
|
1186
|
+
}
|
|
1187
|
+
});
|
|
1188
|
+
},
|
|
1189
|
+
{ immediate: true }
|
|
1190
|
+
);
|
|
1191
|
+
watch(
|
|
1192
|
+
() => __props.selected?.id,
|
|
1193
|
+
async (selectedId) => {
|
|
1194
|
+
await nextTick(() => {
|
|
1195
|
+
if (selectedId === void 0) {
|
|
1196
|
+
return;
|
|
1197
|
+
}
|
|
1198
|
+
const index = virtualList.list.value.some((e) => e.data.id === selectedId) ? -1 : __props.flatLogEntries.findIndex((e) => e.id === selectedId);
|
|
1190
1199
|
if (index >= 0) {
|
|
1191
|
-
|
|
1200
|
+
virtualList.scrollTo(index);
|
|
1192
1201
|
}
|
|
1193
|
-
}
|
|
1202
|
+
});
|
|
1194
1203
|
},
|
|
1195
1204
|
{ immediate: true }
|
|
1196
1205
|
);
|
|
1197
1206
|
return (_ctx, _cache) => {
|
|
1198
1207
|
return openBlock(), createElementBlock("div", {
|
|
1199
|
-
class: normalizeClass(_ctx.$style.container),
|
|
1208
|
+
class: normalizeClass([_ctx.$style.container, hasStaticScrollbar ? _ctx.$style.staticScrollBar : ""]),
|
|
1200
1209
|
"data-test-id": "logs-overview"
|
|
1201
1210
|
}, [
|
|
1202
1211
|
createVNode(LogsPanelHeader, {
|
|
@@ -1213,7 +1222,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1213
1222
|
createVNode(unref(N8nButton), {
|
|
1214
1223
|
size: "mini",
|
|
1215
1224
|
type: "secondary",
|
|
1216
|
-
icon: "trash",
|
|
1225
|
+
icon: "trash-2",
|
|
1217
1226
|
"icon-size": "medium",
|
|
1218
1227
|
"data-test-id": "clear-execution-data-button",
|
|
1219
1228
|
class: normalizeClass(_ctx.$style.clearButton),
|
|
@@ -1270,9 +1279,9 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1270
1279
|
"is-compact": _ctx.isCompact,
|
|
1271
1280
|
"should-show-token-count-column": shouldShowTokenCountColumn.value,
|
|
1272
1281
|
"latest-info": _ctx.latestNodeInfo[data.node.id],
|
|
1273
|
-
expanded:
|
|
1282
|
+
expanded: isExpanded.value[data.id],
|
|
1274
1283
|
"can-open-ndv": data.executionId === _ctx.execution?.id,
|
|
1275
|
-
onToggleExpanded: ($event) =>
|
|
1284
|
+
onToggleExpanded: ($event) => emit("toggleExpanded", data),
|
|
1276
1285
|
onOpenNdv: ($event) => emit("openNdv", data),
|
|
1277
1286
|
onTriggerPartialExecution: ($event) => handleTriggerPartialExecution(data),
|
|
1278
1287
|
onToggleSelected: ($event) => emit("select", _ctx.selected?.id === data.id ? void 0 : data)
|
|
@@ -1293,14 +1302,15 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
1293
1302
|
};
|
|
1294
1303
|
}
|
|
1295
1304
|
});
|
|
1296
|
-
const container$5 = "
|
|
1297
|
-
const clearButton = "
|
|
1298
|
-
const content$1 = "
|
|
1299
|
-
const empty = "
|
|
1300
|
-
const emptyText = "
|
|
1301
|
-
const summary = "
|
|
1302
|
-
const tree = "
|
|
1303
|
-
const
|
|
1305
|
+
const container$5 = "_container_pydb1_123";
|
|
1306
|
+
const clearButton = "_clearButton_pydb1_133";
|
|
1307
|
+
const content$1 = "_content_pydb1_139";
|
|
1308
|
+
const empty = "_empty_pydb1_149";
|
|
1309
|
+
const emptyText = "_emptyText_pydb1_154";
|
|
1310
|
+
const summary = "_summary_pydb1_159";
|
|
1311
|
+
const tree = "_tree_pydb1_163";
|
|
1312
|
+
const staticScrollBar = "_staticScrollBar_pydb1_168";
|
|
1313
|
+
const switchViewButtons = "_switchViewButtons_pydb1_193";
|
|
1304
1314
|
const style0$7 = {
|
|
1305
1315
|
container: container$5,
|
|
1306
1316
|
clearButton,
|
|
@@ -1309,6 +1319,7 @@ const style0$7 = {
|
|
|
1309
1319
|
emptyText,
|
|
1310
1320
|
summary,
|
|
1311
1321
|
tree,
|
|
1322
|
+
staticScrollBar,
|
|
1312
1323
|
switchViewButtons
|
|
1313
1324
|
};
|
|
1314
1325
|
const cssModules$7 = {
|
|
@@ -4406,7 +4417,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
|
|
|
4406
4417
|
return _ctx.emptyText && unref(initialMessages).length === 0 && _ctx.messages.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
|
|
4407
4418
|
createBaseVNode("div", _hoisted_2, [
|
|
4408
4419
|
createVNode(unref(N8nIcon), {
|
|
4409
|
-
icon: "
|
|
4420
|
+
icon: "message-circle",
|
|
4410
4421
|
size: "large",
|
|
4411
4422
|
class: "emptyIcon"
|
|
4412
4423
|
}),
|
|
@@ -4500,7 +4511,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
|
4500
4511
|
required: true
|
|
4501
4512
|
},
|
|
4502
4513
|
icon: {
|
|
4503
|
-
type:
|
|
4514
|
+
type: Object,
|
|
4504
4515
|
required: true
|
|
4505
4516
|
},
|
|
4506
4517
|
placement: {
|
|
@@ -4674,7 +4685,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
4674
4685
|
type: "secondary",
|
|
4675
4686
|
size: "small",
|
|
4676
4687
|
"icon-size": "medium",
|
|
4677
|
-
icon: "undo",
|
|
4688
|
+
icon: "undo-2",
|
|
4678
4689
|
title: unref(locale).baseText("chat.window.session.reset"),
|
|
4679
4690
|
onClick: withModifiers(onRefreshSession, ["stop"])
|
|
4680
4691
|
}, null, 8, ["class", "title"])
|
|
@@ -4712,7 +4723,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
4712
4723
|
!_ctx.isReadOnly && isTextMessage(message) && message.sender === "user" ? (openBlock(), createBlock(MessageOptionAction, {
|
|
4713
4724
|
key: 1,
|
|
4714
4725
|
"data-test-id": "repost-message-button",
|
|
4715
|
-
icon: "redo",
|
|
4726
|
+
icon: "redo-2",
|
|
4716
4727
|
label: unref(locale).baseText("chat.window.chat.chatMessageOptions.repostMessage"),
|
|
4717
4728
|
placement: "left",
|
|
4718
4729
|
onClickOnce: ($event) => repostMessage(message)
|
|
@@ -4720,7 +4731,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
4720
4731
|
!_ctx.isReadOnly && isTextMessage(message) && message.sender === "user" ? (openBlock(), createBlock(MessageOptionAction, {
|
|
4721
4732
|
key: 2,
|
|
4722
4733
|
"data-test-id": "reuse-message-button",
|
|
4723
|
-
icon: "
|
|
4734
|
+
icon: "files",
|
|
4724
4735
|
label: unref(locale).baseText("chat.window.chat.chatMessageOptions.reuseMessage"),
|
|
4725
4736
|
placement: "left",
|
|
4726
4737
|
onClick: ($event) => reuseMessage(message)
|
|
@@ -4770,17 +4781,18 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
4770
4781
|
};
|
|
4771
4782
|
}
|
|
4772
4783
|
});
|
|
4773
|
-
const chat$1 = "
|
|
4774
|
-
const chatHeader = "
|
|
4775
|
-
const chatTitle = "
|
|
4776
|
-
const session = "
|
|
4777
|
-
const sessionId = "
|
|
4778
|
-
const copyable = "
|
|
4779
|
-
const headerButton = "
|
|
4780
|
-
const newHeaderButton = "
|
|
4781
|
-
const chatBody = "
|
|
4782
|
-
const messages = "
|
|
4783
|
-
const messagesInput = "
|
|
4784
|
+
const chat$1 = "_chat_oezi2_123";
|
|
4785
|
+
const chatHeader = "_chatHeader_oezi2_151";
|
|
4786
|
+
const chatTitle = "_chatTitle_oezi2_164";
|
|
4787
|
+
const session = "_session_oezi2_168";
|
|
4788
|
+
const sessionId = "_sessionId_oezi2_176";
|
|
4789
|
+
const copyable = "_copyable_oezi2_182";
|
|
4790
|
+
const headerButton = "_headerButton_oezi2_186";
|
|
4791
|
+
const newHeaderButton = "_newHeaderButton_oezi2_191";
|
|
4792
|
+
const chatBody = "_chatBody_oezi2_196";
|
|
4793
|
+
const messages = "_messages_oezi2_205";
|
|
4794
|
+
const messagesInput = "_messagesInput_oezi2_216";
|
|
4795
|
+
const messagesHistory = "_messagesHistory_oezi2_250";
|
|
4784
4796
|
const style0$4 = {
|
|
4785
4797
|
chat: chat$1,
|
|
4786
4798
|
chatHeader,
|
|
@@ -4792,7 +4804,8 @@ const style0$4 = {
|
|
|
4792
4804
|
newHeaderButton,
|
|
4793
4805
|
chatBody,
|
|
4794
4806
|
messages,
|
|
4795
|
-
messagesInput
|
|
4807
|
+
messagesInput,
|
|
4808
|
+
messagesHistory
|
|
4796
4809
|
};
|
|
4797
4810
|
const cssModules$4 = {
|
|
4798
4811
|
"$style": style0$4
|
|
@@ -4803,9 +4816,12 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
4803
4816
|
props: {
|
|
4804
4817
|
title: {},
|
|
4805
4818
|
paneType: {},
|
|
4806
|
-
logEntry: {}
|
|
4819
|
+
logEntry: {},
|
|
4820
|
+
collapsingTableColumnName: {}
|
|
4807
4821
|
},
|
|
4808
|
-
|
|
4822
|
+
emits: ["collapsingTableColumnChanged"],
|
|
4823
|
+
setup(__props, { emit: __emit }) {
|
|
4824
|
+
const emit = __emit;
|
|
4809
4825
|
const locale = useI18n$1();
|
|
4810
4826
|
const ndvStore = useNDVStore();
|
|
4811
4827
|
const pipWindow = inject(PiPWindowSymbol, ref());
|
|
@@ -4814,7 +4830,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
4814
4830
|
() => __props.paneType === "input" && (__props.logEntry.runData?.source.length ?? 0) > 1
|
|
4815
4831
|
);
|
|
4816
4832
|
const runDataProps = computed(() => {
|
|
4817
|
-
if (__props.logEntry
|
|
4833
|
+
if (isSubNodeLog(__props.logEntry) || __props.paneType === "output") {
|
|
4818
4834
|
return { node: __props.logEntry.node, runIndex: __props.logEntry.runIndex };
|
|
4819
4835
|
}
|
|
4820
4836
|
const source = __props.logEntry.runData?.source[0];
|
|
@@ -4857,10 +4873,12 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
4857
4873
|
"disable-edit": true,
|
|
4858
4874
|
"disable-hover-highlight": true,
|
|
4859
4875
|
"display-mode": displayMode.value,
|
|
4860
|
-
"disable-ai-content": _ctx.logEntry
|
|
4876
|
+
"disable-ai-content": !unref(isSubNodeLog)(_ctx.logEntry),
|
|
4861
4877
|
"is-executing": isExecuting.value,
|
|
4862
4878
|
"table-header-bg-color": "light",
|
|
4863
|
-
|
|
4879
|
+
"collapsing-table-column-name": _ctx.collapsingTableColumnName,
|
|
4880
|
+
onDisplayModeChange: handleChangeDisplayMode,
|
|
4881
|
+
onCollapsingTableColumnChanged: _cache[0] || (_cache[0] = ($event) => emit("collapsingTableColumnChanged", $event))
|
|
4864
4882
|
}), createSlots({
|
|
4865
4883
|
header: withCtx(() => [
|
|
4866
4884
|
createVNode(unref(N8nText), {
|
|
@@ -4929,7 +4947,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
4929
4947
|
]),
|
|
4930
4948
|
key: "1"
|
|
4931
4949
|
} : void 0
|
|
4932
|
-
]), 1040, ["workflow", "workflow-execution", "too-much-data-title", "no-data-in-branch-message", "executing-message", "pane-type", "display-mode", "disable-ai-content", "is-executing"])) : createCommentVNode("", true);
|
|
4950
|
+
]), 1040, ["workflow", "workflow-execution", "too-much-data-title", "no-data-in-branch-message", "executing-message", "pane-type", "display-mode", "disable-ai-content", "is-executing", "collapsing-table-column-name"])) : createCommentVNode("", true);
|
|
4933
4951
|
};
|
|
4934
4952
|
}
|
|
4935
4953
|
});
|
|
@@ -5040,9 +5058,11 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
5040
5058
|
logEntry: {},
|
|
5041
5059
|
window: {},
|
|
5042
5060
|
latestInfo: {},
|
|
5043
|
-
panels: {}
|
|
5061
|
+
panels: {},
|
|
5062
|
+
collapsingInputTableColumnName: {},
|
|
5063
|
+
collapsingOutputTableColumnName: {}
|
|
5044
5064
|
},
|
|
5045
|
-
emits: ["clickHeader", "toggleInputOpen", "toggleOutputOpen"],
|
|
5065
|
+
emits: ["clickHeader", "toggleInputOpen", "toggleOutputOpen", "collapsingInputTableColumnChanged", "collapsingOutputTableColumnChanged"],
|
|
5046
5066
|
setup(__props, { emit: __emit }) {
|
|
5047
5067
|
const emit = __emit;
|
|
5048
5068
|
const locale = useI18n$1();
|
|
@@ -5091,10 +5111,9 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
5091
5111
|
class: normalizeClass(_ctx.$style.icon)
|
|
5092
5112
|
}, null, 8, ["node-type", "class"]),
|
|
5093
5113
|
createVNode(LogsViewNodeName, {
|
|
5094
|
-
|
|
5095
|
-
name: _ctx.logEntry.node.name,
|
|
5114
|
+
name: _ctx.latestInfo?.name ?? _ctx.logEntry.node.name,
|
|
5096
5115
|
"is-deleted": _ctx.latestInfo?.deleted ?? false
|
|
5097
|
-
}, null, 8, ["
|
|
5116
|
+
}, null, 8, ["name", "is-deleted"]),
|
|
5098
5117
|
_ctx.isOpen && _ctx.logEntry.runData !== void 0 ? (openBlock(), createBlock(LogsViewExecutionSummary, {
|
|
5099
5118
|
key: 0,
|
|
5100
5119
|
class: normalizeClass(_ctx.$style.executionSummary),
|
|
@@ -5189,8 +5208,10 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
5189
5208
|
"data-test-id": "log-details-input",
|
|
5190
5209
|
"pane-type": "input",
|
|
5191
5210
|
title: unref(locale).baseText("logs.details.header.actions.input"),
|
|
5192
|
-
"log-entry": _ctx.logEntry
|
|
5193
|
-
|
|
5211
|
+
"log-entry": _ctx.logEntry,
|
|
5212
|
+
"collapsing-table-column-name": _ctx.collapsingInputTableColumnName,
|
|
5213
|
+
onCollapsingTableColumnChanged: _cache[3] || (_cache[3] = ($event) => emit("collapsingInputTableColumnChanged", $event))
|
|
5214
|
+
}, null, 8, ["title", "log-entry", "collapsing-table-column-name"])
|
|
5194
5215
|
]),
|
|
5195
5216
|
_: 1
|
|
5196
5217
|
}, 8, ["class", "width", "style", "is-resizing-enabled", "window", "onResize"])) : createCommentVNode("", true),
|
|
@@ -5200,8 +5221,10 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
5200
5221
|
"pane-type": "output",
|
|
5201
5222
|
class: normalizeClass(_ctx.$style.outputPanel),
|
|
5202
5223
|
title: unref(locale).baseText("logs.details.header.actions.output"),
|
|
5203
|
-
"log-entry": _ctx.logEntry
|
|
5204
|
-
|
|
5224
|
+
"log-entry": _ctx.logEntry,
|
|
5225
|
+
"collapsing-table-column-name": _ctx.collapsingOutputTableColumnName,
|
|
5226
|
+
onCollapsingTableColumnChanged: _cache[4] || (_cache[4] = ($event) => emit("collapsingOutputTableColumnChanged", $event))
|
|
5227
|
+
}, null, 8, ["class", "title", "log-entry", "collapsing-table-column-name"])) : createCommentVNode("", true)
|
|
5205
5228
|
], 64))
|
|
5206
5229
|
], 2)) : createCommentVNode("", true)
|
|
5207
5230
|
], 2);
|
|
@@ -5302,7 +5325,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
5302
5325
|
_ctx.isOpen ? (openBlock(), createBlock(unref(N8nActionDropdown), {
|
|
5303
5326
|
key: 1,
|
|
5304
5327
|
"icon-size": "small",
|
|
5305
|
-
"activator-icon": "ellipsis
|
|
5328
|
+
"activator-icon": "ellipsis",
|
|
5306
5329
|
"activator-size": "small",
|
|
5307
5330
|
items: menuItems.value,
|
|
5308
5331
|
teleported: false,
|
|
@@ -5447,11 +5470,16 @@ function useLogsExecutionData() {
|
|
|
5447
5470
|
}
|
|
5448
5471
|
function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
|
|
5449
5472
|
const telemetry = useTelemetry();
|
|
5450
|
-
const manualLogEntrySelection =
|
|
5451
|
-
const
|
|
5473
|
+
const manualLogEntrySelection = shallowRef({ type: "initial" });
|
|
5474
|
+
const nodeIdToSelect = shallowRef();
|
|
5475
|
+
const isExecutionStopped = computed(() => execution.value?.stoppedAt !== void 0);
|
|
5476
|
+
const selected2 = computed(
|
|
5477
|
+
() => findSelectedLogEntry(manualLogEntrySelection.value, tree2.value, !isExecutionStopped.value)
|
|
5478
|
+
);
|
|
5452
5479
|
const logsStore = useLogsStore();
|
|
5453
5480
|
const uiStore = useUIStore();
|
|
5454
5481
|
const canvasStore = useCanvasStore();
|
|
5482
|
+
const workflowsStore = useWorkflowsStore();
|
|
5455
5483
|
function syncSelectionToCanvasIfEnabled(value) {
|
|
5456
5484
|
if (!logsStore.isLogSelectionSyncedWithCanvas) {
|
|
5457
5485
|
return;
|
|
@@ -5459,7 +5487,7 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
|
|
|
5459
5487
|
canvasEventBus.emit("nodes:select", { ids: [value.node.id], panIntoView: true });
|
|
5460
5488
|
}
|
|
5461
5489
|
function select(value) {
|
|
5462
|
-
manualLogEntrySelection.value = value === void 0 ? { type: "none" } : { type: "selected",
|
|
5490
|
+
manualLogEntrySelection.value = value === void 0 ? { type: "none" } : { type: "selected", entry: value };
|
|
5463
5491
|
if (value) {
|
|
5464
5492
|
syncSelectionToCanvasIfEnabled(value);
|
|
5465
5493
|
telemetry.track("User selected node in log view", {
|
|
@@ -5473,14 +5501,20 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
|
|
|
5473
5501
|
}
|
|
5474
5502
|
function selectPrev() {
|
|
5475
5503
|
const entries = flatLogEntries.value;
|
|
5504
|
+
if (entries.length === 0) {
|
|
5505
|
+
return;
|
|
5506
|
+
}
|
|
5476
5507
|
const prevEntry = selected2.value ? getEntryAtRelativeIndex(entries, selected2.value.id, -1) ?? entries[0] : entries[entries.length - 1];
|
|
5477
|
-
manualLogEntrySelection.value = { type: "selected",
|
|
5508
|
+
manualLogEntrySelection.value = { type: "selected", entry: prevEntry };
|
|
5478
5509
|
syncSelectionToCanvasIfEnabled(prevEntry);
|
|
5479
5510
|
}
|
|
5480
5511
|
function selectNext() {
|
|
5481
5512
|
const entries = flatLogEntries.value;
|
|
5513
|
+
if (entries.length === 0) {
|
|
5514
|
+
return;
|
|
5515
|
+
}
|
|
5482
5516
|
const nextEntry = selected2.value ? getEntryAtRelativeIndex(entries, selected2.value.id, 1) ?? entries[entries.length - 1] : entries[0];
|
|
5483
|
-
manualLogEntrySelection.value = { type: "selected",
|
|
5517
|
+
manualLogEntrySelection.value = { type: "selected", entry: nextEntry };
|
|
5484
5518
|
syncSelectionToCanvasIfEnabled(nextEntry);
|
|
5485
5519
|
}
|
|
5486
5520
|
watch(
|
|
@@ -5495,14 +5529,23 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
|
|
|
5495
5529
|
watch(
|
|
5496
5530
|
[() => uiStore.lastSelectedNode, () => logsStore.isLogSelectionSyncedWithCanvas],
|
|
5497
5531
|
([selectedOnCanvas, shouldSync]) => {
|
|
5498
|
-
|
|
5532
|
+
const selectedNodeId = selectedOnCanvas ? workflowsStore.nodesByName[selectedOnCanvas]?.id : void 0;
|
|
5533
|
+
nodeIdToSelect.value = shouldSync && !canvasStore.hasRangeSelection && selected2.value?.node.id !== selectedNodeId ? selectedNodeId : void 0;
|
|
5534
|
+
},
|
|
5535
|
+
{ immediate: true }
|
|
5536
|
+
);
|
|
5537
|
+
watch(
|
|
5538
|
+
[tree2, nodeIdToSelect],
|
|
5539
|
+
([latestTree, id]) => {
|
|
5540
|
+
if (id === void 0) {
|
|
5499
5541
|
return;
|
|
5500
5542
|
}
|
|
5501
|
-
const entry = findLogEntryRec((e) => e.node.
|
|
5543
|
+
const entry = findLogEntryRec((e) => e.node.id === id, latestTree);
|
|
5502
5544
|
if (!entry) {
|
|
5503
5545
|
return;
|
|
5504
5546
|
}
|
|
5505
|
-
|
|
5547
|
+
nodeIdToSelect.value = void 0;
|
|
5548
|
+
manualLogEntrySelection.value = { type: "selected", entry };
|
|
5506
5549
|
let parent = entry.parent;
|
|
5507
5550
|
while (parent !== void 0) {
|
|
5508
5551
|
toggleExpand(parent, true);
|
|
@@ -5513,11 +5556,18 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
|
|
|
5513
5556
|
);
|
|
5514
5557
|
return { selected: selected2, select, selectPrev, selectNext };
|
|
5515
5558
|
}
|
|
5516
|
-
function useLogsTreeExpand(entries) {
|
|
5517
|
-
const collapsedEntries =
|
|
5559
|
+
function useLogsTreeExpand(entries, loadSubExecution) {
|
|
5560
|
+
const collapsedEntries = shallowRef({});
|
|
5518
5561
|
const flatLogEntries = computed(() => flattenLogEntries(entries.value, collapsedEntries.value));
|
|
5519
5562
|
function toggleExpanded(treeNode, expand) {
|
|
5520
|
-
|
|
5563
|
+
if (hasSubExecution(treeNode) && treeNode.children.length === 0) {
|
|
5564
|
+
void loadSubExecution(treeNode);
|
|
5565
|
+
return;
|
|
5566
|
+
}
|
|
5567
|
+
collapsedEntries.value = {
|
|
5568
|
+
...collapsedEntries.value,
|
|
5569
|
+
[treeNode.id]: expand === void 0 ? !collapsedEntries.value[treeNode.id] : !expand
|
|
5570
|
+
};
|
|
5521
5571
|
}
|
|
5522
5572
|
return {
|
|
5523
5573
|
flatLogEntries,
|
|
@@ -5730,7 +5780,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
5730
5780
|
container: {}
|
|
5731
5781
|
},
|
|
5732
5782
|
setup(__props) {
|
|
5733
|
-
const pipWindow = inject(PiPWindowSymbol);
|
|
5783
|
+
const pipWindow = inject(PiPWindowSymbol, ref());
|
|
5734
5784
|
const activeElement = useActiveElement({ window: pipWindow?.value });
|
|
5735
5785
|
const isBlurred = computed(() => {
|
|
5736
5786
|
if (pipWindow?.value) {
|
|
@@ -5742,7 +5792,8 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
5742
5792
|
toRef(() => __props.keyMap),
|
|
5743
5793
|
{ disabled: isBlurred }
|
|
5744
5794
|
);
|
|
5745
|
-
return () => {
|
|
5795
|
+
return (_ctx, _cache) => {
|
|
5796
|
+
return openBlock(), createElementBlock("div");
|
|
5746
5797
|
};
|
|
5747
5798
|
}
|
|
5748
5799
|
});
|
|
@@ -5787,13 +5838,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
5787
5838
|
displayExecution
|
|
5788
5839
|
} = useChatState(props.isReadOnly);
|
|
5789
5840
|
const { entries, execution, hasChat, latestNodeNameById, resetExecutionData, loadSubExecution } = useLogsExecutionData();
|
|
5790
|
-
const { flatLogEntries, toggleExpanded } = useLogsTreeExpand(entries);
|
|
5841
|
+
const { flatLogEntries, toggleExpanded } = useLogsTreeExpand(entries, loadSubExecution);
|
|
5791
5842
|
const { selected: selected2, select, selectNext, selectPrev } = useLogsSelection(
|
|
5792
5843
|
execution,
|
|
5793
5844
|
entries,
|
|
5794
5845
|
flatLogEntries,
|
|
5795
5846
|
toggleExpanded
|
|
5796
5847
|
);
|
|
5848
|
+
const inputTableColumnCollapsing = ref();
|
|
5849
|
+
const outputTableColumnCollapsing = ref();
|
|
5797
5850
|
const isLogDetailsOpen = computed(() => isOpen.value && selected2.value !== void 0);
|
|
5798
5851
|
const isLogDetailsVisuallyOpen = computed(
|
|
5799
5852
|
() => isLogDetailsOpen.value && !isCollapsingDetailsPanel.value
|
|
@@ -5807,6 +5860,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
5807
5860
|
onToggleOpen,
|
|
5808
5861
|
onToggleSyncSelection: logsStore.toggleLogSelectionSync
|
|
5809
5862
|
}));
|
|
5863
|
+
const inputCollapsingColumnName = computed(
|
|
5864
|
+
() => inputTableColumnCollapsing.value?.nodeName === selected2.value?.node.name ? inputTableColumnCollapsing.value?.columnName ?? null : null
|
|
5865
|
+
);
|
|
5866
|
+
const outputCollapsingColumnName = computed(
|
|
5867
|
+
() => outputTableColumnCollapsing.value?.nodeName === selected2.value?.node.name ? outputTableColumnCollapsing.value?.columnName ?? null : null
|
|
5868
|
+
);
|
|
5810
5869
|
const keyMap = computed(() => ({
|
|
5811
5870
|
j: selectNext,
|
|
5812
5871
|
k: selectPrev,
|
|
@@ -5832,6 +5891,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
5832
5891
|
ndvStore.setOutputRunIndex(treeNode.runIndex);
|
|
5833
5892
|
});
|
|
5834
5893
|
}
|
|
5894
|
+
function handleChangeInputTableColumnCollapsing(columnName) {
|
|
5895
|
+
inputTableColumnCollapsing.value = columnName && selected2.value ? { nodeName: selected2.value.node.name, columnName } : void 0;
|
|
5896
|
+
}
|
|
5897
|
+
function handleChangeOutputTableColumnCollapsing(columnName) {
|
|
5898
|
+
outputTableColumnCollapsing.value = columnName && selected2.value ? { nodeName: selected2.value.node.name, columnName } : void 0;
|
|
5899
|
+
}
|
|
5835
5900
|
return (_ctx, _cache) => {
|
|
5836
5901
|
return openBlock(), createElementBlock("div", {
|
|
5837
5902
|
ref_key: "pipContainer",
|
|
@@ -5910,8 +5975,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
5910
5975
|
onResizeend: handleResizeOverviewPanelEnd
|
|
5911
5976
|
}, {
|
|
5912
5977
|
default: withCtx(() => [
|
|
5913
|
-
(
|
|
5914
|
-
key: unref(execution)?.id ?? "",
|
|
5978
|
+
createVNode(LogsOverviewPanel, {
|
|
5915
5979
|
class: normalizeClass(_ctx.$style.logsOverview),
|
|
5916
5980
|
"is-open": unref(isOpen),
|
|
5917
5981
|
"is-read-only": _ctx.isReadOnly,
|
|
@@ -5925,14 +5989,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
5925
5989
|
onSelect: unref(select),
|
|
5926
5990
|
onClearExecutionData: unref(resetExecutionData),
|
|
5927
5991
|
onToggleExpanded: unref(toggleExpanded),
|
|
5928
|
-
onOpenNdv: handleOpenNdv
|
|
5929
|
-
onLoadSubExecution: unref(loadSubExecution)
|
|
5992
|
+
onOpenNdv: handleOpenNdv
|
|
5930
5993
|
}, {
|
|
5931
5994
|
actions: withCtx(() => [
|
|
5932
5995
|
!isLogDetailsVisuallyOpen.value ? (openBlock(), createBlock(LogsPanelActions, normalizeProps(mergeProps({ key: 0 }, logsPanelActionsProps.value)), null, 16)) : createCommentVNode("", true)
|
|
5933
5996
|
]),
|
|
5934
5997
|
_: 1
|
|
5935
|
-
}, 8, ["class", "is-open", "is-read-only", "is-compact", "selected", "execution", "entries", "latest-node-info", "flat-log-entries", "onSelect", "onClearExecutionData", "onToggleExpanded"
|
|
5998
|
+
}, 8, ["class", "is-open", "is-read-only", "is-compact", "selected", "execution", "entries", "latest-node-info", "flat-log-entries", "onSelect", "onClearExecutionData", "onToggleExpanded"])
|
|
5936
5999
|
]),
|
|
5937
6000
|
_: 1
|
|
5938
6001
|
}, 8, ["class", "width", "style", "is-resizing-enabled", "window", "onResize"]),
|
|
@@ -5942,17 +6005,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
5942
6005
|
"is-open": unref(isOpen),
|
|
5943
6006
|
"log-entry": unref(selected2),
|
|
5944
6007
|
window: unref(pipWindow),
|
|
5945
|
-
"latest-info": unref(latestNodeNameById)[unref(selected2).id],
|
|
6008
|
+
"latest-info": unref(latestNodeNameById)[unref(selected2).node.id],
|
|
5946
6009
|
panels: unref(logsStore).detailsState,
|
|
6010
|
+
"collapsing-input-table-column-name": inputCollapsingColumnName.value,
|
|
6011
|
+
"collapsing-output-table-column-name": outputCollapsingColumnName.value,
|
|
5947
6012
|
onClickHeader: _cache[2] || (_cache[2] = ($event) => unref(onToggleOpen)(true)),
|
|
5948
6013
|
onToggleInputOpen: unref(logsStore).toggleInputOpen,
|
|
5949
|
-
onToggleOutputOpen: unref(logsStore).toggleOutputOpen
|
|
6014
|
+
onToggleOutputOpen: unref(logsStore).toggleOutputOpen,
|
|
6015
|
+
onCollapsingInputTableColumnChanged: handleChangeInputTableColumnCollapsing,
|
|
6016
|
+
onCollapsingOutputTableColumnChanged: handleChangeOutputTableColumnCollapsing
|
|
5950
6017
|
}, {
|
|
5951
6018
|
actions: withCtx(() => [
|
|
5952
6019
|
isLogDetailsVisuallyOpen.value ? (openBlock(), createBlock(LogsPanelActions, normalizeProps(mergeProps({ key: 0 }, logsPanelActionsProps.value)), null, 16)) : createCommentVNode("", true)
|
|
5953
6020
|
]),
|
|
5954
6021
|
_: 1
|
|
5955
|
-
}, 8, ["class", "is-open", "log-entry", "window", "latest-info", "panels", "onToggleInputOpen", "onToggleOutputOpen"])) : createCommentVNode("", true)
|
|
6022
|
+
}, 8, ["class", "is-open", "log-entry", "window", "latest-info", "panels", "collapsing-input-table-column-name", "collapsing-output-table-column-name", "onToggleInputOpen", "onToggleOutputOpen"])) : createCommentVNode("", true)
|
|
5956
6023
|
], 2)
|
|
5957
6024
|
], 2)
|
|
5958
6025
|
]),
|