feat(agent): add learn action flow and grounding guards

This commit is contained in:
Dom
2026-06-02 16:24:10 +02:00
parent 86b3c8f7e7
commit d38f0b0f2f
39 changed files with 5901 additions and 212 deletions

View File

@@ -82,6 +82,12 @@ ICONE_PAR_NIVEAU: dict[NiveauMessage, str] = {
NiveauMessage.BLOCAGE: "?",
}
# Les pauses supervisees peuvent contenir une raison precise, parfois longue
# (fenetre observee, fenetre attendue, action en cours). On garde l'information
# utile et on laisse les widgets UI gerer le wrap/scroll.
MAX_TARGET_DESCRIPTION_CHARS = 1024
MAX_GENERIC_TECHNICAL_MESSAGE_CHARS = 1024
@dataclass
class MessageUtilisateur:
@@ -147,9 +153,9 @@ def _nettoyer_description_cible(description: str) -> str:
desc = description.strip()
# Retirer les guillemets encapsulants
desc = desc.strip("'\"`")
# Limiter la longueur
if len(desc) > 80:
desc = desc[:77] + "..."
# Limiter la longueur sans perdre les details utiles a la supervision.
if len(desc) > MAX_TARGET_DESCRIPTION_CHARS:
desc = desc[: MAX_TARGET_DESCRIPTION_CHARS - 3] + "..."
return desc
@@ -566,8 +572,8 @@ def formatter_erreur_generique(
# Fallback : message technique tronqué
msg_tronque = message_technique.strip()
if len(msg_tronque) > 120:
msg_tronque = msg_tronque[:117] + "..."
if len(msg_tronque) > MAX_GENERIC_TECHNICAL_MESSAGE_CHARS:
msg_tronque = msg_tronque[: MAX_GENERIC_TECHNICAL_MESSAGE_CHARS - 3] + "..."
return MessageUtilisateur(
niveau=NiveauMessage.ATTENTION,