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>
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
---
|
||||
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`.
|
||||
Reference in New Issue
Block a user