DeepSeek Harness (DSH) 的默認自動壓縮基於窗口比例判定,難以滿足對絕對 Token 數量(如 400k)的精確控制需求。dsh-oha-whale-compress 是一款解決這一痛點的插件,它接管壓縮閾值判斷,支持絕對值設定,並提供了側邊欄與輸入框下方的快捷操作入口。
核心功能¶
該插件主要提供以下能力:
- 側邊欄入口:在側邊欄底部提供完整配置面板,可查看會話大小(節點數/Token數)及壓縮狀態。
- 輸入框常駐按鈕:在輸入框下方提供常駐“壓縮”按鈕,點擊可喚起簡化版(減半)面板。
- 自動壓縮控制:支持開啓/關閉自動壓縮,並自定義觸發閾值(默認 409600 token)。
- 手動壓縮:通過側邊欄或輸入框按鈕一鍵觸發壓縮。
安裝¶
通過官方 CLI 安裝:
dsh plugin --profile web add dsh-oha-whale-compress
配置與使用¶
配置文件位於用戶根目錄:
~/.dsh/storages/dsh-oha-whale-compress/config.
在此文件中設置以下字段:
autoCompress: 控制自動壓縮總開關。autoThresholdTokens: 觸發壓縮的絕對 Token 閾值(默認 409600)。dockButton: 控制輸入框下方按鈕的顯示與隱藏。
觸發壓縮的方式有兩種:
- 通過側邊欄底部的完整面板點擊按鈕。
- 通過輸入框下方的常駐按鈕(調用減半面板)。
手動壓縮必須走框架命令:ctx.get('commands').execute(agent, '/compact', [], signal)。
引擎注入與生效¶
要讓自動壓縮按本插件的絕對閾值工作,需要將注入的 preset 引擎名替換爲 dsh-oha-whale-compress/engine。
官方說明運行時的權威源是 profile 的 cordis.patch.yml,而非 ~/.dsh/.agent-presets/<id>/agent.cordis.yml。若需批量替換,可使用提供的注入腳本:
cd /root/dsha-oha-whale-compress && node --input-type=module -e "
const { injectPreset } = await import('file:///root/dsha-oha-whale-compress/src/injector.js')
const r = await injectPreset({
presetPath: '/root/.dsh/profiles/web/cordis.patch.yml',
userRoot: '/root/.dsh/profiles',
mode: 'inject',
expectedCount: 4
})
console.log(r)"
修改生效條件:
* 修改 src/*(host 半):需重啓 dsh。
* 修改 client/client.js:刷新頁面。
* 修改 preset 引擎行:需重啓 dsh(loader 不監聽 preset 文件)。
技術細節與注意事項¶
- 懶加載設計:插件只硬注入
webServer,其餘服務一律通過ctx.get()運行時懶取,取不到時優雅返回 503,絕不阻塞插件激活。 - 服務隔離:
compaction服務是隔離的(壓縮 groupisolate),profile 插件無法直接調用,只能通過命令觸發。 - 依賴聲明:
package.json的exports必須聲明./engine,否則加載會報錯。 - 異步加載陷阱:異步加載的值不要直接餵給開關,否則每次打開面板都會觸發重播動畫。建議初值取模塊級 config store 中已加載好的值。
- Store 字段差異:
sessionsstore 沒有current字段,只有byId和list。面板需通過uiSession.current獲取當前會話,或從byId中查找retainedBy.mainView > 0的會話。 - UI 渲染坑點:反轉布爾判斷會導致 UI 靜默不渲染。例如
if (full)判斷寫反,會導致完整面板內的開關、閾值等字段全部不顯示。改完判斷後需逐個字段驗證。 - Slot Props:宿主渲染
shell.overlay和conversation.composer.dock時傳入的是空對象,相關 props(如useSessions)均爲undefined,需從ctx.get('uiSession').current等處自行獲取。