# 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.