dsh-user-resend:在 DSH Chat 里重发用户消息

前言

在 DeepSeek Harness(DSH)里做 Agent 对话时,常见情况是:用户消息已经出现在会话里,但模型没有继续输出——例如 Harness 重启、进程中断,或某次请求失败。消息还在,重新打字、重新拖图片、重新写 @ 文件路径既费时,也容易和上下文对不齐。

官方输入框可以发新消息,却没有针对「某一条历史用户消息」的一键重发。社区插件 dsh-user-resend(维护者 yrui-ql)在用户消息上增加「重新发送」,走与输入框相同的提交链路,把文本、图片附件和 @ 文件提及一并再发一次,让 Agent 继续回答。

这是什么

dsh-user-resend 是 DSH 的客户端插件:在 Chat 里给用户角色的消息加 Resend / 重新发送 动作。它不改动会话存储逻辑,Host 侧几乎是空壳,能力在浏览器端完成。

SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,安装第三方 bundle 前建议自行阅读源码与许可证。插件以当前 DSH 进程权限运行。

核心功能

下面介绍插件在界面上做什么,以及重发时包含哪些内容。事实均来自仓库 README。

用户消息上的动作行

悬停(或按 DSH 默认规则显示)用户消息时,右侧动作行与官方风格一致:时间 · 复制 · 重新发送。

重发时重建的内容

  1. 文本:按原顺序保留;@path 或 @"path with spaces" 形式的文件提及作为普通提示文本原样发送。
  2. 图片附件:从会话附件存储读回,重新编码后随消息发送,多张图片保持原顺序。
  3. 发送链路:与输入框相同——先 session.beginSubmission 登记本地回显,再带 requestId 调用 session.prompt;失败时撤回回显,避免留下孤儿排队项。

点击后按钮进入「正在重新发送…」;Host 接受后,对话里会出现一条新的用户消息(含图片),AI 开始回答。中英文文案跟随 DSH 语言设置。

回合空闲时才发送

会话正在运行时(session.running === true),点击重发只会提示「回合进行中,等它结束再重发」,不会把消息塞进宿主排队区。README 说明:排队副本没有本地回显,可能与相邻消息合并或被丢弃;0.2.1 修复的正是这类问题。若要在运行中插入内容,应使用输入框的官方排队/打断语义。

发送失败时的反馈

会话不可用、图片读取失败、连接失败等情况下,按钮变红并提示「重新发送失败」,约 2.5 秒后恢复。

限制(使用前必读)

  • 回合运行中不支持重发:只能等待当前回合结束。
  • 通用文件附件暂不重发:拖入的非图片文件在会话里多为持久附件引用(模型通过只读路径读取),客户端没有将其重新变成发送回执(receipt)的接口;文本和图片仍会发送。
  • 斜杠命令(如 /goal)不经过命令解析器,会作为普通文本发送;需要命令语义时请用输入框。
  • 历史不会被原地改写:重发会在会话里追加新用户消息,与官方「发送」一致;不会创建分支。从某条消息另开分支请用助手消息尾部的官方「分支」动作。
  • 实现耦合:插件以 priority: -1 覆盖官方 conversation.chat.node 的 user 渲染器(仍调用官方内容工厂)。DSH 升级后若渲染器签名变化,需要同步本插件。

安装与启用

安装步骤以 README 为准:先克隆仓库,再在 DSH 会话里通过插件管理器安装本地 bundle。

git clone https://github.com/yrui-ql/dsh-user-resend.git

然后在 DSH 会话中通过插件管理器安装(plugin_manager 的 install_bundle,target 指向克隆目录的绝对路径)。安装后插件以普通 bundle 出现在 设置 → 插件 中。

卸载:在 设置 → 插件 中禁用或移除 dsh-user-resend 即可;插件不写会话数据或配置文件。

开发校验(可选,要求 Node.js 22+,仅用于清单自检):

npm test   # node test/manifest.test.mjs

典型用法

  1. 在 DSH Chat 中正常发送一条用户消息(可含文本、图片、@ 文件路径)。
  2. 若因重启、中断或请求失败导致 AI 未继续输出,将鼠标移到该条用户消息上。
  3. 点击 重新发送(Resend),等待按钮从「正在重新发送…」完成;确认会话空闲后再点(若正在运行会先被提示等待)。
  4. 对话中出现新的用户消息副本,Agent 按常规则继续回答,无需重新输入。

适用场景

适合经常在本地或远程跑 DSH Chat、且容易遇到进程重启或单次请求失败的长会话开发者。不适合依赖「运行中排队重发同一条用户消息」的工作流——该场景应直接用输入框。

结尾

dsh-user-resend 解决的是「用户消息还在、模型没接上」时的补发问题:一条按钮、标准 composer 路径、文本与图片及 @ 提及一并带上。安装前请核对源码与 MIT 许可证,并留意 DSH 版本与 user 渲染器兼容性。

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

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

小夜