Skip to content

csagent-orchestrator

Choose a tag to compare

@artydev artydev released this 07 Oct 12:32
· 92 commits to main since this release

CsAgent v0.7.0 — Notes de version

Version précédente publiée : csagent-v0.6.0 (6 octobre 2026) Cette version : 2 commits, le 7 octobre 2026. ⚠️ Program.Version vaut encore 0.6.0 : pense à le passer à 0.7.0 (ainsi que la version affichée dans Presentation/Web/assets/index.html) avant de publier.

En bref

  • Mode API headless (--api) : serveur SSE sans interface web, pensé pour être piloté par un orchestrateur d'agents.
  • Mode sans confirmation (--yes) : tous les outils sont approuvés automatiquement, dans tous les modes.
  • Accès réseau protégé : --host pour choisir l'adresse d'écoute, --api-key pour exiger une clé. Une adresse non locale sans clé est refusée au démarrage.
  • 11 nouveaux tests (65 au total).

✨ Nouveautés

Mode API headless — --api

Démarre le même serveur SSE que l'interface web, sans interface : pas de HTML/JS/CSS, pas d'ouverture du navigateur, pas d'accès au presse-papiers (une image copiée ne peut donc jamais être jointe par erreur à une requête). Le mode --api prend le pas sur --ui et --leanui.

# Local, sans confirmation
csagent --api --yes

Accessible depuis d'autres machines : une clé d'API est obligatoire

csagent --api --yes --host 0.0.0.0 --port 8080 --api-key s3cret

Au démarrage, le serveur affiche l'adresse, les endpoints, l'état de l'authentification et de l'auto-approbation, et avertit si ALBERT_API_KEY n'est pas définie.

Endpoint Description
GET /api/chat?prompt=…[&task=slug] Exécute un prompt ; la réponse est un flux Server-Sent Events
POST /api/chat Idem, en multipart/form-data (prompt, task et image optionnels)
POST /api/confirm Corps true ou false : répond à un événement confirm en attente (inutile avec --yes)
  • La clé se présente par Authorization: Bearer <clé> ou X-API-Key: <clé> ; sinon, la réponse est 401. La comparaison se fait en temps constant.
  • Garde-fou au démarrage : une adresse non locale (0.0.0.0, 192.168.x.x, un nom d'hôte…) sans clé est refusée (code de sortie 2, message explicite), car l'agent peut exécuter des commandes et écrire des fichiers. Sont considérées locales : localhost, 127.x.x.x, ::1.
  • Le serveur parle en HTTP simple : s'il est exposé hors de la machine, place-le derrière un proxy TLS.

🔧 Modifications

  • ApiEndpoints.MapEndpoints accepte un paramètre confirm (défaut true, donc sans changement pour les appelants existants) transmis à l'agent.
  • --help documente les nouvelles options (--api, --yes, --host, --api-key, CSAGENT_API_KEY).
  • --host et --api-key ne sont plus pris pour le fichier mémoire positionnel.
  • Le README gagne une section « Headless API Mode » (endpoints, événements, authentification, limites), le tableau des arguments et les exemples sont complétés, et la section Tests est corrigée : elle indique maintenant l'usage de MSTest et l'Explorateur de tests de Visual Studio.

⚠️ Limites connues

  • Une conversation par serveur. Toutes les requêtes partagent le même fichier mémoire (--mem) : envoie une requête à la fois, ou lance une instance par tâche avec son propre --mem et son propre --port.
  • L'événement done n'est pas toujours le dernier message (un warning sur le résumé de session peut suivre) : lis le flux jusqu'à la fermeture de la connexion.

⬆️ Mise à jour depuis 0.6.0

  • Aucune action requise : sans nouvelle option, le comportement est identique à la 0.6.0.
  • Les orchestrateurs peuvent utiliser --api --yes ; sans --yes, l'agent attend POST /api/confirm à chaque outil destructif.
  • Publication : passe par CsAgent.csproj (dotnet publish CsAgent.csproj) et non par la solution, qui publierait aussi le projet de tests.

🧪 Vérification

  • 65 tests sur 65 réussis, dont 11 nouveaux : analyse des arguments, politique d'hôte et de clé, authentification (Bearer, X-API-Key, clé fausse, partielle ou absente), et boucle de l'agent (--yes ne pose aucune question, le refus bloque l'outil, le filtre shell reste actif).
  • Le serveur compilé a été lancé avec un faux LLM : --api --yes écrit le fichier sans confirmation ; sans --yes, l'écriture attend POST /api/confirm ; avec une clé, les requêtes sans clé ou avec une mauvaise clé reçoivent 401 ; --host 0.0.0.0 sans clé est refusé.