Fix /api/agent-stream: use build_agent_prompt, accumulate response_text, call parse_agent_commands

This commit is contained in:
eric 2026-02-21 19:29:20 +00:00
parent c6ce8a873c
commit 46a77c7800

28
app.py
View file

@ -2495,22 +2495,11 @@ def agent_stream():
selected_agent = delegate_to_agent(prompt)
agent_info = AGENTS.get(selected_agent, {})
agent_name = agent_info.get('name', selected_agent)
system_prompt = get_agent_prompt(selected_agent)
kb_file = os.path.join(os.path.dirname(__file__), 'agents', 'orchestrator', 'knowledge', 'diversityball_knowledge.md')
kb_content = ""
if os.path.exists(kb_file):
with open(kb_file, 'r', encoding='utf-8') as f:
kb_content = f.read()
full_prompt = f"""## Wissensdatenbank (Diversity-Ball):
{kb_content}
## System-Prompt des Agenten ({agent_name}):
{system_prompt}
## Deine Aufgabe:
{prompt}"""
full_prompt = build_agent_prompt(selected_agent, prompt)
if not full_prompt:
yield f"data: {json.dumps({'type': 'error', 'message': f'Kein System-Prompt für Agent {selected_agent}'})}\n\n"
return
# Sofort Agent-Info senden
yield f"data: {json.dumps({'type': 'agent_selected', 'agent': agent_name, 'agent_key': selected_agent})}\n\n"
@ -2530,7 +2519,8 @@ def agent_stream():
cwd=work_dir # Agent arbeitet in seinem work-Verzeichnis
)
# Jede Zeile sofort aus opencode lesen und streamen
# Jede Zeile sofort aus opencode lesen, streamen und akkumulieren
response_text = ""
for line in proc.stdout:
line = line.strip()
if not line:
@ -2540,11 +2530,17 @@ def agent_stream():
if event_data.get('part', {}).get('type') == 'text':
text = event_data['part'].get('text', '')
if text:
response_text += text
yield f"data: {json.dumps({'type': 'response_chunk', 'text': text})}\n\n"
except Exception:
pass
proc.wait()
# XML-Kommandos aus der gesammelten Antwort ausführen
if response_text:
parse_agent_commands(selected_agent, response_text)
yield f"data: {json.dumps({'type': 'complete', 'message': '✓ Fertig'})}\n\n"
except Exception as e: