{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": ".\/venv\/bin\/python << 'EOF'\nimport sys\nimport json\nsys.path.insert(0, '\/var\/www\/scripts\/pipeline')\nfrom config import get_db_password\nimport mysql.connector\n\nconn = mysql.connector.connect(host='localhost', database='ki_content', user='root', password=get_db_password())\ncursor = conn.cursor(dictionary=True)\n\nprint(\"=\" * 60)\nprint(\"BEKANNTE FORMATIERUNGSVERGEHEN\")\nprint(\"=\" * 60)\n\n# Collect all rules from all sources\nall_rules = {\n \"emojis\": [],\n \"markdown\": [],\n \"gedankenstriche\": [],\n \"hashtags\": [],\n \"ausrufezeichen\": [],\n \"listen_format\": [],\n \"sonstiges\": []\n}\n\n# From structures\ncursor.execute(\"SELECT id, name, content FROM content_config WHERE type = 'structure' AND status = 'active'\")\nfor s in cursor.fetchall():\n config = json.loads(s['content'])\n fmt = config.get('formatierung', {})\n verboten = config.get('verboten', [])\n \n if isinstance(fmt, dict):\n if fmt.get('emojis'):\n all_rules['emojis'].append(f\"Struktur {s['id']}: {fmt['emojis']}\")\n if fmt.get('fettschrift') or fmt.get('markdown'):\n all_rules['markdown'].append(f\"Struktur {s['id']}: fettschrift={fmt.get('fettschrift')}, markdown={fmt.get('markdown')}\")\n if fmt.get('hashtags'):\n all_rules['hashtags'].append(f\"Struktur {s['id']}: {fmt['hashtags']}\")\n if fmt.get('listen'):\n all_rules['listen_format'].append(f\"Struktur {s['id']}: {fmt['listen']}\")\n \n for v in verboten:\n if 'emoji' in v.lower():\n all_rules['emojis'].append(f\"Struktur {s['id']}: verboten: {v}\")\n elif 'markdown' in v.lower() or 'fett' in v.lower():\n all_rules['markdown'].append(f\"Struktur {s['id']}: verboten: {v}\")\n\n# From profiles\ncursor.execute(\"SELECT id, name, content FROM content_config WHERE type = 'author_profile' AND status = 'active'\")\nfor p in cursor.fetchall():\n config = json.loads(p['content'])\n grammatik = config.get('grammatik_und_satzbau', {})\n fmt = config.get('formatierung', {})\n \n if grammatik.get('gedankenstriche'):\n all_rules['gedankenstriche'].append(f\"Profil {p['id']} ({p['name']}): {grammatik['gedankenstriche']}\")\n \n if isinstance(fmt, dict):\n if fmt.get('emojis'):\n all_rules['emojis'].append(f\"Profil {p['id']}: {fmt['emojis']}\")\n if fmt.get('ausrufezeichen'):\n all_rules['ausrufezeichen'].append(f\"Profil {p['id']}: {fmt['ausrufezeichen']}\")\n\ncursor.close()\nconn.close()\n\nprint(\"\\n### 1. EMOJIS ###\")\nfor r in all_rules['emojis'][:5]:\n print(f\" - {r[:80]}\")\n\nprint(\"\\n### 2. MARKDOWN (Fettschrift, Kursiv, Header) ###\")\nfor r in all_rules['markdown'][:5]:\n print(f\" - {r[:80]}\")\n\nprint(\"\\n### 3. GEDANKENSTRICHE ###\")\nfor r in all_rules['gedankenstriche']:\n print(f\" - {r}\")\n\nprint(\"\\n### 4. HASHTAGS ###\")\nfor r in all_rules['hashtags'][:3]:\n print(f\" - {r[:80]}\")\n\nprint(\"\\n### 5. LISTEN-FORMAT ###\")\nfor r in all_rules['listen_format'][:3]:\n print(f\" - {r[:80]}\")\n\nprint(\"\\n### 6. AUSRUFEZEICHEN ###\")\nfor r in all_rules['ausrufezeichen'][:3]:\n print(f\" - {r[:80]}\")\nEOF\n",
"description": "Document all known formatting rules"
}
}
{
"tool_response": {
"stdout": "============================================================\nBEKANNTE FORMATIERUNGSVERGEHEN\n============================================================\n\n### 1. EMOJIS ###\n - Struktur 5: verboten: Aufzaehlungen mit Raketen-Emojis\n - Struktur 29: verboten - keine Emojis erlaubt\n - Struktur 29: verboten: Emojis\n - Profil 28: verboten - keine Emojis, auch nicht ▪️ für Listen. Stattdessen - verw\n\n### 2. MARKDOWN (Fettschrift, Kursiv, Header) ###\n - Struktur 29: fettschrift=verboten - keine **text** Formatierung, markdown=verbot\n - Struktur 29: verboten: Fettschrift\n - Struktur 29: verboten: Markdown\n\n### 3. GEDANKENSTRICHE ###\n - Profil 20 (Cary Blog Autorin): verboten\n - Profil 28 (Cary LinkedIn): verboten\n\n### 4. HASHTAGS ###\n - Struktur 29: keine\n\n### 5. LISTEN-FORMAT ###\n - Struktur 29: Aufzählungen mit - (Bindestrich), keine Emojis\n\n### 6. AUSRUFEZEICHEN ###\n - Profil 28: vermeiden, Punkt bevorzugen",
"stderr": "",
"interrupted": false,
"isImage": false
}
}