Skip to content

csagent-gitready

Choose a tag to compare

@artydev artydev released this 23 Oct 17:20
· 4 commits to main since this release

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é

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

  1. Rien à faire : les outils s'ajoutent d'eux-mêmes. read_file sans paramètre se comporte comme avant.
  2. Trois outils git demandent confirmation : git_pull, git_push et git_checkout (sauf avec --yes). git_add et git_fetch n'en demandent pas.
  3. 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.
  4. 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) et end_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_checkout pouvait effacer un travail en cours. Le nom de la « branche » notes.md est accepté par le contrôle, et git checkout notes.md restaure 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 donne invalid reference et rien n'est touché.
  • git_add laissait passer une option cachée. spec ne devait pas commencer par -, mais a.txt --dry-run passait ce contrôle et était lu par git comme une option. La commande est maintenant git add -- <spec> : tout ce qui suit est un chemin.

Limites

  • git_push pousse la branche courante vers sa branche suivie ; sans branche suivie, git refuse et le message l'explique. Aucun moyen de forcer.
  • git_checkout ne crée pas de branche (-b) et ne restaure pas de fichier : c'est volontaire.
  • Les paramètres start_line et end_line doivent être des entiers ; une valeur textuelle donne une erreur.
  • Le client Python n'est pas empaqueté (pas de pip install) : on ajoute son dossier au sys.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).