manualcompact-billion:與 billion-context 共存時恢復 DSH 原生 /compact

前言

在 DeepSeek Harness(DSH)裏,長會話往往要靠壓縮把上下文收進可管理的範圍。DSH 自帶手動壓縮命令 /compact,也有可選的自動壓縮後端。社區插件 billion-context 走另一套自動壓縮方案;裝上之後,原生 /compact 會從命令面板裏消失——這不是偶然 bug,而是其配套 gate 在配置解析階段把 DSH 的兩個壓縮相關包標成禁用。

部分場景下 billion 自己的壓縮並不生效(例如非標準線路、攔截未命中),此時既沒有 billion 的自動壓,也沒有 DSH 的手動壓,會話容易頂滿上下文。下面介紹維護者 k-ying 發佈的 manualcompact-billion:在不動 billion 自動壓縮的前提下,把 DSH 原生手動 /compact 和壓縮後端重新掛回來,並把後端釘在「隻手動、不自動」。

這是什麼

manualcompact-billion 是 DSH 社區插件,歸類爲模型推理相關能力。一句話定位:讓 DSH 的原生手動 /compact 回來,同時不改動 billion-context 的自動壓縮邏輯。

維護者:k-ying。源碼與說明見 GitHub 倉庫;社區目錄頁:SkillHub 插件頁(獨立站點,與 DeepSeek / 幻方無官方從屬關係)。

它解決什麼問題

安裝 billion-context 後,bili-compaction-gate 會在配置 waterfall 裏把下列包設爲 disabled: true:

  • @deepseek-ai/dsh-compaction-basic(壓縮後端)
  • @deepseek-ai/dsh-command-compact(/compact 命令)

結果是 DSH 側兩條壓縮鏈路都被關掉。本插件在檢測到上述「被 gate 禁用」的配置時,把這兩個包改回啓用,並對壓縮後端設置 config.auto = false,從而:

  1. /compact 命令可用,僅手動觸發壓縮;
  2. billion-context 仍負責它自己的自動壓縮,兩者不搶同一套開關。

若配置裏沒有任何被 gate 禁用的行(例如已卸載 billion),插件原樣透傳,連 auto 也不改,避免在單獨使用 DSH 時誤關自動壓縮。

工作原理(簡述)

DSH 插件配置經 Cordis 的 waterfall(洋蔥模型)解析:內層 listener 調用 next() 拿到下游結果,外層可以再改。billion 的 gate 在內層返回「已禁用」;本插件用 { global: true, prepend: true } 註冊在最外層,收到「已禁用」後改回「啓用 + auto:false」,最終生效的是外層返回值,gate 無感知。

插件只改三類值:兩個包的 disabled: true → false,以及後端的 config.auto = false。不修改 billion 的包、代理或 gate,也不註冊額外服務。

安裝與啓用

DSH 按 profile 隔離插件;裝錯 profile 等於未安裝。不確定時先看本機有哪些 profile:

ls ~/.dsh/profiles

命令行 dsh 或瀏覽器 Web UI 通常用默認 profile web;桌面 Tauri 版常見爲 tauri。查看某 profile 已裝插件:

dsh plugin --profile web list

配置文件路徑示例:~/.dsh/profiles/web/cordis.patch.yml。

從 GitHub 安裝(推薦)

dsh plugin --profile web add github:k-ying/manualcompact-billion

web 爲 dsh 默認 profile;github:owner/repo 由 dsh 轉成真實 Git 地址拉取,cordis.patch.yml 隨包掛載。桌面版可將 web 換成 tauri:

dsh plugin --profile tauri add github:k-ying/manualcompact-billion

鎖定版本可帶 tag(資料中示例爲 v0.1.0):

dsh plugin --profile web add github:k-ying/manualcompact-billion#v0.1.0

其他安裝方式

本地目錄:

dsh plugin --profile web add ~/Documents/AI/manualcompact-billion

或在 profile 的 cordis.patch.yml 手寫條目(路徑換成你的實際路徑):

- id: manualcompact-billion
  name: 'file:///path/to/manualcompact-billion/index.js'

裝完後必做

完全退出 dsh 再啓動(不是隻關窗口)。配置在啓動時計算,熱改不會重新走 waterfall。

驗證與典型用法

重啓後開任意會話:

  1. 輸入 /compact,應能執行壓縮,或提示「沒有可壓縮的歷史」(同樣說明命令已掛載)。
  2. 若命令面板沒有 /compact,或報「沒有壓縮後端」,說明未恢復成功。

日誌中搜索 manualcompact-billion:,成功加載時會出現自檢行,例如:

manualcompact-billion: native compaction restored (command×1, basic×1, groups×2, auto=off)

沒有該行,表示插件未加載,或當前配置裏沒有被 gate 禁用的項。

日常用法即在長會話中按需執行 /compact,與 billion 的自動壓縮並行;注意下文「適用場景與注意」中的 resync 與兼容風險。

環境變量開關

環境變量 作用
MANUALCOMPACT_OFF=1 插件完全讓位,不修改配置
MANUALCOMPACT_ALLOW_AUTO=1 不強制 auto: false,保留原有自動壓縮設置(可能與 billion 爭用歷史,資料不建議開啓)

卸載

dsh plugin --profile tauri remove manualcompact-billion

將 tauri 換成你安裝時用的 profile 名。重啓即可;無持久副作用。

適用場景與注意

適合誰: 已安裝 billion-context,又需要在 DSH 裏保留手動 /compact 作爲兜底或習慣操作的開發者。

權限與信任: 插件以當前 dsh 進程權限運行,會在配置解析階段改寫壓縮相關包的啓用狀態。安裝前應閱讀倉庫源碼與許可證(MIT),自行判斷是否接受。

風險與限制(來自上游 README):

  • 行爲與 billion 上游「接管後禁止宿主壓縮」的假設相反,上游不保證長期兼容。
  • billion 正在壓縮時,手動 /compact 會改變會話歷史,billion 下次請求可能觸發全量 resync,帶來額外請求與緩存命中下降,非數據損壞。
  • 不解決「billion 能否壓某個供應商」;非標準線路仍可能壓不了。
  • 上游改包名或事件名時插件可能靜默失效,需更新插件內 BASIC_PACKAGE / COMMAND_PACKAGE 常量。

結尾

manualcompact-billion 補的是「billion 與 DSH 原生壓縮二選一」留下的缺口:自動仍由 billion 管,手動 /compact 回到 DSH 側且固定爲不自動壓。需要安裝命令、原理與開關細節時,以 GitHub README 爲準;瀏覽社區條目可打開 SkillHub 目錄頁。

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

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

小夜