[M2] Indicateur "réflexion" + streaming de réponses (SF-M2-03, SF-M2-04, ST-M2-03) #24

Closed
opened 2026-04-06 01:35:04 +00:00 by charles · 0 comments
Owner

Contexte

Deux fonctionnalités liées à l'affichage temps réel des réponses agents :

  1. Animation "l'agent réfléchit..." quand le typing indicator est actif (SF-M2-03)
  2. Mise à jour en place du message avec curseur animé quand l'agent streame via edits successifs (SF-M2-04)

Critères d'acceptation

  • Quand un agent connu envoie un typing indicator, afficher une animation distincte "réfléchit..." (différente du typing classique)
  • StreamingMessageTracker : observe les m.replace dans les 30s suivant un message d'agent connu
  • Si edit dans les 30s : mise à jour en place du widget message + affichage curseur animé
  • Si > 5s sans nouvel edit : marquer le stream comme terminé, masquer le curseur
  • Si edit après 30s : traiter comme un edit classique

Notes techniques

struct StreamState {
    agent_user_id: OwnedUserId,
    first_seen: Instant,
    last_update: Instant,
    edit_count: u32,
    is_complete: bool,
}
  • Observer m.room.message avec m.relates_to.rel_type: "m.replace" dans on_sync_event
  • Dépend de #20 (AgentDetector), #2 (EventBus)
## Contexte Deux fonctionnalités liées à l'affichage temps réel des réponses agents : 1. Animation "l'agent réfléchit..." quand le typing indicator est actif (SF-M2-03) 2. Mise à jour en place du message avec curseur animé quand l'agent streame via edits successifs (SF-M2-04) ## Critères d'acceptation - [ ] Quand un agent connu envoie un typing indicator, afficher une animation distincte "réfléchit..." (différente du typing classique) - [ ] `StreamingMessageTracker` : observe les `m.replace` dans les 30s suivant un message d'agent connu - [ ] Si edit dans les 30s : mise à jour en place du widget message + affichage curseur animé - [ ] Si > 5s sans nouvel edit : marquer le stream comme terminé, masquer le curseur - [ ] Si edit après 30s : traiter comme un edit classique ## Notes techniques ```rust struct StreamState { agent_user_id: OwnedUserId, first_seen: Instant, last_update: Instant, edit_count: u32, is_complete: bool, } ``` - Observer `m.room.message` avec `m.relates_to.rel_type: "m.replace"` dans `on_sync_event` - Dépend de #20 (AgentDetector), #2 (EventBus)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/my-fractal#24
No description provided.