feat(ai): rendu Markdown, liens fichiers/paths et sessions (#80)
CI / lint (push) Successful in 57s
CI / security (push) Successful in 43s
CI / test (push) Successful in 1m14s
CI / build (push) Successful in 37s
CI / e2e (push) Successful in 10m36s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
CI / lint (push) Successful in 57s
CI / security (push) Successful in 43s
CI / test (push) Successful in 1m14s
CI / build (push) Successful in 37s
CI / e2e (push) Successful in 10m36s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s
Assistant IA (BooksLM) : - renderer Markdown complet (titres, listes, tableaux, citations, code) avec echappement HTML - mentions fichiers/paths cliquables : ouverture du fichier / revelation dans l'arborescence - gestion multi-sessions par contexte (historique, rechargement, suppression, migration) - i18n FR/EN, aide in-app, styles, tests frontend (24)
This commit is contained in:
+12
-1
@@ -54,6 +54,16 @@
|
||||
- [ ] **F.** Durcissement (rate limiting, redaction secrets, OpenAPI + guide MCP, E2E)
|
||||
- **Documentation :** [AI_ARCHITECTURE_GUIDE.md](./AI_ARCHITECTURE_GUIDE.md) (architecture, catalogue d'outils, sécurité, phases).
|
||||
|
||||
### 80. Assistant IA — Rendu Markdown, liens fichiers/paths & sessions
|
||||
|
||||
- **Effort :** 1-2 jours | **Impact :** 🟡
|
||||
- **Statut :** livré (en attente de vérification utilisateur). Détail complet : [features/ai-assistant-ux.md](./features/ai-assistant-ux.md)
|
||||
- **Description :** Réponses de l'assistant rendues en **Markdown formaté** (titres, listes, tableaux,
|
||||
citations, code) ; les **fichiers et chemins** mentionnés deviennent des liens cliquables (ouvrir
|
||||
le fichier / révéler le répertoire dans l'arborescence) ; **gestion des sessions** (historique
|
||||
consultable, rechargeable et supprimable par contexte).
|
||||
- **Reste à faire :** validation utilisateur.
|
||||
|
||||
---
|
||||
|
||||
## ⚪ Backlog — Priorité 3 (P3)
|
||||
@@ -162,6 +172,7 @@
|
||||
| 76 | BooksLM — Console AI contextuelle par répertoire | 2.2.0 | [features/bookslm.md](./features/bookslm.md) |
|
||||
| 78 | Éditeur Excalidraw | 2.2.0 | [features/excalidraw.md](./features/excalidraw.md) |
|
||||
| 77 | Application Desktop native — Tauri | 🔵 en cours | [features/desktop-tauri.md](./features/desktop-tauri.md) |
|
||||
| 80 | Assistant IA — Rendu Markdown, liens fichiers/paths & sessions | 🔵 en cours | [features/ai-assistant-ux.md](./features/ai-assistant-ux.md) |
|
||||
|
||||
---
|
||||
|
||||
@@ -171,7 +182,7 @@
|
||||
|---|---|---|
|
||||
| ✅ Complété | #1 → #59, #61, #63–68, #71, #72, #74–76, #78 | ~82 jours réalisés |
|
||||
| 🔵 P2 restant | #77 Desktop : signature code (optionnel), wizard 1er lancement (optionnel), 6 tests E2E **manuels** | ~1-2 jours |
|
||||
| ⚪ P3 restant | #62 Collaboration Yjs (5-7j) · #79 Assistant IA outils + MCP (10-15j, Phase 0 + G livrés) | ~15-22 jours |
|
||||
| ⚪ P3 restant | #62 Collaboration Yjs (5-7j) · #79 Assistant IA outils + MCP (10-15j, Phase 0 + G livrés) · #80 Assistant IA UX (livré, en attente vérif) | ~15-22 jours |
|
||||
| ⚪ P4 restant | #69 Mobile éditeur (2-3j) · #70 Sémantique (4-5j) · #73 Sync (6-8j) | 11-16 jours |
|
||||
| **Total restant** | **6 items + finitions** | **~27-39 jours** |
|
||||
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
# #80 — Assistant IA — Rendu Markdown, liens de fichiers/paths & sessions
|
||||
|
||||
> **Statut :** 🔵 Livré (en attente de vérification utilisateur)
|
||||
> **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).
|
||||
@@ -1,6 +1,6 @@
|
||||
# #79 — Assistant IA — Outils (function calling) & serveur MCP
|
||||
|
||||
> **Statut :** 🔵 En cours — Phase 0 + B1/B2/B3/B7 + G livrés (2026-09-11)
|
||||
> **Statut :** 🔵 En cours — Phase 0 + B1/B2/B3/B6/B7 + G livrés (2026-09-11)
|
||||
> **Effort :** 10-15 jours | **Impact :** 🟡
|
||||
> **Références :** [Roadmap](../ROADMAP.md) · [Guide d'architecture IA](../AI_ARCHITECTURE_GUIDE.md)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
- [x] **B3.** Fallback : retry sans `tools` si le provider rejette les tools (400/404/422) → chat simple ; protocole texte `obsigate-action` conservé côté frontend
|
||||
- [ ] **B4.** SSE réellement streaming (corriger `bookslm_routes.py` — le message final reste envoyé en un seul événement)
|
||||
- [ ] **B5.** Confirmations UI : outils `read` auto, outils `write` via carte Apply (`bookslm.js:515`), aperçu diff pour `edit_file`
|
||||
- [ ] **B6.** Outils de navigation in-app : `open_file`, `reveal_in_tree` (événement `obsigate:open-file`)
|
||||
- [x] **B6.** Outils de navigation in-app : `open_file`, `reveal_in_tree` (événement `obsigate:open-file`) — livré via les liens cliquables de l'assistant (#80, [ai-assistant-ux.md](./ai-assistant-ux.md))
|
||||
- [x] **B7.** Tests : agent loop LLM mocké (`tests/test_agent_loop.py`), providers (`tests/test_ai_chat.py`), endpoint (`tests/test_bookslm.py`)
|
||||
|
||||
## C. Catalogue d'outils — lecture & recherche (1-2 jours)
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
> **Effort :** 5-6 jours (réalisé) | **Impact :** 🟡
|
||||
> **Références :** [Roadmap](../ROADMAP.md) · [Changelog — 2.2.0](../../CHANGELOG.md)
|
||||
|
||||
> **Extension (#80, 2026-09-11) :** rendu Markdown complet des réponses, liens cliquables
|
||||
> fichiers/chemins et gestion multi-sessions — voir [ai-assistant-ux.md](./ai-assistant-ux.md).
|
||||
>
|
||||
> **Extension (2026-09-11) :** l'assistant AI est désormais **multi-contexte** — Répertoire
|
||||
> (mode historique), Documents (documents ouverts, via le bouton flottant) et Général (aucun
|
||||
> document ouvert : aide sur l'app + création de fichiers/dossiers par cartes d'action). Header
|
||||
|
||||
Reference in New Issue
Block a user