ForcePilot/backend/package/yuxi/channels/contract/dtos/capability.py
Kris 00092c818e chore: 批量代码优化与规范完善
本次提交包含多项代码优化与规范修正:
1. 文档与注释优化:修正注释术语、补充注解与FR编号
2. 代码格式调整:统一空格、换行与缩进规范
3. 类型与接口完善:补充__all__导出、修正返回类型注解
4. 错误处理增强:新增领域错误类与校验逻辑
5. 依赖与导入调整:修复路径引用、统一时区导入
6. 协议与契约更新:完善接口文档与一致性注解
2026-07-03 19:18:13 +08:00

137 lines
5.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""能力 DTO。
定义渠道能力相关的不可变值对象,包括渠道能力集合与能力探测结果。
所有 DTO 均为 ``dataclass(frozen=True)``,仅依赖标准库,用于渠道
能力声明、探测与降级决策。
"""
from __future__ import annotations
from dataclasses import dataclass
from yuxi.channels.contract.errors import ValidationError
@dataclass(frozen=True)
class ChannelCapabilities:
"""渠道能力集合。
描述渠道支持的能力集合,全部为 ``bool`` 类型的能力声明字段,用于
适配器能力声明与降级决策。
字段(按语义分组):
基础消息能力:
rich_message: 是否支持富消息(默认 False
streaming: 是否支持流式输出(默认 False
typing_indicator: 是否支持输入指示(默认 False。由出站
适配器承载,不在加载期校验范围,运行时由
``CapabilityVerifier`` 证明。
message_edit: 是否支持消息编辑(默认 False
message_recall: 是否支持消息撤回(默认 False
消息操作子能力(任一为 True 时要求 ``message_ops_adapters`` 非空):
supports_reaction: 是否支持表情反应(默认 FalseFR-12
supports_pin: 是否支持置顶(默认 FalseFR-12
supports_card_update: 是否支持投递完成后的卡片刷新
``MessageOpsAdapter.updateCard``,默认 FalseFR-12
**不** 涵盖流式输出过程中的渐进式卡片更新,后者由
``supports_card_update_streaming`` 声明。
supports_card_update_streaming: 是否支持流式输出过程中的
渐进式卡片更新(``StreamingAdapter.updateFullCard`` /
``updatePartialCard``,默认 False。声明为 True 时要求
``streaming_adapters`` 非空。
媒体能力FR-43
supports_image_inbound: 是否支持入站图片(默认 False
supports_video_inbound: 是否支持入站视频(默认 False
supports_image_outbound: 是否支持出站图片(默认 False
supports_video_outbound: 是否支持出站视频(默认 False
扩展能力:
mention: 是否支持提及(默认 False
command: 是否支持命令(默认 FalseFR-15
directory: 是否支持目录查询(默认 FalseFR-14
doctor: 是否支持配置诊断与自动修复(默认 FalseFR-17
whitelist: 是否支持白名单管理(默认 FalseFR-18
wizard: 是否支持配置向导(默认 FalseFR-16。声明为 True
时要求 ``wizard_adapters`` 非空。
tools: 是否支持工具能力(默认 FalseFR-12 工具暴露)。
声明为 True 时要求 ``tools_adapters`` 非空。
status: 是否支持状态分类(默认 False。声明为 True 时要求
``status_adapters`` 非空;未声明的渠道默认将所有事件
分类为 MESSAGE。
probeable: 是否支持连接探测(默认 FalseFR-17 探测)。
声明为 True 时要求 ``probeable_adapters`` 非空。
identity_resolver: 是否支持身份解析适配器(默认 False
由 ``IdentityResolverPort`` 承载,不在加载期校验范围,
运行时由 ``CapabilityVerifier`` 证明。
生命周期与协作能力:
lifecycle: 是否实现账户生命周期适配器(默认 FalseAL-01
supports_qr_login: 是否支持扫码登录(默认 FalseQR-02
agent_collaboration: 是否支持多 Agent 协作(默认 False
FR-AgentCollab。声明为 True 时要求 ``mention_adapters``
非空FR-21 契约一致性)。
"""
# 基础消息能力
rich_message: bool = False
streaming: bool = False
typing_indicator: bool = False
message_edit: bool = False
message_recall: bool = False
# 消息操作子能力
supports_reaction: bool = False
supports_pin: bool = False
supports_card_update: bool = False
supports_card_update_streaming: bool = False
# 媒体能力FR-43
supports_image_inbound: bool = False
supports_video_inbound: bool = False
supports_image_outbound: bool = False
supports_video_outbound: bool = False
# 扩展能力
mention: bool = False
command: bool = False
directory: bool = False
doctor: bool = False
whitelist: bool = False
wizard: bool = False
tools: bool = False
status: bool = False
probeable: bool = False
identity_resolver: bool = False
# 生命周期与协作能力
lifecycle: bool = False
supports_qr_login: bool = False
agent_collaboration: bool = False
@dataclass(frozen=True)
class CapabilityResult:
"""能力探测结果。
描述单项能力的探测结果,包括声明层、证明层与降级标记,用于能力
探测流程的决策与审计。
字段:
capability: 能力名称。
declared: 声明层是否支持。
proven: 证明层是否验证通过(默认 False
degraded: 是否降级(默认 False
"""
capability: str
declared: bool
proven: bool = False
degraded: bool = False
def __post_init__(self) -> None:
"""校验 capability 非空。
``capability`` 必须非空,在构造时即抛出 ``ValidationError``
避免空能力名称传播到探测决策INV-8
"""
if not self.capability:
raise ValidationError("capability", "must not be empty")