DSH 交接插件:用 /handoff 把滿載會話清零並自動接力

前言

在 DeepSeek Harness(DSH)裏跑長任務,會話上下文很快就會被頂滿。官方的自動壓縮是有損的:細節會被喫掉,而且壓縮完還在同一個會話裏,繼續往下頂就會越來越喫力。這需要換一條路——交接:把當前進度、改過的文件、驗證過的結果整理成一張結構化交接卡,同時起一個上下文清零的新會話,把卡片作爲它的第一句,並自動命名、置頂、歸組。

它是什麼

xwide/dsh-xwide-handoff 是一個爲 DSH 提供交接能力的插件,由 XWIDE 維護。它把「快聊滿的會話」變成「一張結構化交接卡 + 一個乾淨的新會話」,並在側欄自動置頂。當上下文接近閾值時,還能自動把下一棒備好。

核心功能

  • /handoff 指令:在輸入框敲 /handoff 後面跟一句話,會把這句話作爲「本次交接重點」寫入交接卡。如果不寫,卡片會自動帶上「本輪動過的文件」和「最近 6 條原話」。
  • 新會話自動命名:新會話標題格式爲「原會話名_01」「_02」…,序號來自落盤計數器,按 cwd 分桶單調遞增,不會重名。
  • 自動置頂與歸組:新會話會在側欄自動置頂,並歸入源會話所在的項目分組。
  • A 半自動(autoReady):插件監聽每輪結束,計算最近一次請求攜帶的上下文量,當佔用比例 ≥ readyPct(默認 0.7)時,自動執行一次交接(建會話、命名、置頂、注入卡片、驅動首輪),讓新會話在側欄可見。同一會話只備一次,全局冷卻默認 10 分鐘,總開關默認關閉。

安裝與啓用

安裝方式有兩種,二選一即可:

  • 使用 pnpm(推薦):
  # 在 DSH profile 目錄裏
  pnpm add dsh-xwide-handoff
  • 下載即用(不需要 npm/pnpm):
    1. 把本倉庫整個目錄放進 <你的 profile>\local-plugins\dsh-x-wide_handoff\。
    2. 在 profile 的 cordis.patch.yml 末尾加一行掛載,然後重啓 DSH:
  - id: dsh-xwide-handoff
    name: './local-plugins/dsh-x-wide_handoff/index.js'
    config:
      enabled: true
      commandName: handoff
      childMode: create
      recentUserMessages: 6

注意:只能有一個裝載實例,否則會出現重複註冊的現象。

典型用法

在 DSH 的指令菜單裏可以看到 handoff 這一條(說明命令已註冊),也可以直接在輸入框敲 /handoff。

示例輸入:

/handoff 本次重點:把 X 的解析邏輯改完;已改 a.js;未驗證迴歸

命令執行完會返回新會話的 id 和標題,並把它置頂。

配置項

- id: dsh-xwide-handoff
  name: './local-plugins/dsh-x-wide_handoff/index.js'
  config:
    commandName: handoff          # 命令名,默認 handoff
    childMode: create             # none | create | fork(見下)
    recentUserMessages: 6         # 卡片帶最近幾條你的原話
    compact: false                # 交接前是否先本地壓縮一次(本地大模型請保持 false)
    titleTemplate: '{base}_{seq}' # 標題模板,支持 {base} {seq} {note} {time}
    seqWidth: 2                   # 序號位數:_01
    maxTitleChars: 64             # 標題字符上限
    repinLimit: 3                 # 自愈重釘次數上限
    autoReady: false              # A 半自動總開關
    readyPct: 0.7                 # 觸發閾值(占上下文窗口比例)
    readyCooldownMs: 600000       # 冷卻
    contextWindow: 262144         # 上下文窗口(判佔用用;默認取自作者的本地模型,請按自己窗口改)
    cardSections:                 # 卡片欄目開關
      guide: true                 # 「接手須知」
      files: true                 # 「本輪動過的文件」
      usage: true                 # 「源會話上下文」

childMode 三檔

  • create:服務端直接建全新空會話(上下文清零,繼承 cwd 與 agentPreset)。這是默認推薦模式。
  • none:服務端不建會話,把卡片 JSON 塞進結果文本,由 client.js 用 GUI 原生 API 建可見會話。需要「和點『新建對話』完全一致」的場景;要求 client.js 已正確作爲 dsh.client 打進包,跨機器未驗證。
  • fork:繼承全部歷史(上下文不清零)。只想換個標題、不想清上下文的場景。

注意:三種模式都不能帶 parentSession,否則 DSH 會把新會話從列表和可恢復集合裏排除,導致交接完看不見新會話。

交接卡樣式

卡片以目標標題作爲第一行,包含「接手須知」「本輪動過的文件」「最近你的原話」「源會話上下文」等欄目。

適用場景與注意

  • 適合需要多次迭代、上下文會頻繁頂滿的長任務。
  • 插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證。
  • childMode: none 的客戶端半邊接線尚未在第二臺機器驗證。
  • DSH 升級後請覈對插件依賴的內部接口位置,所有內部調用都做了寬容處理,失敗只記日誌,不會導致交接本身崩潰。

短結尾

這套「交接」方案能讓你在換會話時保留完整上下文,接力不丟。更多細節與故障排查,可查看目錄頁與 GitHub 倉庫。

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

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

小夜