"""插件层公共异常,独立模块避免循环导入。""" class AccountFrozenError(RuntimeError): """ 插件在检测到账号被限流/额度用尽时抛出,携带解冻时间戳(Unix 秒)。 由 chat_handler 捕获后写入配置并重试其他账号。 """ def __init__(self, message: str, unfreeze_at: int) -> None: super().__init__(message) self.unfreeze_at = unfreeze_at class BrowserResourceInvalidError(RuntimeError): """页面 / tab / browser 资源失效时抛出,供上层做定向回收与重试。""" def __init__( self, detail: str, *, helper_name: str, operation: str, stage: str, resource_hint: str, request_url: str, page_url: str, request_id: str | None = None, stream_phase: str | None = None, proxy_key: object | None = None, type_name: str | None = None, account_id: str | None = None, ) -> None: super().__init__(detail) self.detail = detail self.helper_name = helper_name self.operation = operation self.stage = stage self.resource_hint = resource_hint self.request_url = request_url self.page_url = page_url self.request_id = request_id self.stream_phase = stream_phase self.proxy_key = proxy_key self.type_name = type_name self.account_id = account_id