feat: Add in-TUI log panel to prevent log messages from breaking layout#106
Merged
feat: Add in-TUI log panel to prevent log messages from breaking layout#106
Conversation
…ut (#104) This commit adds a dedicated log panel within the TUI interface to capture and display tracing events (ERROR, WARN, INFO, DEBUG) without breaking the ratatui alternate screen layout. New files: - src/ui/tui/log_buffer.rs: LogBuffer and LogEntry structs for in-memory storage - src/ui/tui/log_layer.rs: TuiLogLayer implementing tracing_subscriber::Layer - src/ui/tui/views/log_panel.rs: Log panel view component with color-coded output Key features: - Log buffer with configurable max entries (default 1000, BSSH_TUI_LOG_MAX_ENTRIES) - Color-coded log levels (ERROR=red, WARN=yellow, INFO=white, DEBUG=gray) - Toggle log panel visibility with 'l' key - Scroll logs with j/k keys when panel is visible - Resize panel with +/- keys (3-10 lines) - Toggle timestamps with 't' key - Auto-detect new log entries and trigger redraw Modified: - src/ui/tui/app.rs: Added log panel state fields and methods - src/ui/tui/event.rs: Added key bindings for log panel controls - src/ui/tui/mod.rs: Integrated log layer and panel rendering - src/ui/tui/views/*.rs: Added render_in_area() for layout flexibility - src/utils/logging.rs: Extracted filter creation for reuse - tests/tui_snapshot_tests.rs: Updated assertion for new footer layout
Member
Author
Security & Performance ReviewAnalysis Summary
Prioritized Issue RoadmapCRITICAL Issues: 0No critical security vulnerabilities identified. HIGH Issues: 0No high-severity issues identified. MEDIUM Issues: 3
LOW Issues: 5
Positive Observations
Summary
Overall Assessment: This PR is safe to merge. All identified issues are quality/performance improvements rather than blocking concerns. The code demonstrates good Rust practices. Recommendation: Consider addressing MEDIUM issues in a follow-up PR if high logging volume is expected in production use. Review completed by Claude Code security review assistant |
- Add upper bound validation for BSSH_TUI_LOG_MAX_ENTRIES (max: 10000) - Reduce lock time in log_panel render by cloning entries quickly - Add documentation comments for lock contention optimization - Update README.md with log panel keybindings and configuration - Update ARCHITECTURE.md with log panel architecture details - Update manpage with log panel features and environment variable
- Move TUI logging logic from tui/mod.rs to utils/logging.rs - Auto-detect TUI mode based on TTY and CI environment - Use TuiLogLayer for TUI mode (captures logs to buffer) - Use fmt layer for non-TUI mode (console output) - Remove redundant init_tui_logging function from TUI module - Use global log buffer shared between logging and TUI Fixes issue where ERROR logs were breaking TUI display
- Always show Log Panel section in Help modal (not just when visible) - Add inline keybinding hints to log panel title bar (j/k:scroll +/-:resize t:time) - Update Help modal with descriptive text for log panel controls
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
LogBufferandLogEntrystructs for in-memory log storage with configurable max entries (default 1000)TuiLogLayerthat captures tracing events and stores them in the shared bufferKey Features
BSSH_TUI_LOG_MAX_ENTRIESenvironment variablel- Toggle log panel visibilityj/k- Scroll logs when panel is visible+/-- Resize panel (3-10 lines)t- Toggle timestampsFiles Changed
New Files
src/ui/tui/log_buffer.rs- LogBuffer and LogEntry structssrc/ui/tui/log_layer.rs- TuiLogLayer implementing tracing_subscriber::Layersrc/ui/tui/views/log_panel.rs- Log panel view componentModified Files
src/ui/tui/app.rs- Added log panel state fields and methodssrc/ui/tui/event.rs- Added key bindings for log panel controlssrc/ui/tui/mod.rs- Integrated log layer and panel renderingsrc/ui/tui/views/*.rs- Added render_in_area() for layout flexibilitysrc/utils/logging.rs- Extracted filter creation for reusetests/tui_snapshot_tests.rs- Updated assertion for new footer layoutTest Plan
Fixes #104