tasq/node_modules/agentic-flow/docs/federation/DEBUG-STREAMING.md

9.9 KiB

Debug Streaming Guide

Version: 1.0.0 Date: 2025-11-01 Status: Production Ready


🔍 Overview

The Debug Streaming system provides detailed, real-time visibility into all agent operations with multiple verbosity levels, customizable output formats, and performance metrics.

Perfect for: Development, debugging, performance tuning, production monitoring


🚀 Quick Start

Basic Usage

import { createDebugStream, DebugLevel } from 'agentic-flow/federation/debug/debug-stream';

// Create debug stream
const debug = createDebugStream({
  level: DebugLevel.DETAILED,
  format: 'human',
  colorize: true,
});

// Log operations
debug.logDatabase('query', { table: 'sessions' }, 15);
debug.logMemory('store', 'agent-001', 'team-1', { id: 'mem-1' }, 12);

// Print metrics
debug.printMetrics();

Environment Variables

# Set debug level
export DEBUG_LEVEL=VERBOSE

# Set output format
export DEBUG_FORMAT=human  # human | json | compact

# Set output destination
export DEBUG_OUTPUT=console  # console | file | both

# Optional: file path
export DEBUG_OUTPUT_FILE=debug.log

📊 Debug Levels

SILENT (0)

No debug output. Production default.

DEBUG_LEVEL=SILENT

BASIC (1)

Major events only: initialization, shutdown, errors.

DEBUG_LEVEL=BASIC

Output:

[2025-11-01T14:00:00.000Z] BASIC  CONNECTION server_start
[2025-11-01T14:00:01.000Z] BASIC  CONNECTION client_connected

Best for: Production monitoring, error tracking

DETAILED (2)

Includes all database operations with timing.

DEBUG_LEVEL=DETAILED

Output:

[2025-11-01T14:00:00.100Z] DETAIL DATABASE query_memories 8.00ms
  Data: {
    "table": "agent_memories",
    "rows": 5
  }
[2025-11-01T14:00:00.120Z] DETAIL MEMORY store agent=agent-001 tenant=team-1 12.00ms
  Data: {
    "id": "mem-456",
    "content": "Task complete"
  }

Best for: Development, performance tuning, SQL debugging

VERBOSE (3)

All events including real-time operations and tasks.

DEBUG_LEVEL=VERBOSE

Output:

[2025-11-01T14:00:00.000Z] VERBOS REALTIME agent=agent-001 agent_join
  Data: {
    "tenant": "team-alpha",
    "status": "online"
  }
[2025-11-01T14:00:00.050Z] VERBOS TASK agent=agent-001 task_assigned
  Data: {
    "taskId": "task-123",
    "description": "Process user request"
  }

Best for: Multi-agent debugging, coordination troubleshooting

TRACE (4)

Everything including internal state changes.

DEBUG_LEVEL=TRACE

Output:

[2025-11-01T14:00:00.000Z] TRACE  TRACE state_change
  Data: {
    "component": "ConnectionPool",
    "old_state": "idle",
    "new_state": "connecting"
  }

Best for: Deep debugging, troubleshooting edge cases


🎨 Output Formats

Human-Readable (Default)

DEBUG_FORMAT=human

Features:

  • Color-coded output
  • Formatted JSON
  • Timestamps
  • Duration highlighting
  • Stack traces (optional)

Example:

[2025-11-01T14:00:00.100Z] DETAIL DATABASE query_memories 8.00ms
  Data: {
    "table": "agent_memories",
    "rows": 5
  }

JSON

DEBUG_FORMAT=json

Features:

  • Machine-parseable
  • Structured data
  • Easy to process
  • Log aggregation friendly

Example:

{"timestamp":"2025-11-01T14:00:00.100Z","level":2,"category":"database","operation":"query_memories","duration":8,"data":{"table":"agent_memories","rows":5}}

Compact

DEBUG_FORMAT=compact

Features:

  • Single line per event
  • Minimal overhead
  • Production friendly
  • Easy to grep

Example:

2025-11-01T14:00:00.100Z | DETAIL | database | query_memories | 8ms

🎯 Usage Examples

Example 1: Development Debugging

import { createDebugStream, DebugLevel } from './debug-stream';

const debug = createDebugStream({
  level: DebugLevel.VERBOSE,
  format: 'human',
  colorize: true,
});

// Your code here
await performDatabaseOperations();

// Print metrics at end
debug.printMetrics();

Example 2: Production Monitoring

const debug = createDebugStream({
  level: DebugLevel.BASIC,
  format: 'json',
  output: 'file',
  outputFile: '/var/log/agent-debug.log',
  colorize: false,
});

// Monitor critical operations only
debug.logConnection('service_start', { version: '1.0.0' });

Example 3: Performance Profiling

const debug = createDebugStream({
  level: DebugLevel.DETAILED,
  format: 'human',
  includeTimestamps: true,
});

// Log operations with timing
const start = Date.now();
await database.query('SELECT * FROM ...');
const duration = Date.now() - start;

debug.logDatabase('query', { sql: '...' }, duration);

// Analyze performance
debug.printMetrics();

Example 4: Event Filtering

const debug = createDebugStream({
  level: DebugLevel.VERBOSE,
  filterCategories: ['database', 'memory'], // Only these
  filterAgents: ['agent-001'], // Only this agent
});

// Only matching events will be logged

Example 5: Real-Time Monitoring

const debug = createDebugStream({
  level: DebugLevel.DETAILED,
});

// Subscribe to events
debug.on('event', (event) => {
  if (event.duration && event.duration > 100) {
    console.log(`⚠️  SLOW: ${event.operation} took ${event.duration}ms`);
  }
});

📚 API Reference

DebugStream Class

Methods

log(event) Log a debug event manually.

logConnection(operation, data?, error?) Log connection events.

logDatabase(operation, data?, duration?, error?) Log database operations with timing.

logRealtime(operation, agentId?, data?, duration?) Log realtime events.

logMemory(operation, agentId?, tenantId?, data?, duration?) Log memory operations.

logTask(operation, agentId?, tenantId?, data?, duration?) Log task operations.

logTrace(operation, data?) Log internal state changes.

getMetrics() Get performance metrics summary.

printMetrics() Print formatted metrics to console.

getEvents(filter?) Get buffered events with optional filter.

clearEvents() Clear event buffer.

clearMetrics() Clear performance metrics.

close() Close file stream (if using file output).

Events

'event' Emitted for every debug event.

debug.on('event', (event) => {
  console.log('Event:', event);
});

🔧 Integration

With Supabase Adapter

import { SupabaseFederationAdapterDebug } from './supabase-adapter-debug';

const adapter = new SupabaseFederationAdapterDebug({
  url: process.env.SUPABASE_URL!,
  anonKey: process.env.SUPABASE_ANON_KEY!,
  debug: {
    enabled: true,
    level: DebugLevel.DETAILED,
    format: 'human',
  },
});

await adapter.initialize();
await adapter.storeMemory({...});

// Print performance metrics
adapter.printMetrics();

With Real-Time Federation

import { createRealtimeHub } from './realtime-federation';
import { createDebugStream, DebugLevel } from './debug-stream';

const debug = createDebugStream({
  level: DebugLevel.VERBOSE,
});

const hub = createRealtimeHub('agent-001', 'team-1');

// Integrate debug logging
hub.on('message:received', (msg) => {
  debug.logRealtime('message_received', 'agent-001', msg);
});

📊 Performance Metrics

Automatic Tracking

All operations with duration are automatically tracked:

debug.logDatabase('query', {}, 15);
debug.logDatabase('query', {}, 8);
debug.logDatabase('insert', {}, 12);

// Metrics are aggregated automatically
debug.printMetrics();

Output:

Performance Metrics Summary
============================================================
Operation                               Count     Avg Duration
------------------------------------------------------------
database:query                          2         11.50ms
database:insert                         1         12.00ms

Custom Metrics

const startTime = Date.now();
await yourOperation();
const duration = Date.now() - startTime;

debug.logDatabase('custom_operation', { details }, duration);

🎓 Best Practices

Development

# Maximum visibility
DEBUG_LEVEL=TRACE
DEBUG_FORMAT=human
DEBUG_OUTPUT=console

Staging

# Balanced monitoring
DEBUG_LEVEL=DETAILED
DEBUG_FORMAT=json
DEBUG_OUTPUT=both
DEBUG_OUTPUT_FILE=/var/log/staging-debug.log

Production

# Minimal overhead
DEBUG_LEVEL=BASIC
DEBUG_FORMAT=compact
DEBUG_OUTPUT=file
DEBUG_OUTPUT_FILE=/var/log/production.log

🐛 Troubleshooting

Issue: Too Much Output

Solution: Lower the debug level

# From VERBOSE to DETAILED
DEBUG_LEVEL=DETAILED

Issue: Can't Find Slow Queries

Solution: Use event filtering with custom handler

debug.on('event', (event) => {
  if (event.category === 'database' && event.duration! > 50) {
    console.log('SLOW:', event);
  }
});

Issue: File Output Not Working

Solution: Check file permissions

# Ensure directory exists
mkdir -p /var/log/agent

# Set permissions
chmod 755 /var/log/agent

# Test with tmp
DEBUG_OUTPUT_FILE=/tmp/debug.log


Summary

Debug Streaming provides:

  • 5 verbosity levels (SILENT to TRACE)
  • 3 output formats (human, json, compact)
  • Multiple destinations (console, file, both)
  • Automatic performance tracking
  • Event filtering
  • Real-time streaming
  • Color-coded output
  • Stack traces (optional)

Perfect for:

  • Development debugging
  • Performance profiling
  • Production monitoring
  • Troubleshooting
  • Learning and education

Version: 1.0.0 Last Updated: 2025-11-01 Status: Production Ready

🔍 Start debugging with visibility!