90 lines
4.9 KiB
Markdown
90 lines
4.9 KiB
Markdown
# #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.
|