dsh-graft-slice:長會話物理切片與零繼承冷恢復

前言

在 DeepSeek Harness(DSH)裏跑長任務時,上下文窗口會隨輪次變長:注意力被歷史稀釋,已解決過的報錯和中間敘述仍佔着窗口,模型容易在新窗口裏重複推導或誤把舊失敗當成當前阻塞。常見做法是手動開新會話並粘貼摘要,但摘要會丟 seq、丟工具輸出,且難以覈對「當時原文是什麼」。

dsh-graft-slice 是 DSH 開源生態(GitHub topic:dsh-plugin)裏的「記憶」類插件,由 corvus-dsh 維護。它在源會話最後一個 turn/end 處切出高保真日誌磁帶,生成爲一個零繼承、可冷恢復的目標會話,完成物理交接;不 fork 源日誌、不做有損壓縮,並用事務日誌保證崩潰可恢復。兄弟項目 dsh-memory 負責能力記憶(SKILL.md / 負知識),與本插件僅通過臺賬文件耦合。

這是什麼

一句話:dsh-graft-slice 負責工作能力連續性——在上下文逼近上限前換乾淨窗口,同時保留按 seq 回讀事實的能力。

項 說明
倉庫 corvus-dsh/dsh-graft-slice
目錄頁 skillhub.cn 插件頁
當前版本 0.21.0(預發佈),v7.4 能力線
目標運行時 DeepSeek Harness 0.2.1-rc.5(package.json 中 engines.dsh)
許可證 MIT

生態裏把記憶拆成兩類:事實記憶(做過什麼、原文與工具輸出)只需可查,由會話日誌加 graft_read_result / graft_search_history 按 seq 回讀;能力記憶才需要持久化,由規劃中的記憶系統插件承擔。本插件不做 SQLite、不單獨注入 tool/result,只追加、不改寫源日誌。

核心功能

日誌切片與注入

在封閉輪次邊界切取磁帶,向目標會話注入 system、磁帶與約束包。README 記載的真機自我切片:源會話 48 輪、約 9.5 MB 壓縮日誌時,交接注入約 14,252 字符(約爲源的 0.15%),新會話零澄清接上工作,並能自行發現 pending 與斷點信息是否一致。

交接任務看板(v0.20.0)

把任務狀態渲染爲四列(已完成、進行中、待開始等),避免 v0.19 那種「散文式一段話」迫使模型自行推導進度。開放輪次上的未決工作進入「進行中」,與 open-turn-carryover 共用同一提取器;空列用顯式「無」與缺失列區分;停泊點後補充 graft_read_result / graft_search_history 的用法說明。

語義狀態提取與物理點火(v0.19.0)

open-turn-carryover 不再整段搬運已解決報錯棧;只保留可覈對的「最終結果」(帶 seq)、唯一未覆蓋的「未決報錯」一行,以及停泊點與回讀指針。瘦身內容在「已按語義瘦身」中聲明,避免靜默丟棄。

切片完成後,插件通過宿主 sessionController.prompt 向目標投遞帶 [dsh-graft-slice 點火] 標記的引導語,使冷恢復會話自動開跑;失敗時寫入 <dataDir>/.graft-pending-ignition.json 排隊重試,遷移本身不回溯。

風險與策略、動態水位與硬約束(v0.18.0 及後續)

  • 命令風險分類(safe / unknown / destructive)與策略表(strict / balanced / autonomous)分離;destructive 在 autonomous 下爲 ask,不會靜默執行無界刪除。
  • 動態水位:按窗口估算交接成本,hardAt 在 0.50–0.75 間 clamp;過小窗口會標記 feasible: false。
  • 硬約束按字符預算打包,裝不下則中止並報告 GRAFT_ABORTED: constraints truncated,避免靜默截斷規則。
  • 臺賬 .retired.json / .transferred.json 使用 epoch 信封,跨進程防撕裂;與 dsh-memory 的臺賬讀取規則對齊。

Bundle 與校驗

本插件是 DSH bundle:須在 package.json 中聲明 dsh.bundle.patch(指向 cordis.patch.yml),cordis.patch.yml 用包名 dsh-graft-slice 引用。倉庫提供 27 項 bundle 校驗,可在 CI 中運行:

node scripts/verify-bundle.mjs

安裝與啓用

安裝命令以 README 爲準(勿自行拼接 github:owner/repo 形式):

# 用戶安裝(dsh CLI)
dsh plugin --profile <name> add dsh-graft-slice
dsh --profile <name> --dump-config        # 配置樹裏應出現 dsh-graft-slice 條目

安裝後確認配置樹中出現 dsh-graft-slice;Node 需 >= 20。控制台側提供「物理點火」相關卡片(開關、投遞方式、未點火會話列表等),具體項以當前版本 UI 爲準。

典型用法

下面介紹長會話交接的常見路徑,細節以倉庫 README 與 ARCHITECTURE.md 爲準。

  1. 在 profile 中安裝並啓用插件(見上一節命令),保證 Harness 版本滿足 >=0.2.1-rc.5。
  2. 繼續在同一源會話中工作,插件根據動態水位在接近 hardAt 時提示或觸發切片準備;操作員可在面板查看可行性(feasible)與水位參數(如 watermarkMode: 'fixed' 用於差分測試)。
  3. 執行切片與注入(工具鏈中的 graft_slice_and_inject 等,由插件註冊到 DSH)。源會話在事務提交後退休;目標會話收到磁帶、交接任務看板或交接指令卡,以及硬約束包。
  4. 目標會話第一輪優先閱讀注入塊中的看板或指令卡;需要原文或工具輸出時,用注入裏點名的 seq 調用 graft_read_result 或 graft_search_history,而不是假設磁帶內仍有全文。
  5. 若物理點火成功,目標會收到點火消息並繼續執行「待開始」項;若點火排隊,插件在後續 apply() 時通過 resumePendingIgnitions() 重試。

交接任務看板在 README 中的結構示例(內容僅爲格式說明):

## 交接任務看板(第一輪只要讀這裏)
**原始用戶要求**:……

**已完成**
- git commit abc1234 成功(seq=88)

**進行中**
- ……

**待開始**
- ……

適用場景與注意

適合誰:需要在 DSH 中單會話連續跑多輪工具、又不想手動 copy 摘要開新窗的開發者;希望事實記憶仍可按 seq 回查、同時用乾淨上下文重置注意力的長任務場景。

注意:

  • 插件以當前 DSH 進程的權限運行;安裝前應閱讀 GitHub 倉庫 源碼與 MIT 許可證,並理解命令攔截策略(strict / balanced / autonomous)對自身工作流的影響。
  • 社區目錄 skillhub.cn 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;版本以倉庫 tag 與 package.json 爲準(當前文檔對應 0.21.0 預發佈線)。
  • 窗口過小導致一次交接都裝不下時,插件會明確報 feasible: false,應調整窗口或策略,而不是強行在 50% 切點假裝可行。
  • 與 dsh-memory 協作時,遷移證據依賴臺賬 epoch;被拒讀時應按 README 說明重試,勿手工猜測「最新狀態」。

結尾

dsh-graft-slice 把「換窗」做成可審計的物理交接:源日誌只讀、目標零繼承冷啓動、事實按 seq 可查、事務與點火隊列保證崩潰與延遲啓動仍可恢復。若要進一步瞭解實現與發佈說明,可查閱倉庫 README 與 RELEASE_NOTES.md;安裝與索引見 SkillHub 目錄頁。

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

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

小夜