feat: connecteurs Discord/Telegram/MCP + outils MCP dynamiques au registre (v7.57.0)
- presets Discord / Telegram : colonnes kind + auth (bearer/bot/none) sur
agent_connectors (migration 34) ; Discord envoie le jeton préfixé dans
l'en-tête d'autorisation, Telegram le place dans l'URL via le substitut
{secret} remplacé à l'appel — jamais stocké en clair
- Teams : scope ChannelMessage.Read.All ajouté aux Graph scopes M365
- app/services/mcp_client.py : handshake initialize → notifications/initialized
→ tools/list → tools/call (JSON-RPC 2.0, réponse JSON ou premier data: d'un
text/event-stream), garde SSRF, outils cachés en base (tools_json) —
le bouton « Tester » rejoue le handshake
- ToolRegistry._all() merge le cache MCP à chaque run : outils exposés au LLM
sous mcp_<serveur>_<outil> avec leur inputSchema, dispatch tools/call ;
serveur désactivé → outil absent du schéma, échec réseau → ToolResult(error)
- menu + : champ Type dans le formulaire connecteur (preset URL + auth),
badge « · N outil(s) » sur la fiche d'un serveur MCP
- tests : tests/test_v757_mcp_discord.py (12 tests, 0 appel réseau réel) ;
suite complète 1331 verts, ruff 0, eslint 0
- livraison : VERSION + app/main = 7.57.0, OpenAPI 523 chemins, CHANGELOG,
ROADMAP phase 7 cochée, avenant phase 7 dans docs/V74_Agent_Plus_Menu.md
This commit is contained in:
+26
-9
@@ -284,7 +284,7 @@ Propriétés custom, AI keywords, sync API, 12 tables DB
|
||||
|
||||
---
|
||||
|
||||
## v7.51.0 → v7.58.0 — Menu + de l'assistant : hub de contexte (phases 1-6 ✅ 2026-10-06 · phases 7-8 planifiées)
|
||||
## v7.51.0 → v7.58.0 — Menu + de l'assistant : hub de contexte (phases 1-7 ✅ 2026-10-06 · phase 8 planifiée)
|
||||
|
||||
> **Objectif** : faire du bouton **+** du panneau agent (à gauche de la zone d'édition)
|
||||
> un menu à sections, tel que demandé :
|
||||
@@ -471,13 +471,30 @@ CHANGELOG). Chiffrage : S < ½ j · M = 1–2 j · L = 3–5 j.
|
||||
(GOOGLE_/MS_ CLIENT_ID/SECRET + redirect URI), OpenAPI régénéré (523 chemins),
|
||||
CHANGELOG, ce ROADMAP
|
||||
|
||||
### Phase 7 — v7.57.0 — Connecteurs : Discord, Telegram, Teams, MCP · effort L
|
||||
### Phase 7 — v7.57.0 — Connecteurs : Discord, Telegram, Teams, MCP · effort L ✅
|
||||
|
||||
- [ ] **Discord** (bot token : lecture canaux/DMs), **Telegram** (Bot API),
|
||||
**Teams** (via Graph de la phase 6)
|
||||
- [ ] **MCP complet** — handshake `initialize`, `tools/list`, `tools/call`
|
||||
(streamable HTTP) → outils **dynamiques** ajoutés au registre à la connexion
|
||||
- [ ] **Tests** — schémas MCP, mapping d'outils, échecs d'auth
|
||||
- [x] **Presets Discord / Telegram** — champ **Type** dans le formulaire
|
||||
« Ajouter un connecteur » : `kind` + `auth` (`bearer`/`bot`/`none`) ajoutés à
|
||||
`agent_connectors` (migration **34**) ; Discord = en-tête d'autorisation avec
|
||||
le jeton préfixé, Telegram = jeton **dans l'URL** via le substitut `{secret}`
|
||||
(remplacé à l'appel, **jamais stocké en clair** — colonne url = `…/bot{secret}`)
|
||||
- [x] **Teams** — scope `ChannelMessage.Read.All` ajouté aux Graph scopes M365
|
||||
(consentement admin)
|
||||
- [x] **MCP complet** — `app/services/mcp_client.py` : `initialize` →
|
||||
`notifications/initialized` → `tools/list` → `tools/call` (JSON-RPC 2.0,
|
||||
réponse JSON **ou** 1er `data:` d'un `text/event-stream`), garde SSRF,
|
||||
outils **cachés** en base (`tools_json`, maj par le bouton « Tester »)
|
||||
- [x] **Outils dynamiques au registre** — `ToolRegistry._all()` merge le cache
|
||||
MCP à chaque run : nom `mcp_<serveur>_<outil>` + `inputSchema` exposés au
|
||||
LLM, `execute()` dispatche sur `tools/call` ; serveur désactivé → outil
|
||||
**absent du schéma** ; erreur RPC → `ToolResult(error)` (jamais de run perdu)
|
||||
- [x] **Tests** — `tests/test_v757_mcp_discord.py` : **12 tests**, 0 appel
|
||||
réseau (`_rpc` / `_get` monkeypatchés) — presets, `{secret}` absent de la
|
||||
base, kind/auth invalides → 400, handshake + séquence d'appels, cache
|
||||
`tools_json`, dispatch LLM, serveur désactivé, erreur handshake → probe
|
||||
error, parse SSE/erreurs JSON-RPC, slug, scopes Teams, câblage menu
|
||||
- [x] **Livraison** — `VERSION` + `app/main.py` = **7.57.0**, OpenAPI régénéré,
|
||||
CHANGELOG, ce ROADMAP
|
||||
|
||||
### Phase 8 — v7.58.0 — Add plugins · effort M
|
||||
|
||||
@@ -489,8 +506,8 @@ CHANGELOG). Chiffrage : S < ½ j · M = 1–2 j · L = 3–5 j.
|
||||
|
||||
---
|
||||
|
||||
*Plan produit le 2026-10-06 à partir du code réel — **phases 1 à 6 livrées le
|
||||
2026-10-06 (v7.51.0 → v7.56.0)**, phases 7-8 à valider une par une avant « go ».
|
||||
*Plan produit le 2026-10-06 à partir du code réel — **phases 1 à 7 livrées le
|
||||
2026-10-06 (v7.51.0 → v7.57.0)**, phase 8 (plugins) à valider avant « go ».
|
||||
Chaque phase se clôt par tests verts, bump de version, CHANGELOG et ROADMAP à jour.*
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user