{
"event": "PreToolUse",
"tool_name": "Edit",
"tool_input": {
"file_path": "\/opt\/mcp-servers\/mcp-db\/domain\/query_contract.py",
"old_string": "\"\"\"Query Contracts - Request und Response Datenstrukturen\"\"\"\nfrom dataclasses import dataclass\nfrom enum import Enum\nfrom typing import Any, List, Optional\n\n\nclass QueryStatus(Enum):\n \"\"\"Status einer Query-Ausführung\"\"\"\n\n SUCCESS = \"success\"\n ERROR = \"error\"\n DENIED = \"denied\"\n\n\n@dataclass(frozen=True)\nclass QueryRequest:\n \"\"\"Immutable Query Request - SRP: Nur Query-Daten\"\"\"\n\n query: str\n params: Optional[tuple] = None\n database: str = \"ki_protokoll\"\n max_rows: int = 100\n\n\n@dataclass\nclass QueryResponse:\n \"\"\"Structured Response - SRP: Nur Response-Daten\"\"\"\n\n status: QueryStatus\n data: Optional[List[dict]] = None\n row_count: int = 0\n error: Optional[str] = None\n execution_ms: float = 0.0\n\n def to_dict(self) -> dict:\n \"\"\"Konvertiert Response zu Dictionary für MCP\"\"\"\n return {\n \"status\": self.status.value,\n \"data\": self.data,\n \"row_count\": self.row_count,\n \"error\": self.error,\n \"execution_ms\": self.execution_ms,\n }",
"new_string": "\"\"\"Query Contracts - Request und Response Datenstrukturen.\"\"\"\nfrom dataclasses import dataclass\nfrom enum import Enum\n\n\nclass QueryStatus(Enum):\n \"\"\"Status einer Query-Ausführung.\"\"\"\n\n SUCCESS = \"success\"\n ERROR = \"error\"\n DENIED = \"denied\"\n\n\n@dataclass(frozen=True)\nclass QueryRequest:\n \"\"\"Immutable Query Request - SRP: Nur Query-Daten.\"\"\"\n\n query: str\n params: tuple | None = None\n database: str = \"ki_protokoll\"\n max_rows: int = 100\n\n\n@dataclass\nclass QueryResponse:\n \"\"\"Structured Response - SRP: Nur Response-Daten.\"\"\"\n\n status: QueryStatus\n data: list[dict] | None = None\n row_count: int = 0\n error: str | None = None\n execution_ms: float = 0.0\n\n def to_dict(self) -> dict:\n \"\"\"Konvertiert Response zu Dictionary für MCP.\"\"\"\n return {\n \"status\": self.status.value,\n \"data\": self.data,\n \"row_count\": self.row_count,\n \"error\": self.error,\n \"execution_ms\": self.execution_ms,\n }"
}
}
{
"tool_response": {
"filePath": "\/opt\/mcp-servers\/mcp-db\/domain\/query_contract.py",
"oldString": "\"\"\"Query Contracts - Request und Response Datenstrukturen\"\"\"\nfrom dataclasses import dataclass\nfrom enum import Enum\nfrom typing import Any, List, Optional\n\n\nclass QueryStatus(Enum):\n \"\"\"Status einer Query-Ausführung\"\"\"\n\n SUCCESS = \"success\"\n ERROR = \"error\"\n DENIED = \"denied\"\n\n\n@dataclass(frozen=True)\nclass QueryRequest:\n \"\"\"Immutable Query Request - SRP: Nur Query-Daten\"\"\"\n\n query: str\n params: Optional[tuple] = None\n database: str = \"ki_protokoll\"\n max_rows: int = 100\n\n\n@dataclass\nclass QueryResponse:\n \"\"\"Structured Response - SRP: Nur Response-Daten\"\"\"\n\n status: QueryStatus\n data: Optional[List[dict]] = None\n row_count: int = 0\n error: Optional[str] = None\n execution_ms: float = 0.0\n\n def to_dict(self) -> dict:\n \"\"\"Konvertiert Response zu Dictionary für MCP\"\"\"\n return {\n \"status\": self.status.value,\n \"data\": self.data,\n \"row_count\": self.row_count,\n \"error\": self.error,\n \"execution_ms\": self.execution_ms,\n }",
"newString": "\"\"\"Query Contracts - Request und Response Datenstrukturen.\"\"\"\nfrom dataclasses import dataclass\nfrom enum import Enum\n\n\nclass QueryStatus(Enum):\n \"\"\"Status einer Query-Ausführung.\"\"\"\n\n SUCCESS = \"success\"\n ERROR = \"error\"\n DENIED = \"denied\"\n\n\n@dataclass(frozen=True)\nclass QueryRequest:\n \"\"\"Immutable Query Request - SRP: Nur Query-Daten.\"\"\"\n\n query: str\n params: tuple | None = None\n database: str = \"ki_protokoll\"\n max_rows: int = 100\n\n\n@dataclass\nclass QueryResponse:\n \"\"\"Structured Response - SRP: Nur Response-Daten.\"\"\"\n\n status: QueryStatus\n data: list[dict] | None = None\n row_count: int = 0\n error: str | None = None\n execution_ms: float = 0.0\n\n def to_dict(self) -> dict:\n \"\"\"Konvertiert Response zu Dictionary für MCP.\"\"\"\n return {\n \"status\": self.status.value,\n \"data\": self.data,\n \"row_count\": self.row_count,\n \"error\": self.error,\n \"execution_ms\": self.execution_ms,\n }",
"originalFile": "\"\"\"Query Contracts - Request und Response Datenstrukturen\"\"\"\nfrom dataclasses import dataclass\nfrom enum import Enum\nfrom typing import Any, List, Optional\n\n\nclass QueryStatus(Enum):\n \"\"\"Status einer Query-Ausführung\"\"\"\n\n SUCCESS = \"success\"\n ERROR = \"error\"\n DENIED = \"denied\"\n\n\n@dataclass(frozen=True)\nclass QueryRequest:\n \"\"\"Immutable Query Request - SRP: Nur Query-Daten\"\"\"\n\n query: str\n params: Optional[tuple] = None\n database: str = \"ki_protokoll\"\n max_rows: int = 100\n\n\n@dataclass\nclass QueryResponse:\n \"\"\"Structured Response - SRP: Nur Response-Daten\"\"\"\n\n status: QueryStatus\n data: Optional[List[dict]] = None\n row_count: int = 0\n error: Optional[str] = None\n execution_ms: float = 0.0\n\n def to_dict(self) -> dict:\n \"\"\"Konvertiert Response zu Dictionary für MCP\"\"\"\n return {\n \"status\": self.status.value,\n \"data\": self.data,\n \"row_count\": self.row_count,\n \"error\": self.error,\n \"execution_ms\": self.execution_ms,\n }\n",
"structuredPatch": [
{
"oldStart": 1,
"oldLines": 11,
"newStart": 1,
"newLines": 10,
"lines": [
"-\"\"\"Query Contracts - Request und Response Datenstrukturen\"\"\"",
"+\"\"\"Query Contracts - Request und Response Datenstrukturen.\"\"\"",
" from dataclasses import dataclass",
" from enum import Enum",
"-from typing import Any, List, Optional",
" ",
" ",
" class QueryStatus(Enum):",
"- \"\"\"Status einer Query-Ausführung\"\"\"",
"+ \"\"\"Status einer Query-Ausführung.\"\"\"",
" ",
" SUCCESS = \"success\"",
" ERROR = \"error\""
]
},
{
"oldStart": 14,
"oldLines": 26,
"newStart": 13,
"newLines": 26,
"lines": [
" ",
" @dataclass(frozen=True)",
" class QueryRequest:",
"- \"\"\"Immutable Query Request - SRP: Nur Query-Daten\"\"\"",
"+ \"\"\"Immutable Query Request - SRP: Nur Query-Daten.\"\"\"",
" ",
" query: str",
"- params: Optional[tuple] = None",
"+ params: tuple | None = None",
" database: str = \"ki_protokoll\"",
" max_rows: int = 100",
" ",
" ",
" @dataclass",
" class QueryResponse:",
"- \"\"\"Structured Response - SRP: Nur Response-Daten\"\"\"",
"+ \"\"\"Structured Response - SRP: Nur Response-Daten.\"\"\"",
" ",
" status: QueryStatus",
"- data: Optional[List[dict]] = None",
"+ data: list[dict] | None = None",
" row_count: int = 0",
"- error: Optional[str] = None",
"+ error: str | None = None",
" execution_ms: float = 0.0",
" ",
" def to_dict(self) -> dict:",
"- \"\"\"Konvertiert Response zu Dictionary für MCP\"\"\"",
"+ \"\"\"Konvertiert Response zu Dictionary für MCP.\"\"\"",
" return {",
" \"status\": self.status.value,",
" \"data\": self.data,"
]
}
],
"userModified": false,
"replaceAll": false
}
}