{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_update",
"tool_input": {
"id": 84,
"content": "<![CDATA[<nav class=\"breadcrumb\">\n <a href=\"\/docs\">Dokumentation<\/a> » <a href=\"\/docs\/ki-system\">KI-System<\/a> » Content Config\n<\/nav>\n\n<h1>Content Config<\/h1>\n<p class=\"doc-meta\"><strong>Erstellt:<\/strong> 2025-12-21 | <strong>Aktualisiert:<\/strong> 2025-12-31<\/p>\n\n<p>Unified Configuration für Autorenprofile, Contracts, Strukturen und System-Konfigurationen im Content Studio.<\/p>\n\n<table>\n <tr><th>Datenbank<\/th><td>ki_content<\/td><\/tr>\n <tr><th>Tabelle<\/th><td>content_config<\/td><\/tr>\n <tr><th>Historie<\/th><td>content_config_history<\/td><\/tr>\n <tr><th>Repository<\/th><td>\/src\/Infrastructure\/Persistence\/ContentRepository.php<\/td><\/tr>\n<\/table>\n\n<h2>Konzept<\/h2>\n<p>Die Tabelle <code>content_config<\/code> vereinheitlicht verschiedene Konfigurationstypen:<\/p>\n\n<table>\n <tr><th>Type<\/th><th>Zweck<\/th><\/tr>\n <tr><td>author_profile<\/td><td>Schreibstil und Tonalität<\/td><\/tr>\n <tr><td>contract<\/td><td>Qualitätsanforderungen<\/td><\/tr>\n <tr><td>structure<\/td><td>Gliederungs-Templates<\/td><\/tr>\n <tr><td>organization<\/td><td>Organisations-\/Kundendaten<\/td><\/tr>\n <tr><td>rule<\/td><td>Einzelne Regeln für Contracts<\/td><\/tr>\n <tr><td>system_prompt<\/td><td>System-Prompts für LLM-Aufrufe<\/td><\/tr>\n <tr><td>critic<\/td><td>Kritiker-Konfigurationen für Content-Prüfung<\/td><\/tr>\n<\/table>\n\n<h2>Schema: content_config<\/h2>\n<table>\n <thead>\n <tr><th>Spalte<\/th><th>Typ<\/th><th>Default<\/th><th>Beschreibung<\/th><\/tr>\n <\/thead>\n <tbody>\n <tr><td>id<\/td><td>INT AUTO_INCREMENT<\/td><td>-<\/td><td>Primary Key<\/td><\/tr>\n <tr><td>type<\/td><td>ENUM<\/td><td>-<\/td><td>author_profile, structure, organization, contract, rule, system_prompt, critic<\/td><\/tr>\n <tr><td>name<\/td><td>VARCHAR(100)<\/td><td>-<\/td><td>Anzeigename<\/td><\/tr>\n <tr><td>slug<\/td><td>VARCHAR(100)<\/td><td>-<\/td><td>URL-freundlicher Identifier<\/td><\/tr>\n <tr><td>description<\/td><td>TEXT<\/td><td>NULL<\/td><td>Kurzbeschreibung<\/td><\/tr>\n <tr><td>content<\/td><td>LONGTEXT<\/td><td>-<\/td><td>JSON-Konfiguration<\/td><\/tr>\n <tr><td>version<\/td><td>VARCHAR(20)<\/td><td>'1.0'<\/td><td>Versionsnummer<\/td><\/tr>\n <tr><td>status<\/td><td>ENUM<\/td><td>'draft'<\/td><td>draft, active, deprecated<\/td><\/tr>\n <tr><td>parent_id<\/td><td>INT<\/td><td>NULL<\/td><td>FK für Vererbung<\/td><\/tr>\n <tr><td>prompt_id<\/td><td>INT<\/td><td>NULL<\/td><td>FK zu prompts-Tabelle<\/td><\/tr>\n <tr><td>sort_order<\/td><td>INT<\/td><td>0<\/td><td>Sortierung<\/td><\/tr>\n <tr><td>created_at<\/td><td>DATETIME<\/td><td>CURRENT_TIMESTAMP<\/td><td>Erstellungszeitpunkt<\/td><\/tr>\n <tr><td>updated_at<\/td><td>DATETIME<\/td><td>CURRENT_TIMESTAMP<\/td><td>Letzte Änderung<\/td><\/tr>\n <\/tbody>\n<\/table>\n\n<h2>Config-Typen<\/h2>\n\n<h3>author_profile<\/h3>\n<p>Definiert Schreibstil und Tonalität für Content-Generierung:<\/p>\n<pre><code>{\n \"tone\": \"didaktisch\",\n \"style\": \"erklärend\",\n \"vocabulary\": \"fachlich\",\n \"target_audience\": \"Coaches und Berater\",\n \"examples\": true\n}<\/code><\/pre>\n\n<h3>contract<\/h3>\n<p>Qualitätsanforderungen und Regeln:<\/p>\n<pre><code>{\n \"min_words\": 500,\n \"max_words\": 2000,\n \"required_sections\": [\"Einleitung\", \"Hauptteil\", \"Fazit\"],\n \"forbidden_phrases\": [\"offensichtlich\", \"natürlich\"],\n \"citation_style\": \"Harvard\"\n}<\/code><\/pre>\n\n<h3>structure<\/h3>\n<p>Gliederungs-Templates:<\/p>\n<pre><code>{\n \"format\": \"blog_article\",\n \"sections\": [\n {\"name\": \"hook\", \"required\": true},\n {\"name\": \"problem\", \"required\": true},\n {\"name\": \"solution\", \"required\": true},\n {\"name\": \"cta\", \"required\": false}\n ]\n}<\/code><\/pre>\n\n<h3>organization<\/h3>\n<p>Organisations- und Kundendaten für personalisierte Inhalte:<\/p>\n<pre><code>{\n \"name\": \"Campus am See\",\n \"domain\": \"Systemische Beratung\",\n \"tone_preferences\": [\"professionell\", \"warmherzig\"],\n \"brand_keywords\": [\"Coaching\", \"Systemisch\", \"Entwicklung\"]\n}<\/code><\/pre>\n\n<h3>rule<\/h3>\n<p>Einzelne Regeln, die in Contracts referenziert werden können:<\/p>\n<pre><code>{\n \"rule_type\": \"forbidden_phrase\",\n \"pattern\": \"offensichtlich|natürlich|selbstverständlich\",\n \"severity\": \"warning\",\n \"message\": \"Vermeiden Sie Füllwörter\"\n}<\/code><\/pre>\n\n<h3>system_prompt<\/h3>\n<p>System-Prompts für verschiedene LLM-Anwendungsfälle:<\/p>\n<pre><code>{\n \"purpose\": \"rag_chat\",\n \"template\": \"Du bist ein hilfreicher Assistent...\",\n \"variables\": [\"context\", \"question\"],\n \"model_hints\": {\"temperature\": 0.7}\n}<\/code><\/pre>\n\n<h3>critic<\/h3>\n<p>Kritiker-Konfigurationen für automatisierte Content-Prüfung:<\/p>\n<pre><code>{\n \"focus\": \"clarity\",\n \"criteria\": [\"Verständlichkeit\", \"Struktur\", \"Zielgruppenpassung\"],\n \"severity_threshold\": \"medium\",\n \"auto_apply\": false\n}<\/code><\/pre>\n\n<h2>Repository-Methoden<\/h2>\n<pre><code>\/\/ Alle aktiven Profile\n$profiles = $contentRepository->findAllProfiles();\n\n\/\/ Alle aktiven Contracts\n$contracts = $contentRepository->findAllContracts();\n\n\/\/ Alle aktiven Strukturen\n$structures = $contentRepository->findAllStructures();\n\n\/\/ Nach Typ abrufen\n$critics = $contentRepository->findByType('critic');\n\n\/\/ SQL-Äquivalent\nSELECT * FROM content_config \nWHERE type = 'author_profile' AND status = 'active'\nORDER BY name;<\/code><\/pre>\n\n<h2>Verwendung in Content Orders<\/h2>\n<p>Content Orders referenzieren Config-Einträge via Foreign Keys:<\/p>\n<pre><code>content_orders.author_profile_id → content_config.id (type='author_profile')\ncontent_orders.contract_id → content_config.id (type='contract')\ncontent_orders.structure_id → content_config.id (type='structure')<\/code><\/pre>\n\n<h2>Settings-Persistenz<\/h2>\n<p>Die zuletzt verwendeten Settings werden beim nächsten Auftrag als Default übernommen:<\/p>\n<pre><code>$lastSettings = $contentRepository->getLastOrderSettings();\n\/\/ Returns: model, collections, context_limit, author_profile_id, contract_id, structure_id<\/code><\/pre>\n\n<h2>Siehe auch<\/h2>\n<ul>\n <li><a href=\"\/docs\/ki-system\/content-studio\">Content Studio<\/a><\/li>\n <li><a href=\"\/docs\/ki-system\/ki-datenbank\">Datenbank-Schema<\/a><\/li>\n <li><a href=\"\/docs\/content-studio\/kritiker\">Kritiker<\/a><\/li>\n<\/ul>\n\n<h2>Änderungshistorie<\/h2>\n<table>\n <tr><th>Datum<\/th><th>Änderung<\/th><\/tr>\n <tr><td>2025-12-31<\/td><td>Fehlende Config-Typen dokumentiert: organization, rule, system_prompt, critic<\/td><\/tr>\n <tr><td>2025-12-21<\/td><td>Initial erstellt (ersetzt author_profiles, content_contracts, content_structures)<\/td><\/tr>\n<\/table>]]>"
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 84,\n \"parent_id\": 16,\n \"slug\": \"content-config\",\n \"path\": \"\/ki-system\/content-config\",\n \"title\": \"Content Config\",\n \"description\": \"Unified Configuration für Autorenprofile, Contracts und Strukturen im Content Studio.\",\n \"content\": \"<![CDATA[<nav class=\\\"breadcrumb\\\">\\n <a href=\\\"\/docs\\\">Dokumentation<\/a> » <a href=\\\"\/docs\/ki-system\\\">KI-System<\/a> » Content Config\\n<\/nav>\\n\\n<h1>Content Config<\/h1>\\n<p class=\\\"doc-meta\\\"><strong>Erstellt:<\/strong> 2025-12-21 | <strong>Aktualisiert:<\/strong> 2025-12-31<\/p>\\n\\n<p>Unified Configuration für Autorenprofile, Contracts, Strukturen und System-Konfigurationen im Content Studio.<\/p>\\n\\n<table>\\n <tr><th>Datenbank<\/th><td>ki_content<\/td><\/tr>\\n <tr><th>Tabelle<\/th><td>content_config<\/td><\/tr>\\n <tr><th>Historie<\/th><td>content_config_history<\/td><\/tr>\\n <tr><th>Repository<\/th><td>\/src\/Infrastructure\/Persistence\/ContentRepository.php<\/td><\/tr>\\n<\/table>\\n\\n<h2>Konzept<\/h2>\\n<p>Die Tabelle <code>content_config<\/code> vereinheitlicht verschiedene Konfigurationstypen:<\/p>\\n\\n<table>\\n <tr><th>Type<\/th><th>Zweck<\/th><\/tr>\\n <tr><td>author_profile<\/td><td>Schreibstil und Tonalität<\/td><\/tr>\\n <tr><td>contract<\/td><td>Qualitätsanforderungen<\/td><\/tr>\\n <tr><td>structure<\/td><td>Gliederungs-Templates<\/td><\/tr>\\n <tr><td>organization<\/td><td>Organisations-\/Kundendaten<\/td><\/tr>\\n <tr><td>rule<\/td><td>Einzelne Regeln für Contracts<\/td><\/tr>\\n <tr><td>system_prompt<\/td><td>System-Prompts für LLM-Aufrufe<\/td><\/tr>\\n <tr><td>critic<\/td><td>Kritiker-Konfigurationen für Content-Prüfung<\/td><\/tr>\\n<\/table>\\n\\n<h2>Schema: content_config<\/h2>\\n<table>\\n <thead>\\n <tr><th>Spalte<\/th><th>Typ<\/th><th>Default<\/th><th>Beschreibung<\/th><\/tr>\\n <\/thead>\\n <tbody>\\n <tr><td>id<\/td><td>INT AUTO_INCREMENT<\/td><td>-<\/td><td>Primary Key<\/td><\/tr>\\n <tr><td>type<\/td><td>ENUM<\/td><td>-<\/td><td>author_profile, structure, organization, contract, rule, system_prompt, critic<\/td><\/tr>\\n <tr><td>name<\/td><td>VARCHAR(100)<\/td><td>-<\/td><td>Anzeigename<\/td><\/tr>\\n <tr><td>slug<\/td><td>VARCHAR(100)<\/td><td>-<\/td><td>URL-freundlicher Identifier<\/td><\/tr>\\n <tr><td>description<\/td><td>TEXT<\/td><td>NULL<\/td><td>Kurzbeschreibung<\/td><\/tr>\\n <tr><td>content<\/td><td>LONGTEXT<\/td><td>-<\/td><td>JSON-Konfiguration<\/td><\/tr>\\n <tr><td>version<\/td><td>VARCHAR(20)<\/td><td>'1.0'<\/td><td>Versionsnummer<\/td><\/tr>\\n <tr><td>status<\/td><td>ENUM<\/td><td>'draft'<\/td><td>draft, active, deprecated<\/td><\/tr>\\n <tr><td>parent_id<\/td><td>INT<\/td><td>NULL<\/td><td>FK für Vererbung<\/td><\/tr>\\n <tr><td>prompt_id<\/td><td>INT<\/td><td>NULL<\/td><td>FK zu prompts-Tabelle<\/td><\/tr>\\n <tr><td>sort_order<\/td><td>INT<\/td><td>0<\/td><td>Sortierung<\/td><\/tr>\\n <tr><td>created_at<\/td><td>DATETIME<\/td><td>CURRENT_TIMESTAMP<\/td><td>Erstellungszeitpunkt<\/td><\/tr>\\n <tr><td>updated_at<\/td><td>DATETIME<\/td><td>CURRENT_TIMESTAMP<\/td><td>Letzte Änderung<\/td><\/tr>\\n <\/tbody>\\n<\/table>\\n\\n<h2>Config-Typen<\/h2>\\n\\n<h3>author_profile<\/h3>\\n<p>Definiert Schreibstil und Tonalität für Content-Generierung:<\/p>\\n<pre><code>{\\n \\\"tone\\\": \\\"didaktisch\\\",\\n \\\"style\\\": \\\"erklärend\\\",\\n \\\"vocabulary\\\": \\\"fachlich\\\",\\n \\\"target_audience\\\": \\\"Coaches und Berater\\\",\\n \\\"examples\\\": true\\n}<\/code><\/pre>\\n\\n<h3>contract<\/h3>\\n<p>Qualitätsanforderungen und Regeln:<\/p>\\n<pre><code>{\\n \\\"min_words\\\": 500,\\n \\\"max_words\\\": 2000,\\n \\\"required_sections\\\": [\\\"Einleitung\\\", \\\"Hauptteil\\\", \\\"Fazit\\\"],\\n \\\"forbidden_phrases\\\": [\\\"offensichtlich\\\", \\\"natürlich\\\"],\\n \\\"citation_style\\\": \\\"Harvard\\\"\\n}<\/code><\/pre>\\n\\n<h3>structure<\/h3>\\n<p>Gliederungs-Templates:<\/p>\\n<pre><code>{\\n \\\"format\\\": \\\"blog_article\\\",\\n \\\"sections\\\": [\\n {\\\"name\\\": \\\"hook\\\", \\\"required\\\": true},\\n {\\\"name\\\": \\\"problem\\\", \\\"required\\\": true},\\n {\\\"name\\\": \\\"solution\\\", \\\"required\\\": true},\\n {\\\"name\\\": \\\"cta\\\", \\\"required\\\": false}\\n ]\\n}<\/code><\/pre>\\n\\n<h3>organization<\/h3>\\n<p>Organisations- und Kundendaten für personalisierte Inhalte:<\/p>\\n<pre><code>{\\n \\\"name\\\": \\\"Campus am See\\\",\\n \\\"domain\\\": \\\"Systemische Beratung\\\",\\n \\\"tone_preferences\\\": [\\\"professionell\\\", \\\"warmherzig\\\"],\\n \\\"brand_keywords\\\": [\\\"Coaching\\\", \\\"Systemisch\\\", \\\"Entwicklung\\\"]\\n}<\/code><\/pre>\\n\\n<h3>rule<\/h3>\\n<p>Einzelne Regeln, die in Contracts referenziert werden können:<\/p>\\n<pre><code>{\\n \\\"rule_type\\\": \\\"forbidden_phrase\\\",\\n \\\"pattern\\\": \\\"offensichtlich|natürlich|selbstverständlich\\\",\\n \\\"severity\\\": \\\"warning\\\",\\n \\\"message\\\": \\\"Vermeiden Sie Füllwörter\\\"\\n}<\/code><\/pre>\\n\\n<h3>system_prompt<\/h3>\\n<p>System-Prompts für verschiedene LLM-Anwendungsfälle:<\/p>\\n<pre><code>{\\n \\\"purpose\\\": \\\"rag_chat\\\",\\n \\\"template\\\": \\\"Du bist ein hilfreicher Assistent...\\\",\\n \\\"variables\\\": [\\\"context\\\", \\\"question\\\"],\\n \\\"model_hints\\\": {\\\"temperature\\\": 0.7}\\n}<\/code><\/pre>\\n\\n<h3>critic<\/h3>\\n<p>Kritiker-Konfigurationen für automatisierte Content-Prüfung:<\/p>\\n<pre><code>{\\n \\\"focus\\\": \\\"clarity\\\",\\n \\\"criteria\\\": [\\\"Verständlichkeit\\\", \\\"Struktur\\\", \\\"Zielgruppenpassung\\\"],\\n \\\"severity_threshold\\\": \\\"medium\\\",\\n \\\"auto_apply\\\": false\\n}<\/code><\/pre>\\n\\n<h2>Repository-Methoden<\/h2>\\n<pre><code>\/\/ Alle aktiven Profile\\n$profiles = $contentRepository->findAllProfiles();\\n\\n\/\/ Alle aktiven Contracts\\n$contracts = $contentRepository->findAllContracts();\\n\\n\/\/ Alle aktiven Strukturen\\n$structures = $contentRepository->findAllStructures();\\n\\n\/\/ Nach Typ abrufen\\n$critics = $contentRepository->findByType('critic');\\n\\n\/\/ SQL-Äquivalent\\nSELECT * FROM content_config \\nWHERE type = 'author_profile' AND status = 'active'\\nORDER BY name;<\/code><\/pre>\\n\\n<h2>Verwendung in Content Orders<\/h2>\\n<p>Content Orders referenzieren Config-Einträge via Foreign Keys:<\/p>\\n<pre><code>content_orders.author_profile_id → content_config.id (type='author_profile')\\ncontent_orders.contract_id → content_config.id (type='contract')\\ncontent_orders.structure_id → content_config.id (type='structure')<\/code><\/pre>\\n\\n<h2>Settings-Persistenz<\/h2>\\n<p>Die zuletzt verwendeten Settings werden beim nächsten Auftrag als Default übernommen:<\/p>\\n<pre><code>$lastSettings = $contentRepository->getLastOrderSettings();\\n\/\/ Returns: model, collections, context_limit, author_profile_id, contract_id, structure_id<\/code><\/pre>\\n\\n<h2>Siehe auch<\/h2>\\n<ul>\\n <li><a href=\\\"\/docs\/ki-system\/content-studio\\\">Content Studio<\/a><\/li>\\n <li><a href=\\\"\/docs\/ki-system\/ki-datenbank\\\">Datenbank-Schema<\/a><\/li>\\n <li><a href=\\\"\/docs\/content-studio\/kritiker\\\">Kritiker<\/a><\/li>\\n<\/ul>\\n\\n<h2>Änderungshistorie<\/h2>\\n<table>\\n <tr><th>Datum<\/th><th>Änderung<\/th><\/tr>\\n <tr><td>2025-12-31<\/td><td>Fehlende Config-Typen dokumentiert: organization, rule, system_prompt, critic<\/td><\/tr>\\n <tr><td>2025-12-21<\/td><td>Initial erstellt (ersetzt author_profiles, content_contracts, content_structures)<\/td><\/tr>\\n<\/table>]]>\",\n \"status\": \"published\",\n \"sort_order\": 15,\n \"depth\": 1,\n \"created_at\": \"2025-12-21T23:15:01\",\n \"updated_at\": \"2025-12-31T09:59:16\"\n },\n \"message\": \"Document #84 updated\"\n}"
}
]
}