# Roleplay MVU 兼容

将社区角色卡、世界书和开场白中的常见 MVU 变量转换为 Roleplay 的会话变量，让生命值、关系、物品、任务进度等状态能够随故事持续更新。

插件支持常见的声明式初始化、变量修改和只读模板。它不会执行任意 JavaScript；无法安全转换的内容会被停用并给出诊断，不会伪装成已兼容。

## 规则路径兼容

- 点号和括号路径会转换为原生 JSON Pointer，例如 `世界.具体时间`、`角色[0].状态`、`["含.点键名"]`。
- `角色.*`、`${变量名}` 表示分组模式。若初始值和 Schema 能证明候选集合封闭，就展开为逐项精确规则；具体路径规则会覆盖同一路径的通配规则。
- `${角色名: 甲 | 乙}` 和 `生命值 | 魔力值` 是有限路径并集，会安全展开为多个精确规则。
- 无法封闭枚举的 `*` 或 `${变量名}` 只转换为分组 Schema 和模型指导，并令分区使用 `schema-only`；不会把通配符作为字面键，也不会传给只接受精确路径的原生 State。
- `stat_data`、`display_data` 等 MVU 临时根别名会在转换时去除，不会成为持久变量层级。

## MVU Zod 声明兼容

安全类型子集包括基础类型、字符串字面量并集、对象、可选字段、`T[]`、`Array<T>`、索引签名和 `Record<string, T>`。空值可作为尚未初始化的占位值，声明类型会保留其可空性。重复的 YAML 分组仅在内容可递归合并时合并；全局规则会关联到变量根组。

动态脚本、互相冲突的重复字段、无法确定含义的伪 TypeScript/Zod 文本仍然失败关闭，并保留诊断。
