"""按动作维护生成说明,字段类型和必填约束放在 schemas/actions""" # 新增动作时在这里补充模型需要理解的执行语义 ACTION_RULES: dict[str, str] = { "update_canvas": """## update_canvas:更新画布属性 将 canvas 范围的 update、resize 或 update_canvas 需求转换为此动作,不填写 target_id properties 只包含需要修改的画布顶层字段,宽高为最终绝对值,相对变化依据当前画布换算 顶层字段整体替换,未提供的字段保持不变;改变画布尺寸不会自动缩放或移动组件 """, "delete": """## delete:删除已有组件 使用真实 target_id,只删除需求明确指定的组件;规划中的 remove 对应 delete 每个目标仅删除一次,删除后不能再移动、调整尺寸或更新该目标 不删除共享数据源,不把 keep、modify 或未提及的组件当作删除目标 """, "move": """## move:移动已有组件 位移单位为 px;需求给出绝对位置时,减去组件当前坐标得到 delta_x / delta_y 例如当前 x=100,目标 x=150,生成 delta_x=50 """, "resize": """## resize:调整已有组件尺寸 设置绝对宽高;需求给出相对变化时,依据当前尺寸换算 不需要改变的尺寸省略,不改变组件位置 """, "update": """## update:更新已有组件属性 字段路径的第一段写入 section(name / props / style),其余各段写入 path,数字段写成整数下标;name 的 path 为空列表 例如字段 props.option.title.text 写成 section=props、path=["option", "title", "text"] layout 字段不用 update:位置用 move,尺寸用 resize 只替换指定字段,不做深度合并;组件中还没有的中间对象由后端补齐 不通过修改属性改变组件类型(如把 series 的 type 改成其他图表类型),组件类型由节点 type 和物料决定 """, "add": """## add:按物料新增组件 每个 add 规划对应一个新增动作,用 plan_id 关联规划,component_key 选择 component_materials 中的物料 node.id 使用不与已有节点冲突的新 ID(更换类型时沿用原 ID),node.type 必须与物料和规划一致 component_materials 提供物料默认 schema,依据它和设计要求生成 node 后端会用物料默认配置补全 node:对象逐层覆盖,数组整体替换,null 明确覆盖 物料示例数据仅作占位展示,sample_data 由后端依据物料设置,不代表已获取真实数据 """, }