Files
bruno ab7c227b97
CI / lint (push) Successful in 1m43s
CI / security (push) Successful in 1m8s
CI / test (push) Successful in 4m4s
CI / build (push) Successful in 2m10s
CI / e2e (push) Successful in 11m51s
feat: assistant IA - actions instantanées contextuelles, catalogue Toutes les actions & frontmatter complet #106
2026-09-19 11:07:50 -04:00

4.9 KiB

#106 — Assistant IA : actions instantanées contextuelles & catalogue de prompts

Statut : livré en 2.14.0 · Domaine : Assistant IA (frontend) · Fichiers : frontend/js/ai-quick-actions.js, frontend/js/bookslm.js, frontend/style.css, frontend/locales/{fr,en}.json, tests/frontend/ai-quick-actions.test.mjs

Problème

La zone d'accueil de l'assistant affichait 3 suggestions statiques par mode (résumé / thèmes / contradictions), sans lien avec ce que l'utilisateur regarde réellement (un fichier de code ? plusieurs documents ? une sélection dans l'éditeur ?), et sans point d'accès au reste des prompts utiles.

Solution

Catalogue (frontend/js/ai-quick-actions.js, module pur sans DOM)

25 actions en 6 catégories, chacune = {id, cat, icon (lucide), labelKey, promptKey, agent?} — libellés et prompts i18n FR/EN (clés qa.*) :

Catégorie Actions
📝 Synthèse & Analyse Résumer en 3 points clés · Frictions/contradictions · Vulgariser · FAQ
✅ Productivité & Structuration Checklist d'actions · Plan d'action · Mémo exécutif · Générer le frontmatter YAML · Mettre à jour le frontmatter · Liens/backlinks · Sections hiérarchiques
💻 Code & Scripts Expliquer · Bugs & failles · Docstrings/types · Tests unitaires
🔗 Cross-documents Comparer · Fusionner en note de synthèse · Chronologie
✍️ Édition & Reformulation Concis · Corriger le style · Reformuler · Traduire · Expliquer la sélection
❔ Assistant (général) Que sais-tu faire · Rechercher efficacement · Créer une note de réunion

Les deux actions frontmatter sont marquées agent: true : un clic bascule transparentement le panneau en mode agent (comme Deep Research) puis envoie le prompt — l'assistant lit le document, propose la mutation via l'outil edit_file/append_to_file, et la carte de confirmation (#79) applique le nouveau bloc en tête du fichier.

Le prompt « Générer le frontmatter YAML » demande le format complet du vault de Bruno (titre, auteur, creation_date/modification_date ISO-8601 avec fuseau, catégorie, tags en liste inline, aliases, status, publish, favoris, template, task, archive, draft, private, NomDeVoute, Description). « Mettre à jour le frontmatter » conserve les champs existants : actualise modification_date, recalcule titre/tags/aliases/catégorie/NomDeVoute/Description d'après le contenu, complète les champs manquants.

Sélection contextuelle (triage par défaut dans l'UI)

detectContext({mode, docCount, currentPath, hasSelection}) — précédence : sélection > code > multi-docs > doc unique > répertoire > général.

Contexte Boutons suggérés
1 doc texte Résumer 3 points · Checklist · Générer le frontmatter · Mettre à jour le frontmatter
2+ docs Fusionner · Comparer · Frictions/contradictions
Fichier de code (.py, .ts, .sh…) Expliquer · Bugs & failles · Tests unitaires
Sélection dans l'éditeur Concis · Corriger le style · Expliquer la sélection
Répertoire Résumer le répertoire · Thèmes · Checklist
Général Que sais-tu faire · Rechercher · Créer une note

Présentation (calquée sur le POC ai_assistant_quick_actions_poc.html)

  • Badge de contexte dans l'en-tête (« 1 doc ouvert », « Fichier de code », « Sélection active », « 3 docs ouverts »…).
  • Ligne « Actions suggérées » + bouton « Toutes les actions » ouvrant un tiroir bottom-sheet : recherche instantanée (insensible aux accents/casse via normalizeSearch) + catalogue groupé par catégorie, Échap/backdrop pour fermer.
  • Boutons icône + libellé + flèche au survol ; clic = envoi immédiat du prompt dans le composer (chemin _sendMessage() : skills, images et mode agent continuent de fonctionner).
  • La rangée se masque dès le premier message du fil (comportement historique) ; le rafraîchissement du contexte à la sélection éditeur est throttled 250 ms (selectionchange + mouseup/keyup, CodeMirror n'émettant pas selectionchange natif).
  • CSS 100 % variables de thème (--surface, --accent, --accent-bg…) → conforme aux 15 thèmes ; transitions désactivées en prefers-reduced-motion.

Tests

tests/frontend/ai-quick-actions.test.mjs (13 tests, câblé au job lint CI) : précédence des contextes, presets 3-4 actions résolvables, table de conception, agent-flag des actions frontmatter, complétude FR+EN de chaque clé catalogue/badge contre les vrais JSON de locales.

Vérification live (obsigate-test :2020, Playwright)

badge « 1 doc ouvert », 4 suggestions dont les 2 frontmatter, tiroir à 6 catégories / 25 actions, recherche « frontmatter » → 2 résultats, clic → aria-pressed=true sur le bouton agent + message envoyé avec le nouveau prompt + réponse de l'assistant.