mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 15:08:16 +02:00
Diff : le compteur de lignes dit enfin la vérité
Repris d'AJEAN 0.16.0 (chat_diff.go et son test, repris tels quels : le fichier n'avait pas bougé chez nous depuis la 0.13.5). - Un fichier de 500 lignes écrit par l'agent affichait « +500 » pendant la frappe puis retombait à « +120 » : le diff envoyé à l'UI est plafonné à 120 lignes, et l'UI recomptait sur la version tronquée. lineDiff et addedDiff rendent désormais les VRAIS totaux, calculés avant la coupe, et ils voyagent dans le journal (added/removed) — donc survivent au refresh. Repli sur l'ancien décompte pour les conversations d'avant. - Une retouche d'une ligne dans un bloc de plus de 400 lignes s'affichait en remplacement complet (le LCS n'y était pas tenté). Les lignes communes en tête et en queue sont écartées d'abord : on voit le vrai changement, avec trois lignes de contexte, et il n'est plus repoussé hors de la fenêtre. - Un contenu terminé par un saut de ligne ne compte plus une ligne de trop, côté serveur comme dans la bulle en cours de frappe (bodyLineCount). Le vérificateur du mode Code (code_verify.go) journalise les mêmes champs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
20375d0e4c
commit
e12f07426f
7 files changed
+182
-33
No files matched your search
@@ -474,6 +474,9 @@ type ToolUsedEvent struct {
|
||||
// Diff : lignes ajoutées/retirées quand l'outil a MODIFIÉ quelque chose
|
||||
// (edit, mem_add, mem_edit). L'UI les affiche en vert (+) et rouge (-).
|
||||
Diff []DiffLine
|
||||
// Added / Removed : nombre RÉEL de lignes ajoutées / retirées. Diff est
|
||||
// tronqué pour l'affichage, on ne peut donc pas recompter à partir de lui.
|
||||
Added, Removed int
|
||||
// Image : chemin (relatif au dossier de travail) d'une image PRODUITE par
|
||||
// l'outil — aujourd'hui la capture de web_screenshot. L'UI l'affiche dans la
|
||||
// bulle de l'outil. Sans ça, la capture n'apparaissait QUE si le modèle
|
||||
@@ -1315,6 +1318,7 @@ func runChat(ctx context.Context, messages []Message, temperature float64, caps
|
||||
// diff : rempli par les outils d'écriture (edit / mémoire) pour que
|
||||
// l'UI montre les lignes ajoutées et retirées.
|
||||
var diff []DiffLine
|
||||
var diffAdd, diffDel int // vrais totaux (diff est tronqué pour l'UI)
|
||||
// visionImg : partie image_url rendue par see_image, réinjectée après
|
||||
// le résultat de l'outil (un message `tool` ne porte que du texte).
|
||||
var visionImg map[string]any
|
||||
@@ -1375,7 +1379,7 @@ func runChat(ctx context.Context, messages []Message, temperature float64, caps
|
||||
result = "[erreur] " + werr.Error()
|
||||
} else {
|
||||
result = fmt.Sprintf("[ok] page '%s' créée", label)
|
||||
diff = addedDiff(content)
|
||||
diff, diffAdd = addedDiff(content)
|
||||
}
|
||||
case "mem_edit":
|
||||
oldText, _ := args["old"].(string)
|
||||
@@ -1386,7 +1390,7 @@ func runChat(ctx context.Context, messages []Message, temperature float64, caps
|
||||
result = "[erreur] " + werr.Error()
|
||||
} else {
|
||||
result = fmt.Sprintf("[ok] page '%s' modifiée", label)
|
||||
diff = lineDiff(oldText, newText)
|
||||
diff, diffAdd, diffDel = lineDiff(oldText, newText)
|
||||
}
|
||||
case "write":
|
||||
content, _ := args["content"].(string)
|
||||
@@ -1399,7 +1403,7 @@ func runChat(ctx context.Context, messages []Message, temperature float64, caps
|
||||
} else {
|
||||
result = fileWrite(label, content)
|
||||
if !strings.HasPrefix(result, "[erreur]") {
|
||||
diff = addedDiff(content)
|
||||
diff, diffAdd = addedDiff(content)
|
||||
trackerNoteWrite(resolveAgentPath(label))
|
||||
result += lspDiagBlock(resolveAgentPath(label), caps)
|
||||
}
|
||||
@@ -1415,7 +1419,7 @@ func runChat(ctx context.Context, messages []Message, temperature float64, caps
|
||||
result = fileEdit(label, oldText, newText)
|
||||
// Diff seulement si l'édition a réussi (sinon le fichier n'a pas bougé).
|
||||
if !strings.HasPrefix(result, "[erreur]") {
|
||||
diff = lineDiff(oldText, newText)
|
||||
diff, diffAdd, diffDel = lineDiff(oldText, newText)
|
||||
trackerNoteWrite(resolveAgentPath(label))
|
||||
result += lspDiagBlock(resolveAgentPath(label), caps)
|
||||
}
|
||||
@@ -1520,7 +1524,7 @@ func runChat(ctx context.Context, messages []Message, temperature float64, caps
|
||||
if tc.Function.Name == "web_screenshot" {
|
||||
shot = capturedRelPath(result)
|
||||
}
|
||||
cb(StreamEvent{ToolUsed: fillToolResult(&ToolUsedEvent{Name: tc.Function.Name, Label: label, Done: true, Diff: diff, Image: shot}, result, tc.ID)})
|
||||
cb(StreamEvent{ToolUsed: fillToolResult(&ToolUsedEvent{Name: tc.Function.Name, Label: label, Done: true, Diff: diff, Added: diffAdd, Removed: diffDel, Image: shot}, result, tc.ID)})
|
||||
toolMsg := Message{Role: "tool", ToolCallID: tc.ID, Content: result}
|
||||
messages = append(messages, toolMsg)
|
||||
extra = append(extra, toolMsg)
|
||||
|
||||
Reference in new issue
Block a user