class AgentError(Exception): """Base error with a stable public code.""" code = "AGENT_ERROR" status_code = 500 def __init__(self, message: str) -> None: super().__init__(message) self.message = message class ValidationAgentError(AgentError): code = "VALIDATION_ERROR" status_code = 400 class UnauthorizedAgentError(AgentError): code = "UNAUTHORIZED" status_code = 401 class AgentTypeNotFoundError(ValidationAgentError): code = "AGENT_TYPE_NOT_FOUND" status_code = 404 class ForbiddenAgentError(AgentError): code = "FORBIDDEN" status_code = 403 class ConflictAgentError(AgentError): code = "CONFLICT" status_code = 409 class IdempotencyConflictError(ConflictAgentError): code = "IDEMPOTENCY_CONFLICT" class RecoverableAgentError(AgentError): code = "RECOVERABLE_ERROR" status_code = 503 class RunLeaseLostError(ConflictAgentError): code = "RUN_LEASE_LOST" class ResourceNotFoundError(AgentError): code = "RESOURCE_NOT_FOUND" status_code = 404