bgustscraper 0.2.0

Advanced semantic scraping engine with AI-driven compliance checks and legal terms validation
Documentation
# Arquitectura del Sistema πŸ—οΈ

`bgustscraper` utiliza una arquitectura hΓ­brida multi-motor de alto rendimiento que combina el lenguaje de programaciΓ³n **Rust** para el nΓΊcleo asΓ­ncrono asimΓ©trico y la orquestaciΓ³n, y **Node.js** para la simulaciΓ³n avanzada de navegaciΓ³n en navegador y el motor local de Inteligencia Artificial (ONNX).

---

## πŸ—ΊοΈ 1. Flujo General de EjecuciΓ³n

El siguiente diagrama detalla la interacciΓ³n entre el nΓΊcleo en Rust (Tokio), el worker secundario de Node.js, Playwright, y los modelos locales:

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Orquestador Rust (src/main.rs)              β”‚  ◄── [ ÁRBITRO SUPREMO ]
β”‚    - Tokio Runtime asΓ­ncrono de alto rendimiento.         β”‚
β”‚    - CLI parsing y menΓΊs interactivos (dialoguer).       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚ (Levanta subproceso Node)        β”‚
             β–Ό                                  β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   src/cache.rs         β”‚            β”‚ src/scheduler.rs (Cron Daemon)   β”‚
β”‚   - CachΓ© local redb   β”‚            β”‚ - Bucle asΓ­ncrono persistente.   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
             β–Ό (JSON a travΓ©s de Standard Pipes IPC)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          Stealth Worker Node.js (worker/index.js)        β”‚  ◄── [ EJECUTOR DE NAVEGACIΓ“N ]
β”‚    - Levanta Playwright con evasiΓ³n activa (Stealth).    β”‚
β”‚    - Genera Markdown legible.                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚ (Inferencia local)               β”‚
             β–Ό                                  β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    all-MiniLM-L6-v2    β”‚            β”‚    Qwen2.5-0.5B-Instruct         β”‚
β”‚   (Embeddings ONNX)    β”‚            β”‚     (ONNX Q4 Quantized)          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## 🧩 2. Principales Módulos del Sistema

El proyecto estΓ‘ dividido modularmente para mantener alta cohesiΓ³n y bajo acoplamiento:

1.  **NΓΊcleo de OrquestaciΓ³n (`src/main.rs`):** Coordina los parΓ‘metros de entrada de la CLI, llama a las rutinas de DuckDuckGo, lee la cachΓ© antes de disparar navegaciΓ³n, y procesa la descarga final con barras de progreso concurrentes.
2.  **MΓ³dulo de ComunicaciΓ³n IPC (`src/worker.rs`):** Gestiona el ciclo de vida del subproceso Node.js, redireccionando de forma asΓ­ncrona las llamadas serializadas JSON a travΓ©s del estΓ‘ndar `stdin`/`stdout`.
3.  **CachΓ© Transaccional Embebida (`src/cache.rs`):** Desarrollada sobre **`redb`**, implementa una base de datos local embebida y transaccional que almacena la respuesta HTTP, el markdown y los embeddings semΓ‘nticos por URL de forma 100% portable.
4.  **CompresiΓ³n SemΓ‘ntica (`src/clustering.rs`):** Emplea **`linfa-clustering`** (nativa en Rust) y `ndarray` para ejecutar el algoritmo **K-Means** sobre los embeddings de las oraciones del sitio web, seleccionando las oraciones mΓ‘s cercanas a los centroides para construir una compresiΓ³n extractiva ultra-densa.
5.  **Extractor SemΓ‘ntico (`src/semantic_extractor.rs`):** Invoca el modelo generativo local Qwen pasΓ‘ndole el texto comprimido y el prompt estricto de extracciΓ³n.
6.  **Servidor Web Axum (`src/api.rs`):** Expone los datos e historial de cachΓ© a travΓ©s de una API HTTP securizada con JWT.