dsh-reply-forge-v3
DSH 桌面端插件 v3:直接写活会话(message projection),改完立即被大模型采信,不用重启;也可显式只落盘(重启后生效)
一句话定位
DSH 桌面端插件 v3:直接写活会话(message projection),改完立即被大模型采信,不用重启;也可显式只落盘(重启后生效)
安装方式
在 DSH 的 web profile 中执行下面的命令;装完刷新页面即可。
$ dsh plugin --profile web add dsh-reply-forge-v3@3.4.2
兼容的 DSH 版本
未声明
作者与热度
kinggod899 · ★ 10 · 更新于 2026-10-26
关于这个插件
dsh-reply-forge v3
> [English](./README.en.md) · 简体中文
>
> 把 AI 说过的话改成你想让它说的,改完立即生效,不用重启。
> 思维链也能一起改。
DSH 桌面端(DeepSeek Harness)插件。会话里每条 AI 回复旁边多一个按钮,
点开就能改正文或思维链;改完写进去,这个会话之后的每一轮,模型都只认你改过的版本。
已收录 [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin)(DSH 生态精选列表,PR #7845 已合并)。
和 v1 / v2 的区别
| | v1 | v2 | v3 |
|---|---|---|---|
| 改的是什么 | 页面显示 | 会话落盘文件 | 活会话对象 |
| 模型看得到吗 | 看不到 | 看得到 | 看得到 |
| 生效时机 | 立即(只对本机) | 要重启 DSH | 立即 |
| 能改思维链吗 | 不能 | 不能 | 能 |
| 实现 | localStorage 覆盖 | 改写 .jsonl.zstd | message projection |
v3 把 v2 的落盘改写包成了兜底分支:会话在内存里就直接写活会话(立即生效),
不在内存里才落盘。
前两代是独立仓库,与 v3 完全独立(独立插件 id / 前缀,可分别启用):
- v2(dsh-reply-forge-v2,纯落盘改写):https://github.com/kinggod899/dsh-reply-forge-v2
- v1(dsh-reply-forge,localStorage 覆盖):更早的第一代,仓库沿革见 v2 说明
> 三代可以分别启用,但不要同时启用——它们共用同一条消息操作条,同时开会挂出多条
> (安装脚本默认会把更早的两代从 bundles 摘掉,见下)。
怎么用(快速版)
1. 鼠标移到任意一条 AI 回复上,点「伪造」按钮;
2. 在编辑器里选目标(可选本会话任意可编辑块——包括页面上看不见、折叠着的思维链)、
选写入方式(默认「自动」);
3. 改文本,点写入伪造。写入前会弹一次确认(复述这次会怎么生效),写完成功立刻可见。
改过的块还能后悔:点编辑器里的「历史版本」,能看到这个块的完整版本链
(原稿 → 每一次改写),选中旧版「还原到此版」→ 内容填入编辑器 → 再点一次
「写入伪造」即可。思维链同样有这条链。
两个出口:仅本机渲染(Ctrl+Enter,只改这一页的样子、模型看不见、可逆)与
写入伪造(改「模型看到的对话」,在线写活会话立即生效 / 落盘重启后生效,不可逆)。
完整的界面说明、写入方式对照表、常见问题见 [使用说明.md](./使用说明.md)。
看效果
| 写入成功,下一轮立即生效 | 思维链 | 三种写入方式 |
|:---:|:---:|:---:|
| | | |
三张连起来是一个真实片段:把一句 AI 回复改成「因为我是吃白饭的大肥鱼。」写进去,
块上立刻亮绿色回执——「下一轮对话模型就看到改后的内容(不用重启),焦点已交还输入框」。
下一轮随口问一句「你去干嘛」,模型接的是「虽然是个吃白饭的」——它真的信了。
中间那张是思维链的编辑面板:目标下拉里的 seq=38 块0 就是页面上折叠着、看不见的那串
内心戏,和正文一样能改。右边那张是写入方式三选:自动(会话在内存里就直接写活会话、
不在才落盘,推荐)、仅在线(立即生效)、仅落盘(重载后生效)。
关掉插件会不会把会话弄坏
标记齐全就不会——这个「不会」有前提。
reply-forge/patch 是宿主不认识的事件类型,宿主持久化层的准入闸门
validateStoredEvents 规定:未知类型且信封没带 ignorable: true → 抛错、
整条日志拒读(会话打不开);投影层(插件在场时)对不认识的事件则直接跳过、
不报错,伪造退回原文。宿主自己的注释写明了这条路(known-event-types.js):
> The persisted SessionEvent.ignorable marker is the compatibility mechanism.
于是分三种情况:标记正确 + 冷启动(插件不在)→ 会话照常打开、伪造静默退回原文;
缺标记(早期写入或写盘损坏)→ 被闸门拒读,用修复工具补标记;**插件在 DSH
运行时被热卸载** → 宿主抛 `session message projection "reply-forge/patch" was
removed`(所以正常用法都要求重启 DSH,重启后干净重放,碰不到这条)。
v3 的 P0 工作就是把「标记正确」钉死:在线/落盘两条写路径进入宿主持久化前统一补
ignorable: true;每次真写前核验写句柄(WRITER_NOT_ROUTED 可安全回落盘、
APPEND_UNSAFE 一律拒绝,失败码表见 [PLAN.md](./PLAN.md));真宿主持久化闭环
测试 create → append → flush → 重读 → 闸门放行全过。
致谢与借鉴
[dsh-chat-thinking-editor](https://github.com/yumiao-dev/dsh-chat-thinking-editor)
同分类对比
同一分类下 Star 最高的 5 个,便于横向比较。
| 插件 | 作者 | Star | 版本 | 更新 |
|---|---|---|---|---|
| dsh-purge | kingcharleslzy-ai | 6.3K | 1.6.86 | 2026-11-08 |
| dsh-unrestricted | yexi-by | 1.1K | 0.2.8 | 2026-11-05 |
| dsh-univer-office | dream-num | 707 | 0.4.0 | 2026-11-03 |
| dsh-synapse | liangmianya | 697 | 0.5.7 | 2026-11-04 |
| dsh-qqbot | tencent-connect | 570 | 0.5.5 | 2026-11-08 |