dsh-prompt-recall:在 DeepSeek Harness 里一键撤回最后一条提示词

前言

在 DeepSeek Harness(DSH)里和 Agent 对话时,提示词一旦发出,回合就开始执行。措辞写错、想改问法时,常见做法只有两种:等模型答完再补一句修正,或者点停止后把整段提示词重新敲一遍。DSH 的会话日志是只追加的持久记录,平台也没有「删掉最后一轮」这类 API;要从更早的位置继续,只能走自带的 分支(session/fork)那一套。社区插件 dsh-prompt-recall(维护者 icrefin,分类为客户端)在最新一条用户提示词旁增加一个与「复制」同行的撤回按钮:一次点击会停止当前回合、把对话回退到该提示词入队之前,并把原文写回输入框,供修改后重发。

下面按定位、能力、安装与使用注意说明该插件;事实以 GitHub 仓库 与 SkillHub 目录页 为准。SkillHub 是独立的社区插件目录,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-prompt-recall 是面向 DSH Web 客户端的 Cordis 插件(当前发布版本 v0.1.2,许可证 MIT)。它不注册宿主路由、宿主服务,也没有 Config 项;宿主侧入口仅为让 Loader 能加载浏览器半边(exports["./client"])。

插件解决的核心问题:在 Agent 仍在回答时,也能从「你的最新一条提示词」发起撤回,而不必等回合结束,也不必手动复制、停止、分支、再粘贴。

核心功能

界面上的变化

位置 作用
最新提示词的动作行 在自带「复制」按钮旁增加撤回图标,样式沿用复制按钮的 class
语言命名空间 dsh-prompt-recall 中英文:提示气泡、执行中状态、失败提示
conversation.input.right 挂载控制器:拥有按钮逻辑,并把撤回的草稿注入输入框(自身不渲染可见控件)

Chat 视图没有为用户消息动作行提供 slot,且助手侧的 assistant-actions / turnTail 只在回合结束后才出现;插件因此通过文档化的 DOM 约定(如 [data-conversation-content]、[data-chat-flow-kind="user"]、[data-clock="start"])定位最新可见的用户行,并用 MutationObserver 与 React portal 挂载按钮。

一次点击的执行顺序

逻辑上等价于依次调用平台已有能力:

  1. 停止:在该会话作用域调用 conversation.cancel(),与输入框「停止」相同;若会话已空闲、取消被拒绝,错误会被忽略,不阻塞后续步骤。
  2. 回退:读取事件窗口里该提示词的文本与切点,调用 sessions.fork({ sessionId, atSeq: boundary }),与「分支」同源;切点在提示词经 Inbox splice 入队之前,而不是简单的 seq - 1,避免子会话仍把该提示词当作待处理工作。
  3. 还原:把文本暂存到子会话输入框,挂载后写入并聚焦;仅当输入框为空时写入,若你已在输入,会提示无法覆盖。
  4. 跳转:打开子会话;子会话保留工作目录、Agent 预设与工作区,标题递增。
  5. 归档:最后对发起撤回的旧会话执行归档(与快捷键 ⌘⇧A 同类持久状态),避免同一段对话在侧边栏出现两份,并降低被 agent/pre-step 再次唤醒、重跑已撤回提示词的风险。归档失败时,已完成的撤回仍保留,并在新会话中提示旧会话未能归档。

与自带「分支」的差异:分支切在所选回合结束处,得到完整副本再试另一种延续;撤回切在该提示词入队之前,子会话历史里不包含这条提示词。

会还原与不会还原的内容

会 提示词文本(含 /命令 与 @引用 的发送形态)
不会 附件(图片、文件需重新选择)
不会 更早的回合(只动对话末尾)

若被撤回的提示词是会话中的第一个事件,没有可 fork 的前缀时,会在同一工作目录下打开新的空白会话继续,而不是拒绝操作。

子会话(subagent)内不提供撤回:其 transcript 属于父会话证据,fork 会误造普通会话。

撤回不能撤销模型已执行的工具副作用;回退的是对话里的这条提示词,不是文件系统上的变更。

安装与启用

环境要求(见 package.json):Node >= 22.17.0,dsh 0.2.1-rc.3。

桌面 profile 由 Electron 应用持有,请通过 设置 → 插件(或 plugin_manager 工具)安装,指向打包产物路径:

dsh-prompt-recall/dist/dsh-prompt-recall-0.1.2.tgz

在仓库根目录可先打包并得到上述路径:

scripts/install.sh                 # 打包并打印上面的路径
scripts/install.sh --profile tui   # 打包并安装到 CLI 管理的 profile

安装后需要重启 DSH 应用:运行中的 profile 对新 bundle 的导入发生在下次启动。

插件在 当前 dsh 进程权限 下运行;安装前建议阅读 源码 与 LICENSE,确认符合你的安全与合规要求。

典型用法

  1. 在 DSH 中向 Agent 发送一条提示词;若模型已开始回答但你想改措辞,找到该条提示词右侧动作行(与时间戳、复制按钮同一行)。
  2. 点击撤回图标(README 示意中为 ↻)。进行中的回合会被停止,界面跳转到 fork 出的子会话,输入框中出现发送时的原文。
  3. 编辑后重新发送。若需找回被归档的旧会话,可在侧边栏视图选项中显示已归档会话,或使用搜索结果中的「取消归档」。

重复撤回会每次再往前切一条提示词,并归档来源会话,侧边栏上通常只保留一条可见的「当前」对话链。

适用场景与注意

适合:经常在长回合中途发现提示词写错、希望沿用 fork 语义但又不想手动停止 + 分支 + 粘贴的 DSH 用户。

注意:

  • DOM 选择器依赖当前 Harness markup;若未来重命名相关 data-* 或动作按钮 class,按钮可能静默不出现(逻辑集中在 anchor.ts)。
  • 被撤回的会话是归档而非删除,日志仍在磁盘上;若希望保留撤回前的完整会话副本,可在动作结束后取消归档。
  • 子会话与分支一样会出现在侧边栏并计入列表。

结尾

dsh-prompt-recall 把 DSH 已有的停止、fork、归档组合成「撤回最后一条提示词」这一手势,减少重打整段 prompt 的成本。目录与文档:

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

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

Xiaoye