""" 统一场景 DSL(阶段 3):场景可编程输入契约,供入口 / 模板 / 外部系统对齐。 """ from typing import Any, Dict, List, Tuple from pydantic import BaseModel, Field class ScenarioDSL(BaseModel): """标准输入:目标、约束、产物、验收 + 业务载荷。""" version: str = "1" scene: str = Field(default="", description="场景标识,如 customer_service / dev_codegen") goal: str = Field(default="", description="业务目标") constraints: List[str] = Field(default_factory=list, description="硬约束") deliverables: List[str] = Field(default_factory=list, description="期望产出") acceptance: List[str] = Field(default_factory=list, description="验收标准") payload: dict[str, Any] = Field(default_factory=dict, description="扩展键值") def validate_scenario_dsl(raw: Any) -> Tuple[bool, List[str]]: """ 校验场景 DSL。根须为 object,字段通过 Pydantic 校验。 Returns: (是否通过, 错误文案列表) """ if not isinstance(raw, dict): return False, ["DSL 根须为 JSON object"] try: ScenarioDSL.model_validate(raw) except Exception as e: return False, [str(e)] return True, [] def normalize_scenario_dsl(raw: dict) -> Dict[str, Any]: """校验后得到规范 dict,便于写入节点上下文。""" return ScenarioDSL.model_validate(raw).model_dump()