前言¶
在 DeepSeek Harness(DSH)里做智能体对话,常见需求是:某条用户消息发错、想换模型或权限再跑一遍,或从中间某轮重新分支。产品自带的分叉能力通常要从固定入口操作;若只想针对「这一条用户气泡」原样重发或改字后再发,步骤往往不够直接。
下面介绍的 dsh-edit-retry 是维护者 huangmiuXyz 发布的 客户端插件(分类:客户端)。它在会话转录里对任意用户消息提供右键菜单,通过 DSH 已有的会话分叉路径重试,并可选在成功后删除原会话。插件当前版本 0.3.3(MIT),尚未发布到 npm,需从 GitHub 源安装。
这是什么¶
dsh-edit-retry 注入 DSH Web 聊天 UI:在会话记录中 右键点击任意一条用户消息,弹出「重试」「编辑并重试」,以及「重试后删除原会话」开关。重试不会原地改写日志(DSH 持久化是追加式,原地改 surface 会导致模型与界面不一致),而是从该消息之前的合适事件点 分叉出新会话,把原文或编辑后的文本作为新会话的第一条提示词发出。整个过程复用 DSH 自带「分支」的同一路径;插件额外在分叉前把源会话 当前 composer 里选中的模型与权限预设 显式带到子会话。
核心功能¶
右键菜单¶
| 菜单项 | 行为 |
|---|---|
| 重试 | 原样重发这条消息 |
| 编辑并重试 | 气泡变为编辑器(预填原文),改完再发 |
| 重试后删除原会话 | 开关;勾选后,上述动作成功发出重试后删除源会话,新会话 继承原会话名称 |
编辑器快捷键:回车换行,⌘/Ctrl + Enter 保存,Esc 取消。选择菜单项后菜单关闭;进度与错误显示在气泡下方(如「正在重试…」「重试失败:原因」等)。删除开关状态保存在 localStorage,勾一次会保持勾选。
分叉点与「第一条消息」¶
插件尽量把分叉切到 上一个已闭合 turn 的 turn/end,避免子会话在重试内容前多出一行空的「用时 N 秒」。若消息是该 turn 第一条、上一个 turn 结束时 inbox 仍有未取走提示词、消息是 turn 中途插话(steering)、或事件窗口尚未加载完,则保持默认的 seq - 1 策略。会话 第一条用户消息 走「新建会话」而非分叉,与 README 中的 turn 边界说明一致。
模型与权限¶
- 模型:重试使用源会话 当前 composer 模型控件所选路由(
modelSelection投影),在新会话第一条提示词前调用宿主session/selectModel;已与目标一致时不额外调用;取不到或路由不可用时重试仍发出,仅控制台警告。 - 权限:重试使用源会话 当前 权限预设(
permissions投影的currentValue),在新会话第一条提示词前通过/permission <预设>切换;已是同一预设、custom、预设名含空白、或切换失败时不强切,重试仍发出。
附件与边界¶
- 文本与图片 可重试:图片经源会话
readAttachment读回并以内联 base64 重发;须在删除原会话之前完成读取。 - 文件附件 不支持重试:宿主不接受客户端用已存文件字节换新回执,带文件的消息保留原生右键菜单。
- 消息内链接、按钮等交互元素不抢占其右键菜单。
- 空白消息的「重试」置灰;带图无文仍可重试。「编辑并重试」始终可用。
- 重试产生的子会话落在与源会话相同的 Workspace 分组。
- 界面文案随 DSH
locale设置中英文切换。
删除原会话(可选)¶
删除默认关闭、不可逆。实现走宿主侧 HTTP 路由 POST /dsh-edit-retry/session/delete(带自定义请求头以限制跨站调用),顺序包括取消 agent、刷盘、摘内存、删除 ~/.dsh/sessions/ 下对应日志等。README 注明:依赖 DSH 内部结构,升级后可能部分失效;删除后侧边栏旧条目有时需刷新页面才消失。
安装与启用¶
插件作为某个 profile 的普通依赖安装,并由 dsh plugin 自动登记到该 profile 的 dsh.profile.bundles(包内声明了 dsh.bundle)。
- 在终端执行(将
<你的 profile>换成实际 profile 名):
dsh plugin --profile <你的 profile> add github:huangmiuXyz/dsh-edit-retry
- 重启 DSH,或刷新 Web 界面。
说明:
- 须使用
github:huangmiuXyz/dsh-edit-retry:包未上 npm,裸名dsh-edit-retry会 404。 - DSH Desktop:
--profile desktop由 Electron 应用独占,dsh plugin会拒绝;需在应用内插件管理入口安装同一 GitHub 源。 - 若 profile 的
dsh.profile.bundles存在解析不到的link:等悬空条目,安装可能在登记阶段报错但依赖已装好;清理悬空条目后重跑,或按 README 手动编辑package.json的bundles数组。
开发时可本地链接:
dsh plugin --profile <你的 profile> add link:/绝对路径/dsh-edit-retry
典型用法¶
- 在 DSH Web 客户端打开已有会话,找到要重试的 用户消息(含中途 steering 插入的消息,菜单相同)。
- 右键 该气泡,视需要选择「重试」或「编辑并重试」;若希望新会话顶替旧会话,先勾选「重试后删除原会话」。
- 若选编辑:在编辑器中修改文本,用
⌘/Ctrl + Enter提交;需要换模型或权限时,在 分叉前 于 composer 选好,重试会按当前选项运行。 - 等待气泡下方状态完成;若勾选了删除,确认新会话已打开且标题已继承(若源会话曾有标题)。
入口限制: 仅右键;无独立重试按钮或双击,README 说明与自带操作栏渲染位置有关。
适用场景与注意¶
适合: 经常在长对话中从某一用户轮次重新实验提示词、模型或权限预设的 DSH 用户;需要「改一句再跑」且希望保留 DSH 分叉语义而非手改日志的场景。
注意:
- 插件以 当前 DSH 进程权限 运行;可选删除会永久移除会话日志。安装前请阅读 GitHub 仓库 源码与 MIT 许可证,自行评估是否满足环境要求。
- 删除与会话存储走宿主扩展实现,非 DSH 公开插件 API;升级 DSH 后关注 README 中的兼容性说明。
- 社区插件目录 SkillHub 条目 与 GitHub 为独立生态信息源,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-edit-retry 把「从某条用户消息重试或改后再试」收成右键一步,并在分叉子会话上对齐当前模型、权限与分组,可选清理原会话。若你已在用 DSH 的 Web profile,可按上文命令安装 0.3.3 版本试用。