前言¶
在 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.js 隨 dsh.client 聲明進入瀏覽器清單,負責上面提到的自動跳轉。
插件還附帶一份 dsh-std Community v0.15 清單 dsh-plugin.json,默認完全惰性:dsh 原生加載器不會讀取它,只有顯式安裝 @dsh-std/adapter-dsh 後纔會被發現與校驗。它的宿主入口是佔位實現 lib/std/host.js,contributes.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.create、ctx.workspaceRegistry、ctx.sessions.open、session.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