#283

fix: sanitize Eino reduction paths on Windows

Openalexiss31wants to merge intofrom

Problème

Sur Windows, certains identifiants CallID Eino générés pour les tool calls contiennent le caractère | (par exemple call_...|fc_...). Le middleware de réduction réutilisait cet identifiant tel quel dans les chemins tmp/reduction/.../trunc et clear, ce qui provoquait une erreur NodeRunError fatale : The filename, directory name, or volume label syntax is incorrect.

Les événements « audit agent rejected » observés dans la conversation sont séparés : ils correspondent à un échec d’appel du LLM d’audit et restent des refus de sécurité souples, sans auto-approbation.

Correctif

  • Ajout de callbacks de chemin dédiés aux réductions Eino classique et agentique.
  • Sanitisation des segments avant écriture : caractères interdits Windows, caractères de contrôle, séquences de traversal et noms de périphériques DOS.
  • Application de la même protection aux fichiers de spill MCP/exec.
  • Tests de régression avec l’identifiant fautif exact, couvrant l’écriture via Eino et le backend local.

Vérification

  • Tests ciblés des packages internal/multiagent et internal/tooloutput passent avec CGO/SQLite.
  • go vet passe sur les packages modifiés.
  • Build complet du serveur avec CGO/SQLite réussi.
  • Binaire corrigé redémarré localement et endpoint HTTP répondant 200.

Périmètre

Cette PR ne contient que les 4 fichiers nécessaires : 2 fichiers de production et leurs 2 tests. Aucun refactor ni fichier généré.