{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/domain\/ports\/http_fetcher_port.py",
"content": "from __future__ import annotations\n\nfrom abc import ABC, abstractmethod\nfrom dataclasses import dataclass\nfrom typing import Mapping\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"
}
}
{
"tool_response": {
"type": "create",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/crawler\/src\/domain\/ports\/http_fetcher_port.py",
"content": "from __future__ import annotations\n\nfrom abc import ABC, abstractmethod\nfrom dataclasses import dataclass\nfrom typing import Mapping\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": [],
"originalFile": null,
"userModified": false
}
}