{
"event": "PreToolUse",
"tool_name": "Edit",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/domain\/ports\/http_fetcher_port.py",
"old_string": "from src.domain.value_objects.normalized_url import NormalizedUrl\n\n\n@dataclass(frozen=True, slots=True)\nclass FetchResult:\n final_url: str\n status_code: int\n redirect_chain: tuple[str, ...]\n headers: Mapping[str, str]\n body: bytes\n response_time_ms: int\n ttfb_ms: int | None\n error: str | None",
"new_string": "from src.domain.value_objects.normalized_url import NormalizedUrl\nfrom src.domain.value_objects.performance_metrics import PerformanceMetrics\n\n\n@dataclass(frozen=True, slots=True)\nclass FetchResult:\n final_url: str\n status_code: int\n redirect_chain: tuple[str, ...]\n headers: Mapping[str, str]\n body: bytes\n response_time_ms: int\n ttfb_ms: int | None\n error: str | None\n performance: PerformanceMetrics | None = None",
"replace_all": false
}
}
{
"tool_response": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/domain\/ports\/http_fetcher_port.py",
"oldString": "from src.domain.value_objects.normalized_url import NormalizedUrl\n\n\n@dataclass(frozen=True, slots=True)\nclass FetchResult:\n final_url: str\n status_code: int\n redirect_chain: tuple[str, ...]\n headers: Mapping[str, str]\n body: bytes\n response_time_ms: int\n ttfb_ms: int | None\n error: str | None",
"newString": "from src.domain.value_objects.normalized_url import NormalizedUrl\nfrom src.domain.value_objects.performance_metrics import PerformanceMetrics\n\n\n@dataclass(frozen=True, slots=True)\nclass FetchResult:\n final_url: str\n status_code: int\n redirect_chain: tuple[str, ...]\n headers: Mapping[str, str]\n body: bytes\n response_time_ms: int\n ttfb_ms: int | None\n error: str | None\n performance: PerformanceMetrics | None = None",
"originalFile": "from __future__ import annotations\n\nfrom abc import ABC, abstractmethod\nfrom collections.abc import Mapping\nfrom dataclasses import dataclass\n\nfrom src.domain.value_objects.normalized_url import NormalizedUrl\n\n\n@dataclass(frozen=True, slots=True)\nclass FetchResult:\n final_url: str\n status_code: int\n redirect_chain: tuple[str, ...]\n headers: Mapping[str, str]\n body: bytes\n response_time_ms: int\n ttfb_ms: int | None\n error: str | None\n\n\nclass HttpFetcherPort(ABC):\n @abstractmethod\n async def fetch(self, url: NormalizedUrl) -> FetchResult: ...\n",
"structuredPatch": [
{
"oldStart": 5,
"oldLines": 6,
"newStart": 5,
"newLines": 7,
"lines": [
" from dataclasses import dataclass",
" ",
" from src.domain.value_objects.normalized_url import NormalizedUrl",
"+from src.domain.value_objects.performance_metrics import PerformanceMetrics",
" ",
" ",
" @dataclass(frozen=True, slots=True)"
]
},
{
"oldStart": 17,
"oldLines": 6,
"newStart": 18,
"newLines": 7,
"lines": [
" response_time_ms: int",
" ttfb_ms: int | None",
" error: str | None",
"+ performance: PerformanceMetrics | None = None",
" ",
" ",
" class HttpFetcherPort(ABC):"
]
}
],
"userModified": false,
"replaceAll": false
}
}