Skip to content

Session et livraison

源码版本v2026.7.20

Responsabilité

Deux choses : (1) Session — associer « d'où vient le message » (plateforme, chat, expéditeur) à une clé stable et persister la conversation sur disque, pour que l'agent puisse reprendre le contexte entre redémarrages ; (2) Registre de livraison (Delivery Ledger) — enregistrer pour la réponse finale de l'agent une « obligation de livraison » ; après un crash, identifier les réponses non livrées et les réexpédier, pour garantir que l'utilisateur finit par les recevoir. Les deux vivent dans la couche passerelle, découplés de l'agent.

Fichiers clés

Flux de données

  1. L'adaptateur reçoit l'événement de la plateforme, remonte un SessionSource via MessageEvent:1759.
  2. SessionSource:149 produit par hash des id stables de chat/sender (gateway/session.py:40).
  3. Construction d'un SessionContext:299 pour obtenir la clé de session (utilisée comme chemin disque après validation de sécurité des chemins:109).
  4. La clé de session décide depuis quel fichier l'historique est chargé, puis alimente l'agent pour reprendre le contexte.
  5. Une fois la réponse finale produite par l'agent, la passerelle enregistre l'obligation dans record_obligation:155 → envoi → mark_delivered.
  6. En cas de crash pendant l'envoi, au prochain démarrage sweep_recoverable (gateway/delivery_ledger.py:203) balaie les obligations à l'état attempting dont le processus propriétaire est mort, les réexpédie ou les marque comme échouées.

Résumé

La couche de session gère « à quelle conversation continue appartient ce message », en mappant l'identité externe vers un fichier disque via hash + validation de chemin. Le registre de livraison gère « la réponse finale que l'agent voulait envoyer est-elle vraiment arrivée à l'utilisateur », via une machine à états sqlite pour la récupération après crash. Les deux sont best-effort mais indispensables à la fiabilité.

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