Protokoll #3237

ID3237
Zeitstempel2025-12-22 02:09:33.362756
Clientroot
IP145.224.96.190
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens3,115 (Input: 1,555, Output: 1,560)
Dauer90 ms
Request-Zeit2025-12-22 02:09:33.362756
Response-Zeit2025-12-22 02:09:33.452474

Request

{
    "event": "PreToolUse",
    "tool_name": "Write",
    "tool_input": {
        "file_path": "\/tmp\/migrate_prompts.py",
        "content": "#!\/usr\/bin\/env python3\n\"\"\"\nMigrate hardcoded prompts to database.\nCreates prompts table entries for critics, revise, and generate operations.\n\"\"\"\nimport sys\nsys.path.insert(0, \"\/opt\/scripts\/pipeline\")\nfrom config import DB_CONFIG\nimport mysql.connector\n\n# Override database to ki_content\nconfig = DB_CONFIG.copy()\nconfig[\"database\"] = \"ki_content\"\n\nconn = mysql.connector.connect(**config)\ncursor = conn.cursor(dictionary=True)\n\n# Define the prompts to create\nprompts = [\n    # Critic prompts with specific IDs to match critics table references\n    {\n        \"id\": 5,\n        \"name\": \"critic-faktenprufer\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein kritischer Lektor mit dem Fokus auf: {fokus}\n\nAnalysiere den folgenden Text und gib strukturiertes Feedback:\n\n## Text:\n{content}\n\n## Deine Aufgabe:\n1. Prüfe den Text auf die Aspekte: {fokus}\n2. Identifiziere konkrete Verbesserungspunkte\n3. Bewerte die Qualität (1-10)\n\nAntworte im JSON-Format:\n{{\n  \"rating\": 8,\n  \"passed\": true,\n  \"issues\": [\"Issue 1\", \"Issue 2\"],\n  \"suggestions\": [\"Suggestion 1\"],\n  \"summary\": \"Kurze Zusammenfassung\"\n}}\"\"\"\n    },\n    {\n        \"id\": 6,\n        \"name\": \"critic-stilist\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein kritischer Lektor mit dem Fokus auf: {fokus}\n\nAnalysiere den folgenden Text und gib strukturiertes Feedback:\n\n## Text:\n{content}\n\n## Deine Aufgabe:\n1. Prüfe den Text auf die Aspekte: {fokus}\n2. Identifiziere konkrete Verbesserungspunkte\n3. Bewerte die Qualität (1-10)\n\nAntworte im JSON-Format:\n{{\n  \"rating\": 8,\n  \"passed\": true,\n  \"issues\": [\"Issue 1\", \"Issue 2\"],\n  \"suggestions\": [\"Suggestion 1\"],\n  \"summary\": \"Kurze Zusammenfassung\"\n}}\"\"\"\n    },\n    {\n        \"id\": 7,\n        \"name\": \"critic-strukturanalyst\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein kritischer Lektor mit dem Fokus auf: {fokus}\n\nAnalysiere den folgenden Text und gib strukturiertes Feedback:\n\n## Text:\n{content}\n\n## Deine Aufgabe:\n1. Prüfe den Text auf die Aspekte: {fokus}\n2. Identifiziere konkrete Verbesserungspunkte\n3. Bewerte die Qualität (1-10)\n\nAntworte im JSON-Format:\n{{\n  \"rating\": 8,\n  \"passed\": true,\n  \"issues\": [\"Issue 1\", \"Issue 2\"],\n  \"suggestions\": [\"Suggestion 1\"],\n  \"summary\": \"Kurze Zusammenfassung\"\n}}\"\"\"\n    },\n    # Revise prompt\n    {\n        \"id\": 8,\n        \"name\": \"content-revise\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein professioneller Content-Editor. Überarbeite den folgenden Text basierend auf dem Feedback der Kritiker.\n\n## Originaler Text:\n{content}\n\n## Feedback der Kritiker:\n{feedback}\n\n## Anweisungen:\n1. Behebe alle genannten Probleme\n2. Setze die Verbesserungsvorschläge um\n3. Behalte den Grundton und Stil bei\n4. Achte auf eine kohärente Überarbeitung\n{html_instruction}\n\nErstelle nun die überarbeitete Version:\"\"\"\n    },\n    # Generate prompt (base template)\n    {\n        \"id\": 9,\n        \"name\": \"content-generate\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein professioneller Content-Autor. Erstelle basierend auf dem Briefing und dem bereitgestellten Kontext einen hochwertigen Text.\n\n{profile_text}\n{contract_text}\n{structure_text}\n\n## Kontext aus der Wissensbasis:\n{context}\n\n## Briefing:\n{briefing}\n\n## Anweisungen:\n1. Nutze die Informationen aus dem Kontext als Grundlage\n2. Halte dich an das Autorenprofil und den Schreibstil\n3. Beachte die Vorgaben aus dem Contract\n4. Strukturiere den Text gemäß dem Template (falls angegeben)\n5. Schreibe auf Deutsch\n6. Kennzeichne verwendete Quellen\n{format_instruction}\n\nErstelle nun den Content:\"\"\"\n    },\n    # Generic critic prompt (fallback)\n    {\n        \"id\": 10,\n        \"name\": \"critic-generic\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein kritischer Lektor mit dem Fokus auf: {fokus}\n\nAnalysiere den folgenden Text und gib strukturiertes Feedback:\n\n## Text:\n{content}\n\n## Deine Aufgabe:\n1. Prüfe den Text auf die Aspekte: {fokus}\n2. Identifiziere konkrete Verbesserungspunkte\n3. Bewerte die Qualität (1-10)\n\nAntworte im JSON-Format:\n{{\n  \"rating\": 8,\n  \"passed\": true,\n  \"issues\": [\"Issue 1\", \"Issue 2\"],\n  \"suggestions\": [\"Suggestion 1\"],\n  \"summary\": \"Kurze Zusammenfassung\"\n}}\"\"\"\n    }\n]\n\nprint(\"Migrating prompts to database...\")\nprint(\"=\" * 60)\n\nfor p in prompts:\n    # Check if prompt with this ID already exists\n    cursor.execute(\"SELECT id FROM prompts WHERE id = %s\", (p[\"id\"],))\n    existing = cursor.fetchone()\n\n    if existing:\n        print(f\"  [SKIP] Prompt ID {p['id']} ({p['name']}) already exists\")\n        continue\n\n    # Insert with explicit ID\n    cursor.execute(\n        \"\"\"INSERT INTO prompts (id, name, version, content, is_active)\n           VALUES (%s, %s, %s, %s, 1)\"\"\",\n        (p[\"id\"], p[\"name\"], p[\"version\"], p[\"content\"])\n    )\n    print(f\"  [OK] Created prompt ID {p['id']}: {p['name']}\")\n\nconn.commit()\n\n# Verify\nprint(\"\\n\" + \"=\" * 60)\nprint(\"Verifying prompts table:\")\ncursor.execute(\"SELECT id, name, version, is_active FROM prompts ORDER BY id\")\nfor row in cursor.fetchall():\n    print(f\"  {row['id']:3} | {row['name']:25} | v{row['version']} | active={row['is_active']}\")\n\n# Verify critics now have valid prompts\nprint(\"\\n\" + \"=\" * 60)\nprint(\"Verifying critics have valid prompts:\")\ncursor.execute('''\n    SELECT c.id, c.name, c.prompt_id, p.name as prompt_name\n    FROM critics c\n    LEFT JOIN prompts p ON c.prompt_id = p.id\n    WHERE c.is_active = 1\n    ORDER BY c.sort_order\n''')\nfor row in cursor.fetchall():\n    status = \"OK\" if row[\"prompt_name\"] else \"MISSING\"\n    print(f\"  [{status}] {row['name']:20} -> prompt_id={row['prompt_id']} ({row['prompt_name'] or 'N\/A'})\")\n\ncursor.close()\nconn.close()\nprint(\"\\nDone!\")\n"
    }
}

Response

{
    "tool_response": {
        "type": "create",
        "filePath": "\/tmp\/migrate_prompts.py",
        "content": "#!\/usr\/bin\/env python3\n\"\"\"\nMigrate hardcoded prompts to database.\nCreates prompts table entries for critics, revise, and generate operations.\n\"\"\"\nimport sys\nsys.path.insert(0, \"\/opt\/scripts\/pipeline\")\nfrom config import DB_CONFIG\nimport mysql.connector\n\n# Override database to ki_content\nconfig = DB_CONFIG.copy()\nconfig[\"database\"] = \"ki_content\"\n\nconn = mysql.connector.connect(**config)\ncursor = conn.cursor(dictionary=True)\n\n# Define the prompts to create\nprompts = [\n    # Critic prompts with specific IDs to match critics table references\n    {\n        \"id\": 5,\n        \"name\": \"critic-faktenprufer\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein kritischer Lektor mit dem Fokus auf: {fokus}\n\nAnalysiere den folgenden Text und gib strukturiertes Feedback:\n\n## Text:\n{content}\n\n## Deine Aufgabe:\n1. Prüfe den Text auf die Aspekte: {fokus}\n2. Identifiziere konkrete Verbesserungspunkte\n3. Bewerte die Qualität (1-10)\n\nAntworte im JSON-Format:\n{{\n  \"rating\": 8,\n  \"passed\": true,\n  \"issues\": [\"Issue 1\", \"Issue 2\"],\n  \"suggestions\": [\"Suggestion 1\"],\n  \"summary\": \"Kurze Zusammenfassung\"\n}}\"\"\"\n    },\n    {\n        \"id\": 6,\n        \"name\": \"critic-stilist\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein kritischer Lektor mit dem Fokus auf: {fokus}\n\nAnalysiere den folgenden Text und gib strukturiertes Feedback:\n\n## Text:\n{content}\n\n## Deine Aufgabe:\n1. Prüfe den Text auf die Aspekte: {fokus}\n2. Identifiziere konkrete Verbesserungspunkte\n3. Bewerte die Qualität (1-10)\n\nAntworte im JSON-Format:\n{{\n  \"rating\": 8,\n  \"passed\": true,\n  \"issues\": [\"Issue 1\", \"Issue 2\"],\n  \"suggestions\": [\"Suggestion 1\"],\n  \"summary\": \"Kurze Zusammenfassung\"\n}}\"\"\"\n    },\n    {\n        \"id\": 7,\n        \"name\": \"critic-strukturanalyst\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein kritischer Lektor mit dem Fokus auf: {fokus}\n\nAnalysiere den folgenden Text und gib strukturiertes Feedback:\n\n## Text:\n{content}\n\n## Deine Aufgabe:\n1. Prüfe den Text auf die Aspekte: {fokus}\n2. Identifiziere konkrete Verbesserungspunkte\n3. Bewerte die Qualität (1-10)\n\nAntworte im JSON-Format:\n{{\n  \"rating\": 8,\n  \"passed\": true,\n  \"issues\": [\"Issue 1\", \"Issue 2\"],\n  \"suggestions\": [\"Suggestion 1\"],\n  \"summary\": \"Kurze Zusammenfassung\"\n}}\"\"\"\n    },\n    # Revise prompt\n    {\n        \"id\": 8,\n        \"name\": \"content-revise\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein professioneller Content-Editor. Überarbeite den folgenden Text basierend auf dem Feedback der Kritiker.\n\n## Originaler Text:\n{content}\n\n## Feedback der Kritiker:\n{feedback}\n\n## Anweisungen:\n1. Behebe alle genannten Probleme\n2. Setze die Verbesserungsvorschläge um\n3. Behalte den Grundton und Stil bei\n4. Achte auf eine kohärente Überarbeitung\n{html_instruction}\n\nErstelle nun die überarbeitete Version:\"\"\"\n    },\n    # Generate prompt (base template)\n    {\n        \"id\": 9,\n        \"name\": \"content-generate\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein professioneller Content-Autor. Erstelle basierend auf dem Briefing und dem bereitgestellten Kontext einen hochwertigen Text.\n\n{profile_text}\n{contract_text}\n{structure_text}\n\n## Kontext aus der Wissensbasis:\n{context}\n\n## Briefing:\n{briefing}\n\n## Anweisungen:\n1. Nutze die Informationen aus dem Kontext als Grundlage\n2. Halte dich an das Autorenprofil und den Schreibstil\n3. Beachte die Vorgaben aus dem Contract\n4. Strukturiere den Text gemäß dem Template (falls angegeben)\n5. Schreibe auf Deutsch\n6. Kennzeichne verwendete Quellen\n{format_instruction}\n\nErstelle nun den Content:\"\"\"\n    },\n    # Generic critic prompt (fallback)\n    {\n        \"id\": 10,\n        \"name\": \"critic-generic\",\n        \"version\": \"1.0\",\n        \"content\": \"\"\"Du bist ein kritischer Lektor mit dem Fokus auf: {fokus}\n\nAnalysiere den folgenden Text und gib strukturiertes Feedback:\n\n## Text:\n{content}\n\n## Deine Aufgabe:\n1. Prüfe den Text auf die Aspekte: {fokus}\n2. Identifiziere konkrete Verbesserungspunkte\n3. Bewerte die Qualität (1-10)\n\nAntworte im JSON-Format:\n{{\n  \"rating\": 8,\n  \"passed\": true,\n  \"issues\": [\"Issue 1\", \"Issue 2\"],\n  \"suggestions\": [\"Suggestion 1\"],\n  \"summary\": \"Kurze Zusammenfassung\"\n}}\"\"\"\n    }\n]\n\nprint(\"Migrating prompts to database...\")\nprint(\"=\" * 60)\n\nfor p in prompts:\n    # Check if prompt with this ID already exists\n    cursor.execute(\"SELECT id FROM prompts WHERE id = %s\", (p[\"id\"],))\n    existing = cursor.fetchone()\n\n    if existing:\n        print(f\"  [SKIP] Prompt ID {p['id']} ({p['name']}) already exists\")\n        continue\n\n    # Insert with explicit ID\n    cursor.execute(\n        \"\"\"INSERT INTO prompts (id, name, version, content, is_active)\n           VALUES (%s, %s, %s, %s, 1)\"\"\",\n        (p[\"id\"], p[\"name\"], p[\"version\"], p[\"content\"])\n    )\n    print(f\"  [OK] Created prompt ID {p['id']}: {p['name']}\")\n\nconn.commit()\n\n# Verify\nprint(\"\\n\" + \"=\" * 60)\nprint(\"Verifying prompts table:\")\ncursor.execute(\"SELECT id, name, version, is_active FROM prompts ORDER BY id\")\nfor row in cursor.fetchall():\n    print(f\"  {row['id']:3} | {row['name']:25} | v{row['version']} | active={row['is_active']}\")\n\n# Verify critics now have valid prompts\nprint(\"\\n\" + \"=\" * 60)\nprint(\"Verifying critics have valid prompts:\")\ncursor.execute('''\n    SELECT c.id, c.name, c.prompt_id, p.name as prompt_name\n    FROM critics c\n    LEFT JOIN prompts p ON c.prompt_id = p.id\n    WHERE c.is_active = 1\n    ORDER BY c.sort_order\n''')\nfor row in cursor.fetchall():\n    status = \"OK\" if row[\"prompt_name\"] else \"MISSING\"\n    print(f\"  [{status}] {row['name']:20} -> prompt_id={row['prompt_id']} ({row['prompt_name'] or 'N\/A'})\")\n\ncursor.close()\nconn.close()\nprint(\"\\nDone!\")\n",
        "structuredPatch": [],
        "originalFile": null
    }
}
← Vorheriger Zur Liste Nächster →