feat: RoomAgentRegistry pour le support multi-agents (#25) #128

Closed
charles wants to merge 2 commits from feat/25-multi-agent into main
Owner

Closes #25.

Changements

  • crates/fractal-ai/src/multi_agent.rs (nouveau) : RoomAgentRegistry qui suit les agents présents dans chaque salon Matrix.

    • on_member_event : réagit aux events join/leave/ban/kick et délègue la détection à AgentDetector.
    • agents_in_room / agent_count / is_multi_agent : API de consultation.
    • sidebar_label : renvoie "1 agent" ou "N agents" pour la vue sidebar.
    • mention_suggestions(room_id, prefix) : filtre les agents par préfixe (insensible à la casse) et renvoie des chaînes @user_id.
    • parse_profile_hints : extrait is_bot et is_openclaw depuis le JSON de profil sans dépendance supplémentaire.
  • crates/fractal-ai/src/lib.rs (mise à jour) : ajout de pub mod multi_agent et pub use multi_agent::RoomAgentRegistry.

Adaptation par rapport au template de l'issue

Le template supposait crate::agent::AgentDetector avec AgentDetector::with_defaults(HashSet) et detect(user_id, profile_json). La vraie API du crate utilise crate::detector::AgentDetector::new(AgentDetectorConfig) et detect(user_id, is_bot_flag: bool, is_openclaw: bool). Le module a été adapté en conséquence :

  • imports depuis crate::detector au lieu de crate::agent
  • profile_json est parsé localement pour en extraire les flags booléens avant d'appeler detector.detect()
  • les tests utilisent AgentDetector::new(AgentDetectorConfig::default()) et restent fonctionnellement identiques au cahier des charges

Tests

8 tests unitaires dans multi_agent::tests couvrent : salon vide, join/leave, multi-agent, utilisateur humain ignoré, suggestions de mention, flag is_bot via JSON de profil, et déduplication des joins.

Closes #25. ## Changements - **`crates/fractal-ai/src/multi_agent.rs`** (nouveau) : `RoomAgentRegistry` qui suit les agents présents dans chaque salon Matrix. - `on_member_event` : réagit aux events `join`/`leave`/`ban`/`kick` et délègue la détection à `AgentDetector`. - `agents_in_room` / `agent_count` / `is_multi_agent` : API de consultation. - `sidebar_label` : renvoie `"1 agent"` ou `"N agents"` pour la vue sidebar. - `mention_suggestions(room_id, prefix)` : filtre les agents par préfixe (insensible à la casse) et renvoie des chaînes `@user_id`. - `parse_profile_hints` : extrait `is_bot` et `is_openclaw` depuis le JSON de profil sans dépendance supplémentaire. - **`crates/fractal-ai/src/lib.rs`** (mise à jour) : ajout de `pub mod multi_agent` et `pub use multi_agent::RoomAgentRegistry`. ## Adaptation par rapport au template de l'issue Le template supposait `crate::agent::AgentDetector` avec `AgentDetector::with_defaults(HashSet)` et `detect(user_id, profile_json)`. La vraie API du crate utilise `crate::detector::AgentDetector::new(AgentDetectorConfig)` et `detect(user_id, is_bot_flag: bool, is_openclaw: bool)`. Le module a été adapté en conséquence : - imports depuis `crate::detector` au lieu de `crate::agent` - `profile_json` est parsé localement pour en extraire les flags booléens avant d'appeler `detector.detect()` - les tests utilisent `AgentDetector::new(AgentDetectorConfig::default())` et restent fonctionnellement identiques au cahier des charges ## Tests 8 tests unitaires dans `multi_agent::tests` couvrent : salon vide, join/leave, multi-agent, utilisateur humain ignoré, suggestions de mention, flag `is_bot` via JSON de profil, et déduplication des joins.
feat: exposer multi_agent dans lib.rs (#25)
Some checks failed
CI / cargo check (pull_request) Has been cancelled
CI / cargo test (pull_request) Has been cancelled
CI / clippy + rustfmt (pull_request) Has been cancelled
128e2633e3
charles closed this pull request 2026-04-06 02:17:22 +00:00
Some checks are pending
CI / cargo check (pull_request) Has been cancelled
CI / cargo test (pull_request) Has been cancelled
CI / clippy + rustfmt (pull_request) Has been cancelled
qa
Required

Pull request closed

Sign in to join this conversation.
No description provided.