Système de plugins
Responsabilité
Les plugins sont le squelette d'extension d'Hermes : profils de provider, adaptateurs de plateforme, moteur de contexte, backend cron, backend de mémoire, navigateur, génération image/vidéo… tous sont intégrés via le mécanisme de plugins. plugins/ fournit un PluginContext (entrée d'enregistrement) + des fonctions utilitaires ; chaque sous-répertoire de plugin est autonome par domaine. Il travaille de pair avec ToolRegistry / PlatformRegistry : le plugin se contente de « déclarer et enregistrer », le registre gère « requête et dispatch ».
Fichiers clés
plugins/__init__.py—PluginContext, entrées d'enregistrement (register_platform,register_provider, etc.)plugin_utils.py— fonctions utilitaires partagées par les pluginsmodel-providers/— profils de provider LLM (voir Providers)platforms/— adaptateurs Telegram/Discord/Slack etc. (voir Adaptateurs de plateforme)context_engine/— extension du moteur de contextecron_providers/— backends de planification cronmemory/— backends de mémoirebrowser//web/— navigateur et capacités Webimage_gen//video_gen/— génération multimodaleobservability//security-guidance/— observabilité et sécurité
Flux de données
- Au démarrage,
init_agent(agent/agent_init.py:276) déclenche la découverte des plugins. - Chaque sous-répertoire de plugin est importé ; le code au niveau module appelle les méthodes d'enregistrement de
PluginContext:- model-provider →
register_provider:53 - platform →
platform_registry.register:231 - outil →
registry.register:365(via la stratégie d'espace de noms)
- model-provider →
- Le registre (singleton) devient la source de vérité des requêtes ; la boucle principale et la passerelle se contentent de lire le registre, sans dépendre directement des plugins concrets.
- Les plugins sont hot-pluggables : le déchargement se fait par
unregister, le registre gère les priorités et les surcharges.
Résumé
Plugin = « sous-répertoire + enregistrement ». Toutes les capacités transverses (provider, plateforme, outil, mémoire, cron, multimodal) passent par le même squelette d'enregistrement, ce qui maintient la boucle principale stable. Ajouter une capacité = créer un sous-répertoire de plugin et l'enregistrer, sans toucher au tronc principal de l'agent.