Biblioteca — Referencia Tecnica
Biblioteca — Referencia Tecnica
Sistema de grafo de conocimiento que mapea codigo fuente a documentacion. Almacenado en D1 (workspace). Accesible via 26 MCP tools (
bib_*). Fecha de creacion: 13-04-2026 | Autor: Edu Graphify: 16-04-2026 — hibridacion con ideas de Graphify (AST profundo, confianza, comunidades)
1. Arquitectura
CreaRack-Pro (Claude Code)
|
| llama bib_context_query / bib_impact_query via MCP
|
Workspace MCP Server (Cloudflare Pages Function)
| handlers/biblioteca.ts
|
Cloudflare D1 — tablas bib_* (9 tablas)
Principio: El contexto de desarrollo se consulta bajo demanda en vez de cargarse estaticamente. CLAUDE.md ya no incluye @ de archivos pesados — la Biblioteca los reemplaza como fuente de verdad consultable.
2. Schema D1
bib_nodes — Nodos del grafo
Cada artefacto indexado (endpoint, modelo, servicio, schema, doc) es un nodo.
| Campo | Tipo | Descripcion |
|---|---|---|
id | INTEGER PK | Auto-increment |
node_type | TEXT | endpoint, model, service, signal, schema, doc, view, template, js_module, function, class, method, module |
qualified_name | TEXT UNIQUE | Identidad: POST:/api/racks, racks.models.Device, doc:CLAUDE.md |
display_name | TEXT | Nombre legible: Device, create_rack |
app | TEXT | App Django: racks, monitoring, core… |
file_path | TEXT | Ruta relativa: monitoring/models.py |
line_number | INTEGER | Linea de inicio |
metadata | TEXT (JSON) | Datos especificos por tipo (fields, method, path, tags…) |
content_hash | TEXT | SHA256 parcial — detecta cambios entre indexaciones |
last_indexed_at | TEXT | Timestamp de ultima indexacion |
| community_id | INTEGER FK | ID de comunidad (Label Propagation, NULL si sin cluster) |
Indices: qualified_name (UNIQUE), node_type, app, file_path, community_id.
bib_edges — Relaciones
| Campo | Tipo | Descripcion |
|---|---|---|
source_id | INTEGER FK | Nodo origen |
target_id | INTEGER FK | Nodo destino |
edge_type | TEXT | Tipo de relacion |
weight | REAL | Peso de la relacion (default 1.0) |
confidence | TEXT | EXTRACTED (determinista), INFERRED (LLM), AMBIGUOUS (revision humana) |
confidence_score | REAL | Score 0.0-1.0 (EXTRACTED=1.0, INFERRED=0.5, AMBIGUOUS=0.2) |
Tipos de edge:
documents— un doc describe un artefacto de codigouses_model— un endpoint/servicio usa un modelo (FK)calls_service— un endpoint delega a un serviciodefines_schema— un schema Pydantic define I/O de un endpointimports,signals,tests,renders_templatecalls— una funcion llama a otra (del AST, mas granular quecalls_service)inherits— una clase extiende otra (herencia Python)contains— un modulo contiene clases/funciones, una clase contiene metodossemantically_similar_to— links conceptuales cross-file (futuro, LLM)
Indice UNIQUE en (source_id, target_id, edge_type).
bib_docs — Metadatos de documentos
Tabla extendida para docs markdown con titulo, categoria, secciones H2, apps mencionadas, word count.
bib_endpoints — Metadatos de endpoints
Tabla extendida para endpoints con method, path, operation_id, tags, request/response schema.
bib_agents — Jerarquia de agentes
| Agent ID | Rol | Modelo | Tier | Parent |
|---|---|---|---|---|
bibliotecario | Orchestrator | Sonnet | 0 (top) | — |
escriba-docs | Writer (docs) | Sonnet | 1 | bibliotecario |
escriba-code | Writer (code) | Sonnet | 1 | bibliotecario |
librero-indexer | Indexer | Haiku | 2 | bibliotecario |
librero-search | Searcher | Haiku | 2 | bibliotecario |
agente-usuario | Support (aislado) | Haiku | 3 | — |
dev-edu | Developer | Opus | 1 | bibliotecario |
dev-dani | Developer | Opus | 1 | bibliotecario |
Flujo de informacion: consultar lateralmente o hacia abajo, informar siempre hacia arriba. El agente-usuario esta completamente aislado (sin acceso a internals).
bib_index_runs — Auditoria de indexaciones
Cada ejecucion de indexacion se registra con tipo, status, contadores, errores, duracion.
bib_change_log — Cambios detectados
Registro de cambios en nodos entre indexaciones (hash cambio, campo modificado).
bib_communities — Comunidades detectadas (Label Propagation)
Resultado de la deteccion automatica de clusters en el grafo.
| Campo | Tipo | Descripcion |
|---|---|---|
id | INTEGER PK | Auto-increment |
community_index | INTEGER UNIQUE | Indice secuencial del cluster |
label | TEXT | Etiqueta generada (top-3 nodos por degree) |
member_count | INTEGER | Nodos en la comunidad |
cohesion | REAL | Densidad interna (edges internas / edges totales) |
bridge_nodes | TEXT (JSON) | Nodos puente (conexiones a 3+ comunidades) |
top_nodes | TEXT (JSON) | Top-5 nodos por degree |
computed_at | TEXT | Timestamp de computo |
bib_federation — Multi-biblioteca (futuro)
Preparado para gestionar bibliotecas de multiples productos desde el workspace central.
3. MCP Tools (26)
Consulta (alta frecuencia, read-only)
| Tool | Proposito | Params clave |
|---|---|---|
bib_context_query | Briefing compacto — modelos, endpoints, schemas, docs para un tema | topic (app, modelo, termino) |
bib_impact_query | Impacto de cambio — que docs/artefactos afecta modificar un archivo. Soporta filtro min_confidence | file_path, function_name, model_name, depth, min_confidence |
bib_search_nodes | Buscar nodos por nombre, tipo, app | query, node_type, app, limit |
bib_get_node | Detalle de un nodo con edges entrantes/salientes (incluye confidence) | qualified_name o node_id |
bib_list_endpoints | Listar endpoints con filtros | app, method, path_contains |
bib_doc_coverage | Que artefactos tienen/faltan docs | app, node_type |
bib_app_summary | Resumen de una app Django | app |
bib_call_graph | Arbol de llamadas — callers y callees de una funcion con profundidad configurable | function_name, direction, depth, min_confidence |
Mutacion (Bibliotecario/Escribas)
| Tool | Proposito |
|---|---|
bib_register_node | Registrar o actualizar un nodo (upsert). Acepta nuevos tipos: function, class, method, module |
bib_create_edge | Crear relacion con confidence (EXTRACTED/INFERRED/AMBIGUOUS) y score 0.0-1.0 |
bib_remove_edge | Eliminar relacion |
bib_register_doc | Registrar/actualizar documento con metadatos |
bib_report_change | Reportar cambio de codigo — marca docs para revision |
Indexacion (Libreros, batch)
| Tool | Proposito |
|---|---|
bib_index_openapi | Indexar endpoints desde OpenAPI JSON |
bib_index_code | Indexar modelos/servicios en batch (con confidence en edges) |
bib_index_ast | Indexar AST Python — clases, funciones, metodos, modulos + edges (calls, imports, inherits, contains). Reconcilia con nodos existentes |
bib_index_docs | Indexar documentos markdown en batch |
bib_full_reindex | Guia de reindexacion completa (6 fases) |
Comunidades (Graphify)
| Tool | Proposito |
|---|---|
bib_compute_communities | Label Propagation in-worker — detecta clusters, calcula cohesion, identifica bridge nodes |
bib_get_community | Detalle de una comunidad o comunidad de un nodo |
bib_coupling_report | Acoplamiento — pares de comunidades con mas edges cruzadas, bridge nodes |
Administracion
| Tool | Proposito |
|---|---|
bib_stats | Estado general: nodos, edges, docs, runs, confidence stats, comunidades |
bib_stale_report | Nodos desactualizados (content_hash nulo o antiguo) |
bib_list_runs | Historial de indexaciones |
4. Contenido indexado
Pre-AST (13-04-2026)
| Tipo | Cantidad |
|---|---|
| Endpoints | 496 |
| Schemas Pydantic | 198 |
| Modelos Django | 57 |
| Documentos markdown | 168 |
| Total nodos | 919 |
| Total edges | 1577 |
Post-AST (16-04-2026, estimado tras primera indexacion)
| Tipo | Cantidad | Fuente |
|---|---|---|
| Endpoints | 496 | OpenAPI |
| Schemas | 198 | OpenAPI |
| Modelos Django | 79 | AST (detecta models.Model bases) |
| Documentos | 168 | Doc indexer |
| Modulos | 256 | AST (archivos .py) |
| Clases | 308 | AST (no-modelo) |
| Metodos | 588 | AST (metodos publicos) |
| Funciones | 981 | AST (standalone) |
| Total nodos | ~3100 | +237% |
Edges calls | 3339 | AST |
Edges contains | 1956 | AST |
Edges imports | 641 | AST |
Edges inherits | 15 | AST |
| Edges anteriores | 1577 | OpenAPI/code/docs |
| Total edges | ~7500 | +376% |
Fuentes de datos
- OpenAPI JSON — extraido de produccion via SSH (
api.get_openapi_schema()) - Modelos Django — extraidos de
models.pyde las 7 apps por agentes Explore - Documentos markdown — escaneados de wiki + root docs, con deteccion de menciones
- AST Python —
scripts/bib_ast.pyextrae clases, funciones, metodos, imports, calls, herencia con el moduloastbuiltin (zero deps)
5. Flujo de trabajo
Pre-edicion (antes de modificar codigo)
Claude Code: bib_context_query(topic="monitoring")
Biblioteca: {
models: [MonitoringTarget, MetricSample, MonitoringAlert, ...],
endpoints: [GET:/api/monitoring/targets, POST:/api/monitoring/alerts, ...],
key_docs: [dev-observatory.md, CNS_GUIDE.md, ...],
app_summary: {endpoints: 175, models: 19}
}
Pre-commit (saber que docs actualizar)
Claude Code: bib_impact_query(file_path="monitoring/services/alert_service.py")
Biblioteca: {
direct_docs: ["dev-observatory.md", "CNS_GUIDE.md", ...],
related_models: ["MonitoringAlert", "AlertEvent", ...],
update_checklist: ["CHANGELOG.md", "dev-observatory.md", ...]
}
Post-commit (marcar docs para revision)
Claude Code: bib_report_change(file_path="monitoring/services/alert_service.py", change_type="modified")
Biblioteca: {
affected_nodes: 5,
flagged_docs: [{file_path: "dev-observatory.md", title: "..."}],
action_needed: "Actualizar 3 documento(s) vinculado(s)"
}
6. Reindexacion
La Biblioteca se puede reindexar en ~3 minutos (6 fases):
- OpenAPI: Extraer JSON via SSH + enviar a
bib_index_openapien batches de 40 - Modelos: Script Python que registra modelos + FK edges via
bib_index_code - AST:
python scripts/bib_ast.py --push— extrae estructura del codigo Python (clases, funciones, imports, call graphs) y envia abib_index_ast - Docs: Script Python que escanea markdown + detecta menciones via
bib_index_docs - Chunks: Embeddings para busqueda semantica via
bib_index_chunks - Comunidades:
bib_compute_communities()— detecta clusters en el grafo via Label Propagation
Script AST (scripts/bib_ast.py)
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, enviar al MCP
Usa el modulo ast builtin de Python (zero deps). Extrae: modulos, clases (con deteccion de Django models), metodos, funciones, imports, herencia, call graphs. Cache SHA256 por archivo para modo incremental.
Cuando reindexar: Tras anadir nuevos modelos, endpoints o docs significativos. El AST puede correrse en modo incremental. Las comunidades se recomputan al final.
Deteccion de staleness: bib_stale_report(days_threshold=7) muestra nodos no reindexados recientemente o con content_hash nulo.
Reindex automático (desde 2026-04-21)
El reindex corre cada 10 min en Hetzner Staging via /etc/cron.d/bib-reindex. Antes vivía en el Task Scheduler del PC de Edu (diario 04:00 Windows). La migración resuelve la dependencia de equipos individuales: el grafo evoluciona aunque Edu/Dani tengan el portátil apagado. Detalles de instalación: ver Dokploy Internals §11.
Footgun conocido: D1 bind-param overflow (resuelto 2026-04-21)
El handler bib_index_ast tenía un CHUNK = 500 para las queries WHERE qualified_name IN (?,?,...), pero Cloudflare D1 limita a ~100 bind params por query (no 999 como SQLite vanilla). Apps con más de 100 qualified_names (core 292, terminal 596, monitoring 545) hacían que el handler devolviera HTTP 200 con errors: ["fatal: Error: D1_ERROR: too many SQL variables"] y cero inserts. El script bib_ast.py trataba 200 como éxito, así que el log diario decía [OK] mientras el grafo llevaba semanas estancado. Fix:
- Handler: separar
CHUNK_IN = 90(IN clauses, cuentan contra el budget D1) yCHUNK_BATCH = 500(db.batch(), cada stmt tiene su propio budget aislado). - Script: desenvolver el body del MCP, chequear
errors[]y el guard “accepted but 0 inserts” → exit ≠ 0 si el cron no insertó nada.
Commit raíz: workspace@af73a3e + CreaRack-Pro@2794b9f.
7. UI del grafo (/biblioteca)
Fase 1 completada (13-04-2026). Pagina en el workspace con 4 vistas.
URL: https://workspace.crearack.com/biblioteca
Vistas
| Vista | Descripcion |
|---|---|
| Resumen | Cards de totales (nodos, edges, docs, endpoints) + desglose por tipo con barras + ultima indexacion |
| Explorar | Tabla sortable con busqueda, filtros (node_type, app) y paginacion. Click en fila → detalle |
| Cobertura | % de documentacion (artefactos con edge documents), lista de no documentados |
| Stale | Nodos sin content_hash o con last_indexed_at > 7 dias |
REST API endpoints (4)
| Endpoint | Proposito |
|---|---|
GET /api/biblioteca | Listar/buscar nodos con filtros, sort, paginacion |
GET /api/biblioteca/stats | Estadisticas batched (db.batch de 10 queries) |
GET /api/biblioteca/:id | Detalle de nodo + edges + doc/endpoint (Promise.all de 5 queries) |
GET /api/biblioteca/coverage?report=coverage|stale | Coverage optimizado (1 query vs N+1) o stale report |
Archivos frontend (6)
| Archivo | LOC | Proposito |
|---|---|---|
src/pages/biblioteca/index.astro | 25 | Pagina Astro (BaseLayout + Sidebar) |
src/components/biblioteca/BibliotecaManager.tsx | 140 | Orquestador: tabs, filtros, selectedNode |
src/components/biblioteca/BibliotecaStats.tsx | 140 | Cards de stats con progress bars |
src/components/biblioteca/BibliotecaTable.tsx | 170 | Tabla sortable + busqueda + paginacion |
src/components/biblioteca/BibliotecaDetail.tsx | 195 | Detalle: metadata, edges navegables, endpoint/doc info |
src/components/biblioteca/BibliotecaCoverage.tsx | 170 | Coverage % y stale list con filtros |
Nota sobre coverage
El MCP handler (bib_doc_coverage) tiene un bug de rendimiento N+1: hace un query por nodo para verificar si tiene edge documents. El REST endpoint /api/biblioteca/coverage lo resuelve con una subquery EXISTS en un solo SELECT.
8. Archivos del sistema
| Archivo | Repo | Proposito |
|---|---|---|
migrations/0008_create_biblioteca.sql | workspace | Schema D1 (8 tablas) |
migrations/0009_create_bib_chunks.sql | workspace | Tabla bib_chunks (embeddings) |
migrations/0010_biblioteca_graphify.sql | workspace | Confidence en edges, community_id, bib_communities |
functions/api/mcp/handlers/biblioteca.ts | workspace | Handler MCP (~1500 LOC) |
functions/api/mcp/tools.ts | workspace | Definiciones de 26 tools |
scripts/bib_ast.py | CreaRack-Pro | Extractor AST Python (~400 LOC) |
functions/api/mcp/index.ts | workspace | Chain handler + LOGGED_TOOLS |
functions/api/biblioteca/*.ts | workspace | 4 REST API endpoints para UI |
src/components/biblioteca/*.tsx | workspace | 5 React components para UI |
src/pages/biblioteca/index.astro | workspace | Pagina Astro |
.mcp.json | CreaRack-Pro | Token MCP (en .gitignore) |
9. Notas tecnicas
- D1 size: ~0.8MB (de 10GB limite). Crecimiento negligible.
- Latencia: ~200ms por query simple, ~2-7s por indexacion batch de 40 items.
- User-Agent: Cloudflare WAF bloquea
Python-urllib. Usar siempreUser-Agent: CreaRack-Biblioteca/1.0. - [skip ci]: Cloudflare Pages respeta
[skip ci]en commits — no hace build. Evitar en pushes que necesiten deploy. - Tokens MCP: Rotados 13-04-2026. Formato
Edu:token,Dani:token,Txell:tokenen env varMCP_TOKENSde CF Pages. - Activity logging: Las 8 tools de escritura se registran automaticamente en
activity_logviaLOGGED_TOOLS.
Mantenido por: Claude (Anthropic) + Equipo CreaRack Ultima actualizacion: 16-04-2026 (Graphify — AST, confianza, comunidades)
Véase también
- [[concept—biblioteca—supercontexto]] — sistema Biblioteca Supercontexto — grafo + Archivo Maestro + wiki
- [[crearack-tech—guides—biblioteca-guide]] — guía de uso de la Biblioteca
- [[ia-tech—biblioteca—architecture]] — arquitectura de la Biblioteca
- [[feature—supercontext—fase-4-query-con-cierre]] — Supercontexto Fase 4 — Query con cierre
- [[feature—supercontext—fase-6-metricas-utility]] — Supercontexto Fase 6 — Métricas utility
- [[feature—biblioteca—graphify]] — Graphify — AST extractor
- [[runbook—biblioteca—manual-reindex]] — runbook de reindexado manual
- [[incident—20260421—d1-bind-overflow-silent]] — incidente D1 bind overflow silencioso