Files
ObsiGate/docs/features/ai-assistant-ux.md
T
bruno 3f7b7847a5
CI / lint (push) Successful in 1m0s
CI / security (push) Successful in 41s
CI / test (push) Successful in 1m21s
CI / build (push) Successful in 36s
CI / e2e (push) Successful in 10m41s
docs: cloturer #80 (assistant IA UX) - roadmap et fiche validees
2026-09-11 22:31:02 -04:00

56 lines
3.7 KiB
Markdown

# #80 — Assistant IA — Rendu Markdown, liens de fichiers/paths & sessions
> **Statut :** ✅ Livré (validé)
> **Effort :** 1-2 jours | **Impact :** 🟡
> **Références :** [Roadmap](../ROADMAP.md) · [BooksLM #76](./bookslm.md) · [Outils IA #79](./ai-tools-mcp.md) · [Changelog](../../CHANGELOG.md)
- **Description :** Trois améliorations d'expérience de l'assistant IA (`frontend/js/bookslm.js`) :
1. **Rendu Markdown** des réponses de l'assistant (titres, listes, tableaux, citations, blocs de
code, emphase) au lieu d'un rendu texte approximatif.
2. **Liens cliquables** : les noms de fichiers et chemins mentionnés par l'assistant deviennent
des liens — clic sur un **fichier** → ouverture dans le viewer ; clic sur un **répertoire** →
révélation et surlignage dans l'arborescence (outil `reveal_in_tree`).
3. **Gestion des sessions** : chaque contexte (répertoire / documents / général) conserve un
**historique de sessions** consultable, rechargeable et supprimable.
## A. Rendu Markdown — ✅ livré
- [x] **A1.** Renderer auto-contenu (aucune dépendance externe) : titres `#`→`######`, listes
ordonnées/non ordonnées (imbriquées), listes de tâches, tableaux, citations `>`, règles
horizontales, blocs de code clôturés avec langage, code inline, gras/italique/barré, liens.
- [x] **A2.** Échappement HTML systématique avant génération de balises (anti-injection) ;
seules les balises produites par le renderer sont injectées.
- [x] **A3.** Styles dédiés dans `frontend/style.css` (`.bookslm-bubble.assistant ...`).
## B. Liens fichiers / chemins — ✅ livré
- [x] **B1.** Détection des mentions : code inline (`` `notes/a.md` ``), liens Markdown
`[libellé](chemin)` et chemins nus `dossier/fichier.ext`.
- [x] **B2.** Classification `file` (extension connue) vs `dir` (le reste) via `_classifyPath()`.
- [x] **B3.** Clic fichier → `Viewer.openFile()` (événement `obsigate:open-file` également émis) puis
repositionnement de l'indicateur dans l'arborescence ; clic répertoire → `focusPathInSidebar()`
(`obsigate:reveal-in-tree`).
- [x] **B4.** Résolution du vault : vault du contexte, sinon premier document ouvert, sinon
`state.currentVault`. Lien externe `http(s)` conservé tel quel.
## C. Gestion des sessions — ✅ livré
- [x] **C1.** Stockage `bookslm-sessions-{mode}-{contexte}` (localStorage) : liste de sessions
`{id, title, createdAt, updatedAt, messages}`.
- [x] **C2.** Migration automatique de l'ancienne clé mono-conversation
`bookslm-history-{mode}-{contexte}`.
- [x] **C3.** Bouton « Historique » dans l'en-tête → menu listant les sessions (titre dérivé du
1er message utilisateur + date), sélection pour recharger, bouton de suppression.
- [x] **C4.** `Nouvelle conversation` crée une session ; `_saveHistory()` met à jour la session
courante (upsert) et son titre.
## D. Tests & documentation — ✅ livré
- [x] **D1.** `tests/frontend/ai.test.mjs` : rendu Markdown, échappement HTML, liens fichier/dossier,
clic sur lien, persistance/rechargement/suppression de session, menu d'historique, migration.
- [x] **D2.** i18n FR/EN (`bookslm.session_history`, `bookslm.session_delete`, `bookslm.history_empty`,
`bookslm.untitled`, `bookslm.no_vault`).
- [x] **D3.** CHANGELOG + Roadmap.
## E. Points d'attention
- Le renderer est volontairement **autonome** (pas de CDN) pour rester disponible hors-ligne et
compatible PWA. Il ne couvre pas les extensions Markdown d'Obsidian (wikilinks, callouts).
- Les liens de chemin utilisent `data-kind` pour distinguer fichier/répertoire ; le vault est
résolu au moment du clic (pas stocké dans le HTML).