{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_create",
"tool_input": {
"title": "Content Config",
"slug": "content-config",
"parent_id": 16,
"status": "published",
"description": "Unified Configuration für Autorenprofile, Contracts und Strukturen im Content Studio.",
"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>Unified Configuration für Autorenprofile, Contracts und Strukturen 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 drei ehemalige separate Tabellen:<\/p>\n\n<table>\n <tr><th>Alte Tabelle<\/th><th>Neuer Type<\/th><th>Zweck<\/th><\/tr>\n <tr><td>author_profiles<\/td><td>author_profile<\/td><td>Schreibstil und Tonalität<\/td><\/tr>\n <tr><td>content_contracts<\/td><td>contract<\/td><td>Qualitätsanforderungen<\/td><\/tr>\n <tr><td>content_structures<\/td><td>structure<\/td><td>Gliederungs-Templates<\/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<\/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\/YAML-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>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<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\/\/ 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>Aktuelle Einträge<\/h2>\n<table>\n <tr><th>Type<\/th><th>Count<\/th><th>Beispiele<\/th><\/tr>\n <tr><td>author_profile<\/td><td>3<\/td><td>Akademisch, Didaktisch, Kompakt<\/td><\/tr>\n <tr><td>contract<\/td><td>~5<\/td><td>Content Quality Standards<\/td><\/tr>\n <tr><td>structure<\/td><td>~4<\/td><td>Blog-Artikel, Whitepaper<\/td><\/tr>\n <tr><td>system_prompt<\/td><td>~5<\/td><td>RAG-System, Entity-Extraction<\/td><\/tr>\n<\/table>\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<\/ul>\n\n<h2>Änderungshistorie<\/h2>\n<table>\n <tr><th>Datum<\/th><th>Änderung<\/th><\/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>Unified Configuration für Autorenprofile, Contracts und Strukturen 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 drei ehemalige separate Tabellen:<\/p>\\n\\n<table>\\n <tr><th>Alte Tabelle<\/th><th>Neuer Type<\/th><th>Zweck<\/th><\/tr>\\n <tr><td>author_profiles<\/td><td>author_profile<\/td><td>Schreibstil und Tonalität<\/td><\/tr>\\n <tr><td>content_contracts<\/td><td>contract<\/td><td>Qualitätsanforderungen<\/td><\/tr>\\n <tr><td>content_structures<\/td><td>structure<\/td><td>Gliederungs-Templates<\/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<\/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\/YAML-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>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<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\/\/ 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>Aktuelle Einträge<\/h2>\\n<table>\\n <tr><th>Type<\/th><th>Count<\/th><th>Beispiele<\/th><\/tr>\\n <tr><td>author_profile<\/td><td>3<\/td><td>Akademisch, Didaktisch, Kompakt<\/td><\/tr>\\n <tr><td>contract<\/td><td>~5<\/td><td>Content Quality Standards<\/td><\/tr>\\n <tr><td>structure<\/td><td>~4<\/td><td>Blog-Artikel, Whitepaper<\/td><\/tr>\\n <tr><td>system_prompt<\/td><td>~5<\/td><td>RAG-System, Entity-Extraction<\/td><\/tr>\\n<\/table>\\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<\/ul>\\n\\n<h2>Änderungshistorie<\/h2>\\n<table>\\n <tr><th>Datum<\/th><th>Änderung<\/th><\/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\": 0,\n \"depth\": 1,\n \"created_at\": \"2025-12-21T23:15:01\",\n \"updated_at\": \"2025-12-21T23:15:01\"\n },\n \"message\": \"Dokument 'Content Config' erstellt mit ID 84\"\n}"
}
]
}