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

3.7 KiB

#80 — Assistant IA — Rendu Markdown, liens de fichiers/paths & sessions

Statut : ✅ Livré (validé) Effort : 1-2 jours | Impact : 🟡 Références : Roadmap · BooksLM #76 · Outils IA #79 · Changelog

  • 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é

  • 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.
  • A2. Échappement HTML systématique avant génération de balises (anti-injection) ; seules les balises produites par le renderer sont injectées.
  • A3. Styles dédiés dans frontend/style.css (.bookslm-bubble.assistant ...).

B. Liens fichiers / chemins — ✅ livré

  • B1. Détection des mentions : code inline (`notes/a.md`), liens Markdown [libellé](chemin) et chemins nus dossier/fichier.ext.
  • B2. Classification file (extension connue) vs dir (le reste) via _classifyPath().
  • 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).
  • 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é

  • C1. Stockage bookslm-sessions-{mode}-{contexte} (localStorage) : liste de sessions {id, title, createdAt, updatedAt, messages}.
  • C2. Migration automatique de l'ancienne clé mono-conversation bookslm-history-{mode}-{contexte}.
  • 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.
  • C4. Nouvelle conversation crée une session ; _saveHistory() met à jour la session courante (upsert) et son titre.

D. Tests & documentation — ✅ livré

  • 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.
  • D2. i18n FR/EN (bookslm.session_history, bookslm.session_delete, bookslm.history_empty, bookslm.untitled, bookslm.no_vault).
  • 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).