前言¶
在 DeepSeek Harness (DSH) 的插件生態中,Cordis 框架允許所有監聽器共享同一個 args 數組。由於 internal/get / internal/set 攔截點公開,任何插件都可以靜默地重寫數據流。當數百個插件同時運行時,很難回答“是哪個插件修改了我的數據”這個問題。
dsh-audit-log 旨在解決這個問題。它是一個運行時數據流審計日誌插件,能夠記錄誰在何時修改了什麼,並精確到具體的插件和 Fiber 層面。
插件簡介¶
dsh-audit-log 是一個只讀觀察者插件,它不會阻塞、重寫或存儲 Payload 的具體值,僅記錄結構指紋。
- 類別:admin-security
- 維護者:ssdyg4444-sys
- 許可證:MIT
核心功能¶
- Dispatch-level diff:在監聽器運行前後對參數形狀進行快照,記錄中間發生的修改。
- Per-listener window attribution:每個監聽器在註冊時被包裹,修改被精確歸因到執行該修改的具體插件和 Fiber(置信度爲 “window”)。
- Read-only observer:始終處於觀察模式,絕不干擾數據流。
- Shape-only fingerprints:僅存儲結構指紋(類型、鍵、長度),不記錄 Payload 值,確保敏感信息不會進入日誌。
安裝與啓用¶
進入你的 Web 配置目錄:
cd ~/.dsh/profiles/web
pnpm add dsh-audit-log
然後在 package.json 的 dsh.profile.bundles 中添加 dsh-audit-log,或者使用 dsh plugin --profile web add dsh-audit-log。安裝後重啓 DSH 實例即可。默認情況下插件無需配置即可開始記錄。
典型用法¶
在任意插件中,可以通過 ctx.auditLog 查詢審計日誌。
查詢特定事件的修改記錄:
const records = await ctx.auditLog.query({
events: ['message/send'],
mutationsOnly: true, // 僅返回發生修改的 Dispatch
fromSeq: 100,
limit: 50
});
// 獲取具體的責任人
const culprit = records[0].mutations[0].attribution?.package
// 獲取每個監聽器的窗口記錄
const windows = ctx.auditLog.queryWindows({ event: 'message/send' })
適用場景與注意¶
- 適用場景:當你需要排查數據流被意外修改、追蹤插件間數據依賴、或進行安全審計時使用。
- 注意:插件以當前 DSH 進程的權限運行,安裝前應檢查源碼與許可證。
- 隱私保護:日誌中永遠不會出現 Secret 等敏感值,僅存儲結構指紋。
侷限性¶
- 指紋限制:Shape-only 指紋無法檢測等長字符串交換(如
'by-c'變爲'by-d')或原地數字編輯。 - 時間精度:同步路徑的時間記錄是精確的;但在
serial/parallel/waterfall模式下,異步監聽器的同步路徑時間粒度較粗(由 Dispatch-level diff 覆蓋)。
dsh-audit-log 與生態中其他上下文層級的觀測工具互補,前者關注運行時數據流修改,後者關注模型 Prompt 的輸入來源。