Contexte : rooms et sessions
Ce que la plateforme tient pour la station. Il n'y a pas de clé à écrire : cette page dit ce qui existe aujourd'hui.
La room
Une room est l'espace d'une personne avec la station. Elle a un code court (u35mub), le même
sur toutes les portes : le site du tenant, Claude, ChatGPT. Elle tient la sélection, le
parcours ouvert, ce que la personne a dit d'elle (remember), et les enregistrements de ce
qui a été soumis, que toute porte relit.
Une room commence anonyme. Le code ouvre la room : qui le détient voit la sélection et les enregistrements, et peut soumettre. Voir Limites actuelles.
Quand une personne se connecte dans une room, la room lui appartient (voir Auth). Son code devient une adresse, plus une clé : tout ce que la room tient ne s'ouvre qu'à elle, connectée.
La session
Une session est une visite. Une room en a plusieurs : rouvrir la room pendant la même visite ne crée pas de session ; l'ouvrir depuis une autre porte, si.
Le fil de conversation
- Ce que voit l'agent : son historique, rangé côté serveur par room, dans la table
agent.room_threadset les fils de l'agent. - Ce que voit la personne : le fil de la room, rangé côté serveur (
room_messages). L'agent l'écrit à la fin de chaque tour. Il garde ce qui s'affiche : les messages de la personne, les réponses de l'agent, les cadres rendus. Il ne garde jamais les consignes données au modèle, ni les arguments des outils, ni leurs résultats bruts. Un tour en échec ne laisse rien. - À l'ouverture, le widget et la PWA demandent le fil au serveur. Le navigateur n'écrit plus le fil et ne le garde plus.
- Une room qui a un propriétaire ne rend son fil qu'à lui, connecté. Sinon, la personne voit
« Cette conversation appartient à un compte. Connectez-vous pour l'afficher. », avec les étapes
de connexion. Une fois connectée, la conversation s'affiche. Connectée sous un autre compte, elle
voit « Cet espace appartient à quelqu'un d'autre. » Tant que la conversation est protégée, ce
message est seul : pas d'invitation ni de suggestions, et on ne peut pas écrire. Il faut taper sa
propre adresse pour se connecter : celle de la room n'est jamais proposée à qui n'en est pas le
propriétaire. La sélection, ce qui a été retenu (
remember) et l'historique suivent la même règle : les autres voient seulement que la room est fermée, et qu'ils peuvent se connecter. L'assistant ne peut ni les lire ni les changer non plus, dans le widget comme dans Claude ou ChatGPT.
Ce fil n'est pas la mémoire du modèle. Claude et ChatGPT gardent leur propre conversation.
Ce que garde le navigateur
| où | quoi |
|---|---|
localStorage | le code de la room (oublié après 30 jours), la clé de connexion (convoy_holder), un identifiant de visiteur pour la mesure d'audience, les phrases de la narration |
sessionStorage | l'identifiant de session, la sélection affichée, un tour en attente |
Un nouvel onglet reprend la dernière room et la connexion : on ne se reconnecte pas à chaque onglet. Une session, elle, reste une visite dans un onglet.
Dans la cible, il ne reste que room_id et session_id, en sessionStorage
(Contexte).
Combien de temps
Côté serveur, rien n'expire tout seul. Le navigateur oublie le code de la room après 30 jours.
Les messages que les navigateurs envoyaient avant que le serveur écrive le fil restent dans la base. Ils ne sont plus jamais relus. Ils ne sont pas encore effacés.
Un script d'exploitation, sweep-room-data.sh, se lance à la main. Par défaut il ne fait que
rapporter ; avec --purge, il efface les données des stations supprimées (rooms, événements,
journaux, routes) et les fils de l'agent qui n'ont aucune room, au-delà de 30 jours. Les durées par
défaut de la cible (24 h pour une room vide, 90 jours d'inactivité) ne sont pas encore appliquées.