""" Базовые абстракции контрактов безопасности «ИБ 3.0». """ from dataclasses import dataclass from typing import Any, Dict, Optional @dataclass class ContractVerdict: """Вердикт проверки контракта допустимости.""" allowed: bool reason: str rule_id: str details: Optional[Dict[str, Any]] = None class BaseSecurityContract: """Базовый класс для детерминированных контрактов допустимости.""" name: str = "base_contract" rule_id: str = "SEC-000" def check_tool_call(self, tool_name: str, arguments: Dict[str, Any]) -> ContractVerdict: """ Проверка входящего вызова инструмента (Tool Call) от LLM/агента. Возвращает ContractVerdict: allowed=True (PERMIT) или allowed=False (BLOCK). """ return ContractVerdict(allowed=True, reason="Pass", rule_id=self.rule_id) def check_tool_result(self, tool_name: str, result_content: str) -> ContractVerdict: """ Проверка исходящего ответа от инструмента (например, защита от утечки секретов наружу). """ return ContractVerdict(allowed=True, reason="Pass", rule_id=self.rule_id)