ForcePilot/backend/package/yuxi/channels/contract/dtos/command.py
Kris 0d067d61d3 chore: 批量更新契约与实现,修复多处细节问题
本次提交包含多类代码优化与修复:
1. 重命名适配器协议类:WebhookTestable→WebhookTestAdapter、AttachmentUploadable→AttachmentUploadAdapter,并同步更新所有引用
2. 为飞书/企业微信插件添加凭证克隆能力开关配置
3. 修复飞书入站适配器URL解析错误,使用hostname替代host属性
4. 新增批量发送消息DTO与已读状态DTO
5. 新增插件目录列表接口与插件能力校验规则
6. 修复权限阶段配置,添加analytics权限映射
7. 优化健康检查、限流模块的环境变量配置支持
8. 修复配对过期扫描器参数名不匹配问题
9. 优化日志调用、文档注释与代码可读性
10. 移除废弃的AuditExportTask聚合根与相关导入
2026-07-02 18:27:06 +08:00

114 lines
3.1 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。
定义渠道命令注册与执行的不可变值对象,包括命令权限、命令 ID、渠道命令、
命令响应与命令结果。所有 DTO 均为 ``dataclass(frozen=True)``,依赖
标准库与契约层 ``ValidationError``,用于命令插件注册与命令执行结果回传。
"""
from __future__ import annotations
from dataclasses import dataclass
from enum import StrEnum
from yuxi.channels.errors.client import ValidationError
class CommandPermission(StrEnum):
"""命令权限。
标识渠道命令的可见性与执行权限层级,用于命令注册时声明与执行时校验。
继承 ``str, Enum`` 以支持 JSON 序列化与字符串比较。
取值:
PRIVATE: 仅私聊可用。
GROUP: 仅群聊可用。
ADMIN: 仅管理员可用。
ALL: 所有场景可用。
"""
PRIVATE = "private"
GROUP = "group"
ADMIN = "admin"
ALL = "all"
@dataclass(frozen=True)
class CommandId:
"""命令 ID。
标识一条已注册的渠道命令的全局唯一 ID用于命令路由与审计关联。
字段:
value: 命令 ID 字符串。
"""
value: str
@dataclass(frozen=True)
class ChannelCommand:
"""渠道命令。
描述渠道命令的元信息,由命令插件声明,用于命令注册、权限校验与帮助
文档生成。
字段:
name: 命令名称。
description: 命令描述。
permission: 命令权限(默认 ALL
is_silent: 是否静默执行(不回显响应,默认 False
"""
name: str
description: str
permission: CommandPermission = CommandPermission.ALL
is_silent: bool = False
def __post_init__(self) -> None:
"""校验必填字段非空。
``name`` 与 ``description`` 必须非空,在构造时即抛出
``ValidationError``adapter 不再做该校验INV-8
"""
if not self.name:
raise ValidationError("name", "must not be empty")
if not self.description:
raise ValidationError("description", "must not be empty")
@dataclass(frozen=True)
class CommandResponse:
"""命令响应。
描述命令执行后返回给渠道的内容,支持指定内容类型与回复目标。
字段:
content: 响应内容。
content_type: 内容类型text | markdown | rich默认 text
target: 回复目标None 表示原会话。
is_silent: 是否静默(不回显,默认 False
"""
content: str
content_type: str = "text"
target: str | None = None
is_silent: bool = False
@dataclass(frozen=True)
class CommandResult:
"""命令结果。
描述命令执行的最终结果,携带命令名、是否静默与可选的响应内容,用于
管道下游决策是否回显与审计记录。
字段:
command: 命令名。
is_silent: 是否静默执行(默认 False
response: 命令响应(无响应时为 None
"""
command: str
is_silent: bool = False
response: CommandResponse | None = None