fix(preparer): Logik invertiert - Default=Forward, [QUESTION]=Stopp
Kernproblem: Claude vergisst [FORWARD]-Tag → Preparer leitet nie weiter. Lösung - Logik umgedreht: - Jede Antwort wird automatisch an Session-Agent weitergeleitet (Default) - Nur bei explizitem [QUESTION]-Tag wird gestoppt (Rückfrage an User) - [FORWARD] wird weiterhin erkannt und entfernt, ist aber optional Weitere Fixes: - Preparer bekommt eigene History mit includeTag='preparer', damit er den Kontext seiner vorherigen Rückfragen sieht - Session-Agent bekommt saubere History ohne Sub-Agent-Messages (nach Preparer-Phase frisch aus DB geladen) - [QUESTION] wird im Frontend-Markdown ausgeblendet
This commit is contained in:
1 parent
43d3e9dc26
commit
14e721f95b
4 files changed
+65
-65
No files matched your search
@@ -128,9 +128,6 @@ public static class ChatEndpoint
|
||||
}, attachmentRecords);
|
||||
}
|
||||
|
||||
// History komplett aus DB aufbauen (inkl. gerade gespeicherter Message/tool_result)
|
||||
var messages = await chatService.BuildHistoryFromDb(sessionId);
|
||||
|
||||
res.Headers["Content-Type"] = "text/event-stream";
|
||||
res.Headers["Cache-Control"] = "no-cache";
|
||||
res.Headers["Connection"] = "keep-alive";
|
||||
@@ -138,8 +135,12 @@ public static class ChatEndpoint
|
||||
// ── Preparer-Agent Phase (vor dem Worker) ──
|
||||
if (ctx.Preparer != null && !isChoiceResponse)
|
||||
{
|
||||
// Preparer bekommt History MIT seinen eigenen vorherigen Messages (Tag "preparer"),
|
||||
// damit er den Kontext seiner Rückfragen kennt
|
||||
var preparerHistory = await chatService.BuildHistoryFromDb(sessionId, includeTag: "preparer");
|
||||
|
||||
var preparerResult = await anthropic.RunPreparer(
|
||||
res, ctx.Preparer, messages, ctx.ChainId, ctx.Workspace, sessionId, cancellationToken);
|
||||
res, ctx.Preparer, preparerHistory, ctx.ChainId, ctx.Workspace, sessionId, cancellationToken);
|
||||
|
||||
if (!preparerResult.ShouldForward)
|
||||
{
|
||||
@@ -154,20 +155,9 @@ public static class ChatEndpoint
|
||||
return;
|
||||
}
|
||||
|
||||
// Preparer ist zufrieden → aufbereiteten Prompt als zusätzlichen Kontext an die History anhängen
|
||||
// Preparer ist zufrieden → aufbereiteten Prompt in DB speichern
|
||||
if (!string.IsNullOrWhiteSpace(preparerResult.ForwardedPrompt))
|
||||
{
|
||||
// Den aufbereiteten Prompt als System-Context-Message einfügen
|
||||
messages.Add(new Dictionary<string, object>
|
||||
{
|
||||
["role"] = "user",
|
||||
["content"] = new List<object>
|
||||
{
|
||||
new { type = "text", text = $"[Vorbereitet von {ctx.Preparer.Agent?.Name ?? "Vorbereiter-Agent"}]:\n{preparerResult.ForwardedPrompt}" }
|
||||
}
|
||||
});
|
||||
|
||||
// Auch in DB speichern
|
||||
await db.SaveMessage(new MessageRecord
|
||||
{
|
||||
ChainId = ctx.ChainId,
|
||||
@@ -179,6 +169,9 @@ public static class ChatEndpoint
|
||||
}
|
||||
}
|
||||
|
||||
// History für den Session-Agent: OHNE Sub-Agent-Messages (saubere History)
|
||||
var messages = await chatService.BuildHistoryFromDb(sessionId);
|
||||
|
||||
// Bei Choice-Response: toolChoice auf "auto" setzen, damit Claude frei antworten kann
|
||||
var effectiveToolChoice = isChoiceResponse ? "auto" : ctx.ToolChoice;
|
||||
|
||||
|
||||
Reference in new issue
Block a user