Volver a la wiki

Biblioteca · Arquitectura del Knowledge Graph

Biblioteca — Hypercontexto

Concepto

La Biblioteca es un grafo de conocimiento que mapea codigo a documentacion. Permite al agente IA consultar contexto de forma precisa sin cargar toda la documentacion en la ventana de contexto.

Problema que resuelve: En proyectos grandes (500+ endpoints), la documentacion supera la ventana de contexto. La Biblioteca permite consultar solo lo relevante, bajo demanda.

Arquitectura

Codigo fuente
    ↓ (indexacion: OpenAPI + Code + AST + Docs + Chunks)
Knowledge Graph (nodos + edges + confianza + comunidades)
    ↓ (busqueda)
MCP Tools (bib_*)
    ↓ (respuesta)
Claude Code (contexto bajo demanda)

Nodos

TipoEjemploFuente
endpointGET /api/users/OpenAPI
modelUserCode + AST
serviceAuthServiceCode
schemaUserOutOpenAPI
templatedashboard.htmlCode
js_moduleApiService.jsCode
docAUTHENTICATION.mdDoc indexer
moduleracks.modelsAST (archivo fuente)
classRackServiceAST (clase no-modelo)
methodDevice.get_power_usageAST (metodo)
functionrack_listAST (funcion standalone)

Edges (relaciones)

RelacionEjemploConfidence
documentsdoc → endpointEXTRACTED
uses_modelendpoint → modelEXTRACTED
calls_serviceendpoint → serviceEXTRACTED
callsfunction → function (AST call graph)EXTRACTED
importsmodule → module (imports)EXTRACTED
inheritsclass → base classEXTRACTED
containsmodule → class, class → methodEXTRACTED
defines_schemaschema → endpointEXTRACTED
semantically_similar_toconcept → concept (LLM)INFERRED

Confianza en edges

Cada relacion tiene un nivel de confianza:

El BFS de bib_impact_query soporta filtro min_confidence para excluir edges poco fiables.

Comunidades

Deteccion automatica de clusters via Label Propagation (in-worker, TypeScript):

Code Health (inspirado en TrueCourse)

Tres analisis automaticos sobre el grafo existente:

AnalisisQue detectaPor que importa
CiclosA→B→C→A en imports/calls (DFS)Dependencias circulares impiden modularizar
God nodesNodos con degree >= 15Hotspots que acoplan todo el sistema
Dead codeNodos sin incoming calls/importsCodigo que nadie usa, ruido en el grafo

God nodes se clasifican en:

Precision del detector de dead code

El detector filtra automaticamente patrones de framework (Django/Ninja) que parecen dead code pero estan vivos por diseno:

Filtros SQL (por file_path):

Filtros metadata (por decorators/bases/nombre):

Filtro de ancestros:

Exclusion por tipo:

Stack recomendado

ComponenteRolAlternativas
Cloudflare D1Almacenamiento del grafoSQLite, PostgreSQL
Workers AI (bge-m3)Embeddings para busqueda semanticaOpenAI embeddings
Cloudflare Pages FunctionsMCP serverExpress, FastAPI
Gemini FlashSintesis de respuestas (ask)Claude Haiku
Python ast builtinExtraccion AST (zero deps)tree-sitter (multi-lenguaje)

MCP Tools (29)

Consulta

ToolProposito
bib_context_queryBriefing de un modulo (modelos, endpoints, docs)
bib_impact_queryQue docs afecta un cambio de archivo (con min_confidence)
bib_search_nodesBuscar nodos por nombre/tipo/app
bib_get_nodeDetalle de un nodo con relaciones (incluye confidence)
bib_app_summaryResumen de una app
bib_list_endpointsListar endpoints con filtros
bib_doc_coverageQue tiene y que falta documentacion
bib_call_graphTrazar callers/callees de una funcion
bib_stale_reportNodos desactualizados
bib_statsEstado general (nodos, edges, confidence, comunidades)

Busqueda semantica (Archivo Maestro)

ToolProposito
bib_search_semanticBusqueda vectorial por embeddings
bib_askPregunta en lenguaje natural → respuesta sintetizada
bib_index_chunksIndexar documentos con embeddings

Comunidades (Graphify)

ToolProposito
bib_compute_communitiesDetectar clusters via Label Propagation
bib_get_communityDetalle de una comunidad o comunidad de un nodo
bib_coupling_reportAcoplamiento entre comunidades, bridge nodes

Code Health (TrueCourse-inspired)

ToolProposito
bib_cycle_reportDependencias circulares (DFS en imports/calls)
bib_god_nodesNodos con degree >= 15 (hotspots arquitectonicos)
bib_dead_codeNodos sin incoming calls/imports (posible dead code)

Indexacion

ToolProposito
bib_index_openapiIndexar endpoints desde OpenAPI JSON
bib_index_codeIndexar modelos/servicios en batch (con confidence)
bib_index_astIndexar AST Python (clases, funciones, imports, calls)
bib_index_docsIndexar documentos markdown en batch
bib_full_reindexGuia de reindexacion completa (6 fases)

Mantenimiento

ToolProposito
bib_register_nodeRegistrar nuevo nodo (upsert)
bib_create_edgeCrear relacion (con confidence EXTRACTED/INFERRED/AMBIGUOUS)
bib_remove_edgeEliminar relacion
bib_register_docRegistrar documento con metadatos
bib_report_changeMarcar docs para revision tras commit

Flujo obligatorio en cada commit

PasoCuandoTool
1. ContextoAntes de editarbib_context_query(topic="<app>")
2. ImpactoAntes de commitbib_impact_query(file_path="<ruta>")
3. ReporteDespues de commitbib_report_change(file_path="<ruta>")

Reindexacion (6 fases)

  1. bib_index_openapi — endpoints + schemas del OpenAPI JSON
  2. bib_index_code — modelos, servicios, signals
  3. bib_index_ast — clases, funciones, imports, call graphs (Python AST)
  4. bib_index_docs — documentos markdown
  5. bib_index_chunks — embeddings para busqueda semantica
  6. bib_compute_communities — deteccion de clusters

Extractor AST

Script Python que usa ast builtin (zero deps):

python scripts/bib_ast.py --stats                # Solo estadisticas
python scripts/bib_ast.py --output ast.json       # JSON a archivo
python scripts/bib_ast.py --apps racks,monitoring  # Solo ciertas apps
python scripts/bib_ast.py --incremental --push     # Solo archivos cambiados

Extrae: modulos, clases (detecta Django models por herencia), metodos, funciones, imports, herencia, call graphs. Cache SHA256 por archivo para modo incremental.

Resultados reales

En CreaRack Pro (Abril 2026):

Widget: Salud del Sistema

Dashboard widget (React) que muestra 3 indicadores de salud:

IndicadorQue muestraSemaforo
Backup D1Ultimo export + filas totalesVerde <48h, Rojo >48h
Biblioteca% nodos actualizados (stale check diario)Verde >=80%, Naranja >=50%, Rojo <50%
GrafoNodos, comunidades, cohesion mediaVerde >=80%, Naranja >=50%, Rojo <50%

Archivos:

Prerequisitos: tablas activity_log, bib_nodes, bib_edges, bib_communities.


Origen: Graphify

Ideas adaptadas de safishamsi/graphify:

  1. AST profundo con ast builtin (en vez de tree-sitter) — zero deps, Python-only
  2. Confianza en edges — score 0.0-1.0 por relacion
  3. Deteccion de comunidades — Label Propagation en TypeScript (in-worker, <100ms)

Véase también

Subir