dsh-edit-retry:在 DSH 里右键编辑并重试任意用户消息

前言

在 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)。

  1. 在终端执行(将 <你的 profile> 换成实际 profile 名):
dsh plugin --profile <你的 profile> add github:huangmiuXyz/dsh-edit-retry
  1. 重启 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

典型用法

  1. 在 DSH Web 客户端打开已有会话,找到要重试的 用户消息(含中途 steering 插入的消息,菜单相同)。
  2. 右键 该气泡,视需要选择「重试」或「编辑并重试」;若希望新会话顶替旧会话,先勾选「重试后删除原会话」。
  3. 若选编辑:在编辑器中修改文本,用 ⌘/Ctrl + Enter 提交;需要换模型或权限时,在 分叉前 于 composer 选好,重试会按当前选项运行。
  4. 等待气泡下方状态完成;若勾选了删除,确认新会话已打开且标题已继承(若源会话曾有标题)。

入口限制: 仅右键;无独立重试按钮或双击,README 说明与自带操作栏渲染位置有关。

适用场景与注意

适合: 经常在长对话中从某一用户轮次重新实验提示词、模型或权限预设的 DSH 用户;需要「改一句再跑」且希望保留 DSH 分叉语义而非手改日志的场景。

注意:

  • 插件以 当前 DSH 进程权限 运行;可选删除会永久移除会话日志。安装前请阅读 GitHub 仓库 源码与 MIT 许可证,自行评估是否满足环境要求。
  • 删除与会话存储走宿主扩展实现,非 DSH 公开插件 API;升级 DSH 后关注 README 中的兼容性说明。
  • 社区插件目录 SkillHub 条目 与 GitHub 为独立生态信息源,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-edit-retry 把「从某条用户消息重试或改后再试」收成右键一步,并在分叉子会话上对齐当前模型、权限与分组,可选清理原会话。若你已在用 DSH 的 Web profile,可按上文命令安装 0.3.3 版本试用。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye