Files
graph_explorer/issues/0012-http-ingest-endpoint.md
T
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

55 lines
2.1 KiB
Markdown

---
id: 0012
title: Endpoint HTTP local de ingesta y consulta
status: pending
priority: medium
created: 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`.