zhu1090093659/dsh-web--packages-dsh-chat-recovery ↗★ 5.8k
@linxin666/dsh-chat-recovery
Chat recovery for the dsh web GUI: fork-based editing and explicit retry of the last failed turn while preserving the original session
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:zhu1090093659/dsh-web#8d02146df032e6de8d54b7a0aba2c9da039d47e4&path:packages/dsh-chat-recovery说明文档
阅读完整 README ↗@linxin666/dsh-chat-recovery
English | 中文
DSH Web 的对话恢复插件:编辑最近一轮已结束的用户消息,以及显式重试失败轮次。 两条路径都走官方 session fork 契约——从受影响消息之前的历史前缀 切出子分支,在子分支里重新提交文本,原会话始终不被改动。
功能
- 编辑消息(类 Codex):最近一轮已结束的轮次上出现「编辑」按钮。点击后
进入行内编辑态(预填原文本);保存则从此消息之前的位置创建分支、打开分支并
重新发送编辑后的文本;取消则保持原样。无论哪种操作,原会话历史都完整保留。
- 只允许编辑最近一条用户消息,且其所在轮次必须已结束。会话运行中、 系统/插件注入消息、含附件的消息一律不可编辑。
- 首轮消息编辑退化为在相同工作区新建空白会话(首轮之前没有可切的历史前缀)。
- 重试:
- 默认显式重试:失败轮次在记录中显示「重试」按钮,每次点击只创建一次 重放,因此后台不会静默扩大会话树;涉及工具的副作用也只会在用户明确确认后 重放。
- 监督器仍保留供受控集成使用的 opt-in 自动重试能力(可恢复的模型/API 错误——超时、网络、服务端错误、限流、空响应——且本轮没有工具活动时最多 额外重试 5 次,指数退避 1s、2s、4s、8s、16s),但随包提供的 UI 默认关闭, 因为当前 Host API 没有原地重试轮次的操作。opt-in 启用时,同一失败轮次的 多次自动重试在同一个 fork 子会话内重跑(每次失败最多只产生一个新会话, 不会随重试次数膨胀)。
- 输入区上方 dock 显示重试状态行:当前次数、等待状态、最终失败原因,附 「取消重试 / 立即重试」控件;取消后不再发起任何重试。
- 主机自身的 llm/retry 调度链优先:主机在重试期间本插件一律让位。
- dock 状态行与「重试」按钮提供可见提示:重试会创建新的会话分支,原会话 保持不变,失败的分支会保留在会话列表中;同一失败轮次的后续尝试在该分支 内重跑,不再新建会话。
安全模型
- 源会话不重复追加用户消息:首次尝试从失败轮次之前的前缀切出新分支, 同一重试链的后续尝试在该分支内重跑(每次尝试追加一次重放消息,作为可见的 重试历史)。源会话不会积累重复消息,失败轮次的流式片段也不会进入源会话的 下一次模型请求。
- 原会话不动:编辑与重试只创建子会话;分叉或重新提交失败时原会话保持 原样。
- 失败分支保留在列表:一次失败轮次留下一个重试子会话,放弃的重试链(取消、 耗尽或失败)保留在会话列表中供检查。客户端运行时未提供会话删除 API,因此 过期的重试分支需要从会话列表手动清理。
- 默认不在后台扩大会话树:随包提供的 UI 不会启动自动重试;每次点击 「重试」只提交一次重放,一个重试周期最多创建一个分支;工具副作用只在用户 显式操作时重放。
- 浏览器侧监督:重试状态存活于 GUI 标签页内,关闭标签页即取消监督; 失败轮次与历史仍持久化在主机。
安装
从 npm(推荐)
dsh plugin --profile web add @linxin666/dsh-chat-recovery
从仓库(开发流程)
git clone https://github.com/zhu1090093659/dsh-web.git
cd dsh-web
pnpm install
pnpm -r build
dsh plugin --profile web add link:$(pwd)/packages/dsh-chat-recovery
重启 dsh web:最近一轮已结束的轮次出现「编辑」按钮,输入区上方出现重试 状态行。
配置
随包提供的 UI 默认关闭自动重试。重试是记录中的显式操作,无需配置;直接构造 RetrySupervisor 的受控集成可用 选择启用,但必须接受每个重试周期会出现一个可见子会话,且每次尝试都会在其中追加一条重放消息。