Files
Loki/internal/loki/code_instructions_test.go
MichaelandClaude Opus 5.5 d5632e3595 Mode Code : les consignes du dépôt (AGENTS.md, CLAUDE.md) font partie du contexte
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>
2026-10-02 23:36:51 +02:00

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)
}
}