diff --git a/data/nodes.db b/data/nodes.db index 1f3b6ea..868216f 100644 Binary files a/data/nodes.db and b/data/nodes.db differ diff --git a/src/mcp/handlers-n8n-manager.ts b/src/mcp/handlers-n8n-manager.ts index caff2ab..1558894 100644 --- a/src/mcp/handlers-n8n-manager.ts +++ b/src/mcp/handlers-n8n-manager.ts @@ -762,7 +762,7 @@ export async function handleUpdateWorkflow( // Track successful mutation if (workflowBefore) { - await trackWorkflowMutationForFullUpdate({ + trackWorkflowMutationForFullUpdate({ sessionId, toolName: 'n8n_update_full_workflow', userIntent, @@ -771,7 +771,9 @@ export async function handleUpdateWorkflow( workflowAfter: workflow, 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); + }); } 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) {