dsh-fresh-start:用 /fresh 一鍵總結對話、開啓新會話並歸檔老會話

前言

在 DSH(DeepSeek Harness)裏,一個會話工作得越久,積攢的事件越多,live 事件樹越大,內存佔用和卡頓問題隨之而來。過去處理這件事是純手工的:先把歷史總結成一段摘要,再新建會話把摘要貼進去作開場,最後歸檔老會話釋放內存,每一步都要自己操作一遍。

dsh-fresh-start 把這條收尾鏈路合併成一條 /fresh 命令。下面介紹它的流程、安裝方法和使用注意。

這是什麼

dsh-fresh-start 是由 orangeofcarl0-sys 維護的 DSH 插件,核心是 /fresh 命令:一鍵總結當前對話 → 開啓新對話(自動跳轉)→ 歸檔老對話,緩解超大會話的內存與卡頓。許可證爲 MIT。

/fresh 的完整流程

一次 /fresh 按順序經過五個階段:

1、Compact-First:強制壓縮當前會話;
2、對話式總結:讓 LLM 生成自然語言摘要;
3、創建 seeded 新會話:摘要作爲開場消息;
4、歸檔老會話:釋放 live 事件樹內存;
5、client 側自動跳轉到新會話。

下面分步介紹。

Compact-First:先壓縮再總結

如果當前 preset 掛載了宿主壓縮引擎(standard/code/cordis),/fresh 會先調用 compactNow 強制壓縮當前會話,再進入總結階段,這樣總結面對的是收緊後的上下文。

壓縮不是必須成功的:引擎不可用(minimal)、agent busy、無可壓縮範圍或引擎拋錯時,安靜降級爲純對話式總結,不阻斷流程。

對話式總結

插件提取 session.requestHeader() 中的 system,加上 session.deriveMessages() 返回的全部消息,用一條簡單指令讓 LLM 把這些內容總結成一段自然語言摘要。

創建 seeded 新會話

拿到摘要後,插件通過 ctx.agents.create 創建新會話:

  • 繼承老會話的 cwd 與 agent preset;
  • 摘要作爲新對話的開場消息(seed);
  • 新會話的 header.parentSession 指向老會話。

歸檔與自動跳轉

隨後插件通過 ctx.workspaceRegistry 歸檔老會話,釋放 live 事件樹佔用的內存。

跳轉由配套的 client 插件完成:它監聽 host/archived-sessions-changed 事件,按 parentId 找到對應的新會話,調用 ctx.sessions.open 自動跳轉過去。如果歸檔廣播發生時新會話還沒同步到列表,就先進 pending,等會話列表更新後再補跳。

每一步獨立,失敗降級不阻斷

各階段相互獨立,某一步失敗會降級但不阻斷後續。典型情況是總結失敗:此時仍會開新對話並歸檔,只是新對話不帶摘要。

host + client 雙端架構

插件的唯一功能路徑是 host 側的 lib/index.js 加上掛載清單 cordis.patch.yml;client 側的 lib/client.jsdsh.client 聲明進入瀏覽器清單,負責上面提到的自動跳轉。

插件還附帶一份 dsh-std Community v0.15 清單 dsh-plugin.json,默認完全惰性:dsh 原生加載器不會讀取它,只有顯式安裝 @dsh-std/adapter-dsh 後纔會被發現與校驗。它的宿主入口是佔位實現 lib/std/host.jscontributes.commands 刻意留空——避免在裝有 @dsh-std/adapter-dsh 的環境裏向原生註冊表投影第二個 /fresh 造成衝突。

安裝與啓用

安裝命令:

dsh plugin --profile web add github:orangeofcarl0-sys/dsh-fresh-start

插件發新版後,用下面的命令更新:

dsh plugin --profile web update dsh-fresh-start

重啓 dsh web,日誌出現 [fresh-start] installed: /fresh command registered 即安裝成功。

一個注意點:如果你的 profile 的 cordis.patch.yml 裏已經手工掛載過本插件,請先刪除那一行再安裝,否則會出現雙實例。

典型用法

在對話輸入框輸入 /fresh,可選帶 preset 參數:

/fresh            # 繼承當前會話的 preset
/fresh standard   # 用指定 preset 開新會話(標準模式)

支持的目標 preset:

  • /fresh standard —— 標準模式;
  • /fresh ptc(舊輸入 code 兼容映射到 ptc)—— PTC 模式(Code Mode SDK);
  • /fresh minimal —— 極簡模式;
  • /fresh create/fresh creator —— 創造模式(cordis)。

指定不存在的 preset 時命令直接報錯,不會靜默回退到繼承值。

版本與兼容性

以上內容以 dsh 0.1.2-rc.1 爲準(2026-09-04 驗證輪,插件版本 1.3.1)。插件依賴 dsh 內部 API,包括 ctx.agents.createctx.workspaceRegistryctx.sessions.opensession.deriveMessages() 等,dsh 升級可能導致兼容性問題。

依賴聲明方面,peerDependencies 爲 @deepseek-ai/cordis ^4.0.2@deepseek-ai/dsh-agent-presets ^0.1.2-rc.1@deepseek-ai/dsh-llm ^0.1.2-rc.1。按 semver 預發佈規則,^0.1.2-alpha.5 不包含 rc.1,所以聲明必須升至 ^0.1.2-rc.1

適用場景與注意

適合的場景:長時間在同一個會話裏工作、會話體量已經大到影響內存與響應速度的 DSH 用戶。

一個已知侷限:總結依賴 session.deriveMessages(),如果超大會話的上下文超出模型窗口,總結可能失敗——此時流程仍會繼續,新對話會創建、老會話會歸檔,只是新對話不帶摘要。

安全方面需要明確:插件以當前 dsh 進程的權限運行,安裝任何社區插件前,建議先閱讀源碼確認行爲符合預期。本項目採用 MIT 許可證,源碼與許可文件都在 GitHub 倉庫中。

小結

dsh-fresh-start 把「總結當前對話 → 開啓新會話 → 歸檔老會話 → 自動跳轉」這條超大會話的收尾鏈路壓縮成一條 /fresh 命令,每一步獨立降級、preset 可顯式指定。如果你的 DSH 會話已經開始卡頓,可以按上面的步驟裝上試一下。

  • 插件目錄頁(社區目錄,獨立站點):https://www.skillhub.cn/plugins/orangeofcarl0-sys/dsh-fresh-start
  • GitHub 倉庫:https://github.com/orangeofcarl0-sys/dsh-fresh-start
羽毛球分组比赛记分
小程序二维码

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

小夜