前言¶
在 DeepSeek Harness(DSH)裏做 Agent 對話時,常見情況是:用戶消息已經出現在會話裏,但模型沒有繼續輸出——例如 Harness 重啓、進程中斷,或某次請求失敗。消息還在,重新打字、重新拖圖片、重新寫 @ 文件路徑既費時,也容易和上下文對不齊。
官方輸入框可以發新消息,卻沒有針對「某一條歷史用戶消息」的一鍵重發。社區插件 dsh-user-resend(維護者 yrui-ql)在用戶消息上增加「重新發送」,走與輸入框相同的提交鏈路,把文本、圖片附件和 @ 文件提及一併再發一次,讓 Agent 繼續回答。
這是什麼¶
dsh-user-resend 是 DSH 的客戶端插件:在 Chat 裏給用戶角色的消息加 Resend / 重新發送 動作。它不改動會話存儲邏輯,Host 側幾乎是空殼,能力在瀏覽器端完成。
- 目錄頁:https://www.skillhub.cn/plugins/yrui-ql/dsh-user-resend
- 源碼:https://github.com/yrui-ql/dsh-user-resend
- 當前 bundle 版本:0.2.1(見倉庫
package.json) - 開發與驗證環境:DeepSeek Harness 0.2.1-rc.5
- 許可證:MIT
SkillHub 等社區目錄與 DeepSeek / 幻方無官方從屬關係;DSH 生態強調「一切皆插件」,安裝第三方 bundle 前建議自行閱讀源碼與許可證。插件以當前 DSH 進程權限運行。
核心功能¶
下面介紹插件在界面上做什麼,以及重發時包含哪些內容。事實均來自倉庫 README。
用戶消息上的動作行¶
懸停(或按 DSH 默認規則顯示)用戶消息時,右側動作行與官方風格一致:時間 · 複製 · 重新發送。
重發時重建的內容¶
- 文本:按原順序保留;
@path或@"path with spaces"形式的文件提及作爲普通提示文本原樣發送。 - 圖片附件:從會話附件存儲讀回,重新編碼後隨消息發送,多張圖片保持原順序。
- 發送鏈路:與輸入框相同——先
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
典型用法¶
- 在 DSH Chat 中正常發送一條用戶消息(可含文本、圖片、
@文件路徑)。 - 若因重啓、中斷或請求失敗導致 AI 未繼續輸出,將鼠標移到該條用戶消息上。
- 點擊 重新發送(Resend),等待按鈕從「正在重新發送…」完成;確認會話空閒後再點(若正在運行會先被提示等待)。
- 對話中出現新的用戶消息副本,Agent 按常規則繼續回答,無需重新輸入。
適用場景¶
適合經常在本地或遠程跑 DSH Chat、且容易遇到進程重啓或單次請求失敗的長會話開發者。不適合依賴「運行中排隊重發同一條用戶消息」的工作流——該場景應直接用輸入框。
結尾¶
dsh-user-resend 解決的是「用戶消息還在、模型沒接上」時的補發問題:一條按鈕、標準 composer 路徑、文本與圖片及 @ 提及一併帶上。安裝前請覈對源碼與 MIT 許可證,並留意 DSH 版本與 user 渲染器兼容性。