@xsj/dsh-rewind:DSH 會話回退到任意用戶消息

前言

在 DSH 會話中,一條用戶消息發出後,後續內容會沿着這條消息繼續展開。如果希望從某條用戶消息處重新組織輸入,同時不破壞已有會話日誌,也不想讓回退狀態在進程重啓後丟失,就需要一個在會話層面做回退的插件。

@xsj/dsh-rewind 提供這種能力:選擇任意一條用戶消息,將該消息及其後的內容從聊天視圖和模型上下文中截掉;該消息文本回到輸入框中,可編輯、可取消;發送後,模型只看到截斷後的歷史和新消息。

插件定位

@xsj/dsh-rewind 是 DSH 會話回退插件,由 XSJUSTC 維護,許可證爲 MIT。

它以永久 bundle 插件形態提供,包含宿主機半和 Web 客戶端半,無任何 npm 依賴。倉庫地址:

https://github.com/XSJUSTC/dsh-rewind

核心能力

該插件在 DSH 的 Web 客戶端會話中提供回退入口,主要能力如下:

  1. 每條用戶消息的操作行中出現回退圖標。
  2. 如果模型正在思考或輸出,點擊回退會立即打斷當前回合。
  3. 被選擇的消息及其後的所有內容會在聊天視圖中隱藏。
  4. 被選擇的消息文本會自動填入輸入框,未發送,可編輯。
  5. 回退待發送期間,輸入框上方出現提示橫幅。
  6. 發送按鈕左側出現「取消回溯」入口,點擊後恢復被隱藏消息,草稿保持不變,不發送任何內容。
  7. 發送後回退生效,被隱藏消息不再出現在聊天視圖和模型上下文中。
  8. 僅用戶消息可回退,DSH 助手消息沒有回退入口。
  9. 會話日誌保持 append-only 事件流,從不刪除原始消息。
  10. 進程重啓後打開會話,Host 半會回放回退記錄,重建隱藏區間。

安裝與啓用

插件要求 Node.js 環境滿足:

engines.node >=20

Client 半會通過 window.__ModuleLoader__ 從外殼的凍結模塊表獲取以下模塊:

react
@deepseek-ai/dsh-client-ui-primitives
@deepseek-ai/dsh-client-ui-attachment

安裝時,先把倉庫克隆到本地,然後在任意目錄執行:

dsh plugin --profile web add <本倉庫目錄的絕對路徑>

這裏的 <本倉庫目錄的絕對路徑> 是佔位符,需要替換爲本倉庫在本地磁盤上的克隆位置。

安裝後,重啓 DSH 進程,並刷新瀏覽器頁面。

使用流程

  1. 在 DSH 的 Web 客戶端中打開一個會話。
  2. 找到任意一條用戶消息,點擊其操作行中的回退圖標。
  3. 如果模型正在思考或輸出,點擊回退會立即打斷當前回合。
  4. 被選擇的消息及其後的內容會從聊天視圖中隱藏。
  5. 被選擇的消息文本會填入輸入框,此時尚未發送,可以繼續編輯。
  6. 如果決定放棄回退,點擊發送按鈕左側的「取消回溯」,被隱藏的消息會恢復,草稿保持不變,不會發送任何內容。
  7. 如果確認回退,直接發送當前輸入框中的消息。
  8. 發送後,被隱藏的消息不再出現在聊天視圖中,也不會再進入模型上下文。

日誌與重啓

該插件不會刪除會話日誌中的原始消息。會話日誌仍是 append-only 事件流。

每次狀態變化會追加一條 hook/invoked 事件,負載包含:

source: 'xsj.rewind'
phase: 'mark' | 'cancel' | 'commit'
targetSeq
hiddenFrom?
hiddenTo?
preview?

hook/invoked 事件類型屬於本構建的已知保留詞條,無讀寫方,重載安全。

進程重啓後打開會話,Host 半會回放這些記錄,重建隱藏區間,使模型側與 UI 側的隱藏狀態跨重啓保持一致。

卸載

執行:

dsh plugin --profile web remove @xsj/dsh-rewind

然後重啓 DSH 完成卸載。

卸載後,會話日誌中已有的 rewind 記錄會無害保留。

使用注意

  1. 僅用戶消息可回退,DSH 助手消息沒有回退入口。
  2. 該插件會介入 DSH 會話的聊天視圖和模型上下文,安裝前建議檢查源碼、依賴和 MIT 許可證。
  3. 插件以當前 DSH 進程權限運行,應確認其運行環境和倉庫來源可信。
  4. 安裝命令中的路徑必須指向本地倉庫克隆位置,不能只寫倉庫名。
  5. 回退待發送期間可以隨時取消,取消不會發送內容。

小結

@xsj/dsh-rewind 的價值在於讓 DSH 會話中的用戶消息具備可恢復的回退能力:可以從任意用戶消息處重新輸入,發送前可取消,發送後截斷生效,同時保留 append-only 會話日誌,並在進程重啓後恢復隱藏區間。

倉庫地址:

https://github.com/XSJUSTC/dsh-rewind
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜