dirge-agent 0.7.6

Minimalistic coding agent written in Rust, optimized for memory footprint and performance
//! /btw handler.

use crossterm::style::Color;

use crate::ui::slash::{SlashCtx, c_agent, c_error};

pub(crate) async fn cmd_btw(ctx: &mut SlashCtx<'_>, parts: &[&str]) -> anyhow::Result<()> {
    let query = parts.get(1..).map(|p| p.join(" ")).unwrap_or_default();
    if query.is_empty() {
        ctx.renderer
            .write_line("usage: /btw <question>", c_error())?;
    } else {
        let model = ctx.client.completion_model(ctx.session.model.to_string());
        ctx.renderer
            .write_line(&format!("btw: {}", query), Color::DarkGrey)?;
        match model.btw_query(query).await {
            Ok(response) => {
                ctx.renderer.write_line("", Color::White)?;
                let max_width = ctx.renderer.line_width();
                let styled =
                    crate::ui::markdown::markdown_to_styled(&response, max_width, c_agent());
                for span in styled {
                    ctx.renderer.write(&span.text, span.color)?;
                }
                ctx.renderer.write_line("", Color::White)?;
            }
            Err(e) => {
                ctx.renderer
                    .write_line(&format!("btw error: {}", e), c_error())?;
            }
        }
    }
    Ok(())
}