# Changelog

本项目遵循 [Semantic Versioning](https://semver.org/)。

## Unreleased

## 0.1.8 - 2026-09-03

- 重整内置“示例预设”与“通用叙事”的职责和表述：保留“扮演或导演主角”的参与模式，明确核心决定边界不等同于逐句控制，要求主角持续说话、思考、临场判断和行动；伤害结果改由已发生行动、人物能力、环境与应对共同决定；配角内心使用独立段落、明确归属与单人连续切换；篇幅不再使用模糊的“中等”标准，收束以正文中可见的变化与直接影响为准。“通用叙事”恢复主角内心的间接呈现，不再用固定因果链或单一段落职责限制表达。成人亲密场景不再作为内置示例预设的独立栏位。未编辑的托管旧资料会保留既有资产、栏位 ID 与分组标签设置并升级内容。
- 将 DSH 兼容基线从 `0.1.2-alpha.5` 提升到 `0.1.2-rc.1`：Session Event Log 继续使用 `snapshotEvents()`、`eventAt()`、`seq`、`isSeeded` 与精确的 `inheritedEventCount`；持久化回归测试对齐 `flush()`、`list()`、`inspect()` 与 `prepare()` 的当前所有权边界；Session、Agent、Conversation、Renderer 与结构化子代理的插件接入面没有实际变化，全部 DSH 开发依赖、peer dependency、公开 lockfile 与 Typert 生成元数据精确对齐。现有 JSONL 会话格式保持兼容，无需数据改写。
- 修复 Chat 提交失败或纠错后偶发正文消失：每个 Turn 现在从 Session Log 折叠唯一 `rp-turn-surface`，显式区分可见正文、提交结果、失败与删除；空白或仅含工具调用的模型消息不再创建消息操作节点，也不会被误判成删除。Conversation Node 重排后仍会持续校正轨迹归属。回复选项输入会执行 trim、去空项、去重和条数截断，忽略额外注释；主角身份标签缺失时从冻结的角色上下文与对话推断。
- 回复选项迁移为核心提交校验通过后的非阻断 artifact generator：使用最终冻结正文发起一次轻量结构化子代理调用，Provider 不支持、超时、格式错误、生成失败或单独超限时只丢弃选项并记录稳定诊断，正文、State 和其他核心产物仍正常提交。卡片设置可调整目标条数、1–200 的长度指导（默认 50）和方向关键词，这些值只指导生成而不作为硬性提交校验；`rp.reply-options` v1 持久化与客户端投影保持不变。
- `rp_commit_turn` 保持单一全局 Tool，并让完整提交分支从全局注册 effect capability 的闭合 Schema 实时派生；模型参数声明与执行前校验共享同一 Schema，不再依赖重复的文字协议。完整提交与补丁重试仍由顶层 `oneOf` 严格互斥；首次语义失败后 Core 缓存完整草稿并签发上下文绑定 token，重试只能提交有界 JSON Pointer 补丁，revision、上下文、Writer 或轮次变化会使 token 失效。State 的 v2 `state_commit_contract` 从同一 operation specification 派生 effect envelope 与四类操作表；校验先汇总全部独立静态问题，再顺序执行条件、应用和最终 Schema 校验，错误保留到具体 change 字段的 JSON Pointer 及 namespace、changeIndex、ruleId。

## 0.1.7 - 2026-09-01

- Chat 父代理现在会在首步从同一份 Context Build 获得当前角色卡与用户人设，用于识别主角并生成回复选项；不额外发起模型步骤，也不向 Chat 展开世界书、预设、文风或其他完整 Writer Slot。
- Writer 对话历史与会话总结输入会把成功提交的故事正文标为“写作回复”，把讨论、解释、资料和配置等其他助手内容标为“非写作回复”；保留全部可见原文，同时避免模型无差别把非写作回复当作已经发生的剧情。
- 新增可开关的主模型回复选项：成功提交 Roleplay 剧情回复时随同一次 `rp_commit_turn` 生成第三人称的主角后续对白和／或行为，不以导演视角续写；会话变量下方以带数字编号的可点击选项呈现，编号不进入实际消息，选项可直接发送并随消息回滚；功能卡齿轮可将每次条数设为 1–5（默认 3），并按编号填写可选的方向关键词，条数与关键词原子保存且不增加模型调用；新安装默认开启，已有配置升级后保持关闭。
- 修复回复选项运行时扩展使用 Harness 不支持的数组长度 Schema 关键字而注册失败；精确条数继续由扩展领域校验器执行，并补充真实 Core 与标准 Preset 组合回归测试。
- 角色卡默认单文件导入上限由 8 MiB 提高到 20 MiB，完整导入文本上限由 1,000,000 提高到 2,000,000 个 Unicode 字符。
- 快捷回复新增逐项“中间／末尾”光标位置设置，并改用原生会话输入事件在真实富文本草稿的当前光标或选区插入内容。
- 修复 Cordis 4.0.2 通过浏览器 Remote 调用服务时重绑定上下文，导致 Roleplay 功能开关和“编辑统一身份”被误判为不可写并全部禁用。
- 修复升级后遗留的 `writer-history` 功能 ID 阻断 Roleplay Settings 注册，导致所有功能开关和统一身份编辑一起禁用；启动时会移除并持久化这个已下线 ID。
- 发布 Roleplay 套件 0.1.7 并对齐 DSH `0.1.2-alpha.3`：更新精确兼容门禁、全部 DSH 依赖和公开 lockfile，把归档级联测试迁移到第一方 JSONL Session persistence，并重新生成 Typert Remote 产物；Prompt 顺序与 Settings 注册继续使用当前服务 API。
- 加强 Harness 兼容门禁：除 package manifest 外，同时校验公开 lockfile 中的直接与传递 DSH 解析版本，并通过 pnpm 的 lockfile-only peer 检查阻止不一致依赖图。
- 主角控制边界集中到 Core：允许合理对白和行动，只把重大或不可逆选择留给用户，包括亲密或危险情境中的同意、形成承诺或改变关系与目标；默认预设同时允许安静过渡和自然收束。
- 内置“示例预设”改为与默认文风一致的托管初始资料：新建预设直接进入空白编辑器，不再选择空白或示例起点；提示文本未编辑的旧示例会保留资产、栏位 ID 与分组标签设置并升级内容。
- 创作预设的每个栏位可设置是否默认使用 `<section>`／`<item>` 分组标签；会话首次使用时继承该值，并可在“回复资料”中保存自己的调整。
- Writer 模型设置改为全局默认值；每个 Roleplay 会话动态继承该默认值，也可只为当前会话覆盖 Writer 的模型与推理强度，并随时恢复继承。任务子代理继续使用各自的全局目录配置。
- 适配 DSH `0.1.2-alpha.1`：切换拆分后的 Session、Workspace、Conversation 与 Renderer 客户端 provider，跟进 `ToolCallId`、第一方 Prompt 顺序和 Harness 身份覆盖接口。
- Roleplay 会话识别改为读取 Session Summary 的 `projectionValues.agentPreset`，消息操作与会话变量改用独立 Chat 投影，修复升级后会话工具、头像、对白高亮及编辑／删除／重新生成全部隐藏的问题。
- 新增共享 `rp-remote` package，把十组 Roleplay 浏览器管理接口迁移到 Typert 生成的类型化 Remote；Host 继续拥有领域校验和生命周期，浏览器插件不再直接调用旧的字符串 RPC。
- Writer 和任务子代理新增模型推理强度选择、目录 v4 迁移、路由冻结与运行 metadata；固定模型只使用该模型实际声明的推理档位，跟随父代理时继承父路由。
- 本轮用户图片附件会以原生 durable image block 透传给新鲜 Writer 与任务子代理；仅图片输入也可建立当前输入上下文，不增加旁路存储。
- 本地集成启动器会在 Harness commit 或 lockfile 变化后同步并重建上游 checkout，并以本地 source link 安装尚未发布的 alpha packages。

## 0.1.6 - 2026-08-27

- 修复 0.1.5 新增的快捷回复、会话变量卡片和访问模式仅图标在启动时先于设置状态装载，导致卡片显示关闭但功能已经生效；三项新增功能现在会在保存的开关完成对账后再装载，已有功能的用户开关保持不变。

## 0.1.5 - 2026-08-27

- 新增独立的输入栏访问模式仅图标插件：在所有布局宽度下仅保留当前权限图标，菜单交互和无障碍名称不变。
- 新增可自定义快捷回复插件：输入栏以原生工具样式显示前三项常用内容，支持在光标或选区处插入、成对符号包裹；新增、编辑、排序、删除和持久化统一放在 Roleplay 的“快捷回复”功能卡中，插入后不会自动发送。
- 新增长对话会话总结：达到上下文压力时后台整理较早对话，在下一轮续写时保留近期原文并注入独立总结；同时支持手动压缩、失败恢复、分支和回滚。
- 新增可选的会话变量卡片：在最新一次成功回复下方只读展示完整当前变量及本轮变化，删除或重新生成消息后会跟随当前有效对话位置回退。

## 0.1.4 - 2026-08-27

- 角色卡与世界书导入期间显示持续加载状态并防止重复选择文件，导入或新建的资料按加入时间倒序排列，后续编辑不会改变顺序。
- State 提交参数无效时保留已经生成的回复，返回具体到变更项的字段纠错，并允许在同一轮只重试原子提交。
- 消息恢复界面优先保留与失败提交对应的正文，不再被后续空白占位或确认文本替代。
- 扩展 MVU 路径兼容：规范化点号、括号、通配符、占位符与有限并集路径，支持安全的 Zod 声明子集，并对开放路径使用 `schema-only` 而不是生成字面通配键。

## 0.1.3 - 2026-08-26

- Roleplay Agent 模式新增 Harness 极简模式同款的持久终端与 `str_replace_editor`，用于检查、读取和按需编辑工作区文件；Chat 模式继续屏蔽这两项能力。
- 修正“我的人设”描述快捷项的插入位置：新字段另起一行，光标停在字段名后的冒号处，便于直接填写内容。

## 0.1.2 - 2026-08-26

- Roleplay 管理接口改用 Harness 的可信 Host 边界，允许通过 Harness 明确信任的远端地址管理资料、消息操作和 Roleplay 设置。
- Roleplay 设置改由服务端执行带版本校验的写入，避免远端界面绕过统一校验或覆盖并发修改。
- 默认人设占位名改为“用户角色”，不会改写已有或用户编辑过的人设。
- 精简内置创作预设的结尾指导，同时保留开放接续、因果连续和用户行动空间要求。

## 0.1.1 - 2026-08-26

- 角色卡详情页新增 Character Card V3 PNG 导出，导出内容以当前已保存的角色资料为准。
- 导出时合并最新关联世界书，并继续隔离可执行提示、清理原始卡片和图片元数据。
- 支持读取 PNG 中标准 `ccv3` 数据块，同时保留对既有 `chara` 数据块的兼容。

## 0.1.0 - 2026-08-25

- 将 Roleplay 插件套件整理为独立的 `dsh-roleplay` pnpm workspace。
- 移除本机开发环境、调试入口和外部社区夹具耦合，仓库依赖改用已发布的 Harness 包。
- 增加开源许可、贡献指南、安全策略和持续集成配置。
- 首个 Roleplay 插件套件版本。
