From 6719628350972ebdbc347ef4406b029a712c3f24 Mon Sep 17 00:00:00 2001 From: czlonkowski <56956555+czlonkowski@users.noreply.github.com> Date: Wed, 12 Nov 2025 17:52:52 +0100 Subject: [PATCH] fix: improve mutation telemetry error logging and diagnostics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes: - Upgrade error logging from debug to warn level for better visibility - Add diagnostic logging to track mutation processing - Log telemetry disabled state explicitly - Add context info (sessionId, intent, operationCount) to error logs - Remove 'await' from telemetry calls to make them truly non-blocking This will help identify why mutations aren't being persisted to the workflow_mutations table despite successful workflow operations. Conceived by Romuald Członkowski - https://www.aiadvisors.pl/en --- data/nodes.db | Bin 70729728 -> 70729728 bytes src/mcp/handlers-n8n-manager.ts | 12 ++++++++---- src/mcp/handlers-workflow-diff.ts | 17 +++++++++++++---- src/telemetry/telemetry-manager.ts | 11 ++++++++++- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/data/nodes.db b/data/nodes.db index 1f3b6ea623af809f0988104c3249d6fb7c690641..868216f8d7de1cbc6ad0b5a03971b202dff034c9 100644 GIT binary patch delta 16128 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 delta 13314 zcmYk?2YeJ|{y*@{JhQ!TdT$#@LPA0cq!0)Y2#^4ww?H-|8?utRyGaPrb~c;PVkm(} z5m>OFdMDUcMFo|!pMvc?8|a;SmQ%RXQ|}c2-_OSX@Au2=^?7G@W_IS8XP$Yc?Cjk6 zVd_rG{&>r_u&`O4u&|QMurT%aVM2Muft*5No7e8Q3x2!kw==(8^4k@DyV7r0`R!`I zUE{ZF{dS$-uJ_vwe!J0cH~H;mzun@uTmANMzdgclkM!H4{Pt+SJ;ra3_1ok8_ISTN z!EaCW+mrnEWWPPdZ%_5x)BN`IN9?wfc~V%IIEzm@Jt=`VeA%rIW?t!f&lD6ZZP$}A zX--fwcVDLwUAF5cjHn5m*}R|qiC@v3jOV969k1l;E_7@Ub}jDSZyYUF1Qq*j|4n}M zbnh3YK=K2_Ec(Qi0Y+m}hVRsfB~J$L&l>(l5QWc!$0iJ~kVH`*{O)y|sZv-Ol+Jfu zH;Lln;HvvtZkCjt&5m_tDLmC)P!(KQ*=N)Rzst)oo)pCfzO$|?CzxN?^@eFkypjR*r6l(7dEsdIJij1LUYvpBWyKdC#!$ltk3~~}rxc5w&=vx{nq8iHL zFWh^^BGm9-?mZLN9NKuF5>?B_D(4A@&ZJwsJv6e1iq6Ush`Bv{-=Q=ZZyPmnQ4m!sT~lkL$K!Ht+~{x( zs6fTSTdg-rQWsSOTC$lbTux78+W;z7-XsZ|`ekllJLZ4!(h4N*`&XmQ-X*B1+1eKzzt+C1BGgBFE>5lMr1pd-i z%@Wn3+l{7G%YDbsWTn!2n`9gu(l%m63 zi5cpQlhCfF>h(G~nPxp!vArOjZ?EW1sFg)JbXR&6btQ3eG|$Z$UW+N6_L*V>Hozol zS{?0;9%oZyn{OMHW2!`5fD0QZx8gwc^)g}eS{m3R$QAst#-f=@G${W(-u?D)q$uZe zaYNC5m7d0V3sk(kaBqA?XaoEi$@uz>p$aRpQ7PqVQ|4i|g{UC!98uUH--uaOc}?`s zUnh!9UA~QcM$z5`{>p};aK5!@@0U9kTO-@%M3~HaqgAglTFoYXq(Nsi>*BhL%!N57 z>K+QCHEHFEnkY+BRbrGuXUb@b*Xi|{dTo-?Y|v_JHRcGtZkfRl8^fIx0ff|}OYdm)Q zfI%&~+;TrnouR^kdIRlEt%A86&2lg1Zb;*K9$S*Cljf+BBe-@&N{T2?=F?ZCB#6Fn z-sZ7o@$Xlplv!j0?Up!iL8x`D@wFQ{_t^4HaauuA7_6bCoy;lb+g7C%XwXv)IaL}r ze|1$#$~gH(T6(vVm^}k4b!vs?P;YjkODnk1V0>126&HJK>HO~1DfuZfIybL%9n^-J zOF!C|Tqr3WZJk{XUb`kGHbzdRaYMz7+N>|#>yqox>3PQ)_#f{n{M8;?vO%#ChyNB@=TxP@zwNQ*B~PWv z-W^zye>;<0jwX*!Pvu@vM*W3GB?kULyR7=~BwJkGShLp%{jDg|;&D+pSUZef6H~Yw zH?%p>%lf8F#4)lWU(VxmdTrx(ETfP9)loP$2B)j3cB5$Jbh2}Y&U+ii&U;-=D8yui z)YjJ77h23zxf`RlS&ixhON4f|L04inhDSz+Yjh(U7HGAJ8gsfXKDIwD+N3wzw9yf@ zQ!C@bQ@F(>NLxBPLc7bqQd(A$GskGxTC`r}Y*X;N zkxXMg9ge~G3wtk#bjSq{OzmwDg0Jt-+$sidOX+nBag4P)n|w=9;i85K9r9Kx>_F8- zT?AiuC^Ic(Gu6_7*}I+o$$E6rzNrkON*wq~rH1FH_eO~F0zP^uvnqHoy|m+dR6G)yu~<#ys2eIHNM@NgD!k9Oj1zK+Sw7>FQo-E$Ix`|X1X}J ze>5{U*qPnC1ZC%2JmNUB&k_-}f1V*HJuyZbGq7Mr(6ZBJ5Kq)C6O}>b#mt{g5p-!v zy|%!#I-ORjR+z0uRXN`}|A|C?vd`u&qNd;M2pxA5MX|#fx~SpHYtoqD4jmAO==|9k zx(=IGOJ$s;ESKl=yv?@gxEV$|u~KKUg$Ye=R6&%CUPs;}@;6ns6OrD{*d~(_2kl@9 z4%)$3#?Q}xqC9wHvn^8K|I*oF1IF5F79l7Cy2XArS%uTqVAe{0m)=&TktO;xkYFm| z5BJ+jVo_lw`Dk6`p^krhsEH?P6v5$D@p}ZWxY1_jJ6Ff+gDGZPMd&1cIm*^ZN9w$2 z+t0ykTWl8uelpJ1DoBApn!J@ilV}@f zmIU`AIxxpa)7l3TeYQZt5?mQRxgx$mJ=O}Cna|p0n?u*V9UBKC`L&htQ6gP*{!sHo zMRKS!DOFOZ-%j86PL(I38Zuk3*Q-#`+Vj(B z&(mSd3b;n_n*9P+XX*Q&eC@?1W5(b)r2V_7^c%GG@q&V%(AGy&b9stZP{8AL^+q9{=jrOBG@<4uN2)XUR$cuX ztDH!;0s}SCx&);rmNvg4mZ#|JlV_;aEw0Y?7H6BoMPu!PR-(19l5yo&t;Vg34tv44 zRZaIIKDx~j=;(I4sds4;q$M`9oEX?g#mVIjhWfgwG%EV;IDK#EY!kZf@lMq+UixLp zh80Yrbu>F@xihH;!~b%h0iT$-Y3y8c%S5JZYunJ+v}x=FyqV_n&8AwFqa@Mo@P$!H zd|D%u+MR9v?ex_Oxg{VS*u_#}m5xSFkINCdB5J`QF|&bKbKGi0|M?{eAD?yKdgPNwlO-{YRL`PM>;ffwFX_ZVf6xw zPP15NGU%;S;w)yPPoEbTIk;AvvPox7&}$>oZqORkCViY)XVjUrdW*rBq#h_sifAwy z&t3cQFtdn5qB)C_O_@N+q2y8~21Rq8a8VF=>iFsDyhi7r!S}~l)Q@!e57Hg^)x7H_ zeOMS1v8PkqJzad{-z{_a`722af`N3sM)|8--@98|~Y> z0WAQxm50~voyXL!#&!o?RgZPV!}@@C(8v-?=p*etf3H=NJWi~I8v4G)hRQf^P3Y@1 z@nngWDc$bAPS@DQ)iFI&cmjbTBa4a_#paf=lBvAbLQz4>@1z^bz{|Ug%%&ElRyuq7 z%zXabv*QB`b{ko0xZ2r4rEt*gCDHp!E27@W3U4p$4b4`@~1H3u4%EL4U-*OL2Kq)OEGY-n>f@zoDoC+rAq=BWfh z?55din-1pNL`_d)hsWu0I%sXQgkuibs22LihP&h{#vHD(PXklhBL$_avDw)(R`3zJ z$m?kCZ1_Z7+Sz zo1*p?X(SffpS1ml#0c+11?&B-$&JP^Mwh9f_SK}6#%h<^S~^`)hl=RiA$wd%YaS6m3-TW36Rxt)z%{^wI{03OUlHVaoQ-UOF#OGim&| zl11-Obx{Wt8bQlDrIe(xdsH;Nje1Gd;|X2Bgw{Pm-5FDM_t05nZ1D#dF}1t1tp}Gl zV{>G9GZcy*R}(6iifu>nJTy#OI#4@pe;AXfv!i*bxP#kn_GnTg+Cz6Rp>KOL`E)wJ zQqk6ZS;^w)SaWV{9cxlUoAz}C=6zMk%A=Wr)`tzC+B}eKG?`)re20Ji@slN!MX9k3 z>!$VXt}_}9B5P_Kd&V-_M@ON9&QqbK_W+r;*0T^wTw?I^NIJ>$W*kSbfR2E$?hT4tdRCM6t%wud)2@~7LRzGT>tq3(U zTFh~q&qN!6okHKcxsgd|0-?RkGcy~#CR5<2S;yG)Y^lTPruwFt3@%tfA1T zn@Y4soi+6MirPf3ttE3us7cW(PvWrqt&GQvqOxbh4Y*@NX#%sTr}z9%-R@e)lwDnI z&fiLNqFzDAE6qv!qjao{RFu7nBe|h2i^i^{heI9I#rw?kOq9>idd=%i-p+9%ogi8a zW2@NPAt~tO%;P_|#u^31|E}!tjKJyJ5?GW)?PzN42t9^DJBc}%8F=811eTbgYNzK$ z9<*v2eJb3bRrWcXH#)`^d&;Izbh;W{0rS1I3~4is4Se+QY8D+heP05L50}s5cQoiRJy*zB<~Zjl6Pq_k*nfu_t z;N!0CEI+WYdppY$%slm>;mAt5T?nmvP$S|J4hytIAJ$2D%0Wl&!6vzbK2RyBz@vr# z|9m~**0Hf8fj178#8069VeF_l&@YOfu^K-ZMvs1-V_oPmtDxv@Y{Msh>j9p(LmM7r zFlr3T4F-#D-gs@X-lWyd&|CEev)*FT(-SL`No%ym=NYXQy_GJtvQ2uU$sC?;iqyyG z6T-C?oj!ubSoB(hIh?+r*XylDQ;OMWHH91KmNA)THt4Jsw74Xr(Wo_9v=(}>W;WAv zGqcvX#H!bsb>nn8lipgWGlc8t&ctXon#1$7dXvedGiag=X8M}WYSCHf3yJZ@J}s>y z#-KBo>+}{~mW%}Hp;%ot zlY$?lF0>g>*sY>sNO3WrGKo?^DWnupiYb#RQz#{rQc4-6oHCVCL77IGPN}5Kpv(*^ zF3$Sqvhd8%cMntrzk6V|p%Rbv7OD4znG#Hr@#~;*XYI?T;Jd%h&bi7KsJC#{)j7AG zJ@tw3t}0-D?x?8ci>}R9@_$TEQx6^daSo-LGM6%sGCz3m$C}QSSmX}FOj1ZOeaiK9 zwLf#ZUwc3J>EhZ_UEu1}-OLu8xsIN}ip7ud=NoEMRm%0zVPU1G_%{u;QE|sbY74(( z2Nl1X#+gjUAB`WgV(})iT8!pt_S#i^tG%|Fe`c@U!&7$Jjy<}eHp{^O)=_H}HPO7G zy*83B>8yPqkyd|Pyc8y_ld6@sn5LN0Oa{|s_AOh^!o|;dS{D}7Rofi=tgCjhfF<1( zyyU8F(Mu65R|uBxsD0i{WePhkrG#l@jZ3pZvqUpfGf65k%?n2Dugw;ovi>N3B=Xa( zYKh-`sMZuL9IcJgNmiC63@r%MQWj7aQWjC_D2pjeC`&2JD9b4;C@U$eD61)JC~GP8 zly#K#lm?2O(n#4rX`(a-7X%!S=d-I}ir|6e=ME|Ov9}#d)7nRcXhT@8u=qB2mTzNN zSYg53_9<&Nb7+g)9{cxJzbpL)lU#y?tKTfsZuaj4WqWyPfvrxX?OQ>y$jUb!+= zcdl;yRk2qPN_gGlwrBbNvi#wI{qa4lBE6_+QbB2Rer{<=NpWsbOY@Z6#z~Ei+=9Xl z4o7oSK|xbX3;#HFZ(-m{*$fsQ%zMwVLcvSlb*$!>FFPWH{GsnIJ18xbjg(f3lX3%P z6QzyPPU)a@Qo1PJ6c@!!@lbjwy_7!6W=cP03*|=2R?0TYcFGRQPKuWzQ+$*Gik~t_ z8KUf>?56CY?4|6Z3{Q37)1z+h}Fok}B zyf{MHPdPw2NI66qr5vUlp>WF0lv^lADYsINQI1niPy&>blv9-3D7RDYpxjBhi*h&R z9?I`1_fqbo+)w#E^75Y4(_re0fK!Yp! z#oi0qqL6~ohrSlFhAR3lQ2t1Hp7H|aMaoN*mnpAMUZwnr@*3rJ%0Gv!^%UnuWU-lu#(`H=DvhfCw0nfC4Ci z3aEhwXn_vsfdLqS37CNeSV1_50FfXHM1vR*3*taLNC1f-2_%CQkP6a3Ifg9#u9gqqZ54E2L8;6|_&Yy;cD4zLq=fed_L z0QkWm7y`S%Zmf~(*f_$T-m_zrvz z{tbQrKZ2jYf53mi&)^qu9sDX#_b1YT07Srm1Qb9CR6q?hKnrw04-CKvOu!5*zzV`a z1c(GtAR5GgSP%!|K>|nwNgx@dfK-qM(t!AQwyoc_1H50tKKD z6oFze8B75spcIsWaxfKCfN5Yls01^>OfU;nf!SaVs0MSvJTM>BfLgEsECh={9as#O zfTds=SPoWzm0%TE4c36QpdPFP>p=ssgGR6cG=XN|04-o6Xa!Di1K0%GKs)FFouCVJ z0~c@u59k5CAk?HbW2hf&0XKrJU>n#Dc7UD03uNE}1Hcak!4TL5c7r`&FW3i$!A)QU z><0(HL2w9+g2Uhl;NWI(3pfgH1;@Z~Z~_FtNpK3>25tv;fIGom;BIga_#L#5AY567F-3_z(2viz<1z#@Ne(~_!0aB{saCCeg?mQ>)=#Tw8h{-%f(@VvGy?}{0UJRpaDp4aCeQ}jK?mprU7#Dd zfE#!~59kHdTEv~3K|k06ZUkGwHn1J+06W<^ai^C_SCxXAe(e(i`YxH>C5p9yhiPDn zWhuQv{5a(i$|C$682FjS$BCsU12Nq)`$QD013%M1+&FOoO+G-On_4Bkd91sQhUp=V zG>85lp%*AdD7ynwT{4>`%nR(K|A!Kn(6n-TL-`~6{}!!c4c!oL2@6ZRK=ZB-#elQ4zz%HVei(Qu-A(U)6&|!(2J%O_@Q>Xg0~;=Bn5g7RWo`ECh(6MKbw}0cPLhRjmmub z?a1L0=?xuOP$*Q|47IU`o%F+C-eb(7|^b|ex&fTogiwwSETH++7;1=ooHQu>C zJw3gwr5}`a^eY;hyU4(wJLH)eB{Ldb;_dPE3iRVlo;+S|@ERGPIc!ajs-a2V7_Y5N z(lpW&{IOqz!nknQL$4xF=H6jz%=8VkFz;N0;0|p@GQCC07UvUXGOe4<#oIA+o1)Ze z!C|4#Q++lvTO+t!RH}h;1z&Q+lOZ_xjw7C^csYqy82Y(2otC=GvXYdIc#a<*{PKwB z1p)8ay;6|Gas-KgIc&We9z#o!=d7T`GjCt$_10A@Jnf$0R8dahKip)^RL0O` z-vU1Cp5ZK>x6|{o=-nK!7bdZ2A%Tw@u@0nvZ5gEn1R!w(*`W?1nvUg!m!LOB&1sZjE>7+*;1rFUUTx=SYe zmHf&byQJ9JuyDK z>EvCG!pKSt%UKxqE(wj%i-E+QMwZR1c6$yxQ7vY!9Fky zZUQ48`cxnNW|Id+wW_ zwalu0+I*BrW`5~~h>y8>N_05?YHgvOFDho~fx2;{tcZWqRG7mni>6odt&`dL;LvT) z^c#+xjFHYs`A6CHWU=%-_a0A4<`)~!mGS-8qbBe=ceaw78_zZH^M!R%@LI~V7So7m zKT5rr{Z?=c90w;r0GtG;z-{1ma0j>(+y(9i_kiDld%=C+e(-zn2k-zm4bFfE!9(C- z@CbMm1i@qAaqt8<3!Vf|fv3Saa2`AZo(0c=3*e97dGG>w5xfLm2Cslu!Joiu;B{~j zTmo-^H^E!rZSW5GGk6#L1-u8|2OoeB!AIaSxB@-~pMbxDzkyG|XW(=2ckl)H5_|=| z2LAxxfN#N7a1Hzu{0n>sz6bvXKY$;>PvAe`zu;%^3%Cw`rT3=n5)BAI1Pn+(0hB-m z)IbBYKnL`|0F1x{%)kPyARI)1NDu|0K@5lmaUdQffJBf4l0gbc1!*81*gyst2gZX; ikOi{A1ds!A!9 logger.debug('Failed to track mutation telemetry:', err)); + }).catch(err => { + logger.warn('Failed to track mutation telemetry:', err); + }); } return { @@ -782,7 +784,7 @@ export async function handleUpdateWorkflow( } catch (error) { // Track failed mutation if (workflowBefore) { - await trackWorkflowMutationForFullUpdate({ + trackWorkflowMutationForFullUpdate({ sessionId, toolName: 'n8n_update_full_workflow', userIntent, @@ -792,7 +794,9 @@ export async function handleUpdateWorkflow( mutationSuccess: false, mutationError: error instanceof Error ? error.message : 'Unknown error', durationMs: Date.now() - startTime, - }).catch(err => logger.debug('Failed to track mutation telemetry:', err)); + }).catch(err => { + logger.warn('Failed to track mutation telemetry for failed operation:', err); + }); } if (error instanceof z.ZodError) { diff --git a/src/mcp/handlers-workflow-diff.ts b/src/mcp/handlers-workflow-diff.ts index a12d970..65d192d 100644 --- a/src/mcp/handlers-workflow-diff.ts +++ b/src/mcp/handlers-workflow-diff.ts @@ -291,7 +291,7 @@ export async function handleUpdatePartialWorkflow( // Track successful mutation if (workflowBefore && !input.validateOnly) { - await trackWorkflowMutation({ + trackWorkflowMutation({ sessionId, toolName: 'n8n_update_partial_workflow', userIntent: input.intent || 'Partial workflow update', @@ -300,7 +300,14 @@ export async function handleUpdatePartialWorkflow( workflowAfter: finalWorkflow, mutationSuccess: true, durationMs: Date.now() - startTime, - }).catch(err => logger.debug('Failed to track mutation telemetry:', err)); + }).catch(err => { + logger.warn('Failed to track mutation telemetry:', err); + logger.debug('Mutation data that failed:', { + sessionId, + intent: input.intent, + operationCount: input.operations.length + }); + }); } return { @@ -321,7 +328,7 @@ export async function handleUpdatePartialWorkflow( } catch (error) { // Track failed mutation if (workflowBefore && !input.validateOnly) { - await trackWorkflowMutation({ + trackWorkflowMutation({ sessionId, toolName: 'n8n_update_partial_workflow', userIntent: input.intent || 'Partial workflow update', @@ -331,7 +338,9 @@ export async function handleUpdatePartialWorkflow( mutationSuccess: false, mutationError: error instanceof Error ? error.message : 'Unknown error', durationMs: Date.now() - startTime, - }).catch(err => logger.debug('Failed to track mutation telemetry:', err)); + }).catch(err => { + logger.warn('Failed to track mutation telemetry for failed operation:', err); + }); } if (error instanceof N8nApiError) { diff --git a/src/telemetry/telemetry-manager.ts b/src/telemetry/telemetry-manager.ts index deffd1b..e794d62 100644 --- a/src/telemetry/telemetry-manager.ts +++ b/src/telemetry/telemetry-manager.ts @@ -153,13 +153,22 @@ export class TelemetryManager { */ async trackWorkflowMutation(data: any): Promise { this.ensureInitialized(); - if (!this.isEnabled()) return; + if (!this.isEnabled()) { + logger.debug('Telemetry disabled, skipping mutation tracking'); + return; + } this.performanceMonitor.startOperation('trackWorkflowMutation'); try { const { mutationTracker } = await import('./mutation-tracker.js'); const userId = this.configManager.getUserId(); + logger.debug('Tracking workflow mutation', { + userId, + intent: data.userIntent?.substring(0, 50), + operationCount: data.operations?.length + }); + const mutationRecord = await mutationTracker.processMutation(data, userId); if (mutationRecord) {