# DSH 选中文字操作迁移（2026-10-22）

## 已实现

通过原生 `conversation.session.header.actions` 的可叠加扩展接入，不替换 DSH 消息渲染器。工具栏复用普通对话的组件：复制、全选、标记/取消标记、查找、引用。

- 鼠标松开即显示；选区右键优先处理文字，无选区仍为整条消息多选。
- 全选只覆盖本条消息正文，排除时间、工具过程、操作按钮。Markdown 和代码保持原生渲染。
- 流式生成中的文字可复制、全选、查找；回复稳定后才开放标记和引用，避免锚点随生成漂移。
- 标记采用同一套 CSS Highlight/选区命中逻辑和 Host SQLite 本机持久化。环境、账号、来源会话、原生消息 key 分别隔离；原文摘要改变则标为失效，不猜测新位置。失败回滚并提供重试。
- 查找仅覆盖当前已加载的消息，界面明确说明范围；继续加载历史后自动补充匹配。不会把未加载历史当作无匹配。
- 引用调用 DSH 公共 `inputActions.captureInsertion/insertText/persistDraft`，采用草稿版本校验。将选中文字作为引用插入现有输入框，不覆盖草稿、附件，不自动发送。来源电脑离线/输入框不可用时明确提示。

## 当前边界及后续协议

本期标记仅本机，不具备跨设备云端同步。没有给 DSH 消息伪造 Chat 的 messageActionRef，没有复用普通聊天记录编辑接口。

“替换”暂不提供：现有 DSH 公共能力没有对已经保存的用户消息/AI 回复进行带版本校验的正文编辑。若要支持，需原生 Harness 提供：

1. 以来源 runtime、session、message key 定位并校验访问权的读取/编辑协议。
2. 原文 revision/hash 的 compare-and-swap、幂等 operationId，以及版本冲突返回。
3. 明确编辑是仅修改展示副本，还是改变后续模型上下文；AI 回复与用户消息分别定义权限。
4. 编辑历史、撤销、下游标记/引用失效及会话失效通知。

跨设备标记需独立 annotation 协议，保留来源消息身份、文本投影版本/摘要、范围和前后文、操作者、修订号及删除记录。禁止仅凭同名会话或相同文字合并。

## 验证

单元/组件测试覆盖：选区精确定位、Markdown/代码、仅正文全选、选区右键优先、生成状态切换、草稿保留与拒绝过期插入、SQLite 关闭重开恢复、取消标记持久化、账号/环境/来源隔离、正文变化失效和保存失败。普通对话与现有 DSH 多选同时回归。浏览器验证记录见本次交付说明。

2026-10-22 本地验收：9 个测试文件、123 项测试通过；完整构建、浏览器入口检查通过。3102 的真实历史会话中验证了用户消息与 AI 回复的选区菜单、只复制所选文字、仅当前正文全选、查找 9 处匹配并定位、Host 重启后的标记恢复，以及取消标记后退出/进入多选仍保持取消。临时测试标记已清理；整条消息右键多选仍可用。

本次历史会话的源电脑离线，已验证引用的离线提示，没有发送消息。在线引用插入与保留附件/草稿仅完成公共 API 合约测试，尚未完成真实在线会话验收。
