Skip to content

Cœur de la passerelle

源码版本v2026.7.20

Responsabilité

La passerelle est le pont entre l'agent et le monde extérieur : elle reçoit les messages des plateformes (Telegram/Discord/Slack/Signal/WeChat…) et les transforme en un MessageEvent unifié qui alimente l'agent ; elle retransforme la sortie en streaming de l'agent en actions d'envoi propres à chaque plateforme. gateway/run.py est le processus principal de cette couche (GatewayRunner), qui coordonne plusieurs sous-systèmes : adaptateurs, sessions, consommation en streaming, registre de livraison, hooks, heartbeat cron…

Fichiers clés

Flux de données

  1. main() (gateway/run.py:22965) démarre GatewayRunner.
  2. _start_one_profile_adapter:9389 lance un par un les adaptateurs de plateforme (voir Adaptateurs de plateforme).
  3. L'adaptateur reçoit l'événement brut de la plateforme et le transforme en MessageEvent unifié (voir gateway/platforms/base.py:1759).
  4. _handle_message (gateway/run.py:9947) distribue : vérification d'autorisation, résolution de session, routage des slash commands, ou délégation à _handle_message_with_agent (gateway/run.py:11956).
  5. Ce dernier appelle run_conversation:588 de l'agent, et branche le callback de streaming sur GatewayStreamConsumer:83.
  6. La sortie en streaming édite progressivement le message de la plateforme via le consommateur ; l'état final est comptabilisé par delivery_ledger, pour éviter qu'un crash ne perde la réponse finale.
  7. La ronde de housekeeping et le heartbeat cron tournent en arrière-plan à 60 s (gateway/run.py:22246 / gateway/run.py:22335).

Résumé

Le cœur de la passerelle est un « bus d'événements + pont de streaming » : l'abstraction unifiée MessageEvent masque les différences de plateforme, le GatewayStreamConsumer traduit le callback synchrone de l'agent en livraison asynchrone à la plateforme, le delivery_ledger garantit que l'état final n'est pas perdu. Il est découplé de l'agent — l'agent se contente de tourner sa boucle, les détails de livraison restent côté passerelle.

Site d'apprentissage communautaire non officiel. Basé sur le code source de NousResearch/hermes-agent (licence MIT).