docs: plan par phases du menu + de l'assistant + design V74
- ROADMAP : section « v7.51.0 → v7.58.0 — Menu + de l'assistant » (8 phases : menu hub/fichiers-répertoires, compétences, canevas, mémoire, connecteurs socle, Google+M365, Discord/Telegram/MCP, plugins), état des lieux lu dans le code, aucun case cochée. - docs/V74_Agent_Plus_Menu.md : maquette, découpage front/back, modèle de données, sécurité (SSRF, secrets Fernet, CSRF), décisions D1-D7, pièges repo, critères d'acceptation par phase.
This commit is contained in:
+129
@@ -284,6 +284,135 @@ Propriétés custom, AI keywords, sync API, 12 tables DB
|
||||
|
||||
---
|
||||
|
||||
## v7.51.0 → v7.58.0 — Menu + de l'assistant : hub de contexte (planifié 2026-10-06)
|
||||
|
||||
> **Objectif** : faire du bouton **+** du panneau agent (à gauche de la zone d'édition)
|
||||
> un menu à sections, tel que demandé :
|
||||
>
|
||||
> ```
|
||||
> + ├─ Ajouter des fichiers ou répertoires … → picker actuel + parcours de l'arborescence
|
||||
> ├─ Compétences-skills … … … … … … … … → Deep research, Skill-creator, … + Gérer + Parcourir
|
||||
> ├─ Connecteurs … … … … … … … … … … … → Parcourir + Ajouter un connecteur personnalisé
|
||||
> ├─ Design System – Canevas … … … … … → galerie de canevas (templates de page)
|
||||
> ├─ Add plugins … … … … … … … … … … … → catalogue de modules on/off
|
||||
> └─ Mémoire (on/off) … … … … … … … … → mémoire persistante de l'agent
|
||||
> ```
|
||||
>
|
||||
> **Doc de design** : [`docs/V74_Agent_Plus_Menu.md`](docs/V74_Agent_Plus_Menu.md)
|
||||
> — maquette, découpage front/back, modèle de données, endpoints, décisions, pièges.
|
||||
|
||||
**État des lieux lu dans le code le 2026-10-06** (rien n'est livré, tout est `- [ ]`) :
|
||||
|
||||
- Le **+** = `toggleAddPicker()` (`static/js/agent_panel_2.js:1074`) → menu **plat** de
|
||||
mentions (`GET /api/agent/mentions`, `app/routers/agent.py:596`) : documents,
|
||||
collections, pages. **Pas de dossiers, pas de sous-menu, pas de section.**
|
||||
- **Compétences** : 11 skills builtin (`FD_SKILLS`, `static/js/agent_panel_2.js:11`) +
|
||||
table `agent_skills` (CRUD `/api/agent/skills`) + galerie de 17 presets — mais
|
||||
**aucune UI « Gérer » ni « Parcourir »** : tout passe par la palette `/`.
|
||||
- **Canevas** : `GET /api/page-templates` (built-ins `app/services/block_templates.py` +
|
||||
personnels) et `POST /api/page-templates/{id}/use` existent déjà, **jamais appelés
|
||||
depuis le panneau agent**.
|
||||
- **Connecteurs / Plugins / Mémoire** : **inexistants** — 0 hit `connector|plugin|memory`
|
||||
dans `app/` hors « in-memory ».
|
||||
|
||||
**Ordre** : phases 1 → 8, chacune indépendante et livrable (version + tests verts +
|
||||
CHANGELOG). Chiffrage : S < ½ j · M = 1–2 j · L = 3–5 j.
|
||||
|
||||
### Phase 1 — v7.51.0 — Menu hub + fichiers/répertoires · effort S–M
|
||||
|
||||
- [ ] **Structure du menu** — sections + sous-menus, navigation clavier (↑/↓/Entrée/Échap),
|
||||
styles réutilisés depuis `.fd-ap-mention-menu` ; les sections pas encore livrées
|
||||
s'affichent « bientôt » et désactivées (le menu ne promet rien que le code ne fait)
|
||||
- [ ] **Fichiers & répertoires** — picker actuel (recherche) **+ mode « Parcourir… »** :
|
||||
arborescence via `GET /api/local-workspace/tree?folder=` + enfants de page
|
||||
(`parent_id`) ; un répertoire s'épingle comme un fichier
|
||||
- [ ] **Jeton `folder:<id>`** résolu par `ContextBuilder._mentions_context`
|
||||
(contenu des pages du dossier, borné en tokens)
|
||||
- [ ] **Tests** — parcours, résolution du jeton dossier, rendu/états du menu
|
||||
- [ ] **Livraison** — `ruff` + suite verte, bump `VERSION` + `app/main.py`, CHANGELOG
|
||||
|
||||
### Phase 2 — v7.52.0 — Compétences : « Gérer » + « Parcourir » · effort M
|
||||
|
||||
- [ ] **Sous-menu Compétences** — builtin + installés (badge « installé »), le clic
|
||||
insère le template dans le composer (comportement `/` actuel conservé)
|
||||
- [ ] **Libellés affichés** — alias visibles « Deep research » (`/research`) et
|
||||
« Skill-creator » (`/create-new-skill`), sans casser les slugs existants
|
||||
- [ ] **Modale « Gérer les compétences »** — CRUD sur `POST/PATCH/DELETE /api/agent/skills`
|
||||
(nom, description, prompt, outils autorisés) + export/import
|
||||
(`/skills/{id}/export`, `/skills/import`)
|
||||
- [ ] **Modale « Parcourir les compétences »** — galerie `GET /api/agent/skills/gallery`,
|
||||
installation en 1 clic, filtre
|
||||
- [ ] **Tests** — CRUD, install/désinstall, pas de doublon à l'import
|
||||
|
||||
### Phase 3 — v7.53.0 — Design System – Canevas · effort M
|
||||
|
||||
- [ ] **Sous-menu Canevas** — `GET /api/page-templates` (built-ins + personnels)
|
||||
- [ ] **Deux actions** — « Créer une page à partir du canevas »
|
||||
(`POST /api/page-templates/{id}/use`) et « Insérer dans le document ouvert »
|
||||
(blocs poussés dans l'éditeur quand un document est ouvert)
|
||||
- [ ] **Canevas « design system »** — presets maison dans `block_templates.py`
|
||||
(callout, TOC, colonnes, grille de composants) réutilisant `design-tokens.css`
|
||||
- [ ] **Sauver le document ouvert comme canevas** — `POST /api/page-templates` existe
|
||||
- [ ] **Tests** — création, insertion dans l'éditeur, sauvegarde
|
||||
|
||||
### Phase 4 — v7.54.0 — Mémoire de l'agent · effort M
|
||||
|
||||
- [ ] **Table `agent_memory`** (`workspace_id`, `kind` summary|fact, `content`,
|
||||
`updated_at`) + colonne `conversations.memory_enabled`
|
||||
- [ ] **Service `app/services/agent_memory.py`** — extraction en fin de run (résumé +
|
||||
faits saillants ; LLM sans outils, repli déterministe hors-ligne)
|
||||
- [ ] **Injection dans `ContextBuilder` si le toggle est ON** ; OFF = contexte strict
|
||||
de la conversation courante
|
||||
- [ ] **Toggle « Mémoire »** dans le menu + : état visible, persisté par conversation,
|
||||
défaut `AGENT_MEMORY_DEFAULT`
|
||||
- [ ] **Tests** — injection ON / absence OFF / persistance / budget de tokens borné
|
||||
|
||||
### Phase 5 — v7.55.0 — Connecteurs : socle · effort L
|
||||
|
||||
- [ ] **Table `agent_connectors`** (`kind`, `name`, `config`, credentials chiffrés,
|
||||
`enabled`, `status`)
|
||||
- [ ] **`app/services/connectors/`** — interface commune `probe() / list_sources() / fetch()`
|
||||
+ 3 adapters **natifs déjà présents** : Gitea, GitHub, Web (`web_search` / `fetch_url`, v7.46)
|
||||
- [ ] **Menu « Connecteurs »** — « Parcourir les connecteurs » (catalogue + statut
|
||||
connecté/déconnecté) et « Ajouter un connecteur personnalisé » (URL + clé + type
|
||||
HTTP / MCP)
|
||||
- [ ] **Tools agent** — un tool par connecteur exposé au LLM via `tool_registry`
|
||||
- [ ] **Sécurité** — garde SSRF `_is_public_host` sur toute URL, credentials chiffrés,
|
||||
session requise, CSRF sur les écritures
|
||||
- [ ] **Tests** — CRUD, statut, vecteurs SSRF, schéma des tools
|
||||
|
||||
### Phase 6 — v7.56.0 — Connecteurs : Google + Microsoft 365 · effort L
|
||||
|
||||
- [ ] **OAuth2 PKCE Google** — Drive, Gmail, Calendar : connexion, refresh, déconnexion,
|
||||
lecture limitée aux sources choisies
|
||||
- [ ] **OAuth2 Microsoft (Graph)** — Outlook / OneDrive / SharePoint
|
||||
- [ ] **Écran connecteur** — état, scopes, dernière synchro, bouton déconnecter
|
||||
- [ ] **Tests** — callbacks, refresh, échec, **aucun appel réseau réel** (transport injecté)
|
||||
|
||||
### 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
|
||||
|
||||
### Phase 8 — v7.58.0 — Add plugins · effort M
|
||||
|
||||
- [ ] **Registre `plugins`** (`slug`, `name`, `description`, `enabled`) — état persisté
|
||||
- [ ] **Catalogue dans le menu +** — bascule on/off à effet **réel** : un plugin
|
||||
désactivé retire vraiment sa route/UI (au minimum 3 plugins câblés : web tools de
|
||||
l'agent, web clipper, automations)
|
||||
- [ ] **Tests** — plugin OFF = route refusée + UI absente (pas seulement un drapeau lu)
|
||||
|
||||
---
|
||||
|
||||
*Plan produit le 2026-10-06 à partir du code réel (aucune phase commencée) — à valider
|
||||
phase par phase avant « go ». Chaque phase se clôt par tests verts, bump de version,
|
||||
CHANGELOG et ROADMAP à jour.*
|
||||
|
||||
---
|
||||
|
||||
## 🔜 Prochaines versions
|
||||
|
||||
### v4.0.1 — Onboarding & Polish ✅ (2026-07-18)
|
||||
|
||||
Reference in New Issue
Block a user