前言¶
在 DeepSeek Harness(DSH)裏,模型長時間運行(深度思考、工具調用)時,用戶常需要「插話發送」——把新指令塞進當前會話,等模型處理完手頭任務後再讀取。消息發出後會以「待處理」氣泡掛在對話尾部;在模型認領(讀取)之前,若發現措辭不當或想改主意,官方界面沒有針對這類 steering 消息的撤回入口。
排隊等待下一輪的消息(placement: queued)在官方隊列塢裏已有刪除按鈕;插話發送的消息(placement: steering)則一直缺這一環。dsh-recall-unread 由 hg1048596-pixel 維護,在輸入框上方補一條「未讀消息」條帶,支持單條與全部撤回,且僅在消息仍處於 inbox、尚未被模型讀取時生效。
這是什麼¶
dsh-recall-unread 是 DSH 的客戶端插件,分類爲客戶端。它在 conversation.input.dock 插槽列出所有已發送但模型尚未讀取的 steering 插話消息,每條提供預覽與「撤回」按鈕;多條並存時可「全部撤回」。啓用即生效,停用即整體不加載,不依賴啓動器菜單。
撤回語義與官方隊列塢的刪除一致:消息一旦被模型認領,自動離開條帶,此時不可撤回。插件以 MIT 許可證發佈,當前版本 v1.1.0(2026-08),GitHub 倉庫約 35 stars。
工作原理¶
DSH 中「已發送但未讀取」的消息,對應仍停留在 Agent inbox 中的項,即 ConversationSnapshot.queue 快照裏的 pending 項。steering 與 queued 兩種 placement 含義不同:queued 由官方隊列塢處理;本插件專門補上 steering 側缺失的撤回能力。
靜態版(推薦)在 Client 端直接調用官方會話 RPC:
session.updateQueue(itemId, { kind: 'remove' })
與官方隊列塢「刪除」同一實現。動態版則經 Host 私有 RPC recall,內部調用 agents.get(sessionId).inbox.remove(itemId),效果與上述 RPC 一致。
核心功能¶
- 未讀消息條帶:在輸入框上方展示所有 steering 未讀消息,帶預覽文本。
- 單條撤回:點擊「撤回」後消息從對話移除,並提示「已撤回一條消息」。
- 全部撤回:存在多條未讀時,一鍵清空。
- 只讀語義:模型開始讀取後消息自動離開條帶,無法撤回。
- 優雅降級:撤回失敗(例如消息已開始發送)時給出明確提示,不破壞會話。
- 零配置:開箱即用,無需額外設置項。
安裝與啓用¶
方式一:靜態安裝(推薦)¶
靜態安裝隨 DSH 加載,重啓後不丟失。
- 將倉庫中
plugin/目錄複製到 web profile 的 node_modules:
~/.dsh/profiles/web/node_modules/dsh-recall-unread/
- 在
~/.dsh/profiles/web/cordis.patch.yml末尾追加:
- insert:
- id: recall-unread
name: dsh-recall-unread
- 重啓 DSH。插件啓用後「未讀消息」條帶即生效;可在插件市場(dsh-market)或插件管理頁隨時停用或啓用。
靜態版不依賴 Amadeus,撤回走客戶端官方 RPC,與官方界面行爲一致。
方式二:動態插件(臨時體驗)¶
適合先試用,DSH 重啓後需重新定義。
- 在會話中進入 Cordis 插件開發流程(
cordis_define)。 - 新建插件:
idPrefix爲recall;code.host粘貼src/host.js;code.client粘貼src/client.js;name爲Recall Sent Unread Messages。 - 用返回的
pluginId/packageId調用cordis_run激活,並在界面批准運行。
長期使用請採用方式一。
典型用法¶
- 確保插件已啓用(安裝後默認啓用;可在插件市場或管理頁開關)。
- 模型正在運行時,用插話發送發出一條文字(運行中發送即進入 steering)。
- 消息出現在對話尾部(帶「待處理」標記),同時輸入框上方出現「未讀消息」條帶。
- 點擊該消息右側的「撤回」——氣泡與條帶消失,提示「已撤回一條消息」。
- 有多條未讀時,可點「全部撤回」一次性清空。
如需微調條帶位置或提示停留時長,可修改 src/client.js 中的 slots.register(…, order: 30) 或 ctx.timeout(() => setStatus(null), 2500),動態版需重新定義;靜態版修改後需重新部署到 node_modules 並重啓。
適用場景與注意¶
適合誰:經常在模型長任務運行中插話、又需要在模型讀取前改口或撤回的用戶。
限制:
- 僅能撤回尚未被模型讀取、仍在 inbox 的消息。
- 排隊消息(
queued)由官方隊列塢處理,本插件不重複覆蓋。 - 受官方未提供消息氣泡級插槽限制,撤回入口在輸入框上方條帶,而非直接懸浮在氣泡上。
- 動態插件不持久化;靜態安裝後隨 DSH 啓動自動加載。
安全提示:插件以當前 DSH 進程權限運行。安裝前建議閱讀倉庫源碼與 MIT 許可證,確認行爲符合預期。
若靜態 bundle 導致 DSH 啓動紅屏(Failed to load plugins),可用倉庫內 tools/recall-killswitch.ps1 在 cordis.patch.yml 的 recall-unread 條目上加 disabled: true 禁用插件後重啓;恢復時用 -Action enable。
鏈接¶
- SkillHub 目錄頁:https://www.skillhub.cn/plugins/hg1048596-pixel/dsh-recall-unread
- GitHub 倉庫:https://github.com/hg1048596-pixel/dsh-recall-unread
dsh-recall-unread 補上了 steering 插話在「已發未讀」階段的撤回能力,與官方隊列塢對 queued 消息的刪除形成互補。若你常在長任務中插話又需要反悔,靜態安裝後啓用即可,無需額外配置。