Files
graph_explorer/issues/0012-http-ingest-endpoint.md
egutierrez 9042110ea2 docs(issues): plan enrichers asincronos + recoleccion web (0026-0030)
Cinco issues que componen el plan:
- 0026: sistema de jobs (infra, contrato wire)
- 0027: tipo Webpage + cache de documentos
- 0028: enricher fetch_webpage (MVP end-to-end)
- 0028b: enrichers extract_domain / extract_links / extract_text_entities
- 0029: variantes CDP (Chrome headless, screenshot)
- 0030: macro "Deep enrich" + expand_domain

Tambien anade los issues previos 0012-0025 que estaban untracked.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 18:24:13 +02:00

2.1 KiB

id, title, status, priority, created
id title status priority created
0012 Endpoint HTTP local de ingesta y consulta pending medium 2026-05-01

Objetivo

Exponer un servidor HTTP local en graph_explorer (o como ingest_server hermano) que sea el punto de entrada unico para todo flujo externo: extension de navegador, CLI gx, watcher de portapapeles, bots, OCR, etc.

Sin este endpoint cada cliente externo tendria que abrir operations.db directamente — colisiona con el lock del proceso vivo y duplica logica de extraccion.

Endpoints minimos

  • POST /entity — crea entidad. Body: {type, name, metadata}.
  • POST /relation — crea relacion. Body: {from_id, to_id, kind, metadata}.
  • POST /ingest/text — texto libre -> extract_graph_hybrid -> preview o auto-commit.
  • POST /ingest/url — URL -> fetch + extract -> preview o auto-commit.
  • POST /ingest/file — multipart upload (PDF/CSV/JSON/.eml/imagen) -> router por mime -> extract.
  • GET /search?q= — fuzzy / FTS sobre entidades.
  • GET /entity/:id, GET /entity/:id/neighbors.

Decisiones

  • Bind a 127.0.0.1 por defecto, puerto fijo (ej. 7878) o aleatorio escrito a ~/.fn_graph_port.
  • Auth: token compartido en ~/.fn_graph_token (header X-Token). Generado al primer arranque.
  • Modo "preview": las rutas de ingesta aceptan ?commit=false y devuelven entities/relations propuestas para que el cliente las muestre antes de persistir. Cuando es true, escribe directo.
  • Implementacion: httplib o Mongoose embebido en C++ (sin nuevas deps pesadas). Alternativa: lanzar el servidor en Go/Python aparte si la integracion C++ se complica.

Bloquea

Issues 0014, 0017, 0018, 0019, 0020 dependen de este.

Definicion de hecho

  • curl -H "X-Token: ..." -d '{"type":"person","name":"X"}' localhost:7878/entity crea entidad.
  • POST /ingest/text con texto en castellano devuelve entities/relations detectadas por el pipeline hibrido.
  • El endpoint corre en background mientras la UI sigue interactiva.
  • Si graph_explorer no esta abierto, un binario ingest_server standalone ofrece el mismo API contra la misma operations.db.