mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-12 01:37:06 +02:00
Repris de context/instructions.ts d'OpenFox. Un dépôt qui documente ses commandes de build et de test, ses conventions et ses pièges le fait dans AGENTS.md ou CLAUDE.md. Le modèle les redécouvrait à coups de read et de bash — quand il les redécouvrait. En mode Code, le premier de ces fichiers trouvé (dépôt cloné détecté, puis racine de la discussion) part avec le contexte du projet, tronqué à 4 000 caractères. Comme le reste du contexte projet, il est déplacé dans le premier message utilisateur : le préfixe système, et le cache de prompt, restent intacts. Les tours de correction et de relance du builder reçoivent désormais le même contexte projet que le tour de build : sans lui, le début du premier message utilisateur changeait et tout le prompt était recalculé. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
35 lines
1.2 KiB
Go
35 lines
1.2 KiB
Go
package loki
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// AGENTS.md du dépôt cloné part avec le contexte en mode Code, déplacé dans le
|
|
// premier message utilisateur (préfixe système intact).
|
|
func TestConsignesDuDepot(t *testing.T) {
|
|
withWorkspace(t)
|
|
if _, ok := codeInstructionsMessage(Caps{Code: true}); ok {
|
|
t.Fatal("consignes trouvées dans un dossier vide")
|
|
}
|
|
repo := filepath.Join(agentCwd(), "projet")
|
|
_ = os.MkdirAll(filepath.Join(repo, ".git"), 0o755)
|
|
if err := os.WriteFile(filepath.Join(repo, "AGENTS.md"), []byte("Build : make test\n"+strings.Repeat("x", 5000)), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, ok := codeInstructionsMessage(Caps{}); ok {
|
|
t.Fatal("consignes injectées hors mode Code")
|
|
}
|
|
m, ok := codeInstructionsMessage(Caps{Code: true})
|
|
s := msgText(m)
|
|
if !ok || !strings.Contains(s, "make test") || !strings.Contains(s, "projet/AGENTS.md") || !strings.Contains(s, "tronqué") {
|
|
t.Fatalf("message = %.200q", s)
|
|
}
|
|
out := normalizeSystemMessages([]Message{{Role: "system", Content: "base"}, m, {Role: "user", Content: "fais-le"}})
|
|
if msgText(out[0]) != "base" || !strings.Contains(msgText(out[1]), "make test") {
|
|
t.Fatalf("consignes restées dans le système : %+v", out)
|
|
}
|
|
}
|