mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-13 10:17:58 +02:00
Nouvel outil write : créer ou réécrire un fichier passe par le disque, plus par le shell. Sous Windows le shell est cmd.exe et son quoting cassait tout script contenant des guillemets imbriqués (echo, python -c, base64) ; l'IA bouclait sans jamais y arriver. Signalé par Arnaud Hocquelet. L'outil bash annonce désormais le vrai shell de la plateforme (cmd.exe sous Windows) au lieu de dire bash partout, pour que le modèle arrête de générer la syntaxe d'un autre shell. Interface : le contenu d'une écriture se remplit ligne à ligne en direct dans la bulle (diffusé à la ligne et pas au token, pour ne pas saturer le rendu mobile), et les compteurs +N -N passent sur l'étiquette pour rester visibles une fois la bulle repliée.
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package jean
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// Le contenu doit arriver sur le disque à l'octet près : c'est tout l'intérêt de
|
|
// l'outil write (les guillemets imbriqués d'un script Python ne survivaient pas
|
|
// au passage par le shell).
|
|
func TestFileWriteVerbatim(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "sub", "kpi.py")
|
|
content := "import sqlite3\nq = \"SELECT * FROM t WHERE n = 'a'\"\nprint(q)\n"
|
|
|
|
res := fileWrite(path, content)
|
|
if !strings.HasPrefix(res, "[ok]") {
|
|
t.Fatalf("write a échoué: %s", res)
|
|
}
|
|
got, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatalf("relecture: %v", err)
|
|
}
|
|
if string(got) != content {
|
|
t.Fatalf("contenu altéré:\n%q\nattendu:\n%q", got, content)
|
|
}
|
|
}
|
|
|
|
func TestFileWriteOverwrites(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "a.txt")
|
|
if res := fileWrite(path, "ancien"); !strings.HasPrefix(res, "[ok]") {
|
|
t.Fatalf("premier write: %s", res)
|
|
}
|
|
res := fileWrite(path, "nouveau")
|
|
if !strings.Contains(res, "réécrit") {
|
|
t.Fatalf("attendu « réécrit », obtenu: %s", res)
|
|
}
|
|
got, _ := os.ReadFile(path)
|
|
if string(got) != "nouveau" {
|
|
t.Fatalf("contenu = %q", got)
|
|
}
|
|
}
|
|
|
|
func TestFileWriteRejectsEmptyPath(t *testing.T) {
|
|
if res := fileWrite(" ", "x"); !strings.HasPrefix(res, "[erreur]") {
|
|
t.Fatalf("attendu une erreur, obtenu: %s", res)
|
|
}
|
|
}
|