{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "cd \/opt\/mcp-servers\/mcp-code && .\/venv\/bin\/python -c \"\nfrom dotenv import load_dotenv\nfrom pathlib import Path\nload_dotenv(Path('.env'))\n\nfrom db import execute_query\n\n# code_impact für HomeController\nfqcn = 'Controller\\\\\\\\HomeController'\n\nsql = '''\n SELECT ca.file_name, ca.namespace, cd.dependency_type\n FROM code_dependencies cd\n JOIN code_analysis ca ON cd.analysis_id = ca.id\n WHERE cd.target_fqcn = %s\n ORDER BY ca.file_name\n'''\ndependents = execute_query(sql, (fqcn,))\ncount = len(dependents)\n\n# Risk Level\nif count == 0:\n risk = 'low'\n rec = 'Keine Abhängigkeiten. Änderungen sicher.'\nelif count <= 5:\n risk = 'medium'\n rec = f'Moderate Abhängigkeiten ({count}). Änderungen mit Vorsicht.'\nelif count <= 15:\n risk = 'high'\n rec = f'Viele Abhängigkeiten ({count}). Gründliche Tests empfohlen.'\nelse:\n risk = 'critical'\n rec = f'Kritisch viele Abhängigkeiten ({count}). Breaking Changes vermeiden!'\n\n# Namespaces\nnamespaces = sorted(set(d['namespace'] for d in dependents if d['namespace']))\n\n# By type\nby_type = {}\nfor d in dependents:\n t = d['dependency_type']\n by_type[t] = by_type.get(t, 0) + 1\n\nprint(f'=== code_impact(\\\"{fqcn}\\\") ===')\nprint(f'direct_dependents: {count}')\nprint(f'risk_level: {risk}')\nprint(f'affected_namespaces: {namespaces}')\nprint(f'dependents_by_type: {by_type}')\nprint(f'recommendation: {rec}')\nprint()\nif dependents:\n print('Dependents:')\n for d in dependents:\n print(f' - {d[\\\"file_name\\\"]} ({d[\\\"dependency_type\\\"]})')\n\" 2>&1",
"description": "Test code_impact on HomeController"
}
}
{
"tool_response": {
"stdout": "=== code_impact(\"Controller\\HomeController\") ===\ndirect_dependents: 0\nrisk_level: low\naffected_namespaces: []\ndependents_by_type: {}\nrecommendation: Keine Abhängigkeiten. Änderungen sicher.",
"stderr": "Shell cwd was reset to \/var\/www",
"interrupted": false,
"isImage": false
}
}