# #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.