Sistema de plugins
Responsabilidad
Los plugins son el esqueleto de extensión de Hermes: provider profiles, adaptadores de plataforma, context engine, proveedores de cron, backends de memoria, navegador, generación de imágenes/vídeo… todos se integran por el mecanismo de plugins. plugins/ ofrece un PluginContext (entrada de registro) + funciones utilitarias; cada subdirectorio de plugin es autónomo por dominio. Coordina con ToolRegistry/PlatformRegistry: el plugin solo «declara y registra»; el registro se encarga de «consultar y despachar».
Archivos clave
plugins/__init__.py—PluginContext, entradas de registro (register_platform,register_provider, etc.)plugin_utils.py— funciones utilitarias comunes a los pluginsmodel-providers/— profiles de providers LLM (ver Providers)platforms/— adaptadores de Telegram/Discord/Slack y otras plataformas (ver Adaptadores de plataforma)context_engine/— extensiones del motor de contextocron_providers/— backends de programación cronmemory/— backends de memoriabrowser//web/— capacidades de navegador y webimage_gen//video_gen/— generación multimodalobservability//security-guidance/— observabilidad y seguridad
Flujo de datos
- En el arranque,
init_agent(agent/agent_init.py:276) dispara el descubrimiento de plugins. - Cada subdirectorio de plugin se importa; el código a nivel de módulo llama a los métodos de registro de
PluginContext:- model-provider →
register_provider:53 - platform →
platform_registry.register:231 - herramienta →
registry.register:365(vía política de namespace)
- model-provider →
- Los registros (singletons) se convierten en la fuente de verdad; el bucle principal y el gateway solo leen los registros, sin depender directamente de un plugin concreto.
- Los plugins son hot-pluggable: descargarlos es solo
unregister; el registro gestiona prioridades y overrides.
Resumen
Plugin = «subdirectorio + registro». Todas las capacidades transversales (provider, plataforma, herramienta, memoria, cron, multimodal) pasan por el mismo esqueleto de registro, manteniendo estable el bucle principal. Añadir una capacidad equivale a crear un subdirectorio de plugin y registrarlo, sin tocar el tronco del agent.