feat(ai): StreamingMessageTracker DashMap + StreamingExtension (#14, #23, #24) #154

Merged
charles merged 7 commits from feat/14-23-streaming-protocol into main 2026-04-06 02:25:00 +00:00
Owner

Résumé

  • streaming.rsStreamingMessageTracker reécrit avec DashMap (thread-safe sans Mutex). Nouvelle API : register_message, on_edit(id, body, sender, detector), mark_complete, gc, is_streaming. Constante STREAM_CURSOR = "▋".
  • streaming_ext.rsStreamingExtension implémente Extension pour intercepter les m.replace et piloter le tracker automatiquement.
  • protocol.rs — nettoyage : AgentStatus simplifié (Active/Idle/Unavailable), OpenClawResponseParser::parse_meta + strip_meta pour le bloc <!-- meta -->.
  • detector.rsAgentDetector::with_defaults(HashSet) + is_agent devient pub avec Option<bool> (utilisé par le streaming tracker).
  • Workspace Cargo.tomldashmap = "6" et regex = "1" ajoutés aux deps workspace.
  • fractal-ai/Cargo.toml — refs workspace pour dashmap et regex.

Closes #14
Closes #23
Closes #24

Plan de test

  • cargo test -p fractal-ai passe
  • on_edit avec sender inconnu → NormalEdit
  • on_edit avec @my-bot:matrix.orgUpdateInPlace
  • Curseur stripé du body, show_cursor = true
  • is_streaming false après mark_complete
  • parse_meta extrait model/tokens depuis <!-- meta --> block
## Résumé - **`streaming.rs`** — `StreamingMessageTracker` reécrit avec `DashMap` (thread-safe sans Mutex). Nouvelle API : `register_message`, `on_edit(id, body, sender, detector)`, `mark_complete`, `gc`, `is_streaming`. Constante `STREAM_CURSOR = "▋"`. - **`streaming_ext.rs`** — `StreamingExtension` implémente `Extension` pour intercepter les `m.replace` et piloter le tracker automatiquement. - **`protocol.rs`** — nettoyage : `AgentStatus` simplifié (Active/Idle/Unavailable), `OpenClawResponseParser::parse_meta` + `strip_meta` pour le bloc `<!-- meta -->`. - **`detector.rs`** — `AgentDetector::with_defaults(HashSet)` + `is_agent` devient `pub` avec `Option<bool>` (utilisé par le streaming tracker). - **Workspace `Cargo.toml`** — `dashmap = "6"` et `regex = "1"` ajoutés aux deps workspace. - **`fractal-ai/Cargo.toml`** — refs workspace pour `dashmap` et `regex`. Closes #14 Closes #23 Closes #24 ## Plan de test - [ ] `cargo test -p fractal-ai` passe - [ ] `on_edit` avec sender inconnu → `NormalEdit` - [ ] `on_edit` avec `@my-bot:matrix.org` → `UpdateInPlace` - [ ] Curseur `▋` stripé du body, `show_cursor = true` - [ ] `is_streaming` false après `mark_complete` - [ ] `parse_meta` extrait model/tokens depuis `<!-- meta -->` block
Sign in to join this conversation.
No description provided.