Repository navigation
csagent-gitready
CsAgent 0.9.14 — notes de version
La version 0.9.14, csagent-gitready, rassemble trois apports de Virgile Jarrige : la lecture d'un gros fichier par tranches, cinq nouveaux outils git, et un client Python pour piloter CsAgent depuis des scripts. Deux garde-fous ont été ajoutés aux outils git à la relecture. Elle fait suite à la 0.9.13.
- Résumé
- Notes de mise à jour
read_filepar tranches- Cinq outils git
- Client Python
- Corrections à la relecture
- Limites
- Tests
Résumé
| Domaine | Ce qui change |
|---|---|
read_file |
Deux paramètres facultatifs, start_line et end_line : on lit une fenêtre de lignes d'un fichier volumineux (2 000 lignes au plus par appel) |
| Git | Cinq outils : git_add, git_fetch, git_pull, git_push, git_checkout. 43 outils au total (38 avant) |
| Python | python/csagent_client.py, un client de l'API SSE en bibliothèque standard seule, avec son README et ses tests |
| Garde-fous | git_checkout ne prend plus un nom de fichier pour une branche ; git_add lit -- avant le nom |
| Tests | 310 tests C# (22 de plus), plus 12 tests Python |
Aucun argument ni variable d'environnement n'est ajouté.
Notes de mise à jour
- Rien à faire : les outils s'ajoutent d'eux-mêmes.
read_filesans paramètre se comporte comme avant. - Trois outils git demandent confirmation :
git_pull,git_pushetgit_checkout(sauf avec--yes).git_addetgit_fetchn'en demandent pas. - Les cinq outils sont dans le groupe
git: ils ne sont décrits au modèle que si la demande parle de git. La description des 43 outils pèse environ 28 000 caractères (20 000 avant), renvoyés à chaque étape avec--all-tools. - Le client Python se copie avec le dépôt : il n'y a rien à installer.
read_file par tranches
start_line(1 par défaut) etend_line(fin du fichier par défaut), en numéros de ligne à partir de 1, bornes comprises.- Le résultat commence par
Lines 10-40:pour dire ce qui est rendu. Le fichier est lu ligne à ligne : il n'est jamais chargé entier en mémoire. - Une fenêtre est limitée à 2 000 lignes ; au-delà, la fin est coupée avec une note.
- Sans ces paramètres, la limite de 512 Ko s'applique encore, et le message d'erreur propose maintenant de lire par fenêtres. Avec eux, un fichier de plus de 512 Ko se lit.
- Une plage inversée, ou un début après la fin du fichier, donne une erreur claire (avec le nombre de lignes).
Cinq outils git
| Outil | Ce qu'il fait | Confirmation |
|---|---|---|
git_add |
Indexe un fichier (spec), ou tout sans spec |
non |
git_fetch |
git fetch --prune : récupère sans toucher au dossier de travail |
non |
git_pull |
git pull --ff-only : refuse de fusionner un historique divergé |
oui |
git_push |
git push vers la branche suivie, jamais en force |
oui |
git_checkout |
Change de branche, ou de commit par son SHA | oui |
Tous refusent un chemin hors du dossier de travail.
Client Python
python/csagent_client.py pilote un serveur csagent --api (ou la Web UI, qui parle le même protocole). Bibliothèque standard uniquement (http.client, json, urllib). Il lit le flux SSE événement par événement, répond aux confirmations et rend la réponse finale. Le mode d'emploi est dans python/README.md. C'est l'élément « Scripts Python » de la liste des fonctionnalités à venir, qui disparaît du README.
Corrections à la relecture
Deux défauts ont été trouvés en relisant les outils git, et corrigés avec un test chacun :
git_checkoutpouvait effacer un travail en cours. Le nom de la « branche »notes.mdest accepté par le contrôle, etgit checkout notes.mdrestaure le fichier depuis l'index : les modifications non enregistrées sont perdues sans message. La commande se termine maintenant par--, ce qui force git à lire le nom comme une branche ou un commit : un nom de fichier donneinvalid referenceet rien n'est touché.git_addlaissait passer une option cachée.specne devait pas commencer par-, maisa.txt --dry-runpassait ce contrôle et était lu par git comme une option. La commande est maintenantgit add -- <spec>: tout ce qui suit est un chemin.
Limites
git_pushpousse la branche courante vers sa branche suivie ; sans branche suivie, git refuse et le message l'explique. Aucun moyen de forcer.git_checkoutne crée pas de branche (-b) et ne restaure pas de fichier : c'est volontaire.- Les paramètres
start_lineetend_linedoivent être des entiers ; une valeur textuelle donne une erreur. - Le client Python n'est pas empaqueté (pas de
pip install) : on ajoute son dossier ausys.path.
Tests
310 tests C# (dotnet run --project Tests -c Release) et 12 tests Python (python python/test_csagent_client.py). Nouveaux : 10 pour read_file (ReadFilePaginationTests.cs), 12 pour les outils git (GitVerbTests.cs, dont les 2 des corrections ci-dessus).