Add proposer role prompt to panel members

Panel members run read-only (PlanMode / tool-less) but kept their normal
agent prompt, so they repeatedly attempted write/execute/git actions that
the read-only filter blocks — getting stuck in failing tool loops and
wasting tokens. Append an explicit proposer role clarification to each
member's system prompt so they go straight to analysis + text proposal
and leave the actual writing/committing to the synthesizer agent.

- ChatService: PanelMemberRolePrompt constant (read-only, propose-only)
- PrepareContext: append the role prompt to each panel member's SystemPrompt
- Covers all three provider paths (Anthropic direct, CLI/OpenAI via
  ExtractSystemPromptText)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
MelekiandClaude Opus 4.8 committed 2026-06-18 14:52:40 +02:00
1 parent b7ff928340
commit aa0b8ee493
1 file changed
+26 -1
+26 -1
View File
@@ -29,6 +29,24 @@ public class ChatService
private int MaxHistory => _settings.GetInt("MaxHistory", 220);
private int ReminderInterval => _settings.GetInt("ReminderInterval", 30);
// Rollen-Klarstellung für Panel-Member (Fusion/MoA). Member laufen READ-ONLY (PlanMode bzw.
// tool-los). Ohne diesen Hinweis behält jeder Member seinen normalen Agent-Prompt und versucht
// oft Schreib-/Execute-/git-Aktionen, die gefiltert werden → er "beißt sich fest" in wiederholten,
// fehlschlagenden Tool-Versuchen. Der Hinweis lenkt ihn auf reine Analyse/Vorschlag; das tatsächliche
// Umsetzen (Schreiben, Ausführen, Committen) übernimmt der Synthese-Agent (Session-Worker).
private const string PanelMemberRolePrompt = @"## KRITISCH: Deine Rolle als Panel-Agent (Proposer)
Du bist einer von mehreren KI-Agenten, die PARALLEL und UNABHÄNGIG dieselbe Anfrage beantworten. Aus euren Antworten synthetisiert anschließend ein separater Agent EINE Gesamtantwort für den User.
### Du arbeitest READ-ONLY
Dir stehen NUR lesende Tools zur Verfügung (Dateien lesen, suchen, auflisten). Schreibende oder ausführende Aktionen – Dateien anlegen/ändern/löschen, Shell-/Build-Befehle, git/commit, Deployment – sind für dich DEAKTIVIERT und werden blockiert. Versuche sie GAR NICHT ERST: Du kommst damit nicht weiter, verschwendest nur Zeit und blockierst dich selbst in fehlschlagenden Tool-Versuchen.
### Deine Aufgabe
Liefere deinen besten VORSCHLAG als Text-Antwort: Analyse, Lösung, konkrete Code-Vorschläge, Begründung. Nutze die lesenden Tools, um dich am echten Stand zu orientieren – aber führe nichts aus und ändere nichts. Beschreibe stattdessen klar, WAS zu tun ist. Das tatsächliche Umsetzen übernimmt der Synthese-Agent.
### Wichtig
Nur deine finale Text-Antwort wird weiterverwendet. Formuliere sie vollständig und eigenständig, sodass sie auch ohne deine Tool-Schritte verständlich ist. Antworte zügig und direkt – kein Schreib-/Commit-Versuch.";
public static string ResolveModelId(string model)
{
// OpenAI-kompatible Provider werden unverändert durchgereicht (Format: "provider:model")
@@ -155,7 +173,14 @@ public class ChatService
foreach (var pid in panelIds)
{
var pc = await BuildSubAgentContext(pid, sessionId, workspace, session, user);
if (pc != null) panelContexts.Add(pc);
if (pc != null)
{
// Proposer-Rolle klarstellen (read-only) → Member versuchen nicht mehr vergeblich
// zu schreiben/committen und "beißen sich fest". Gilt für alle Provider-Pfade
// (Anthropic nutzt SystemPrompt direkt, CLI/OpenAI via ExtractSystemPromptText).
pc.SystemPrompt.Add(new { type = "text", text = PanelMemberRolePrompt });
panelContexts.Add(pc);
}
}
}