Cache : la ligne MCP du préambule ne manque plus au premier tour après un démarrage

Le préambule système était bâti (InjectSkills → baseSystemPrompt) AVANT que
runChat n'appelle EnabledTools, donc avant que mcpTools n'ouvre les connexions.
mcpPromptLine lisait le pool encore vide : le premier tour après un démarrage
partait sans la ligne MCP, le second avec — tout le prompt à recalculer pour
une ligne. Elle comptait en plus les outils masqués par l'utilisateur, et
s'affichait pour le planner, qui ne reçoit aucun outil MCP.

- prepareTurn calcule les outils UNE fois par tour, puis le préambule à partir
  d'eux ; runChatTools les reprend tels quels (pas de second passage par
  mcpEnsureAll, qui retentait deux fois un serveur en panne).
- mcpPromptLine se déduit de cette tranche : seuls les outils réellement
  envoyés sont comptés, et rien n'est annoncé sans outil MCP.
- trackerList départage les égalités d'horodatage par nom puis slug : la liste
  part dans le contexte, un ordre tiré au sort changeait le prompt.
- Le commentaire de tasks_run.go ne prétend plus que le préfixe d'une tâche
  égale celui du chat (dossier de travail et taskCaps diffèrent).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5.5 committed 2026-10-04 01:31:00 +02:00
1 parent 9263df404d
commit 7dd319a058
12 files changed
+202 -34

No files matched your search

+7 -4
View File
@@ -26,7 +26,10 @@ const (
// ("Wait, let me check… Wait, I'll just run it…") and commits to an action.
// The per-tool "Outil disponible" sections live in machine/skills prompts so
// they only appear when the matching feature is on.
func baseSystemPrompt(caps Caps) string {
//
// tools = les outils annoncés sur ce même tour (EnabledTools) : ce qui en est
// dit ici (la ligne MCP) en est déduit, jamais relu ailleurs.
func baseSystemPrompt(caps Caps, tools []Tool) string {
hasMem := caps.Mem != MemOff
// No tool access at all → no agentic preamble. A plain chat model told to
// "call tools immediately" hallucinates textual tool calls (e.g.
@@ -119,10 +122,10 @@ func baseSystemPrompt(caps Caps) string {
if caps.Agent && caps.ComputerUse {
b.WriteString(cuPromptLine())
}
// Ligne MCP tirée des outils de CE tour (voir mcpPromptLine) : un rôle sans
// outil MCP n'en reçoit pas, et le premier tour après un démarrage l'a déjà.
if caps.Agent {
if line := mcpPromptLine(); line != "" {
b.WriteString(line)
}
b.WriteString(mcpPromptLine(tools))
}
b.WriteString("\nDate: " + time.Now().Format("2006-01-02"))
return b.String()