Protokoll #11026

ID11026
Zeitstempel2025-12-23 16:22:36.630859
Clientroot
IP145.224.96.190
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens1,229 (Input: 612, Output: 617)
Dauer109 ms
Request-Zeit2025-12-23 16:22:36.630859
Response-Zeit2025-12-23 16:22:36.739928

Request

{
    "event": "PreToolUse",
    "tool_name": "Write",
    "tool_input": {
        "file_path": "\/opt\/mcp-servers\/mcp-code\/tools\/dependencies.py",
        "content": "\"\"\"code_dependencies - Was nutzt diese Klasse? (outgoing)\"\"\"\nimport json\nimport sys\n\nsys.path.insert(0, \"\/opt\/mcp-servers\/mcp-code\")\nfrom db import execute_query, execute_single\n\n\ndef register_dependencies_tool(mcp):\n    \"\"\"Registriert code_dependencies Tool.\"\"\"\n\n    @mcp.tool()\n    def code_dependencies(\n        fqcn: str,\n        dependency_type: str = None,\n    ) -> dict:\n        \"\"\"\n        Zeigt Dependencies einer Klasse (outgoing - was nutzt diese Klasse).\n\n        Args:\n            fqcn: Vollständiger Klassenname (z.B. Controller\\\\HomeController)\n            dependency_type: Filter nach Typ: extends, implements, constructor, use, trait (optional)\n\n        Returns:\n            Dict mit dependencies: [{target_fqcn, dependency_type}]\n        \"\"\"\n        # FQCN in Namespace und Klassennamen aufteilen\n        parts = fqcn.rsplit(\"\\\\\", 1)\n        if len(parts) == 2:\n            namespace, class_name = parts\n        else:\n            namespace = None\n            class_name = fqcn\n\n        # analysis_id finden\n        if namespace:\n            sql = \"SELECT id FROM code_analysis WHERE namespace = %s AND classes LIKE %s LIMIT 1\"\n            params = (namespace, f'%\"{class_name}\"%')\n        else:\n            sql = \"SELECT id FROM code_analysis WHERE namespace IS NULL AND classes LIKE %s LIMIT 1\"\n            params = (f'%\"{class_name}\"%',)\n\n        row = execute_single(sql, params)\n\n        if not row:\n            return {\"error\": f\"Klasse nicht gefunden: {fqcn}\", \"dependencies\": []}\n\n        # Dependencies laden - SQL aus PHP CodeAnalysisRepository::getDependencies() (Zeile 318-329)\n        dep_sql = \"\"\"\n            SELECT dependency_type, target_fqcn\n            FROM code_dependencies\n            WHERE analysis_id = %s\n        \"\"\"\n        dep_params = [row[\"id\"]]\n\n        if dependency_type:\n            dep_sql += \" AND dependency_type = %s\"\n            dep_params.append(dependency_type)\n\n        dep_sql += \" ORDER BY dependency_type, target_fqcn\"\n\n        dependencies = execute_query(dep_sql, tuple(dep_params))\n\n        return {\n            \"fqcn\": fqcn,\n            \"dependencies\": dependencies,\n            \"count\": len(dependencies),\n        }\n"
    }
}

Response

{
    "tool_response": {
        "type": "create",
        "filePath": "\/opt\/mcp-servers\/mcp-code\/tools\/dependencies.py",
        "content": "\"\"\"code_dependencies - Was nutzt diese Klasse? (outgoing)\"\"\"\nimport json\nimport sys\n\nsys.path.insert(0, \"\/opt\/mcp-servers\/mcp-code\")\nfrom db import execute_query, execute_single\n\n\ndef register_dependencies_tool(mcp):\n    \"\"\"Registriert code_dependencies Tool.\"\"\"\n\n    @mcp.tool()\n    def code_dependencies(\n        fqcn: str,\n        dependency_type: str = None,\n    ) -> dict:\n        \"\"\"\n        Zeigt Dependencies einer Klasse (outgoing - was nutzt diese Klasse).\n\n        Args:\n            fqcn: Vollständiger Klassenname (z.B. Controller\\\\HomeController)\n            dependency_type: Filter nach Typ: extends, implements, constructor, use, trait (optional)\n\n        Returns:\n            Dict mit dependencies: [{target_fqcn, dependency_type}]\n        \"\"\"\n        # FQCN in Namespace und Klassennamen aufteilen\n        parts = fqcn.rsplit(\"\\\\\", 1)\n        if len(parts) == 2:\n            namespace, class_name = parts\n        else:\n            namespace = None\n            class_name = fqcn\n\n        # analysis_id finden\n        if namespace:\n            sql = \"SELECT id FROM code_analysis WHERE namespace = %s AND classes LIKE %s LIMIT 1\"\n            params = (namespace, f'%\"{class_name}\"%')\n        else:\n            sql = \"SELECT id FROM code_analysis WHERE namespace IS NULL AND classes LIKE %s LIMIT 1\"\n            params = (f'%\"{class_name}\"%',)\n\n        row = execute_single(sql, params)\n\n        if not row:\n            return {\"error\": f\"Klasse nicht gefunden: {fqcn}\", \"dependencies\": []}\n\n        # Dependencies laden - SQL aus PHP CodeAnalysisRepository::getDependencies() (Zeile 318-329)\n        dep_sql = \"\"\"\n            SELECT dependency_type, target_fqcn\n            FROM code_dependencies\n            WHERE analysis_id = %s\n        \"\"\"\n        dep_params = [row[\"id\"]]\n\n        if dependency_type:\n            dep_sql += \" AND dependency_type = %s\"\n            dep_params.append(dependency_type)\n\n        dep_sql += \" ORDER BY dependency_type, target_fqcn\"\n\n        dependencies = execute_query(dep_sql, tuple(dep_params))\n\n        return {\n            \"fqcn\": fqcn,\n            \"dependencies\": dependencies,\n            \"count\": len(dependencies),\n        }\n",
        "structuredPatch": [],
        "originalFile": null
    }
}
← Vorheriger Zur Liste Nächster →