UNPKG

@debugmcp/mcp-debugger

Version:

Run-time step-through debugging for LLM agents.

144 lines (115 loc) 5.53 kB
# Task 4: Log Watcher Integration - Summary ## Overview Successfully implemented real-time log watching capability for the MCP Debug Visualizer, connecting it to the structured logging output from the MCP debug server. ## Components Implemented ### 1. **log_watcher.py** - Robust File Monitoring - **File polling** with configurable 0.1s interval - **Partial line detection** - handles incomplete JSON lines gracefully - **File rotation support** - detects inode changes and reopens file - **Position persistence** - saves/loads position for resume capability - **Thread-safe operation** - runs in separate thread to keep UI responsive - **Error resilience** - handles missing files, permission errors, malformed JSON - **Event injection** - support for testing with injected events ### 2. **log_parser.py** - Comprehensive Event Parsing - Implements all event types from the logging specification: - `tool:call`, `tool:response`, `tool:error` - Tool lifecycle tracking - `session:created`, `session:closed` - Session management - `debug:state` - Execution state changes (paused/running/stopped) - `debug:breakpoint` - Breakpoint lifecycle (set/verified/hit) - `debug:variables` - Variable inspection with type info - `debug:output` - Console output from debugged program - **Path normalization** using `Path.resolve()` for consistent display - **Smart formatting** of tool details and responses - **Duration formatting** for human-readable time displays - **Value truncation** to prevent UI overflow ### 3. **live_visualizer.py** - Integration Layer - Connects log watcher to the existing TUI visualizer - Registers event handlers for all log types - Provides clean startup/shutdown handling - Accepts log file path as command-line argument - Clear console output before entering TUI mode ### 4. **demo_runner.py** - Complete Demo Orchestration - Starts MCP server with proper logging flags (`--log-level info --log-file`) - Launches visualizer pointing to the log file - **Robust process management**: - Graceful termination with timeout - Force kill as fallback - Cleanup handlers for Ctrl+C and SIGTERM - Clear instructions for user interaction - Pre-flight checks (server built, log directory exists) ### 5. **test_log_watcher.py** - Comprehensive Testing - Tests all log watcher features: - Event detection and parsing - Partial line handling - Malformed JSON resilience - Position persistence - File rotation simulation - Provides clear success/failure reporting ## Enhancements Beyond Requirements 1. **Partial Line Handling** - Detects and handles incomplete JSON lines by seeking back 2. **File Rotation Detection** - Uses inode tracking to detect log rotation 3. **Position Persistence** - Saves position to `.visualizer_position` for resume 4. **Timestamp Formatting** - Converts millisecond timestamps to readable HH:MM:SS.mmm 5. **Process Cleanup** - Robust cleanup with atexit and signal handlers 6. **Test Mode** - Event injection capability for testing without real logs ## Testing Results ### Log Watcher Test (`test_log_watcher.py`) ``` Test complete! Events written: 6 Events received: 6 Success rate: 6/6 ✅ All tests passed ``` ### Mock Demo Test - Visualizer continues to work correctly with mock data - All UI components render properly - State management functions as expected ## Usage ### Option A: Manual Setup ```bash # Terminal 1: Start MCP server node dist/index.js --log-level info --log-file logs/debug-mcp-server.log # Terminal 2: Start visualizer cd examples/visualizer python live_visualizer.py ../../logs/debug-mcp-server.log # Terminal 3: Use MCP client to debug ``` ### Option B: Demo Runner (Recommended) ```bash cd examples/visualizer python demo_runner.py ``` ## Architecture Benefits 1. **Decoupled Design** - Log watcher runs independently in its own thread 2. **Event-Driven** - Clean callback registration system 3. **Resilient** - Handles various failure modes gracefully 4. **Testable** - Can be tested independently of MCP server 5. **Extensible** - Easy to add new event types ## Edge Cases Handled 1. **Missing log file** - Creates file if it doesn't exist 2. **Partial JSON lines** - Detects and waits for completion 3. **Malformed JSON** - Silently skips invalid lines 4. **File rotation** - Detects and reopens new file 5. **Permission errors** - Graceful degradation with error messages 6. **Process cleanup** - Ensures no zombie processes ## Performance Considerations 1. **Efficient polling** - 0.1s interval balances responsiveness and CPU usage 2. **Thread safety** - No blocking of UI thread 3. **Memory management** - Tool activity limited to 20 items 4. **File caching** - Code window caches loaded files ## Success Criteria ✅ - [x] Log watcher successfully tails the JSON log file - [x] All event types from the specification are handled - [x] TUI updates in real-time as events occur - [x] File paths are properly normalized and displayed - [x] Breakpoints and current line tracking work from logs - [x] Variables are parsed and displayed correctly - [x] Demo runner successfully orchestrates both components - [x] Graceful handling of errors and edge cases ## Next Steps With Task 4 complete, the visualizer is now ready for: - **Task 5**: Demo recording and GIF creation - **Task 6**: Screenshots capture - **Task 7**: README integration The live log watching capability transforms the visualizer from a mock demo tool into a real debugging companion that can visualize actual MCP debug sessions in real-time.