a36530bb6f
- Dockspace host (PassthruCentralNode) bajo la toolbar para que las
ventanas Viewport/Legend/Inspector/Stats puedan dockearse dentro de la
app principal.
- Toolbar: input "Add node" con auto-deteccion de tipo (text/email/
ip_address/url/domain/phone). Insert en operations.db + reload.
- Context menu (right-click sobre nodo): Change type, Duplicate, Delete,
submenu "Run enricher" (placeholder hasta issues 0001-0003).
- Inspector: vecinos ahora muestran etiqueta de relacion ("-> employs",
"<- owns") usando rel_types[].name como label de arista.
- Default relation label k_default_relation_name="RELATED_TO" para
relaciones creadas sin nombre semantico explicito.
- Indice EntityIndex (FNV1a hash -> sql id) reconstruido tras cada load
para resolver mutaciones desde el grafo en memoria.
Issues planteadas para iteraciones siguientes:
- 0001: chat con Claude sobre el grafo (HTTP + tool-use)
- 0002: enricher GLiNER+GLiREL desde nodo texto
- 0003: enricher web (fetch URL/dominio + extract text)
- 0004: vista tabla por tipo de entidad
39 lines
1.3 KiB
Markdown
39 lines
1.3 KiB
Markdown
---
|
|
id: 0003
|
|
title: Enricher web — descargar URL/dominio y extraer texto
|
|
status: pending
|
|
priority: medium
|
|
created: 2026-04-30
|
|
---
|
|
|
|
## Objetivo
|
|
|
|
Right-click sobre un nodo `url` o `domain` → "Run enricher → Fetch & extract
|
|
text". Descarga el HTML, extrae el texto principal, crea un nodo `text`
|
|
conectado al origen con relacion `FETCHED_FROM`.
|
|
|
|
Despues el usuario puede encadenar: sobre ese nodo `text`, ejecutar el enricher
|
|
GLiNER+GLiREL (issue 0002) para extraer entidades.
|
|
|
|
## Alcance
|
|
|
|
- HTTP GET con timeout (libcurl o sys WinHTTP).
|
|
- Extraccion de texto: regex/strip de tags simple en v1; v2 usa una lib
|
|
(htmlparser2 / lexbor / boost.url + algo de heuristica).
|
|
- User-agent identificativo, respeto de robots.txt opcional (out-of-scope v1).
|
|
- Limite de tamaño descargable (1 MB) para evitar bloqueos.
|
|
|
|
## Modelo de etiquetado
|
|
|
|
- Nodo origen (url/domain) → arista `FETCHED_FROM` → nodo nuevo (text con
|
|
metadata={fetched_at, status_code, content_type, length}).
|
|
- Nombre del nodo text: titulo de la pagina (si <title> existe) o primeros
|
|
120 caracteres del cuerpo.
|
|
|
|
## Definicion de hecho
|
|
|
|
- Funciona contra una URL real (https con TLS).
|
|
- Maneja errores (404, timeout, redirects basicos) sin tumbar la app.
|
|
- El nodo creado es visible y el texto se puede consumir por el enricher
|
|
GLiNER+GLiREL del issue 0002.
|