Skip to content

[CRITICAL] Stabilizing TUI responsiveness and input handling [Size: M, ... #17

@devwif

Description

@devwif

[CRITICAL] Stabilize TUI Responsiveness and Input Handling in svmai-cli (Size: M, Priority: Must)


🚨 Problem Statement

The current Text-based User Interface (TUI) in svmai-cli exhibits poor responsiveness and noticeable input lag. This degrades user experience, leading to frustration and potential user errors during sensitive wallet management operations—such as key generation, transaction signing, or wallet scanning. Given the critical nature of the application (cryptocurrency wallet management), even small UI delays can undermine user trust and cause security risks.

We need to stabilize the TUI responsiveness and input handling, ensuring near-instantaneous feedback to user input and smooth UI updates under typical and edge-case conditions.


📚 Technical Context

  • Repository: larp0/svmai-cli
  • Language: Rust
  • Project State: Early MVP with minimal community activity
  • TUI Implementation: Based on Rust libraries (likely crossterm, tui-rs, or similar)
  • Current Issues: Users report laggy input handling, delayed UI refreshes, and occasional missed keystrokes or input delays.
  • Concurrency: The tool supports multi-threaded wallet scanning, which may impact UI thread responsiveness.
  • Security Context: UI delays could cause mistaken inputs in critical flows (e.g., private key handling).

🔧 Detailed Implementation Steps

1. Diagnose Input & Rendering Bottlenecks

  • Profile the TUI event loop to identify sources of lag (e.g., blocking I/O, expensive redraws, thread contention).
  • Review how input events are captured and processed:
    • Are input events batched or queued properly?
    • Is the main UI thread blocked by wallet scanning or other heavy computations?
  • Analyze rendering strategy:
    • Frequency of redraws (e.g., on every input event vs periodic refresh)
    • Use of buffering or double buffering to minimize flicker
    • Efficient diff-based redraws instead of full screen clears

2. Refactor Input Handling

  • Ensure input event handling is asynchronous and non-blocking.
  • Consider using async Rust (tokio, async-std) or dedicated input event threads.
  • Debounce or throttle input events only if absolutely necessary to reduce UI lag.
  • Validate that key events (including special keys) are correctly captured and dispatched.

3. Optimize UI Rendering Loop

  • Implement incremental redraws where possible (redraw only changed UI components).
  • Use optimized Rust TUI crates features for efficient rendering.
  • Avoid expensive computations during UI updates; offload heavy tasks to background threads.
  • Synchronize UI updates and background tasks carefully to prevent race conditions.

4. Concurrency & Threading Enhancements

  • Review multi-threaded wallet scanning integration with UI thread.
  • Use thread-safe message passing (channels) to communicate between wallet scanning threads and UI.
  • Ensure UI thread remains responsive by offloading blocking tasks.

5. Implement Robust Error Handling & Recovery

  • Detect and gracefully handle input/output errors during TUI operation.
  • Provide fallback UI states if input handling fails.
  • Log detailed diagnostic information for debugging.

6. Testing & Validation

  • Design automated tests simulating rapid user input to detect lag or missed input.
  • Perform manual stress testing with high input rates.
  • Test on multiple OS platforms (Linux, macOS, Windows) to ensure consistent responsiveness.

7. Documentation

  • Update README and developer docs with new TUI architecture and input handling design.
  • Document best practices for future TUI changes to preserve responsiveness.
  • Include troubleshooting guide for input lag issues.

💻 Technical Specifications

  • Input Handling:

    • Use Rust async libraries or event-driven patterns for non-blocking input.
    • Employ tokio::sync::mpsc or similar channels for inter-thread communication.
    • Capture raw terminal events via crossterm or equivalent with minimal overhead.
  • UI Rendering:

    • Use tui-rs crate’s widget diffing capabilities.
    • Avoid full screen redraws; update only changed components.
    • Cap UI refresh rate at a sensible threshold (e.g., 30-60 FPS) to balance smoothness and CPU usage.
  • Threading:

    • UI thread must never block on I/O or CPU-intensive computations.
    • Heavy wallet scanning tasks run on worker threads.
    • Synchronize using Rust’s Arc<Mutex<>> or Arc<RwLock<>> only where necessary; prefer lock-free messaging.
  • Error Handling:

    • Use Rust’s Result and Option types effectively.
    • Catch and log panics in UI thread without crashing the entire app.

✅ Acceptance Criteria

  • Input events are processed with latency under 50ms under typical load.
  • UI redraws occur smoothly without flicker or jank.
  • No input events are lost or delayed during wallet scanning or other background tasks.
  • Multi-threaded wallet scanning does not degrade UI responsiveness.
  • All existing UI functionality remains intact with no regressions.
  • Automated tests simulate rapid input and pass consistently.
  • Updated documentation explains the TUI design and input handling approach.
  • No new critical or high-severity bugs introduced.

🧪 Testing Requirements

  • Unit tests for input event parsing and dispatch logic.
  • Integration tests for UI responsiveness during concurrent wallet scanning.
  • Benchmark tests measuring event loop latency and rendering times.
  • Manual exploratory testing on all supported platforms.
  • Security review to ensure no input handling vulnerabilities introduced.

📖 Documentation Updates

  • Update docs/developer/TUI.md with architecture and input handling details.
  • Add troubleshooting section for input lag and responsiveness issues.
  • Include usage notes on how to run UI tests and benchmarks.
  • Document concurrency model between UI thread and worker threads.

⚠️ Potential Challenges & Risks

  • Identifying and fixing subtle race conditions in multi-threaded input handling.
  • Balancing UI responsiveness vs CPU consumption (avoid excessive redraws).
  • Ensuring cross-platform consistency in terminal event capture and rendering.
  • Risk of regressions in UI behavior due to TUI codebase complexity.
  • Need for good test coverage to detect intermittent lag or input loss.

🔗 Resources & References


Let's crush this critical issue and deliver a buttery-smooth svmai-cli TUI experience that is responsive, robust, and secure. 🚀
Anyone picking this up should have a good grasp of Rust async programming, concurrency, and TUI development. Reach out here if you want to pair or brainstorm! 🔧👾


Part of AI Development Plan Milestone #2
Labels: critical, bug, security, TUI, async, performance

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions