Skip to content

csagent-memorizer

Choose a tag to compare

@artydev artydev released this 06 Oct 20:22
· 95 commits to main since this release

CsAgent v0.6.0 — Notes de version

Version précédente publiée : csagent-v0.5.6 (14 septembre 2026) Cette version : 26 commits, du 14 septembre au 6 octobre 2026.

En bref

  • Mémoire hybride : l'agent retient désormais les erreurs rencontrées, les solutions qui ont fonctionné et les derniers échanges, et les réutilise.
  • Distillation de session : à la fin d'une tâche, un résumé (décisions, contraintes, travail restant, approches échouées) est enregistré et réinjecté lors des sessions suivantes.
  • Fiabilité : écritures de fichiers atomiques, fichiers corrompus mis en quarantaine, mode web protégé contre les accès concurrents.
  • Projet de tests : 54 tests automatisés, visibles dans l'Explorateur de tests de Visual Studio.
  • Mode web réparé, projet renommé en CsAgent, arborescence aplatie.

✨ Nouveautés

Mémoire hybride (3 couches)

Remplace la simple liste de messages par un gestionnaire à trois niveaux, géré par HybridMemoryManager.

Couche Rôle Fichier
Exacte Les 50 derniers événements d'outils, tels quels <mémoire>.exact.json
Sémantique Leçons apprises : erreurs, puis solutions <mémoire>.semantic.json
Résumé de session Notes distillées entre les sessions <mémoire>.semantic.json.summary.json

Détails de la couche sémantique :

  • Recherche par pertinence, avec mots-clés français et anglais.
  • Dédoublonnage : 20 erreurs identiques donnent une seule entrée, affichée (seen 20x). Les chiffres sont normalisés, donc « ligne 12 » et « ligne 40 » comptent comme la même erreur.
  • Plafond de 200 entrées.
  • Une solution n'est retenue que si le même outil réussit après une erreur, dans un délai de 5 étapes.
  • Le contenu des fichiers et les résultats d'outils ne sont jamais copiés dans la mémoire.
  • Un seul bloc [MEMORY] est injecté par requête, jamais cumulé.

Distillation de session (entre les sessions)

  • À la fin d'une exécution, un appel supplémentaire au LLM (limité à 60 s) condense la conversation en quatre listes : décisions, contraintes, travail en attente, approches échouées.
  • Le nouveau résumé est fusionné avec le précédent et enregistré.
  • Le résumé est réinjecté à chaque étape sous la forme [SESSION CONTEXT], présenté comme de l'information de fond, pas comme des instructions.
  • Les échecs ne bloquent jamais l'agent : le résumé précédent est conservé.
  • Pas de distillation si la conversation compte moins de 4 messages.
  • Notes nettoyées : une ligne, 240 caractères maximum, 12 par liste, marqueurs [MEMORY] / [SESSION CONTEXT] retirés.
  • Le résumé n'est plus enregistré dans le fichier de conversation.
  • Visible dans le TUI :
    • Session summary loaded: N note(s) … au démarrage ;
    • Session summary updated: N note(s) saved … à la fin.

Option --no-distill

Désactive l'appel LLM de fin de session. Les couches de mémoire restent sauvegardées, et un résumé existant est toujours lu et injecté, mais il n'est ni créé ni modifié. Disponible en TUI et en mode web.

CsAgent --no-distill

Projet de tests CsAgent.Tests

  • 54 tests couvrant les couches de mémoire, la recherche sémantique, la persistance, la concurrence, la distillation, --no-distill et des scénarios agent complets avec un faux serveur LLM.
  • Dans l'application, aucun paquet NuGet n'est ajouté ; le projet de tests utilise MSTest.
  • S'exécute dans l'Explorateur de tests de VS 2026, ou en console : dotnet run --project Tests -c Release (code de sortie 0 ou 1).
  • Le projet est ajouté à CsAgent.slnx.
  • Le faux serveur LLM utilise un TcpListener (pas de droits administrateur ni de réservation d'URL sous Windows).
  • Les tests reproduisent la contrainte NativeAOT : la sérialisation JSON par réflexion est désactivée.

Mémoire de propositions (PropMem) — amorce

Les classes PropositionStore, PropMemIngester et PropMemRetriever ont été ajoutées, avec les options de ligne de commande correspondantes. C'est le début d'une mémoire par propositions, encore en cours de développement.


🛡️ Fiabilité

  • Écritures atomiques (AtomicFile) : fichier temporaire unique puis remplacement. Un plantage en cours d'écriture ne laisse plus de fichier tronqué.
  • Fichiers corrompus : déplacés en <nom>.bad avec un message clair, et l'agent redémarre proprement avec une mémoire vide.
  • Mode web : verrous (lock) et lectures par instantané dans SemanticMemory, ExactMemory et le résumé. Des requêtes parallèles sur le même gestionnaire ne provoquent plus d'exceptions ni de fichiers invalides.
  • Le chargement d'une mémoire réinitialise le résumé précédent, donc aucun résumé d'une autre tâche ne fuit.

🔧 Modifications

  • Le projet est renommé CsAgentUI → CsAgent (CsAgent.csproj, CsAgent.slnx, espaces de noms).
  • Le dossier src/ disparaît : Core/, Services/, Shared/, Presentation/ sont à la racine.
  • Interface web : app.js est réécrit et réparé, et la définition de typage est mise à jour (typings/).
  • Système de compétences (skills) : INDEX.md, CSV, rapport Excel, relecture avant commit, veille technologique.
  • Option StripSymbols : plus de .pdb natif généré par NativeAOT.
  • Outil send_email marqué comme destructif ; ajustements des outils Excel.
  • Le README documente la mémoire hybride, la distillation, --no-distill, les tests et le dépannage.

📄 .gitignore

Ajout de agent_memory*.json, agent_memory*.json.* et *.bad : les fichiers de mémoire d'exécution ne sont plus versionnés.


⬆️ Mise à jour depuis 0.5.6

  • Aucune action requise : les anciens fichiers de mémoire sont lus normalement ; les nouveaux fichiers .exact.json, .semantic.json et .summary.json sont créés au premier lancement.
  • La distillation ajoute un appel LLM par session (coût supplémentaire) ; utilise --no-distill pour l'éviter.
  • Publication : passe par CsAgent.csproj (dotnet publish CsAgent.csproj) et non par la solution, qui publierait aussi le projet de tests.
  • Si tu avais des scripts qui pointent vers src\… ou CsAgentUI, mets les chemins à jour.

🧪 Vérification

54 tests sur 54 réussis (exécutions répétées, y compris sur une copie propre du dépôt).