kodegraf-cli 0.1.0

Structural code intelligence for AI coding assistants โ€” CLI
use anyhow::Result;
use kodegraf_core::config::Config;
use kodegraf_core::graph::GraphStore;

pub fn run(query: &str) -> Result<()> {
    let repo_root = kodegraf_core::config::find_repo_root()?;
    let db_path = Config::graph_db_path(&repo_root);

    if !db_path.exists() {
        anyhow::bail!("Graph not built. Run `kodegraf init && kodegraf build` first.");
    }

    let store = GraphStore::open(&db_path)?;
    let results = store.search_nodes(query, 20)?;

    if results.is_empty() {
        println!("No symbols found matching '{}'", query);
        return Ok(());
    }

    println!("Found {} symbol(s) matching '{}':", results.len(), query);
    println!();
    for node in &results {
        println!(
            "  {} {} ({})",
            match node.kind {
                kodegraf_core::models::NodeKind::File => "๐Ÿ“„",
                kodegraf_core::models::NodeKind::Class => "๐Ÿ”ท",
                kodegraf_core::models::NodeKind::Function => "๐Ÿ”น",
                kodegraf_core::models::NodeKind::Type => "๐Ÿ”ธ",
                kodegraf_core::models::NodeKind::Enum => "๐Ÿ”ป",
                kodegraf_core::models::NodeKind::Constant => "๐Ÿ”˜",
                kodegraf_core::models::NodeKind::Test => "๐Ÿงช",
            },
            node.qualified_name,
            node.kind.as_str(),
        );
        if let (Some(start), Some(end)) = (node.line_start, node.line_end) {
            println!("    {}:{}-{}", node.file_path, start, end);
        }
        if let Some(sig) = &node.signature {
            println!("    {}", sig);
        }
        println!();
    }

    Ok(())
}