releaseperformancesecurityaccessibility

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_HEIGHT determinan la ventana visible
  • Memoización avanzada de ordenamiento - sortedPids solo 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:

  1. fuzz_rules_payload - alimenta bytes arbitrarios a upsert_rules_from_ai_json() para asegurar que el parser de reglas IA nunca entre en pánico
  2. fuzz_geoip_payload - prueba validación CIDR de GeoIP contra notación inválida, prefijos sobredimensionados, IPv4 malformado
  3. fuzz_rules_evaluate - pipeline completo: carga reglas desde input de fuzz, construye objetos sintéticos ProcessConnectionEvent, ejecuta a través de evaluate_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-controls y aria-selected
  • Divisores de redimensionamiento convertidos de <div> a elementos <button> accesibles por teclado
  • Contraste WCAG AA: tema oscuro --fg-dim elevado 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

Changelog completo en GitHub