From c4c4cc6575d6e7ef4fb61d50a770e19b714a7932 Mon Sep 17 00:00:00 2001 From: louispaulb Date: Sun, 19 Jul 2026 20:30:48 -0400 Subject: [PATCH] =?UTF-8?q?feat(ops):=20=C2=AB=20Allouer=20un=20technicien?= =?UTF-8?q?=20=C2=BB=20=3D=20chat=20IA=20(Gemini)=20avec=20typeahead=20cli?= =?UTF-8?q?ent/adresse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit L'action ouvrait déjà le copilote Gemini (staff-agent) mais sans autocomplétion → il fallait taper le client exactement. Ajout d'un typeahead d'ENTITÉ dans le chat (OrchestratorDialog, prop entity-search) : on tape → suggestions live (nom · adresse · téléphone · courriel via /collab/customer-search) → le choix INJECTE l'entité RÉSOLUE « client () » dans la demande, que Gemini extrait pour agir (proposer_rdv_client / assign_tech). Activé sur le copilote STAFF (MainLayout entity-search) ; graine « Allouer un technicien : » (MonAujourdhui). Séparateur propre après « : ». Vérifié en dev : « tremblay » → 8 suggestions → choix → prompt « Allouer un technicien : client C-SYLVT… (Tremblay…) » ; endpoint /collab/customer-search OK (12 matches) ; 0 erreur console. Build OK, leak-clean, déployé. Co-Authored-By: Claude Fable 5 --- .../src/components/shared/MonAujourdhui.vue | 2 +- .../components/shared/OrchestratorDialog.vue | 44 +++++++++++++++++++ apps/ops/src/layouts/MainLayout.vue | 2 +- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/apps/ops/src/components/shared/MonAujourdhui.vue b/apps/ops/src/components/shared/MonAujourdhui.vue index bf1b85a..f51e86b 100644 --- a/apps/ops/src/components/shared/MonAujourdhui.vue +++ b/apps/ops/src/components/shared/MonAujourdhui.vue @@ -100,7 +100,7 @@ onMounted(() => { load(); refreshTimer = setInterval(load, 60000); document.addE onUnmounted(() => { if (refreshTimer) clearInterval(refreshTimer); document.removeEventListener('visibilitychange', onVisible) }) const dash = (v) => (loading.value && v == null) ? '…' : (v == null ? '—' : v) -function allocate () { window.dispatchEvent(new CustomEvent('ops:assistant', { detail: { text: 'Allouer un technicien pour le client ' } })) } +function allocate () { window.dispatchEvent(new CustomEvent('ops:assistant', { detail: { text: 'Allouer un technicien : ' } })) }