OmniMon v5.3.0 - Profiling Extremo: mimalloc, Tabla Virtualizada, Caché IA y Fuzz Testing
v5.3.0 es un release enfocado en rendimiento: asignador global mimalloc, rutas hot sin asignaciones, tabla de procesos virtualizada, caché de respuestas IA, defensa contra inyección de prompts, fuzz testing y accesibilidad WCAG AA.
OmniMon v5.3.0
Un release enfocado en rendimiento que lleva la eficiencia de OmniMon al extremo. 34 archivos modificados, +1,395 líneas en 4 commits de features dirigidos a rendimiento del asignador, optimización de renderizado, endurecimiento de IA y accesibilidad.
Asignador Global mimalloc
OmniMon ahora usa mimalloc (el asignador de alto rendimiento de Microsoft) como #[global_allocator] tanto en el CLI como en el binario de escritorio:
- ~7% más rápido para asignaciones pequeñas comparado con el asignador del sistema
- ~50KB de overhead en binario (vs ~250KB de jemalloc)
- Fragmentación reducida vía free lists thread-local con decommit a nivel de página
- Soporte nativo macOS sin conflictos con Zone allocator
Rutas Hot sin Asignaciones
El nuevo struct WatcherBuffers pre-asigna Vec<CachedProcessInfo>, HashMap<u32, (u64, u64)> y Vec<ProcessRuntime> con capacidad inicial 512/128. Estos se reusan entre ticks del watcher de 2 segundos vía clear() (que retiene capacidad de heap).
Después de ~3 ticks de calentamiento, la ruta hot logra cero asignaciones de heap para tipos contenedores - eliminando ~43,200 ciclos alloc/dealloc por día. La capacidad del estado anterior se recupera vía std::mem::take() para el siguiente tick.
Tabla de Procesos Virtualizada
La tabla de procesos ahora usa renderizado por ventana - solo las filas visibles en el viewport se renderizan:
scrollTop+containerHeight+ROW_HEIGHTdeterminan la ventana visible- Memoización avanzada de ordenamiento -
sortedPidssolo recalcula cuando la clave/dirección de ordenamiento cambia o los valores difieren, no en cada tick de 2 segundos - Memoización de filtros - rastrea metadata
(query, pid, name, group), omitiendo recálculo cuando solo métricas numéricas cambian - Animaciones de cambio de ranking - micro-animación de 600ms cuando un proceso sube 2+ posiciones
Caché de Respuestas IA y Defensa contra Inyección de Prompts
Caché de respuestas: Caché global en memoria usando OnceLock<RwLock<HashMap<u64, String>>>. La clave es un hash de (proveedor, modelo, contexto_query). Queries idénticos retornan instantáneamente sin llamada API.
Defensa contra inyección de prompts: check_prompt_injection() bloquea 8 frases heurísticas en inglés y español antes de llegar al LLM: “ignora instrucciones anteriores”, “elimina reglas”, “olvida tu propósito”, “actúa como”, más equivalentes en inglés.
Timeouts elegantes: Timeout de 45 segundos con campos isError, canRetry y retryText para display limpio de errores.
Infraestructura de Fuzz Testing
Tres targets cargo-fuzz usando libFuzzer:
fuzz_rules_payload- alimenta bytes arbitrarios aupsert_rules_from_ai_json()para asegurar que el parser de reglas IA nunca entre en pánicofuzz_geoip_payload- prueba validación CIDR de GeoIP contra notación inválida, prefijos sobredimensionados, IPv4 malformadofuzz_rules_evaluate- pipeline completo: carga reglas desde input de fuzz, construye objetos sintéticosProcessConnectionEvent, ejecuta a través deevaluate_events()(limitado a 64 eventos por input)
Lazy Loading y Polling Bajo Demanda
9 componentes movidos a import() dinámico:
- ChromeTabManager, AIChat, NetworkMap, ProcessDetailsModal, SecurityReportView, HelpCenterModal, SystemMetricModal, Automations, CloudSync
Polling bajo demanda vía setPollingTarget(): el polling de pestañas del navegador (5s) y telemetría de red solo inician cuando sus vistas respectivas se abren. Si nunca abres el mapa de red, el polling de red nunca ejecuta.
Accesibilidad WCAG AA
- Utilidad focus trap - ciclo correcto Tab/Shift+Tab, guardado/restauración de foco para todos los modales
- Headers de ordenamiento usan elementos
<button>reales en vez de<th>clicables - Pestañas del mapa de red usan roving tabindex con
aria-controlsyaria-selected - Divisores de redimensionamiento convertidos de
<div>a elementos<button>accesibles por teclado - Contraste WCAG AA: tema oscuro
--fg-dimelevado a#a1a1aa, cyberpunk a#c4b5fd
Instalar
# macOS
brew tap chochy2001/omnimon && brew install --cask omnimon
# Linux
curl -fsSL https://get.omnimon.com.mx | bash
# Windows
winget install chochy2001.omnimon