hg1048596-pixel/dsh-recall-unread

DeepSeek Harness (DSH) 插件:在模型读取前撤回已发送的文字消息,支持单条与全部撤回。A DeepSeek Harness plugin that recalls sent-but-unread text messages before the model reads them — one-by-one or all at once.

Project Overview项目介绍

dsh-recall-unread is a native plugin built exclusively for DeepSeek Harness (DSH), designed to let users recall sent steering messages that have not yet been read by the model. When a user sends an interrupt steering message while the model is running, the message stays as a pending bubble at the end of the conversation thread until the model processes it. Before the model picks up the message, users can recall it to avoid sending half-baked or incorrect content to the model. The plugin adds a dedicated unread message bar above the input box that offers one-click recall for individual or all pending messages.

This plugin is ideal for DSH users who frequently send steering messages while the model is running, or who often change their mind after sending a message or make typos that need correcting. A typical user workflow goes like this: after installing and activating the plugin, when the model is busy doing deep thinking or running a long tool call, send a steering message. If you decide you want to change the message before the model reads it, just click the recall button next to the message in the unread bar. If you have multiple unread messages, you can click the recall all button to clear them all at once.

dsh-recall-unread is released under the open source MIT license, which allows free use, modification, and redistribution. It offers two installation methods: static installation for long term use that persists across DSH restarts, and dynamic installation for temporary testing that does not persist after restarting DSH. The plugin can only recall messages that have not yet been read by the model, and it does not duplicate the delete functionality already offered by DSH for queued messages. It includes built-in anti-lockout safeguards and a one-click kill switch script to disable it if it causes a startup failure. To install statically for long term use, you copy the plugin directory to your DSH profile node_modules and add an entry to the cordis patch file before restarting DSH.

这是一款专为 DeepSeek Harness(DSH)开发的原生插件,核心功能是让用户撤回已发送但尚未被模型读取的插话消息。DSH官方原本没有为运行中插入的待处理消息提供撤回入口,本插件刚好补上了这个缺口。当用户在模型运行过程中发送插话时,消息会以待处理气泡的形式显示在对话尾部,在被模型读取前都可以撤回。插件在输入框上方添加了未读消息条带,支持单条消息单独撤回和多条消息一键全部撤回。

本插件适合经常需要在模型运行时发送插话,又容易打错字或者临时改主意的DSH用户使用。典型工作流是:安装激活插件后,当模型正在进行深度思考或者长工具调用时,发送一条插话,之后如果想要修改内容,直接点击输入框上方条带里对应消息的撤回按钮即可。如果有多条未读消息,也可以点击全部撤回一键清空,不会把没想好的内容发给模型。

本插件采用MIT许可证开源,可免费使用和修改,提供静态安装和动态临时体验两种安装方式。静态安装后随DSH启动自动加载,重启不丢失,适合长期使用;动态安装仅用于临时体验,DSH重启后需要重新激活。它仅能撤回尚未被模型读取的消息,一旦被模型认领就无法撤回,也不重复覆盖官方已支持的排队消息删除功能,自带防锁死急救机制。

Pre-install check安装前体检Compatibility · Security兼容性 · 安全性 no risk signal found未发现风险信号
  • This site's static screen found no obvious risk signal (stars, license, activity, manifest)本站静态筛查没发现明显风险信号(星标、许可证、更新活跃度、清单完整度)
DSH walks through these 9 checksDSH 会逐条核对这 9 项

Compatibility兼容性

  • DSH, Node, OS and profile requirementsDSH 版本 / Node 版本 / 操作系统 / profile 是否满足要求
  • External dependencies and runtimes (Electron / Python / Docker, ...)外部依赖与运行时(Electron / Python / Docker 等)是否齐备
  • Conflicts with installed plugins: command names, skill / tool names, ports, duplicate MCP registration与已装插件是否冲突:命令名、skill / tool 重名、端口占用、重复 MCP 注册

Security安全性

  • Repo matches the facts registered here; archived or abandoned?仓库是否与页面登记一致,是否归档或长期停更
  • Safety of preinstall / install / postinstall and install.sh / setup.ps1preinstall / install / postinstall 与 install.sh、setup.ps1 是否安全
  • curl|bash, download-then-execute, obfuscation, unrelated domains → stop immediatelycurl|bash、下载即执行、混淆代码、无关域名 → 立刻停止
  • Typosquatting or unmaintained packages among the new dependencies新增依赖里有没有 typosquatting 或无人维护的包
  • Requested permissions vs. what the feature actually needs申请了哪些权限、是否超出功能所需(filesystem / network / shell / clipboard)
  • Any sudo / admin requirement, plus uninstall and rollback是否要求 sudo / 管理员权限,以及卸载与回滚方式

Anything uncertain must be marked unknown with a note on how to confirm it. This site's signal screen is a static snapshot, not a security audit.拿不准的必须标「未知」并说明要我怎么确认。本站的信号筛查是静态快照,不能替代安全审计。

Or use CLI install (for developers)或使用命令行安装(适合开发者)

CLI Install命令行安装

dsh plugin --profile web add github:hg1048596-pixel/dsh-recall-unread

把 hg1048596-pixel/dsh-recall-unread 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

dsh-recall-unread

DeepSeek Harness (DSH) 插件:撤回「已发送但尚未被模型读取」的文字消息。

在模型运行中发送文字(插话发送)时,消息会以“待处理”气泡的形式出现在对话尾部——在模型认领(读取)之前,你可以一键撤回,避免把还没想好的话发给模型。

截图占位:可将实际效果截图保存为 docs/screenshot.png,并取消上方 ![screenshot] 的注释。


✨ 功能特性

  • 启用即生效:在插件市场(dsh-market)或插件管理页启用本插件后,「未读消息」条带立即生效;停用即整体不加载。不依赖任何启动器菜单。
  • 未读消息条带:在输入框上方(conversation.input.dock 插槽)列出所有已发送但模型尚未读取的插话消息(0.2.x 取 inbox['next-step'] 的用户插话,0.1.x 取 placement === 'steering')。
  • 单条撤回:每条消息显示预览文本 + 「撤回」按钮,点击后消息从对话中移除,并提示“已撤回一条消息”。
  • 全部撤回:存在多条未读消息时提供「全部撤回」一键操作。
  • 只读语义:消息一旦被模型认领(开始读取)会自动离开条带,此时无法撤回——严格符合“仅未读取可撤回”。
  • 优雅降级:撤回失败(消息已开始发送)时给出明确提示,不会破坏会话。

🔍 工作原理

DSH 中“已发送但未读取”的消息 = 仍停留在 Agent inbox(待处理队列)中的消息:0.2.x 是 inbox['next-turn'] / inbox['next-step'] 里的 pending 项,0.1.x 是会话快照 ConversationSnapshot.queue。它有两种 placement:

placement 含义 官方界面现状
queued 运行中排队等待下一轮 官方队列坞已有「删除」按钮
steering 运行中插话发送,显示为对话尾部待处理气泡 没有任何撤回入口 ← 本插件补上

撤回实现分两个版本:

  • 静态版(推荐):Client 直接调用官方会话 RPC session.updateQueue(itemId, { kind: 'remove' })(与官方队列坞的「删除」同一实现)。
  • 动态版:通过包内私有 RPC 完成:
Client  (撤回按钮)
   │  host.call('recall', { sessionId, itemId })
   ▼
Host    harness.handle('recall')
   │  agents.get(sessionId).inbox.remove(itemId)
   ▼
效果   消息从 inbox 移除 → inbox 投影更新 → 气泡与条带同步消失

🧩 运行时兼容(DSH 0.1.x / 0.2.x)

运行时 「未读插话」数据源 撤回调用
0.2.x(含 desktop profile) useProjection('inbox')['next-step'] 中 source.kind === 'user' 的行 sessions.binding(sessionId).session.updateQueue(id, { kind: 'remove' })(失败码带命名空间:session/queue-item-not-found)
0.1.x 会话快照 session.queue 中 placement === 'steering' 的行 同上(失败码 queue-item-not-found)
  • 0.2.x 的 SessionSnapshot 已移除 queue 字段,本地回显改到 pendingSubmissions;插话被接纳后进入 inbox['next-step'],在模型下一步读取前仍可撤回。
  • 官方队列坞只覆盖 next-turn(排队消息,已有删除按钮),next-step(插话)这一格由本插件补齐。

Host 端逻辑与官方 session.updateQueue 中 kind: 'remove' 的内部实现一致(agent.inbox.remove)。

📁 目录结构

dsh-recall-unread/
├── README.md                  # 本文件
├── LICENSE                    # MIT 许可证
├── .gitignore                 # Git 忽略规则
├── package.json               # 项目元数据(GitHub 展示用)
├── plugin.json                # 插件清单(名称 / ID 前缀 / 代码来源)
├── src/
│   ├── host.js                # Host 半端源码(动态版,可直接作为 code.host)
│   └── client.js              # Client 半端源码(动态版,可直接作为 code.client)
├── plugin/                    # 静态 web profile 插件包(安装后随 DSH 加载,推荐)
│   ├── package.json           # 安装包元数据(含 dsh.client 声明)
│   ├── host.js                # Host 半端(空实现占位,撤回走客户端官方 RPC)
│   └── client.js              # Client bundle(__ModuleLoader__ 注册)
└── docs/                      # 截图等附加资源(可选)

Showing the opening section of the README — the full document lives in the repository以上为 README 开头摘要,完整文档在仓库内 · View the full README on GitHub →在 GitHub 查看完整 README →

← 上一个 Prev xskill 下一个 Next dsh-turn-rewind →