ForcePilot/backend/package/yuxi/channels/contract/policy/config_schema.py
Kris b88c0ae29e feat(channels): 批量新增多渠道网关限界上下文基础代码与契约
新增完整的 channels 限界上下文模块,包含契约层、领域核心层、应用服务、管道编排、插件体系、基础设施组合根等全层级代码,新增飞书与微信 iLink 渠道插件基础结构,补充各类 DTO、端口协议与领域服务实现。
2026-07-02 03:22:12 +08:00

89 lines
6.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.

"""配置 schema 元数据契约层定义。
定义配置字段的完整 schema 元数据(``CONFIG_SCHEMA``),包括键、类型、
是否必填、默认值、是否可热更新与约束,作为配置 schema 的唯一真相源
§13.1 配置分层 / §6.1 契约层职责)。适配器(如 ``RedisConfigAdapter``
与应用层(如 ``ConfigManager``)共享引用本模块,消除 schema 元数据
下沉至适配器层的 DRY 违反。
``HOT_RELOADABLE_KEYS`` / ``NON_HOT_RELOADABLE_KEYS`` 从 ``CONFIG_SCHEMA``
派生,供 ``ConfigManager`` 做热更新策略校验ADP-030
"""
from __future__ import annotations
from yuxi.channels.contract.dtos.config import ConfigField
# 配置 schema全部配置字段的完整元数据FR-37 配置热更新)。
# 31 个可热更新字段 + 9 个不可热更新字段,共 40 个。
# 字段顺序先可热更新hot_reloadable=True后不可热更新hot_reloadable=False
CONFIG_SCHEMA: tuple[ConfigField, ...] = (
# === 可热更新字段hot_reloadable=True===
ConfigField(key="dm_policy", type="json", required=False, default=None, hot_reloadable=True),
ConfigField(key="allow_from", type="json", required=False, default=None, hot_reloadable=True),
ConfigField(key="rate_limit", type="json", required=False, default=None, hot_reloadable=True),
ConfigField(key="bot_loop_budget", type="int", required=False, default=0, hot_reloadable=True),
# FR-08~14 功能开关Task 30
ConfigField(key="rich_message_enabled", type="bool", required=False, default=False, hot_reloadable=True),
ConfigField(key="status_writeback_enabled", type="bool", required=False, default=False, hot_reloadable=True),
ConfigField(key="agent_prompt_enabled", type="bool", required=False, default=False, hot_reloadable=True),
ConfigField(key="channel_tools_enabled", type="bool", required=False, default=False, hot_reloadable=True),
# AC-22: 消息操作开关默认"开"FR-12
ConfigField(key="message_ops_enabled", type="bool", required=False, default=True, hot_reloadable=True),
ConfigField(key="streaming_enabled", type="bool", required=False, default=False, hot_reloadable=True),
ConfigField(key="enable_typing", type="bool", required=False, default=True, hot_reloadable=True),
ConfigField(key="directory_enabled", type="bool", required=False, default=False, hot_reloadable=True),
ConfigField(key="command_enabled", type="bool", required=False, default=True, hot_reloadable=True),
# FR-12 消息操作细粒度开关PRD §FR-12 配置项)。
# AC-22 默认行为:表情反应"开"、置顶"关"、卡片更新"关"。
ConfigField(key="enable_reaction", type="bool", required=False, default=True, hot_reloadable=True),
ConfigField(key="enable_pin", type="bool", required=False, default=False, hot_reloadable=True),
ConfigField(key="enable_card_update", type="bool", required=False, default=False, hot_reloadable=True),
# FR-15 管理员命令权限白名单账户级JSON 数组,存放允许执行 ADMIN 权限命令的 peer_id
ConfigField(key="admin_users", type="json", required=False, default=None, hot_reloadable=True),
# FR-29 入站提及策略账户级JSON含 allowed_implicit_kinds 列表,
# 控制哪些隐式提及类型被视为"已提及",未配置时默认空策略)
ConfigField(key="mention_policy", type="json", required=False, default=None, hot_reloadable=True),
# FR-07 会话合并策略开关(默认禁用)
ConfigField(key="merge_strategy_enabled", type="bool", required=False, default=False, hot_reloadable=True),
# FR-06 跨渠道身份策略(默认隔离,可选 association 开启跨渠道关联)
ConfigField(
key="cross_channel_identity_strategy", type="str", required=False, default="isolation", hot_reloadable=True
),
# 可配置值Task 30
ConfigField(key="command_prefix", type="str", required=False, default="/", hot_reloadable=True),
ConfigField(key="fence_ttl_seconds", type="int", required=False, default=120, hot_reloadable=True),
ConfigField(key="streaming_min_chunk_interval_ms", type="int", required=False, default=200, hot_reloadable=True),
ConfigField(key="streaming_ttl_seconds", type="int", required=False, default=60, hot_reloadable=True),
ConfigField(key="typing_ttl_ms", type="int", required=False, default=10000, hot_reloadable=True),
ConfigField(key="durability_policy_default", type="str", required=False, default="required", hot_reloadable=True),
# FR-24 分阶段 ACK 策略PRD §FR-24
# 四阶段策略after_record / after_agent_dispatch / after_persist / manual
# 默认 after_agent_dispatch平衡可靠性与响应速度
ConfigField(key="ack_policy", type="str", required=False, default="after_agent_dispatch", hot_reloadable=True),
# 手动策略下插件忘记 ACK 时核心兜底超时(默认 60s自动 ACK。
ConfigField(key="ack_fallback_timeout_seconds", type="int", required=False, default=60, hot_reloadable=True),
# 传输引擎配置
ConfigField(key="transport.stall_timeout_ms", type="int", required=False, default=120000, hot_reloadable=True),
ConfigField(key="transport.backoff_schedule", type="str", required=False, default="1,2,5,10,30", hot_reloadable=True),
ConfigField(key="transport.backoff_jitter", type="float", required=False, default=0.2, hot_reloadable=True),
# === 不可热更新字段hot_reloadable=False===
ConfigField(key="webhook_port", type="int", required=False, default=None, hot_reloadable=False),
ConfigField(key="webhook_secret", type="str", required=False, default=None, hot_reloadable=False),
ConfigField(key="tls_cert", type="str", required=False, default=None, hot_reloadable=False),
ConfigField(key="tls_key", type="str", required=False, default=None, hot_reloadable=False),
ConfigField(key="plugin_entry", type="str", required=False, default=None, hot_reloadable=False),
ConfigField(key="database_url", type="str", required=False, default=None, hot_reloadable=False),
ConfigField(key="redis_url", type="str", required=False, default=None, hot_reloadable=False),
ConfigField(key="transport.max_restart_attempts", type="int", required=False, default=None, hot_reloadable=False),
ConfigField(key="transport.graceful_shutdown_timeout_s", type="float", required=False, default=10.0, hot_reloadable=False),
)
# 可热更新的配置项键集合FR-37从 CONFIG_SCHEMA 派生。
HOT_RELOADABLE_KEYS = frozenset(f.key for f in CONFIG_SCHEMA if f.hot_reloadable)
# 不可热更新的配置项键集合FR-37从 CONFIG_SCHEMA 派生。
NON_HOT_RELOADABLE_KEYS = frozenset(f.key for f in CONFIG_SCHEMA if not f.hot_reloadable)
__all__ = ["CONFIG_SCHEMA", "HOT_RELOADABLE_KEYS", "NON_HOT_RELOADABLE_KEYS"]