[M2] StreamingMessageTracker : mise à jour en place des réponses agent #14

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

Contexte

Les agents IA simulent le streaming en éditant leur message progressivement via m.replace. Fractal+ doit détecter ce pattern et mettre à jour le widget en place avec un curseur animé au lieu d'afficher des edits successifs.

Critères d'acceptation

  • StreamingMessageTracker : active_streams: DashMap<OwnedEventId, StreamState>
  • StreamState : agent_user_id, first_seen: Instant, last_update: Instant, edit_count: u32, is_complete: bool
  • on_edit() retourne StreamAction : UpdateInPlace { body, show_cursor } si < 30s depuis l'original, NormalEdit sinon
  • Curseur animé (blinking block ) visible tant que is_complete = false
  • Marqué complet si pas d'edit pendant > 5s
  • Fonctionne uniquement pour les agents connus (AgentDetector)

Notes techniques

  • Dépend de : #11 (AgentDetector)
  • Écoute les m.room.message avec m.relates_to.rel_type: "m.replace"
  • Le widget de message existant de Fractal doit exposer une méthode update_body_in_place()
  • streaming_mode = true dans config.toml active/désactive la feature
## Contexte Les agents IA simulent le streaming en éditant leur message progressivement via `m.replace`. Fractal+ doit détecter ce pattern et mettre à jour le widget en place avec un curseur animé au lieu d'afficher des edits successifs. ## Critères d'acceptation - [ ] `StreamingMessageTracker` : `active_streams: DashMap<OwnedEventId, StreamState>` - [ ] `StreamState` : `agent_user_id`, `first_seen: Instant`, `last_update: Instant`, `edit_count: u32`, `is_complete: bool` - [ ] `on_edit()` retourne `StreamAction` : `UpdateInPlace { body, show_cursor }` si < 30s depuis l'original, `NormalEdit` sinon - [ ] Curseur animé (blinking block `▋`) visible tant que `is_complete = false` - [ ] Marqué complet si pas d'edit pendant > 5s - [ ] Fonctionne uniquement pour les agents connus (`AgentDetector`) ## Notes techniques - Dépend de : #11 (AgentDetector) - Écoute les `m.room.message` avec `m.relates_to.rel_type: "m.replace"` - Le widget de message existant de Fractal doit exposer une méthode `update_body_in_place()` - `streaming_mode = true` dans `config.toml` active/désactive la feature
Sign in to join this conversation.
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#14
No description provided.