rho-coding-agent 1.40.1

A lightweight agent harness inspired by Pi
Documentation
use unicode_width::UnicodeWidthStr;

use crate::tui::{
    markdown::mermaid::{model::Graph, MermaidArt},
    terminal_graph::{self, GraphStyles, Oversize},
};

mod class;
mod groups;

pub(super) fn render_class(
    graph: &Graph,
    infos: &[super::model::ClassInfo],
    styles: &GraphStyles,
    max_width: Option<usize>,
) -> Result<MermaidArt, Oversize> {
    class::render_class(graph, infos, styles, max_width)
}

pub(super) fn layout_flow(
    graph: &Graph,
    styles: &GraphStyles,
    max_width: Option<usize>,
) -> Result<MermaidArt, Oversize> {
    if graph.groups.is_empty() {
        let art = terminal_graph::layout_flow(&graph.layout_graph(), styles, max_width)?;
        return Ok(MermaidArt {
            styled_lines: art.lines,
            plain_lines: art.plain_lines,
        });
    }

    let layout_graph = graph.layout_graph();

    for wrap_width in terminal_graph::flow_wrap_widths() {
        if !terminal_graph::flow_labels_fit(&layout_graph, wrap_width)
            || graph
                .groups
                .iter()
                .any(|group| group.label.width() > wrap_width)
        {
            continue;
        }
        match groups::render_grouped(graph, styles, max_width, wrap_width) {
            Ok(art) => return Ok(art),
            Err(Oversize::Width) => continue,
            Err(Oversize::Cells) => return Err(Oversize::Cells),
        }
    }
    Err(Oversize::Width)
}