#!/usr/bin/env python3
"""
rag-demo.py — Conecta tu grafo de conocimiento en SQLite con un LLM.

Extrae nodos y sus relaciones del grafo y los emite como JSONL, listo
para encadenar con `llm` o con cualquier cliente que lea por stdin.

Uso:
    ./rag-demo.py | llm "resume las herramientas del proyecto"
    ./rag-demo.py --tipo tool --limite 50
"""
import argparse
import json

from sqlite_utils import Database

DB = "demo.db"


def extraer(db, tipo, limite):
    """Devuelve las filas del grafo como un iterador de diccionarios."""
    sql = """
        select n.key, n.label, n.type, e.kind as relacion
        from nodes n
        left join edges e on n.key = e.source
        where (:tipo is null or n.type = :tipo)
        order by n.type, n.label
        limit :limite
    """
    return db.query(sql, {"tipo": tipo, "limite": limite})


def main():
    parser = argparse.ArgumentParser(description="Contexto del grafo para un LLM")
    parser.add_argument("--tipo", help="Filtra por tipo de nodo (tool, concept, file...)")
    parser.add_argument("--limite", type=int, default=30, help="Número de nodos a extraer")
    args = parser.parse_args()

    db = Database(DB)
    for fila in extraer(db, args.tipo, args.limite):
        print(json.dumps(fila, ensure_ascii=False))


if __name__ == "__main__":
    main()
