前言¶
在 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 挂载按钮。
一次点击的执行顺序¶
逻辑上等价于依次调用平台已有能力:
- 停止:在该会话作用域调用
conversation.cancel(),与输入框「停止」相同;若会话已空闲、取消被拒绝,错误会被忽略,不阻塞后续步骤。 - 回退:读取事件窗口里该提示词的文本与切点,调用
sessions.fork({ sessionId, atSeq: boundary }),与「分支」同源;切点在提示词经 Inbox splice 入队之前,而不是简单的seq - 1,避免子会话仍把该提示词当作待处理工作。 - 还原:把文本暂存到子会话输入框,挂载后写入并聚焦;仅当输入框为空时写入,若你已在输入,会提示无法覆盖。
- 跳转:打开子会话;子会话保留工作目录、Agent 预设与工作区,标题递增。
- 归档:最后对发起撤回的旧会话执行归档(与快捷键 ⌘⇧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,确认符合你的安全与合规要求。
典型用法¶
- 在 DSH 中向 Agent 发送一条提示词;若模型已开始回答但你想改措辞,找到该条提示词右侧动作行(与时间戳、复制按钮同一行)。
- 点击撤回图标(README 示意中为 ↻)。进行中的回合会被停止,界面跳转到 fork 出的子会话,输入框中出现发送时的原文。
- 编辑后重新发送。若需找回被归档的旧会话,可在侧边栏视图选项中显示已归档会话,或使用搜索结果中的「取消归档」。
重复撤回会每次再往前切一条提示词,并归档来源会话,侧边栏上通常只保留一条可见的「当前」对话链。
适用场景与注意¶
适合:经常在长回合中途发现提示词写错、希望沿用 fork 语义但又不想手动停止 + 分支 + 粘贴的 DSH 用户。
注意:
- DOM 选择器依赖当前 Harness markup;若未来重命名相关
data-*或动作按钮 class,按钮可能静默不出现(逻辑集中在anchor.ts)。 - 被撤回的会话是归档而非删除,日志仍在磁盘上;若希望保留撤回前的完整会话副本,可在动作结束后取消归档。
- 子会话与分支一样会出现在侧边栏并计入列表。
结尾¶
dsh-prompt-recall 把 DSH 已有的停止、fork、归档组合成「撤回最后一条提示词」这一手势,减少重打整段 prompt 的成本。目录与文档: