前言¶
在 DSH(DeepSeek Harness)裏讓 Agent 執行 git commit、git push 或 gh repo sync 時,暫存區與即將上傳的提交裏可能混入 API Key、私鑰、連接串、本機絕對路徑或個人信息。人工逐行看 diff 成本高,單靠 .gitignore 也攔不住已經 git add 的內容。下面介紹 Host 插件 dsh-push-privacy-guard(維護者 lizhijie429,分類 admin-security):在工具層於上述命令執行之前做只讀掃描,命中未白名單項時走 DSH 原生審批面板,由用戶決定放行或阻止。
這是什麼¶
一句話定位:內容泄露護欄,不是完整安全邊界。插件掛接 DSH 的 tools/pre-execute(異步 prepend),覆蓋 Agent 通過 pwsh / bash 一次性命令以及 PTC 內部 bash 發起的 commit/push;持久終端 terminal_send 上的 commit/push 默認直接拒絕。它不替代人工終端推送、腳本自行發起的推送,也無法保證規則庫以外的泄露形式被識別。
倉庫:https://github.com/lizhijie429/dsh-push-privacy-guard
社區目錄頁:https://www.skillhub.cn/plugins/lizhijie429/dsh-push-privacy-guard
當前版本 0.2.1,許可證 MIT,要求 DSH >=0.2.1-0 <0.3.0。
核心功能¶
提交前與推送前檢查¶
- commit:掃描將要進入記錄的暫存區;同一命令裏先
git add、帶 pathspec /-i/--include、commit -a時按git diff HEAD覆蓋工作區並補掃未跟蹤文件;同時檢查-m/-F/--trailer提交信息。無法預讀的信息(如-F -、命令替換)按「掃描不完整」處理,默認仍要求授權。 - push:只讀計算本次 push 實際上傳範圍(支持
git -C、多 refspec、remote、--force、--all、--mirror、--delete、gh repo sync),按提交逐個掃描 diff 與提交信息,並檢查 tag 消息。 git push --dry-run/-n:不上傳內容,直接放行、不彈審批。
首次推送與全倉掃描¶
某個倉庫第一次經 DSH 推送時,可詢問是否先做全倉掃描(配置 fullScanOnFirstPush:ask / always / never)。全倉掃描用 --full-tree 覆蓋 HEAD 下 git 已跟蹤 文件;.gitignore 忽略的內容不參與。之後該倉庫只檢查本次提交/推送增量。
審批與白名單¶
命中且不在白名單時調用 ctx.approval.request(),在 Web UI 展示脫敏後的命中清單。批准 = 本次放行,且(默認)把項寫入白名單;拒絕或取消 = 阻止命令。白名單隻存掩碼與穩定指紋(sha256(規則 id + 命中值) 截斷),同一敏感值跨文件、跨倉庫授權一次即可。掃描失敗、超時、git 查詢失敗或拿不到授權時 fail-closed,不會靜默放行。
內置規則與白名單管理¶
V1 內置規則覆蓋私鑰塊、常見雲與 SaaS Token(AWS、GitHub/GitLab/npm、OpenAI、Slack、Google API Key 等)、JWT、Bearer、賦值式 secret(含中文鍵名)、數據庫/消息隊列連接串、本機路徑(Windows/UNC/POSIX/~/.ssh)、郵箱、大陸手機號與身份證、內網 URL 等;佔位符與示例值有過濾,ignorePaths 默認跳過鎖文件、構建產物、node_modules 等。
用戶專屬斜槓命令 /privacy-guard(不產生模型消息)可 list/remove/clear/status/repos/reset/scan/help;底層 state/whitelist.json 可手改、即時生效。配置由 Cordis Config(Schemastery)校驗,帶 .volatile() 的字段可在 DSH 設置頁熱更新,無需重啓 Host。
安裝與啓用¶
插件以當前 DSH 進程權限運行;安裝前建議自行查看倉庫源碼與 MIT 許可證。npm 包尚未發佈,以 Git 源或市場索引安裝爲準。
命令行添加(desktop profile 示例)¶
dsh plugin --profile desktop add https://github.com/lizhijie429/dsh-push-privacy-guard
通過自定義插件市場¶
- 在 DSH 中啓用實驗性 自定義插件市場(插件 → 實驗性插件 → 更多 → 自定義插件市場)。
- 在 插件 → 發現 → 索引源 粘貼市場索引 URL:
https://raw.githubusercontent.com/lizhijie429/dsh-push-privacy-guard/main/market/index.json
- 搜索 “Push Privacy Guard” 安裝。
也可在 desktop 的 cordis.patch.yml 中按 README 用絕對路徑 insert 掛載 index.mjs 並附帶 config(如 fullScanOnFirstPush: ask),具體片段見倉庫 README「安裝」一節。
典型用法¶
日常 commit / push¶
啓用插件且 enabled、interceptCommit、interceptPush 爲默認 true 時,Agent 照常調用 git;若掃描到新敏感項,Web UI 會出現審批。用戶確認後同類項進入白名單,後續不再重複詢問。
管理白名單與自檢¶
在 Web UI 命令面板執行(不會進入模型上下文):
/privacy-guard list
/privacy-guard remove <id前綴>
/privacy-guard clear confirm
/privacy-guard status
/privacy-guard scan
/privacy-guard scan 對當前會話倉庫做全倉 tracked + 暫存區掃描並報告,不推送、不寫白名單。
配置要點¶
在 profile 的 cordis.patch.yml 的 config: 下可調整例如:unresolvedRepo(定位不到倉庫時 deny/allow)、persistentShellCommits(持久終端 deny/allow)、disableRules / extraRules、maxTotalBytes / gitTimeoutMs 等。非法枚舉會在加載時報錯;部分字段僅在 yml 中改數組/對象,需 profile 重載生效。完整字段表見倉庫 README「配置」一節。
適用場景與注意¶
適合:經常用 DSH Agent 自動改代碼並 commit/push 的開發者,希望在工具鏈上多一層「上傳前看一眼」的護欄,並可用白名單平衡誤報與重複打擾。
務必知曉:
- 定位是降低誤泄露概率,不能替代密鑰輪換、遠端 secret scanning、代碼審查或最小權限策略。
- 不覆蓋人工終端與插件外的推送路徑;模型理論上仍可寫
state/whitelist.json,主體信任邊界見倉庫「已知限制」。 - 社區目錄 skillhub.cn 爲獨立生態索引,與 DeepSeek / 幻方無官方從屬關係;DSH 本身遵循「一切皆插件」的擴展方式。
結尾¶
dsh-push-privacy-guard 在 DSH 工具執行 commit/push 之前做只讀敏感信息掃描,用原生審批與白名單把「是否上傳這段內容」交還給人。需要細節、規則表與 desktop/server 掛載示例時,以 GitHub README 爲準: