Repository navigation
csagent-orchestrator
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.Versionvaut encore0.6.0: pense à le passer à0.7.0(ainsi que la version affichée dansPresentation/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é :
--hostpour choisir l'adresse d'écoute,--api-keypour 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 --yesAccessible 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é>ouX-API-Key: <clé>; sinon, la réponse est401. 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.MapEndpointsaccepte un paramètreconfirm(défauttrue, donc sans changement pour les appelants existants) transmis à l'agent.--helpdocumente les nouvelles options (--api,--yes,--host,--api-key,CSAGENT_API_KEY).--hostet--api-keyne 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--memet son propre--port. - L'événement
donen'est pas toujours le dernier message (unwarningsur 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 attendPOST /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 (--yesne 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 attendPOST /api/confirm; avec une clé, les requêtes sans clé ou avec une mauvaise clé reçoivent401;--host 0.0.0.0sans clé est refusé.