{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/opt\/scripts\/pipeline\/generate.py",
"offset": 140,
"limit": 80
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/opt\/scripts\/pipeline\/generate.py",
"content": " return result\n\n\ndef build_generation_prompt(briefing, context, profile, contract, structure=None):\n \"\"\"Build the content generation prompt.\"\"\"\n\n # Format context\n context_text = \"\"\n for i, ctx in enumerate(context, 1):\n context_text += f\"\\n[Quelle {i}: {ctx['source']}]\\n{ctx['content']}\\n\"\n\n # Build rich profile instructions\n profile_text = \"\"\n if profile:\n config = profile.get(\"config\", {})\n autorenprofil = config.get(\"autorenprofil\", config) # Support both structures\n\n # Extract voice\/stimme\n stimme = autorenprofil.get(\"stimme\", {})\n stimme_text = \"\"\n if stimme:\n stimme_text = f\"\"\"\n### Stimme\/Tonalität:\n- Ton: {stimme.get('ton', 'neutral')}\n- Perspektive: {stimme.get('perspektive', 'neutral')}\n- Komplexität: {stimme.get('komplexitaet', 'mittel')}\n- Autorität: {stimme.get('autoritaet', 'Experte')}\"\"\"\n\n # Extract style\/stil\n stil = autorenprofil.get(\"stil\", {})\n stil_text = \"\"\n if stil:\n fachsprache_beispiele = stil.get(\"fachsprache_beispiele\", [])\n fachsprache_str = \", \".join(fachsprache_beispiele[:5]) if fachsprache_beispiele else \"\"\n stil_text = f\"\"\"\n### Stil:\n- Fachsprache: {'Ja' if stil.get('fachsprache', False) else 'Nein'}\n- Fachbegriffe: {fachsprache_str}\n- Satzlänge: {stil.get('satzlaenge', 'mittel')}\n- Absatzstruktur: {stil.get('absatzstruktur', 'klar gegliedert')}\"\"\"\n\n # Extract language patterns\/sprachliche_muster\n muster = autorenprofil.get(\"sprachliche_muster\", {})\n muster_text = \"\"\n if muster:\n phrasen = muster.get(\"phrasen\", [])\n phrasen_str = \", \".join([f'\"{p}\"' for p in phrasen[:4]]) if phrasen else \"\"\n uebergaenge = muster.get(\"uebergaenge\", [])\n uebergaenge_str = \", \".join([f'\"{u}\"' for u in uebergaenge[:3]]) if uebergaenge else \"\"\n muster_text = f\"\"\"\n### Sprachliche Muster:\n- Typische Phrasen: {phrasen_str}\n- Übergangsformulierungen: {uebergaenge_str}\"\"\"\n\n # Extract taboos\/tabus\n tabus = autorenprofil.get(\"tabus\", [])\n tabus_text = \"\"\n if tabus:\n tabus_str = \", \".join(tabus[:5])\n tabus_text = f\"\"\"\n### Zu vermeiden (Tabus):\n{tabus_str}\"\"\"\n\n # Extract core messages\/kernbotschaften\n kernbotschaften = autorenprofil.get(\"kernbotschaften\", [])\n kern_text = \"\"\n if kernbotschaften:\n kern_str = \"\\n\".join([f\"- {k}\" for k in kernbotschaften[:4]])\n kern_text = f\"\"\"\n### Kernbotschaften (implizit vermitteln):\n{kern_str}\"\"\"\n\n # Combine all profile sections\n profile_text = f\"\"\"\n## Autorenprofil: {profile.get(\"name\", \"Standard\")}\n{stimme_text}\n{stil_text}\n{muster_text}\n{tabus_text}\n{kern_text}",
"numLines": 80,
"startLine": 140,
"totalLines": 760
}
}
}