mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 23:18:13 +02:00
API interne d'un tour de discussion tenu par Rust
Ce qui décrit un tour reste au Go le temps d'être porté (lot 7) ; la façade le demande ici : - /turn/start : pièces jointes et vision (userMessageContent), capacités demandées et celles du tour (rôle du mode Code figé), nom du modèle, puce « mode Code » (une fois par discussion) ; - /turn/view : la tête de turnView sans PROJ_SNAPSHOT (prompt du preset, consignes du dépôt, contexte du projet), le préambule d'InjectSkills et les outils du tour, MCP compris ; 409 sous PROJ_SNAPSHOT ; - /turn/done : notification Web Push de fin de tour ; - /conv/active : la discussion active des outils suit la façade ; - /conv/dropped : fichiers, travaux, critères, mode et résultats d'outils d'une discussion supprimée. injectPrefix et codeHintDue sortent d'InjectSkills et de maybeCodeHint, sans changement de comportement. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
5 files changed
+334
-17
No files matched your search
+19
-13
@@ -263,6 +263,24 @@ func globalCaps() Caps {
|
||||
// skills directory (when skills are enabled). Merges with an existing system
|
||||
// message if present. tools = the tools sent on this same turn (see prepareTurn).
|
||||
func InjectSkills(msgs []Message, caps Caps, tools []Tool) []Message {
|
||||
prefix := injectPrefix(caps, tools)
|
||||
if prefix == "" {
|
||||
return msgs
|
||||
}
|
||||
// Un message PROJET en tête (pas de prompt de preset) ne doit pas absorber le
|
||||
// préambule : il perdrait son préfixe, et normalizeSystemMessages ne saurait
|
||||
// plus le sortir du bloc système commun (voir isProjectSystem).
|
||||
if len(msgs) > 0 && msgs[0].Role == "system" && !isProjectSystem(msgs[0]) {
|
||||
existing, _ := msgs[0].Content.(string)
|
||||
merged := append([]Message{{Role: "system", Content: prefix + "\n\n" + existing}}, msgs[1:]...)
|
||||
return merged
|
||||
}
|
||||
return append([]Message{{Role: "system", Content: prefix}}, msgs...)
|
||||
}
|
||||
|
||||
// injectPrefix : le texte qu'InjectSkills pose en tête — préambule d'agent
|
||||
// décidé, puis briefing machine ; "" s'il n'y a rien à dire.
|
||||
func injectPrefix(caps Caps, tools []Tool) string {
|
||||
var parts []string
|
||||
// Decisive-agent preamble (anti-loop) — only when the model actually has
|
||||
// tools, otherwise it nudges a plain chat model to "call tools" it doesn't
|
||||
@@ -273,19 +291,7 @@ func InjectSkills(msgs []Message, caps Caps, tools []Tool) []Message {
|
||||
if mp := machineSystemPrompt(caps); mp != "" {
|
||||
parts = append(parts, mp)
|
||||
}
|
||||
if len(parts) == 0 {
|
||||
return msgs
|
||||
}
|
||||
prefix := strings.Join(parts, "\n\n")
|
||||
// Un message PROJET en tête (pas de prompt de preset) ne doit pas absorber le
|
||||
// préambule : il perdrait son préfixe, et normalizeSystemMessages ne saurait
|
||||
// plus le sortir du bloc système commun (voir isProjectSystem).
|
||||
if len(msgs) > 0 && msgs[0].Role == "system" && !isProjectSystem(msgs[0]) {
|
||||
existing, _ := msgs[0].Content.(string)
|
||||
merged := append([]Message{{Role: "system", Content: prefix + "\n\n" + existing}}, msgs[1:]...)
|
||||
return merged
|
||||
}
|
||||
return append([]Message{{Role: "system", Content: prefix}}, msgs...)
|
||||
return strings.Join(parts, "\n\n")
|
||||
}
|
||||
|
||||
// prepareTurn calcule UNE fois les outils du tour, puis le préambule à partir
|
||||
|
||||
Reference in new issue
Block a user