前言¶
在 DeepSeek Harness(DSH)裏跑智能體時,每一輪對話的 transcript 會落盤,並隨請求發給模型提供方。工具照常執行:env、誤執行的 cat .env、git remote -v 裏帶 token 的 URL、堆棧裏的連接串,都會原樣寫進這份副本。命令本身往往不能攔,但持久化與外傳的那份文本可以處理。下面介紹社區插件 dsh-redact(維護者 drm-nz,分類 admin-security):在工具結果送往模型和會話日誌之前,對文本做原地改寫,工具進程仍保留完整輸出。
這是什麼¶
dsh-redact 是 DSH 插件,一句話定位:在工具輸出到達模型或 session log 之前,脫敏其中的 secret。設計原則是 redact the transcript, never the process——不阻斷命令、不改寫命令、不降低權限,只改 destined for 模型與已保存會話的那一段文字。
數據流可以概括爲:
tool executes ──► result content ──► tools/post-execute hook ──► model + session log
full access (this plugin) [REDACTED:NAME]
插件零運行時依賴,MIT 許可,當前 package 版本爲 0.1.0。社區目錄頁:https://www.skillhub.cn/plugins/drm-nz/dsh-redact ;源碼與說明:https://github.com/drm-nz/dsh-redact 。目錄站點爲社區生態索引,與 DeepSeek / 幻方無官方從屬關係。
核心功能:四層脫敏¶
四層彼此獨立,可在配置裏開關。
| 層級 | 默認 | 作用 |
|---|---|---|
exact |
開 | 敏感環境變量取值(如 DATABASE_URL、MYSQL_PWD、代理 URL 等)以及你在 secrets 裏配置的明文 |
patterns |
開 | 已知憑據格式(見下表)、PEM 私鑰、JWT、Bearer …、URL userinfo 密碼等 |
context |
開 | 無固定前綴、但文檔約定名稱旁的憑據(如 AWS secret/session token) |
keywords |
關 | password=、token=、api_key= 等錨定取值;誤報更高,需主動開啓 |
patterns 層識別的部分格式(前綴與體長由規則表生成,避免 matcher 漂移):
| 格式 | 前綴 | 體長 |
|---|---|---|
aws-access-key |
AKIA / ASIA |
16 |
github-token |
gh[pousr]_ |
36 |
github-pat |
github_pat_ + 22 + _ |
59 |
gitlab-pat |
glpat- |
20 |
openai-key |
sk- |
48 |
openai-project-key |
sk-proj- |
≥ 40 |
anthropic-key |
sk-ant- |
≥ 20 |
google-api-key |
AIza |
35 |
stripe-secret |
sk_live_ / rk_live_ |
24 |
| 以及 npm、DigitalOcean、Shopify、Mailgun、Slack、Sendgrid、Twilio 等 | (見 README 表) |
匹配故意不要求尾部詞界:憑據與相鄰文字粘在一起時,仍會去掉憑據段;過短的形似串會保留。無規則的形狀不在 patterns 範圍內,由 exact 層用環境變量與 secrets 補網。
路徑型變量(PWD、OLDPWD、KUBECONFIG)默認不脫敏,除非變量名本身強烈表示憑據(如 MYSQL_PWD)。
安裝與啓用¶
需要先安裝帶插件管理器的 DeepSeek Harness。Host 插件在啓動時加載,安裝後需重啓應用。
從 GitHub 安裝(README 推薦方式):
dsh plugin --profile desktop add github:drm-nz/dsh-redact
插件管理器校驗倉庫、安裝並加入 profile 的 bundle 列表。安裝完成後在 Settings → Plugins 中可見,默認啓用。
卸載:
dsh plugin --profile desktop remove dsh-redact
本地 checkout 可通過 profile 的 package.json 使用 link: 依賴並執行 pnpm install,細節見倉庫 README;一般用戶用上述 dsh plugin 命令即可。
注意:插件以當前 DSH 進程權限運行;安裝前應自行查看源碼與 LICENSE,確認符合你的安全策略。
配置¶
在 profile 的 cordis.patch.yml 裏按 id 覆蓋 bundle 配置行,用 override,不要重複 insert 同一 id。
- id: dsh-redact
config:
enabled: true
tiers:
exact: true
patterns: true
context: true
keywords: false
minLength: 8
allowNames: ["SSH_AUTH_SOCK"]
secrets: []
# debugFile: /tmp/dsh-redact.log # optional: one line per hook call
| 字段 | 默認 | 含義 |
|---|---|---|
enabled |
true |
總開關;false 時結果原樣返回 |
tiers.* |
見上 | 各層開關 |
minLength |
8 |
短於此長度的值不當作 secret,減少誤傷普通詞 |
allowNames |
["SSH_AUTH_SOCK"] |
即使取值像 secret 也跳過的變量名 |
secrets |
[] |
額外要脫敏的字面量(環境裏拿不到的) |
exact 層在插件加載時從當時環境快照;之後 export 的變量需重啓纔會進入快照。環境與 secrets 重複的值只脫敏一次,標籤用環境變量名;匹配按最長優先。
典型用法:驗證是否生效¶
README 給出三檔驗證,由易到難。
1. 啓動自檢(自動)
每次啓動會對合成憑據跑 matcher,並向 ~/.dsh/health.log 追加一行,含 ok 表示規則仍有效。例如:
2026-11-01T02:00:42Z dsh-redact ok rules=37 probe=patterns redacted=yes
查看:
tail -n 2 ~/.dsh/health.log
grep -v ' ok ' ~/.dsh/health.log # 僅看異常
2. Hook 探測(一次工具調用)
啓動自檢不證明 tools/post-execute 已掛載。讓智能體執行:
printf 'hook probe: ghp_%s\n' "$(printf 'a%.0s' {1..36})"
正常應看到:
hook probe: [REDACTED:github-token]
若仍是明文,檢查插件是否啓用並重啓(host 插件僅在啓動加載)。
3. 會話日誌
界面上已脫敏的內容,在磁盤 persisted session 裏也必須是脫敏後的;這是插件存在的主要目標副本。
探測串不是真實憑據,僅爲 github-token 形狀以便 patterns 層匹配。
適用場景與邊界¶
適合:需要在本地保留或分享 transcript、又不想把工具輸出裏的憑據一併暴露的 DSH 桌面/智能體開發場景;與 admin-security 類訴求一致,作爲 transcript 側的一道網。
務必知曉的限制(README 原文要點):
- 脫敏不等於撤銷:secret 若已進入某次模型請求,插件無法撤回。
- 僅覆蓋工具輸出:模型生成文本、prompt、shell history、應用自有日誌不在 hook 內。
- 不能識別無規則的 secret:Base64 包裹、拆分、重編碼等可能漏網;coverage 是網,不是保證。
- 無網絡、不改進程:只讀寫字段文本;可選寫
debugFile診斷行。
結尾¶
dsh-redact 在 DSH「一切皆插件」生態裏,專門處理 transcript 與 session log 上的憑據泄露面,而不動工具執行本身。若你在 Harness 裏頻繁跑 shell、讀配置、連遠程,值得在 profile 裏裝上並用 hook 探測確認一遍。
- 社區目錄:https://www.skillhub.cn/plugins/drm-nz/dsh-redact
- GitHub:https://github.com/drm-nz/dsh-redact