"""状态域模型:bridge 状态响应。""" from __future__ import annotations from typing import Optional from pydantic import BaseModel, Field from woc_bridge.models.login import LoginState # --------------------------------------------------------------------------- # 状态接口(GET /api/status) # --------------------------------------------------------------------------- class StatusResponse(BaseModel): """bridge 状态响应。 新增字段(1.1.0): - db_error_code:DB 不可达时的具体原因(encrypted / not_found / unreadable), db_accessible=true 时为 None - send_queue_pending:发送队列当前积压任务数,客户端据此决定是否退避 - media_supported:图片/文件发送是否已实现真实传输(与 BRIDGE_CAPABILITIES 中 image_send/file_send 同步) - bridge_capabilities:当前 bridge 支持的能力集合,客户端据此协商 - ui_scheduler:UI 调度器指标(仅 UIActionScheduler 实例才有,含 executed_total/executed_by_priority/pending_count 等) """ bridge_version: str = Field(description="bridge 版本号") wechat_running: bool = Field(description="微信进程是否运行") wechat_window_found: bool = Field(description="是否找到微信窗口") login_state: LoginState = Field(description="登录态") db_accessible: bool = Field(description="微信本地 DB 是否可读") db_error_code: Optional[str] = Field( default=None, description="DB 不可达原因:not_found / unreadable / encrypted_no_key / encrypted_key_ok / key_extract_failed / need_init / init_in_progress / key_invalid;db_accessible=true 时为 None", ) init_in_progress: bool = Field(default=False, description="是否正在进行后台 DB 初始化(密钥提取/预解密)") init_progress_pct: Optional[float] = Field(default=None, description="初始化进度百分比 0-100") init_message: Optional[str] = Field(default=None, description="初始化阶段描述") current_wxid: str = Field(default="", description="当前登录 wxid,未登录时为空") current_nickname: str = Field(default="", description="当前登录昵称,未登录时为空") uptime_seconds: float = Field(description="bridge 已运行秒数") display: str = Field(description="当前 DISPLAY 环境变量值") max_batch_size: int = Field(default=50, description="客户端单次拉取建议上限") poll_interval_ms: int = Field(default=2000, description="客户端轮询建议间隔(毫秒)") send_queue_pending: int = Field(default=0, description="发送队列积压任务数") media_supported: bool = Field(default=False, description="图片/文件真实传输是否已实现") bridge_capabilities: list[str] = Field( default_factory=list, description="bridge 支持的能力集合,如 ['text_send','image_send','long_poll']", ) ui_scheduler: Optional[dict] = Field( default=None, description="UI 调度器指标(仅 UIActionScheduler 实例才有,含 executed_total/executed_by_priority/pending_count 等)", )