前言¶
在 DeepSeek Harness(DSH)裏做智能體對話,常見需求是:某條用戶消息發錯、想換模型或權限再跑一遍,或從中間某輪重新分支。產品自帶的分叉能力通常要從固定入口操作;若只想針對「這一條用戶氣泡」原樣重發或改字後再發,步驟往往不夠直接。
下面介紹的 dsh-edit-retry 是維護者 huangmiuXyz 發佈的 客戶端插件(分類:客戶端)。它在會話轉錄裏對任意用戶消息提供右鍵菜單,通過 DSH 已有的會話分叉路徑重試,並可選在成功後刪除原會話。插件當前版本 0.3.3(MIT),尚未發佈到 npm,需從 GitHub 源安裝。
這是什麼¶
dsh-edit-retry 注入 DSH Web 聊天 UI:在會話記錄中 右鍵點擊任意一條用戶消息,彈出「重試」「編輯並重試」,以及「重試後刪除原會話」開關。重試不會原地改寫日誌(DSH 持久化是追加式,原地改 surface 會導致模型與界面不一致),而是從該消息之前的合適事件點 分叉出新會話,把原文或編輯後的文本作爲新會話的第一條提示詞發出。整個過程複用 DSH 自帶「分支」的同一路徑;插件額外在分叉前把源會話 當前 composer 裏選中的模型與權限預設 顯式帶到子會話。
核心功能¶
右鍵菜單¶
| 菜單項 | 行爲 |
|---|---|
| 重試 | 原樣重發這條消息 |
| 編輯並重試 | 氣泡變爲編輯器(預填原文),改完再發 |
| 重試後刪除原會話 | 開關;勾選後,上述動作成功發出重試後刪除源會話,新會話 繼承原會話名稱 |
編輯器快捷鍵:回車換行,⌘/Ctrl + Enter 保存,Esc 取消。選擇菜單項後菜單關閉;進度與錯誤顯示在氣泡下方(如「正在重試…」「重試失敗:原因」等)。刪除開關狀態保存在 localStorage,勾一次會保持勾選。
分叉點與「第一條消息」¶
插件儘量把分叉切到 上一個已閉合 turn 的 turn/end,避免子會話在重試內容前多出一行空的「用時 N 秒」。若消息是該 turn 第一條、上一個 turn 結束時 inbox 仍有未取走提示詞、消息是 turn 中途插話(steering)、或事件窗口尚未加載完,則保持默認的 seq - 1 策略。會話 第一條用戶消息 走「新建會話」而非分叉,與 README 中的 turn 邊界說明一致。
模型與權限¶
- 模型:重試使用源會話 當前 composer 模型控件所選路由(
modelSelection投影),在新會話第一條提示詞前調用宿主session/selectModel;已與目標一致時不額外調用;取不到或路由不可用時重試仍發出,僅控制台警告。 - 權限:重試使用源會話 當前 權限預設(
permissions投影的currentValue),在新會話第一條提示詞前通過/permission <預設>切換;已是同一預設、custom、預設名含空白、或切換失敗時不強切,重試仍發出。
附件與邊界¶
- 文本與圖片 可重試:圖片經源會話
readAttachment讀回並以內聯 base64 重發;須在刪除原會話之前完成讀取。 - 文件附件 不支持重試:宿主不接受客戶端用已存文件字節換新回執,帶文件的消息保留原生右鍵菜單。
- 消息內鏈接、按鈕等交互元素不搶佔其右鍵菜單。
- 空白消息的「重試」置灰;帶圖無文仍可重試。「編輯並重試」始終可用。
- 重試產生的子會話落在與源會話相同的 Workspace 分組。
- 界面文案隨 DSH
locale設置中英文切換。
刪除原會話(可選)¶
刪除默認關閉、不可逆。實現走宿主側 HTTP 路由 POST /dsh-edit-retry/session/delete(帶自定義請求頭以限制跨站調用),順序包括取消 agent、刷盤、摘內存、刪除 ~/.dsh/sessions/ 下對應日誌等。README 註明:依賴 DSH 內部結構,升級後可能部分失效;刪除後側邊欄舊條目有時需刷新頁面才消失。
安裝與啓用¶
插件作爲某個 profile 的普通依賴安裝,並由 dsh plugin 自動登記到該 profile 的 dsh.profile.bundles(包內聲明瞭 dsh.bundle)。
- 在終端執行(將
<你的 profile>換成實際 profile 名):
dsh plugin --profile <你的 profile> add github:huangmiuXyz/dsh-edit-retry
- 重啓 DSH,或刷新 Web 界面。
說明:
- 須使用
github:huangmiuXyz/dsh-edit-retry:包未上 npm,裸名dsh-edit-retry會 404。 - DSH Desktop:
--profile desktop由 Electron 應用獨佔,dsh plugin會拒絕;需在應用內插件管理入口安裝同一 GitHub 源。 - 若 profile 的
dsh.profile.bundles存在解析不到的link:等懸空條目,安裝可能在登記階段報錯但依賴已裝好;清理懸空條目後重跑,或按 README 手動編輯package.json的bundles數組。
開發時可本地鏈接:
dsh plugin --profile <你的 profile> add link:/絕對路徑/dsh-edit-retry
典型用法¶
- 在 DSH Web 客戶端打開已有會話,找到要重試的 用戶消息(含中途 steering 插入的消息,菜單相同)。
- 右鍵 該氣泡,視需要選擇「重試」或「編輯並重試」;若希望新會話頂替舊會話,先勾選「重試後刪除原會話」。
- 若選編輯:在編輯器中修改文本,用
⌘/Ctrl + Enter提交;需要換模型或權限時,在 分叉前 於 composer 選好,重試會按當前選項運行。 - 等待氣泡下方狀態完成;若勾選了刪除,確認新會話已打開且標題已繼承(若源會話曾有標題)。
入口限制: 僅右鍵;無獨立重試按鈕或雙擊,README 說明與自帶操作欄渲染位置有關。
適用場景與注意¶
適合: 經常在長對話中從某一用戶輪次重新實驗提示詞、模型或權限預設的 DSH 用戶;需要「改一句再跑」且希望保留 DSH 分叉語義而非手改日誌的場景。
注意:
- 插件以 當前 DSH 進程權限 運行;可選刪除會永久移除會話日誌。安裝前請閱讀 GitHub 倉庫 源碼與 MIT 許可證,自行評估是否滿足環境要求。
- 刪除與會話存儲走宿主擴展實現,非 DSH 公開插件 API;升級 DSH 後關注 README 中的兼容性說明。
- 社區插件目錄 SkillHub 條目 與 GitHub 爲獨立生態信息源,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-edit-retry 把「從某條用戶消息重試或改後再試」收成右鍵一步,並在分叉子會話上對齊當前模型、權限與分組,可選清理原會話。若你已在用 DSH 的 Web profile,可按上文命令安裝 0.3.3 版本試用。