{
"event": "PostToolUse",
"tool_name": "Read",
"tool_response": {
"type": "text",
"file": {
"filePath": "\/var\/www\/mcp-servers\/mcp_contracts\/domain\/contracts.py",
"content": "\"\"\"Domain Entities für MCP-Contracts Server\"\"\"\nfrom dataclasses import dataclass, field\nfrom datetime import datetime\nfrom enum import Enum\nfrom typing import Optional, Dict, Any, List\n\n\nclass ContractStatus(str, Enum):\n \"\"\"Contract-Status-Werte\"\"\"\n DRAFT = \"draft\"\n ACTIVE = \"active\"\n DEPRECATED = \"deprecated\"\n\n\n@dataclass\nclass Contract:\n \"\"\"Contract-Entity für Datenbank\"\"\"\n id: Optional[int] = None\n uuid: str = \"\"\n name: str = \"\"\n version: str = \"1.0\"\n status: ContractStatus = ContractStatus.ACTIVE\n yaml_content: str = \"\"\n scope_description: Optional[str] = None\n created_at: datetime = field(default_factory=datetime.now)\n created_by: str = \"system\"\n updated_at: datetime = field(default_factory=datetime.now)\n\n def to_dict(self) -> Dict[str, Any]:\n \"\"\"Vollständige Darstellung\"\"\"\n return {\n \"id\": self.id,\n \"uuid\": self.uuid,\n \"name\": self.name,\n \"version\": self.version,\n \"status\": self.status.value if isinstance(self.status, ContractStatus) else self.status,\n \"yaml_content\": self.yaml_content,\n \"scope_description\": self.scope_description,\n \"created_at\": self.created_at.isoformat() if self.created_at else None,\n \"created_by\": self.created_by,\n \"updated_at\": self.updated_at.isoformat() if self.updated_at else None,\n }\n\n def to_dict_compact(self) -> Dict[str, Any]:\n \"\"\"Kompakte Darstellung für Listen (Token-sparend)\"\"\"\n return {\n \"id\": self.id,\n \"name\": self.name,\n \"version\": self.version,\n \"status\": self.status.value if isinstance(self.status, ContractStatus) else self.status,\n \"scope_description\": self.scope_description,\n }\n\n\n@dataclass\nclass ContractHistory:\n \"\"\"Contract-Änderungshistorie\"\"\"\n id: Optional[int] = None\n contract_id: int = 0\n previous_yaml: Optional[str] = None\n previous_version: Optional[str] = None\n change_description: Optional[str] = None\n changed_at: datetime = field(default_factory=datetime.now)\n changed_by: str = \"system\"\n\n def to_dict(self) -> Dict[str, Any]:\n return {\n \"id\": self.id,\n \"contract_id\": self.contract_id,\n \"previous_version\": self.previous_version,\n \"change_description\": self.change_description,\n \"changed_at\": self.changed_at.isoformat() if self.changed_at else None,\n \"changed_by\": self.changed_by,\n }\n\n\n@dataclass\nclass ContractValidation:\n \"\"\"Contract-Validierungslauf\"\"\"\n id: Optional[int] = None\n contract_id: int = 0\n validated_at: datetime = field(default_factory=datetime.now)\n result: str = \"passed\" # passed | failed\n critical_count: int = 0\n major_count: int = 0\n minor_count: int = 0\n violations: List[Dict[str, Any]] = field(default_factory=list)\n triggered_by: str = \"mcp\" # sync | manual | hook | mcp\n target_path: Optional[str] = None\n duration_ms: int = 0\n\n def to_dict(self) -> Dict[str, Any]:\n return {\n \"id\": self.id,\n \"contract_id\": self.contract_id,\n \"validated_at\": self.validated_at.isoformat() if self.validated_at else None,\n \"result\": self.result,\n \"critical_count\": self.critical_count,\n \"major_count\": self.major_count,\n \"minor_count\": self.minor_count,\n \"violations\": self.violations,\n \"triggered_by\": self.triggered_by,\n \"target_path\": self.target_path,\n \"duration_ms\": self.duration_ms,\n }\n\n\n@dataclass\nclass ContractValidationResult:\n \"\"\"Ergebnis einer Contract-Validierung (in-memory)\"\"\"\n contract: str = \"\"\n outcome: str = \"passed\" # passed | revision_required | rejected\n critical: int = 0\n major: int = 0\n minor: int = 0\n findings: List[Dict[str, Any]] = field(default_factory=list)\n\n def to_dict(self) -> Dict[str, Any]:\n return {\n \"contract\": self.contract,\n \"outcome\": self.outcome,\n \"violations\": {\n \"critical\": self.critical,\n \"major\": self.major,\n \"minor\": self.minor,\n },\n \"findings\": self.findings,\n }\n\n\n@dataclass\nclass LogEntry:\n \"\"\"Log-Eintrag für mcp_log Tabelle\"\"\"\n client_name: str = \"mcp-contracts\"\n tool_name: str = \"\"\n request: str = \"\"\n status: str = \"success\" # success | denied | error\n duration_ms: int = 0\n error_message: Optional[str] = None\n timestamp: datetime = field(default_factory=datetime.now)\n",
"numLines": 141,
"startLine": 1,
"totalLines": 141
}
}
}