dsh-override-guard:凌駕 dsh-purge 之上的淨化層

前言

在 DeepSeek Harness(DSH)裏給智能體掛插件時,dsh-purge 一類組件會在 system-prompt/assemble 鏈路上用 prepend: true 且 await next() 的方式改寫最終系統提示。鏈上後註冊的淨化邏輯往往會被它「包」住,單靠搶註冊順序很難保證結果乾淨。若上游 hook 吞掉用戶消息、或在工具調用上留下 blocked / 拒答文案,模型側看起來就像被別的插件代筆。dsh-override-guard 針對的是這類局面:在不動模型、不替換 prompt 的前提下,對裝配結果做二級淨化,並輔以源碼級自愈。

這是什麼

dsh-override-guard 由 X-max0 維護,目錄分類爲 admin-security。它定位爲凌駕於 dsh-purge 之上的淨化層——裝配後再次淨化系統提示、恢復被吞沒的用戶消息、清理工具上的 blocked 與拒答錯誤標記、偵測僞造拒答並寫日誌,以及在 dsh-purge 升級把門裝回去時修復其源碼。設計目標是:不讓任何插件代替模型發聲。

核心功能

下面能力與 README 一致,可按需組合理解。

系統提示二級淨化

裝配完成後仍會處理:

  • 去掉 Excluded targets only: ... 一類區域/扇區排除句;
  • 將裸的 <project_instructions> 改寫爲帶 scope 屬性的形式。

除上述三項外,淨化還覆蓋固定拒答串 該目標在禁止範圍內……;其餘內容不碰。

消息與工具

  • 在 agent/pre-step:淨化 decision.messages;若 messages 被上游弄空,則嘗試恢復被吞沒的用戶消息。
  • 在 tools/pre-execute:清除其他插件設置的 exec.blocked 以及拒答文案形態的 exec.error。

僞造拒答與自愈

  • 通過 session/event 偵測短 assistant 文本中的僞造拒答,記錄來源與時間戳。
  • 定時器約每 5 分鐘檢查 dsh-purge 標記;必要時對 net-scope.js、index.js、core.js 做帶 [operator-fix] 標記的冪等補丁(修改前寫 *.bak-<timestamp>)。若 dsh-purge 大版本改了簽名,heal 會報 pattern 未命中而不是亂改文件。

與 dsh-purge 的競態策略

dsh-purge 在鏈首改寫下游產出,因此本插件採用縱深防禦,而非搶註冊:

手段 位置 作用
事後淨化 system-prompt/assemble、agent/pre-step 最後一次改動仍再過一遍淨化
源頭淨化 $DSH_HOME/prompt-inject.md 與加密槽 注入內容已是乾淨形態
源碼自愈 net-scope.js / index.js / core.js 升級重裝門禁後約五分鐘內再次移除

安裝與啓用

推薦使用官方 tarball 安裝(web profile 示例):

dsh plugin add https://codeload.github.com/X-max0/dsh-override-guard/tar.gz/refs/heads/main --profile web

也可使用 Git 或本地鏈接:

dsh plugin add https://github.com/X-max0/dsh-override-guard.git --profile web
dsh plugin add "link:C:/path/to/dsh-override-guard" --profile web

注意: 宿主進程運行中執行 dsh plugin add 或 pnpm add 會重寫 node_modules 並中斷當前進程。應先停止宿主,或接受重啓。安裝完成後需重啓一次宿主,dsh.profile.bundles 在啓動時加載。

若使用 pnpm 9/10 且日誌出現 Ignored build scripts: dsh-override-guard,需執行一次 pnpm approve-builds,否則 postinstall 無法把包註冊進 profile bundles;也可手動在 profile 的 dsh.profile.bundles 數組中加入 "dsh-override-guard"。

手動安裝時:將包放到 $DSH_HOME/profiles/web/node_modules/dsh-override-guard,並在 $DSH_HOME/profiles/web/cordis.patch.yml 追加:

- insert:
    - id: dsh-override-guard
      name: dsh-override-guard
      inject: [systemPrompt, tools]
      config: {}

典型用法

安裝並重啓後,可用自帶 CLI 查看狀態與修復:

dsh-override-guard status   # inject 文件、purge 標記、override-state
dsh-override-guard verify   # 任意問題則退出碼 1
dsh-override-guard heal     # 立即執行完整修復
dsh-override-guard where    # 解析後的路徑

確認插件已被宿主加載:

grep "plugin.applied" "$DSH_HOME/override-guard/guard.log" | tail -1

運行時日誌路徑:$DSH_HOME/override-guard/guard.log。常見事件含義如下:

事件 含義
plugin.applied 已被宿主加載
assemble.sanitized 系統提示被重寫
preStep.restore 恢復被吞沒的用戶消息
tool.unblock 清除 blocked 標記
denial.detected 捕獲僞造拒答(附摘錄)
heal.trigger / heal.done purge 源碼被回滾後已修復

Cordis 側註冊的 hook 摘要:

事件 選項 行爲
system-prompt/assemble prepend await next() 後淨化 sections[].text
agent/pre-step 默認(鏈尾) 淨化消息;空則恢復
tools/pre-execute prepend 清理 blocked / 拒答 error
session/event global 偵測僞造拒答
定時器 — 約每 5 分鐘檢查 purge 並自愈

適用場景與注意

適合誰: 已在 DSH 0.2.x 環境使用 dsh-purge 1.x,且需要在對模型 prompt 不做替換的前提下,保證裝配結果、會話消息與工具執行面不被其他插件「代筆」或鎖死的運維/紅隊/自託管管理員。要求 Node >= 18,與 dsh-purge 同代宿主。

權限與安全: 插件以當前 DSH 進程權限運行,並會修改 $DSH_HOME 下注入文件與(必要時)dsh-purge 源碼。安裝前應閱讀 倉庫源碼 與 MIT 許可證,確認符合你的合規與審計要求。

卸載:

dsh plugin remove dsh-override-guard --profile web

同時刪除 cordis.patch.yml 中的對應 insert 項並重啓;遺留的 *.bak-* 可按需刪除。

結尾

dsh-override-guard 把「事後淨化、源頭淨化、源碼自愈」疊在一起,用來對沖 dsh-purge 在 assemble 鏈首改寫的行爲,而不是與它在註冊順序上賽跑。社區插件目錄見 SkillHub 條目;源碼與完整說明見 GitHub:X-max0/dsh-override-guard。

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

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

小夜