← Bibliothèque / Intelligence
Agent IA back office (copilote propositionnel)
L'assistant qui lit les vraies données du BO et PRÉPARE des gestes — mais n'écrit rien lui-même : tout passe par propositions validées par un humain nominatif.
Construit à partir de :
RDC backofficeStudio Bellezatourisme-backoffice
Dans le back office
TOUJOURS en haut à droite : bouton topbar → panneau colonne sœur redimensionnable (340–720 px persisté borné) ou plein écran (le voisin cède la place) ; safe-area clavier mobile ; lirePage typée sur les pages autorisées.
Pages & écrans
| Page / zone | Rôle |
|---|---|
panneau agent | Chat + pièces jointes images/texte ≤4×5 Mo, markdown rendu, liens profonds vers écrans, fil persisté localStorage |
/propositions (« À valider » E11) | Tout ce que l'agent/MCP a préparé attend ici ; application RPC transactionnelle select-for-update idempotente {deja} (2 clics ≠ 2 gestes) ; c'est le NOM de qui applique qui va au journal |
journal IA | Journal intégral y compris tentatives REFUSÉES (role, contenu, outil, arguments, mutation) |
Patterns UI/UX
- Cartes propositions libellées métier (créer rendez-vous, bloquer journée, ajouter fiche…)
- Réponses nommées françaises pas codes bruts
Composants clés
- lib/ia/{modele,outils,agent}.ts une boucle DEUX portes (panneau + MCP)
- AgentPanel/AgentDock
- gestes whitelistés ajouter_fiche_corpus|assigner_conversation|clore_conversation|basculer_assistance|creer_rdv|bloquer_journee
Intelligence artificielle
- Rôle IA
- N outils LECTURE (file, conversations, clients, dispo, catalogue, canaux, journal, équipe…) + UN SEUL outil écriture proposer_geste ; tenant JAMAIS argument (résolu serveur) ; sélecteur conservateur outilsPourQuestion() par regex.
- Modèles
- MODELE_PAR_DEFAULT centralisé 1 fichier (claude-sonnet-5 OpenRouter reasoning OFF ou Anthropic direct) — brouillons ET agent partagent forcément le même cerveau
- Garde-fous
- Double verrou indépendant avant qu'un octet parte : ① clé env ② ACCORD ÉCRIT client table autorisation_modele revérifié AVANT CHAQUE appel (rpc modele_autorise couple exact) · fail-closed : clé absente → DIT à l'écran pourquoi · max 4-6 tours, 1 mutation/message, mutations multiples = masse refuse TOUT + motif · LIMIT 40/ratisseau 200 flag tronqué · minimisation PII (références pas emails) · assertions ≠ contraintes DB dites explicitement · environnement preversion/prod checké URL test locale refusée en prod
Données
- proposations/propositions_agent (kind whitelisté, payload jsonb, waiting→applied)
- autorisation_modele (fournisseur, modèle, pièce, date, qui)
- agent_log
Invariants & pièges
- CRITIQUE : Une clé d'API n'est PAS l'accord écrit du Client (gate Codex)
- grant select manquant sur la table propositions = une proposition invisible EST inexistante
- auth.uid() NULL sous role anon : lectures passent écritures échouent en silence — tester les deux sens
- % dans ilike échappé sinon recherche « tous »