# Roleplay 消息操作

为 Roleplay 对话提供复制、行内编辑、删除、重新生成和从指定位置新建对话等操作。用户消息由同一条 Roleplay 操作栏承载时间、复制、编辑与删除；只有这条操作栏实际挂载并接管公共消息节点时，才会隐藏 Harness 原生时间／复制栏，避免重复显示或影响标准对话。用户与助手的 Roleplay 操作栏均固定显示在各自消息下方，不会因消息成为较早记录而改为仅在悬停时显示。已中断或失败但仍有可读正文的回复也可以继续处理。

删除或重新生成会同步调整当前可见故事和相关会话变量，但不会撤销已经保存到共享资料库的角色卡、世界书、人设、预设或文风。删除助手消息后，触发该回复的用户消息、头像与操作条继续保留，可以直接编辑、删除或重新生成；编辑带图片的用户消息时，原附件会保留。

每个 Turn 都从 Session Event Log 折叠出唯一的 `rp-turn-surface` 语义投影，显式区分 `running`、`completed`、`committed`、`uncommitted`、`partial`、`failed` 和 `retired`。可见正文、提交归属、失败状态与恢复目标都从这一个投影读取；空白或仅含工具调用的模型消息只是协议活动，不创建消息操作节点，也绝不等同于删除。只有带 `rpMessageAction` 的持久事件可以把回复标记为 `retired`。

剧情提交失败时，界面保留与失败提交配对的正文和恢复操作；后续模型产生的空白占位或确认文本不会替代这段可恢复正文。提交纠错成功后，正文操作节点会持续跟随 Chat 投影的最终排序重新确认其所属消息，避免工具专用重试的临时空行在界面重排期间把原正文永久隐藏。当前 Harness 公开 Conversation Node API 只能声明单节点可见性，跨节点轨迹收起仍由这一语义投影驱动的局部呈现适配器完成；它不参与业务状态判定。

旧版本中曾因创作预设已删除或无法读取而形成的失败记录，失败尾部会说明该预设现已跳过，并同时提供“重新生成”和“重新选择预设”。当前运行时不会再让这类可选资料阻断生成；恢复沿用 Session 原生资料绑定命令，已有消息与会话变量不变，也不会静默切换到新的默认预设。
