rho-coding-agent 0.24.1

A lightweight agent harness inspired by Pi
Documentation
#[cfg(windows)]
use std::io::Write;

use crossterm::{
    event::{DisableMouseCapture, EnableMouseCapture},
    execute,
};

const ENABLE_VT_MOUSE_CAPTURE: &[u8] = b"\x1b[?1000h\x1b[?1002h\x1b[?1003h\x1b[?1015h\x1b[?1006h";
const DISABLE_VT_MOUSE_CAPTURE: &[u8] = b"\x1b[?1006l\x1b[?1015l\x1b[?1003l\x1b[?1002l\x1b[?1000l";

pub(super) fn enable() -> std::io::Result<()> {
    execute!(std::io::stdout(), EnableMouseCapture)?;
    let _ = configure_windows_vt_mouse_capture(ENABLE_VT_MOUSE_CAPTURE);
    Ok(())
}

pub(super) fn disable() -> std::io::Result<()> {
    let _ = configure_windows_vt_mouse_capture(DISABLE_VT_MOUSE_CAPTURE);
    execute!(std::io::stdout(), DisableMouseCapture)
}

#[cfg(windows)]
fn configure_windows_vt_mouse_capture(sequence: &[u8]) -> std::io::Result<()> {
    if !crossterm::ansi_support::supports_ansi() {
        return Ok(());
    }

    let mut stdout = std::io::stdout();
    stdout.write_all(sequence)?;
    stdout.flush()
}

#[cfg(not(windows))]
fn configure_windows_vt_mouse_capture(_sequence: &[u8]) -> std::io::Result<()> {
    Ok(())
}