ciceroyang/dsh-privacy-guard ↗★ 0

dsh-privacy-guard

发送消息前自动检查并提醒敏感隐私信息 适合需要在向模型发送数据前,对密钥、身份证等隐私信息进行打码的用户。

套件
dsh-privacy-guard
相容性
待驗證
版本
0.1.1
授權
MIT
最近更新
2026年9月17日

同名套件的其他儲存庫

安裝

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ciceroyang/dsh-privacy-guard

dsh-privacy-guard

A send-time privacy reminder for DeepSeek Harness: before you hand a phone number, an ID number, a card number or an API key to a model, a strip appears under the composer and offers to mask it.

Built for people who are not security professionals. It does not lecture, it does not block the send, and it stays completely silent until the text actually matches something.

What it catches

ruleseveritynote
private-keyhigha PEM private-key header
api-keyhighsk-, ghp_/gho_/ghu_/ghs_/ghr_, github_pat_, AKIA, AIza, xox?
id-cardhigh18-digit ID number, checksum verified
bank-cardhigh13-19 digits with optional spaces or dashes, Luhn verified
phone-cnmediummainland mobile number
emaillowemail address
ipv4lowdotted-quad IP address

The two checksum-verified rules exist because their shapes are common in innocent data. A 16-digit order number that looks like a card, or a long numeric id that looks like an ID number, does not fire.

Install

Requires Node.js 20 or newer and a DeepSeek Harness web profile.

dsh plugin --profile web add github:ciceroyang/dsh-privacy-guard#v0.1.1

One command installs the package and mounts it: the manifest declares dsh.bundle, so the profile adds the package to its loader tree, and the browser half is served from exports["./client"].

From a local checkout instead, mount it by hand:

ln -sfn "$PWD/dsh-privacy-guard" ~/.dsh/profiles/web/node_modules/dsh-privacy-guard
# then in ~/.dsh/profiles/web/cordis.patch.yml
- insert:
    - id: privacy-guard
      name: dsh-privacy-guard

The web profile reloads the patch live; refresh the page afterwards.

No build step: the browser bundle is committed and served as-is.

What it does not do

  • It does not send anything anywhere. The scan runs in your browser, on the draft text, with no network call and no storage write. Uninstalling the plugin removes every trace of it.
  • It does not block the send. You stay in charge: mask it, or press send anyway.
  • It is not a guarantee. Pattern matching finds the shapes it knows. A secret it has never seen the shape of will pass. Treat it as a second pair of eyes, not as a data-loss-prevention system.

Notes

  • Masked samples only ever show a two-character prefix and a two-character suffix. The middle never reaches the screen, the logs or the DOM.
  • "Ignore" silences the strip for the current draft only; editing the draft brings it back.
  • Rules live in lib/patterns.js as plain data. Adding one is a data change plus a test.

Test

node build.mjs && node --test

CI also rebuilds the bundle and fails if the committed lib/client.js differs from its sources.

Licence

MIT. Maintained by @ciceroyang.