dsh-handoff-doc:把長會話交接成一份 HANDOFF.md

前言

在 DeepSeek Harness(DSH)裏做長任務時,上下文窗口遲早會頂滿。常見做法是壓縮歷史,或在 Step 邊界把狀態「簡報」成一條消息交給新會話。上一類方案 dsh-session-handoff 能跑,但簡報是散文式消息:沒有有效期、已完成與未完成容易打架,且每次交接都在上一條之上疊加,接手方越讀越長,往往還得回去翻日誌。下面介紹後繼插件 dsh-handoff-doc:在安全的 Step 邊界停住,由當前會話的模型寫一份帶有效期的快照文件,歸檔舊版,新會話只收到指向該文件的短指令。

這是什麼

dsh-handoff-doc(GitHub:ElioFanyu/dsh-handoff-doc,維護者 ElioFanyu)是 DSH 社區插件,當前 package 版本爲 0.2.0,MIT 許可。定位是:把長會話交接成一份文件,而不是一條消息。上下文快滿時,會話在 Step 邊界停下,生成 HANDOFF.md,上一版寫入 CHANGELOG.md 與 history/<月份>.md,在同一工作區開新會話並繼承 preset、模型、權限、Plan 模式,最後只投遞一條約 200 token 的指針消息。

與 dsh-session-handoff 的差異

這一版把內容搬進工作區文件,並立了幾條硬規矩:

規矩 機制
只留「現在仍然成立」 提示詞規則 + §9 只允許一行指針
不允許追加 每次交接整份重寫 HANDOFF.md
歷史不能丟 覆蓋前歸檔進 CHANGELOG.md + history/<YYYY-MM>.md
必須有有效期 頂部寫「到下一次提交爲止(HEAD xxxxxxxx)」
長度必須可控 按字符預算裁剪,先刪整節,再刪長節末尾,並留省略說明

缺任一必需小節(§0/§1/§2/§4/§6/§8)則放棄交接,不創建新會話;寫文檔失敗時原會話不動,零寫操作。

工作區裏的目錄與文檔骨架

默認目錄(<項目> 取工作區最後一級目錄名;monorepo 等場景用 handoffProjectFolder 指定):

<工作區>/docs/handoff/<項目>/
├── HANDOFF.md          # 當前快照,唯一要讀的文件
├── CHANGELOG.md        # 每次交接一行條目
└── history/
    └── 2026-10.md      # 被覆蓋掉的交接文檔原文,按月份歸檔

固定十節:§0 30 秒自檢(命令由程序讀)、§1 目標與驗收、§2 當前有效事實、§3 卡點與阻塞、§4 下一步 + 驗證映射、§5 硬約束、§6 文件地圖(不寫行號)、§7 已否決方案、§8 已驗證 vs 未驗證、§9 歷史(一行指向 CHANGELOG,程序寫)。

新會話第一條消息不是正文,而是讀取順序指引:先跑 §0 裏的命令;自檢通過再讀 §2、§3、§4;自檢失敗或有效期已過則告知用戶文檔已過期,整份重寫後再開工。

命令與自動觸發

命令不進入模型可見歷史:

命令 行爲
/handoff 立即交接成文檔並交給新會話
/handoff status 階段、上下文佔用率、累計消費、閾值、最近結果
/handoff where(別名 doc) 文檔路徑、大小、HEAD、是否已歸檔
/handoff cancel 取消進行中的動作(下一安全檢查點生效)
/handoff retry 重試最近一次失敗

自動觸發字段與上一版 handoff 系列一致,例如 autoHandoffEnabled(默認 false)、autoHandoffTrigger(context / cumulative / either)、autoHandoffAtContextPercent(默認 85)等。文檔相關新增項包括 handoffDir(默認 docs/handoff)、handoffDocMaxChars(默認 24000)、archivePreviousHandoff、reusePreviousHandoff 等。交接與壓縮同時開啓時,autoCompactAtContextPercent 必須低於 autoHandoffAtContextPercent,否則拒絕保存。

插件聲明:不中斷正在執行的工作(等 whenIdle())、不吞用戶消息、不刪改原會話日誌、失敗不假裝成功、不寫工作區外路徑(經 workspace-fs.ts 的 resolveInside 校驗)。

安裝與啓用

安裝命令以 README 爲準(本地路徑示例,需換成你本機克隆或下載後的目錄):

dsh plugin --profile <profile> add "file:D:/path/to/dsh-handoff-doc"

安裝後重啓 DSH。宿主與瀏覽器端 UI 在同一包內。運行環境要求 Node ^22.19.0 || >=24.0.0,peer 依賴含 @deepseek-ai/cordis、@deepseek-ai/dsh-host-webserver 等(見倉庫 package.json)。

DSH 生態是「一切皆插件」;社區目錄 skillhub.cn 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。插件以當前 dsh 進程權限運行,安裝前應自行審閱源碼與 MIT 許可證。

典型用法

  1. 在長會話中執行 /handoff,等待 Step 邊界完成文檔寫入與新會話創建。
  2. 用 /handoff where 確認 docs/handoff/<項目>/HANDOFF.md 路徑與對應 git HEAD。
  3. 在新會話中按指針消息:只讀 §0 跑命令,再讀 §2–§4 從 §4 第一條動作開始。
  4. 需要觀測觸發與佔用時執行 /handoff status;與 dsh-session-handoff 同時安裝時,不要對同一會話同時開自動觸發,否則會搶同一 Step 邊界。

倉庫自述驗證情況見 docs/handoff/dsh-handoff-doc/HANDOFF.md。

適用場景與已知限制

適合:單倉庫或多會話協作、需要可版本化、可重讀的交接快照,且希望接手方先跑自檢命令再讀事實的場景。

限制(來自 README):協調狀態(階段、閂鎖、計數)僅在內存中,重啓後丟失;設置與已寫文檔不受影響。無工作目錄的會話無法交接。非 git 倉庫時 git 事實自動跳過。模型不上報 contextWindow 時佔用率觸發不可用(累計觸發仍可用)。custom 權限預設無名字可重放,只繼承審批策略。

結尾

dsh-handoff-doc 把會話交接從「越來越長的消息」改成「整份重寫 + 歸檔 + 字符預算」的單文件快照,並用短指針引導新會話先自檢再動手。目錄頁:https://www.skillhub.cn/plugins/ElioFanyu/dsh-handoff-doc;源碼與完整配置表:https://github.com/ElioFanyu/dsh-handoff-doc。

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

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

小夜