dsh-workspace-heal:工作區目錄自愈 + 舊會話上下文摘要導入

前言

DeepSeek Harness(DSH)按會話頭裏的 cwd 把會話歸屬到工作區。當文件夾被改名、刪除或移走後,路徑對不上,會話就不再出現在任何工作區分組裏——文件還在、日誌還完整,但界面上找不到了。

dsh-workspace-heal 是 DSH 的一個插件,用於處理這種情況:自動重建被誤刪的空目錄,以及把失去歸屬的會話摺疊成摘要,導入到新會話中作爲上下文。它不會改寫會話日誌。

插件定位

  • 維護者:nlflora
  • 分類:記憶
  • 核心能力:工作區目錄自愈、會話上下文摘要導入
  • MIT 許可證
  • GitHub 星標:1

安裝

從 npm 安裝(推薦):

dsh plugin --profile <你的 profile> add dsh-workspace-heal

改本地代碼時,從目錄安裝(link: 方式,改動即時生效):

dsh plugin --profile <你的 profile> add /absolute/path/to/dsh-workspace-heal

也可以在 DSH 的插件管理器裏安裝。裝完無需重啓即可激活(HMR)。

使用方式

插件的全部能力通過一個工具暴露:workspace_heal。

action 參數 作用
status — 工作區清單:路徑、目錄狀態、綁定會話數;外加孤兒會話數量
list limit? 列出失去歸屬的會話(sessionId / 原 cwd / 創建時間 / 事件數 / 大小)
preview sessionId, maxChars? 返回該會話的摘要,先給用戶看
import sessionId, maxChars? 返回帶標記的摘要正文,貼進對話即成上下文
heal — 立即執行一次檢查與重建,不等定時器

典型流程:

你 → 幫我把舊會話的上下文遷到新工作區
模型 → workspace_heal({ action: 'list' })
模型 → workspace_heal({ action: 'preview', sessionId: 'session-…' })
你  → 就這個
模型 → workspace_heal({ action: 'import', sessionId: 'session-…' })

配置

在 cordis.patch.yml 裏按 id workspace-heal 覆蓋:

- id: workspace-heal
  config:
    autoHeal: true          # 關掉就只保留工具(拿不準時先設 false)
    intervalSeconds: 60     # 檢查間隔,最少 10 秒
    digestMaxChars: 1800    # 單個摘要的字符上限

autoHeal 默認是 true:插件每 60 秒檢查一次,命中條件時會真的往磁盤 mkdir。三重條件很窄,但如果你希望”我沒明確要求之前什麼都別寫”,先把 autoHeal 設成 false,需要時手動調 workspace_heal({ action: 'heal' })。

判定規則

什麼時候重建目錄:三個條件同時成立才動手。

  1. workspace.status() === 'missing-dir'
  2. 該工作區 sessionIds.length > 0(仍綁定着會話)
  3. mkdir 沒拋錯

沒有會話綁定的空文件夾被刪掉,永遠不重建。手動建的臨時目錄、清掉的空殼,插件不會復活它們。

什麼算孤兒會話:header.cwd 有值,且不等於任何已註冊工作區的規範化路徑,且不是 origin: 'subagent' 的子代理會話。

注意:這跟界面上的「丟會話」不是一回事。界面丟會話多半是索引沒收錄,但 cwd 仍然匹配現存工作區——那種走 heal,不走遷移。

邊界與保證

  • 舊會話日誌只讀。不做幀級改寫、不搬遷會話目錄、不碰 session.v4.jsonl.zstd。
  • 唯一的寫操作是 mkdir,且僅限上面那三個條件。
  • 摘要是有損的:用於接着幹活,不是逐字恢復。
  • 摘要來自會話日誌裏的 user/message / assistant/message / tool/call;運行時注入塊會被剔除(<system-reminder>、[MNEMON] 快照、Current runtime context 等),所以「最近的請求」裏不會出現系統塞進去的上下文。
  • 讀會話走 sessionPersistence 的只讀句柄,取頭尾各一段,不會把 13 MB 的日誌整個讀進內存。
  • 卸載插件不會刪掉它建出來的目錄。重建出來的目錄屬於你的文件系統,卸載後照舊存在;要清理請手動刪。

測試

node --check index.js
node test.mjs

19 項斷言,不需要 DSH 環境。其中「自動重建」一組用樁註冊表 + 真實文件系統:會真的建目錄、真的刪掉,最後斷言無殘留。測試目錄建在系統臨時目錄下,跨平臺。

與已有插件的區別

同類項目(2026-10 起步,均 MIT):

  • dsh-plugin-workspace-archive:文件夾消失時歸檔會話,放回來時帶回。它隱藏,本插件重建。
  • dsh-session-mover:幀級改寫 zstd 頭,把會話真正搬到另一個工作區,逐字節校驗 + 全目錄備份。它無損,但要改日誌。
  • dsh-move-session / dsh-session-relocate / dsh-manage-sessions:移動或批量管理會話。

本插件的定位是不碰日誌的那一側:重建優先,遷移用摘要。兩者互補——想要無損搬運請用 session-mover,想要零風險請用這個。

生態背景

DSH 理念是「一切皆插件」。社區目錄(SkillHub)是獨立站點,與 DeepSeek / 幻方無官方從屬關係,不是官方應用商店。

羽毛球分组比赛记分
小程序二维码

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

小夜