Protokoll #28212

ID28212
Zeitstempel2025-12-28 13:01:14.214904
Clientroot
IP145.224.72.140
Modellclaude-sonnet-4-20250514
Statuspending
Tokens902 (Input: 902, Output: 0)
Dauer-
Request-Zeit2025-12-28 13:01:14.214904
Response-Zeit-

Request

{
    "event": "PostToolUse",
    "tool_name": "Read",
    "tool_response": {
        "type": "text",
        "file": {
            "filePath": "\/var\/www\/mcp-servers\/mcp_code\/tools\/stats.py",
            "content": "\"\"\"code_stats - Projekt-Statistiken.\"\"\"\nimport json\nimport sys\n\nsys.path.insert(0, \"\/var\/www\/mcp-servers\/mcp_code\")\nfrom db import execute_query, execute_single\n\n\ndef register_stats_tool(mcp):\n    \"\"\"Registriert code_stats Tool.\"\"\"\n\n    @mcp.tool()\n    def code_stats() -> dict:\n        \"\"\"\n        Zeigt Projekt-Statistiken der Code-Analyse.\n\n        Returns:\n            Dict mit total_files, total_classes, total_interfaces, total_traits,\n            dependencies_by_type, top_used_classes\n        \"\"\"\n        # Basis-Statistiken - SQL aus PHP CodeAnalysisRepository::getStatistics() (Zeile 217-227)\n        stats_sql = \"\"\"\n            SELECT\n                COUNT(*) as total_files,\n                SUM(line_count) as total_lines,\n                SUM(file_size) as total_size,\n                COUNT(CASE WHEN parse_error IS NOT NULL THEN 1 END) as files_with_errors,\n                MAX(scanned_at) as last_scan\n            FROM code_analysis\n        \"\"\"\n        stats = execute_single(stats_sql)\n\n        # Klassen\/Interfaces\/Traits zählen\n        classes_sql = \"SELECT classes FROM code_analysis WHERE classes IS NOT NULL AND classes != '[]'\"\n        rows = execute_query(classes_sql, max_rows=1000)\n\n        total_classes = 0\n        total_interfaces = 0\n        total_traits = 0\n\n        for row in rows:\n            classes = json.loads(row[\"classes\"] or \"[]\")\n            for cls in classes:\n                cls_type = cls.get(\"type\", \"class\")\n                if cls_type == \"interface\":\n                    total_interfaces += 1\n                elif cls_type == \"trait\":\n                    total_traits += 1\n                else:\n                    total_classes += 1\n\n        # Dependency-Statistiken - SQL aus PHP CodeAnalysisRepository::getDependencyStatistics() (Zeile 343-351)\n        by_type_sql = \"\"\"\n            SELECT dependency_type, COUNT(*) as cnt\n            FROM code_dependencies\n            GROUP BY dependency_type\n        \"\"\"\n        by_type_rows = execute_query(by_type_sql)\n        dependencies_by_type = {r[\"dependency_type\"]: r[\"cnt\"] for r in by_type_rows}\n\n        # Most used classes - SQL aus PHP CodeAnalysisRepository::getDependencyStatistics() (Zeile 354-360)\n        top_sql = \"\"\"\n            SELECT target_fqcn as fqcn, COUNT(*) as count\n            FROM code_dependencies\n            GROUP BY target_fqcn\n            ORDER BY count DESC\n            LIMIT 20\n        \"\"\"\n        top_used = execute_query(top_sql)\n\n        # Total dependencies\n        total_deps_sql = \"SELECT COUNT(*) as cnt FROM code_dependencies\"\n        total_deps_row = execute_single(total_deps_sql)\n\n        return {\n            \"total_files\": stats[\"total_files\"] or 0,\n            \"total_lines\": stats[\"total_lines\"] or 0,\n            \"total_classes\": total_classes,\n            \"total_interfaces\": total_interfaces,\n            \"total_traits\": total_traits,\n            \"files_with_errors\": stats[\"files_with_errors\"] or 0,\n            \"last_scan\": str(stats[\"last_scan\"]) if stats[\"last_scan\"] else None,\n            \"total_dependencies\": total_deps_row[\"cnt\"] if total_deps_row else 0,\n            \"dependencies_by_type\": dependencies_by_type,\n            \"top_used_classes\": top_used,\n        }\n",
            "numLines": 87,
            "startLine": 1,
            "totalLines": 87
        }
    }
}

Response

-
← Vorheriger Zur Liste Nächster →