feat: chat intégré par fichier — panneau latéral, historique, temps réel SSE #169
CI / lint (push) Successful in 2m46s
CI / security (push) Successful in 1m35s
CI / test (push) Successful in 4m28s
CI / build (push) Successful in 1m27s
CI / e2e (push) Successful in 17m11s

- Store backend `backend/file_chat.py` : messages JSON par (vault, path)
  sous `data/chats/` (nom hashé SHA-256 → traversal impossible), plafond
  500 messages, texte tronqué à 4000 caractères, écriture atomique.
- Routes `GET/POST /api/file/{vault}/chat` : auth + accès vault +
  `resolve_safe_path`, schémas Pydantic (`response_model`), broadcast SSE
  `chat_message` sur le transport existant (#62) — pas de second WebSocket.
- Panneau latéral `frontend/js/filechat.js` : bouton 💬 dans la toolbar
  fichier, historique chronologique, envoi optimiste + dédoublonnage par id,
  toast « Nouveau message » si le panneau est fermé/autre fichier.
- Relais SSE dans `sync.js` (import dynamique), CSS bloc #169 (plein écran
  ≤ 768 px, input 16 px anti-zoom), i18n FR/EN (10 clés `chat.*`).
- Tests : `tests/test_file_chat.py` (15) + `tests/frontend/filechat.test.mjs`
  (6, ajouté au pipeline CI), regex toolbar-order mise à jour.
- Docs : CHANGELOG [Unreleased], ROADMAP #169 → livré + index, fiche
  `docs/features/file-chat-169.md`, guide « Discuter d'un fichier ».
This commit is contained in:
2026-10-08 17:03:29 -04:00
parent 36b4962efb
commit c94f065f80
25 changed files with 955 additions and 37 deletions
+21 -1
View File
@@ -6,7 +6,7 @@ Format basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/),
et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
> **En cours de développement** : les changements à venir sont listés dans la section
> [Unreleased](#unreleased). La dernière version livrée est **2.56.0**.
> [Unreleased](#unreleased). La dernière version livrée est **2.57.0**.
---
@@ -14,6 +14,26 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
---
## [2.57.0] — 2026-10-08
### Ajouté
- **#169 - Chat intégré par fichier**
- Bouton **💬 Chat** dans la barre d'actions du document : ouvre un panneau
latéral avec l'historique de la discussion et la saisie d'un message.
- Persistance par fichier (`data/chats/`, plafond 500 messages, texte
tronqué à 4000 caractères) ; routes `GET/POST /api/file/{vault}/chat`
protégées (auth + accès vault + contrôle de traversal).
- Temps réel via le transport SSE existant (événement `chat_message`) :
le panneau ouvert s'incrémente en direct, **toast de notification**
« Nouveau message de … » si le panneau est fermé ou affiche un autre
fichier (pas de doublon côté émetteur).
- Mobile : panneau plein écran ; i18n FR/EN.
- Tests : pytest `test_file_chat.py` (15) + JSDOM `filechat.test.mjs` (6),
ajoutés au pipeline CI.
---
## [2.56.0] — 2026-10-08
### Ajouté