dsh-conversation-rewind

by DTSFO

2 会话与消息github 检测到 manifest dsh.plugin.json收录于 08-16

Same-Session,DeepSeek Harness web UI 的仅追加会话回放和安全用户消息编辑。

Same-Session, append-only conversation rewind and safe user-message editing for the DeepSeek Harness web UI.

安装

dsh plugin --profile web add github:DTSFO/dsh-conversation-rewind

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗

安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。

README

目录

为 DeepSeek Harness Web UI 增加原 Session、append-only(只追加)的消息分支浏览与安全历史消息编辑。

English · DSH 插件专题

功能

  • 在每条可编辑用户消息下方、复制按钮旁直接增加“编辑历史消息”;编辑器原位出现在该消息行中,不再弹出 Modal。
  • 原历史切换视图改名为“消息分支”,展示可视化消息树;每个语义分支只有最后一条消息可以点击,中间消息只是树节点。
  • 点击分支末端只是客户端只读浏览已有路径:不会发送消息、调用 Provider、唤醒 Agent、写入 inbox、追加 replacement,也不会截断 Session。
  • 分支浏览仍在原 Session 内:Session ID 与浏览器 URL 全程不变,不创建子 Session。
  • 使用 DSH Surface replacement 元数据,把目标消息、旧回复及后续旧路径从当前对话和后续模型上下文中隐藏。
  • 持久事件日志仍然只追加。历史事件保留用于审计与恢复,插件追加 replacement marker,不改写或删除旧事件。
  • 修改后的文本作为一条真实的新用户消息发送,助手回复会重新生成。
  • 确认编辑后始终从这条消息在原 Session 内新开一个兄弟分支;编辑器不提供任何“后续消息”选项。
  • 常驻保护编辑流程的内部 trigger,确保它在 Provider 请求前被取消;Host 重启后的 orphan 恢复同样 fail-closed。

原 Session 语义

  1. 插件只在确认编辑时验证已经完成、可安全重放的用户轮次,并在提交前重新检查 live Session。
  2. 一个受保护的内部轮次追加 DSH SurfaceOp replacement,覆盖从目标消息到当前活动尾部的旧路径。
  3. 内部 trigger 与被遮蔽的旧路径不会进入 Provider 请求。
  4. 内部轮次完全回到 idle 后,修改后的消息才作为普通用户轮次排入同一个 Session。
  5. 新消息与新回复都是 append-origin 事件,因此修改后的消息之后仍可再次编辑。

确认编辑会从目标消息替换当前活动路径,只把修改后的文本作为一条新的普通用户消息排入同一个 Session。旧消息仍保留在 append-only 历史中,成为新消息的兄弟分支;编辑操作不会重放后续消息。消息分支浏览不会执行 replacement 或重放流程。

安全边界

只有“已完成轮次中唯一一条、由用户直接发送的普通纯文本消息”可编辑。目标之前仍在当前 Surface 上的注入上下文会原样保留;目标之后的上下文则必须是 Host 可重新生成的系统快照或技能目录。包含附件、非文本块、多条直接用户消息、尚未结束或正在运行的轮次、入队历史有歧义,或后续轮次无法安全重放时,目标会被隐藏或请求会被拒绝。

当前编辑要求 Session 在本 DSH 进程中处于 live 状态。Surface 或 inbox 并发变化时操作会 fail-closed。若 Surface replacement 已提交、但后续 checkpoint 失败,错误会返回原 Session 与 replacement event;行内编辑器会立即作废旧消息快照,并在重新加载 Session 后才重新开放编辑入口。

包含附件、歧义用户上下文或其他无法安全重放轮次的分支仍会显示在树中;只要有明确末端仍可只读浏览,但其中消息不会提供编辑入口。

编辑才会改变会话历史;分支浏览不会改变会话。两者都不会恢复工作区文件,也不会逆转工具调用、命令、网络请求或其他外部副作用。

环境要求

  • DeepSeek Harness >=0.1.0-rc.6
  • Node.js ^22.19 或 >=24
  • DSH Web profile

安装

dsh plugin --profile web add \
  https://github.com/DTSFO/dsh-conversation-rewind/archive/refs/tags/v0.1.7.tar.gz
dsh web

卸载:

dsh plugin --profile web remove dsh-conversation-rewind

使用

  1. 在 DSH Web 中打开一个已经完成的 Session。
  2. 点击目标用户消息下方、复制按钮旁的“编辑历史消息”。编辑器会原位展开;修改文本后点击“确认”或“取消”。确认会在同一个 Session 内从该消息新开兄弟分支。
  3. 打开“消息分支”视图查看消息树,只点击分支末端即可在 Chat 中只读浏览该已有路径。
  4. 浏览期间发送会被暂时禁用;回到当前活动末端后才可发送或编辑。
  5. 旧路径仍保留在 append-only 日志中,只有确认编辑才会在原 Session 内追加 replacement 并重新生成回复。

本地开发与测试

pnpm install
pnpm run check
dsh plugin --profile web add /absolute/path/to/dsh-conversation-rewind
dsh web

pnpm run check 会依次执行 TypeScript 检查、ESLint、单元测试与生产构建。

已知限制

  • 编辑范围刻意限制为可安全重放的单条普通纯文本用户消息。
  • 编辑不会重放后续用户输入;如需切换已有历史路径,请在消息树中点击对应节点。
  • 分支浏览是客户端只读投影;Host 当前窗口未提供的 Chat 行无法由插件伪造恢复。
  • 非末端消息显示为静态树节点;Host 直接收到非末端选择时会返回 BRANCH_NOT_ENDPOINT。
  • Session 必须在当前 Host 进程中打开并处于 live 状态。
  • 不恢复工作区,也不逆转外部副作用。
  • 当前版本面向 DSH Web UI 与 DSH 0.1.0-rc.6 API。

MIT

原始 README: https://github.com/DTSFO/dsh-conversation-rewind/blob/main/README.zh.md ↗