🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

隐私脱敏盾 JWE24-code/dsh-pii-anonymizer

DeepSeek Harness
JWE24-code28 天前有提交已提供中文文档扫描:含敏感能力

发送前自动替换提示词中的邮箱、电话与密钥

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add JWE24-code/dsh-pii-anonymizer
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · security
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 28 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 4 处,展示前 4 条)
  • 写入本地文件
    src/anonymizer.mjs:108
    mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
  • 写入本地文件
    src/anonymizer.mjs:122
    if ((statSync(path).mode & 0o077) !== 0) chmodSync(path, 0o600);
  • 读取本地文件
    src/anonymizer.mjs:122
    if ((statSync(path).mode & 0o077) !== 0) chmodSync(path, 0o600);
  • 读取本地文件
    src/anonymizer.mjs:123
    return parseKey(readFileSync(path));
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 替换提示词敏感信息
  • 邮箱电话密钥脱敏
  • 单向匿名化处理

在 DeepSeek Harness 智能体循环起点做确定性单向 PII 匿名化

README

由 DeepSeek 最新模型翻译生成
dsh-pii-anonymizer dshfind 一个原生 DeepSeek Harness 插件,在智能体循环的起点放上一道确定性、单向的 PII 防护盾。 你的提示词由固定规则和校验和扫描(绝不用模型),检测到的每个值都会替换成稳定的占位符,然后消息才会提交并发送。真实值只存在于进程内存里——不进会话日志,不落盘,不上网。 有内容被屏蔽时,本地会给你一条提示。 you type: email a@x.com or call +31 6 1234 5678 model sees: email [[EMAIL_1]] or call [[PHONE_1]] you see: 🔒 PII shield: 2 item(s) anonymized locally (1 EMAIL, 1 PHONE). Real values did not leave this computer. 匿名化刻意做成不可逆:没有反向映射,也没有恢复路径,所以系统里任何东西都无法把真实值放回去。 挂在哪里 agent/pre-step——循环的步骤准入瀑布流(@deepseek-ai/dsh-agent)。 监听器调用 next(),把返回的 decision.messages 过一遍匿名器,再返回一个 decision,其 messages 携带占位符。
展开完整文档(README 剩余 1 节)
dsh-pii-anonymizer

dshfind

一个原生 DeepSeek Harness 插件,在智能体循环的起点放上一道确定性、单向的 PII 防护盾。

你的提示词由固定规则和校验和扫描(绝不用模型),检测到的每个值都会替换成稳定的占位符,然后消息才会提交并发送。真实值只存在于进程内存里——不进会话日志,不落盘,不上网。
有内容被屏蔽时,本地会给你一条提示。

you type: email a@x.com or call +31 6 1234 5678
model sees: email [[EMAIL_1]] or call [[PHONE_1]]
you see: 🔒 PII shield: 2 item(s) anonymized locally (1 EMAIL, 1 PHONE).
Real values did not leave this computer.

匿名化刻意做成不可逆:没有反向映射,也没有恢复路径,所以系统里任何东西都无法把真实值放回去。

挂在哪里

agent/pre-step——循环的步骤准入瀑布流(@deepseek-ai/dsh-agent)。
监听器调用 next(),把返回的 decision.messages 过一遍匿名器,再返回一个 decision,其 messages 携带占位符。这是被接受的用户批次提交并发送给服务商之前的最后时刻。

为什么用原生插件,而不是钩子

Claude Code / Codex 的钩子桥接做不到这件事。
@deepseek-ai/dsh-hook-protocol 里的 HookOutput 只暴露 additionalContext;它的 updatedInput 文档写明是 "PARSED but NOT honored."。没有提示词重写通道。
只有挂在 agent/pre-step 上的原生 Cordis 插件,才能替换进入模型请求的消息。

检测范围

确定性意味着结构性。检测器找的是有语法或校验和的东西:

| 类型 | 触发条件 | 校验 |
| API_KEY | 已知前缀(sk-、sk-ant-、AKIA…、ghp_…、github_pat_…、xox…、AIza…) | — |
| IBAN | CC00…,紧凑或空格分组 | mod-97 校验和 |
| CREDIT_CARD | 13–19 位数字,允许空格/短横线 | Luhn 校验和 |
| SSN | DDD-DD-DDDD | 无 |
| EMAIL | 近似 RFC 的地址形态 | 无 |
| IPV6 / IPV4 | 地址形态 | IPv4 校验八位组范围 |
| PHONE | 数字串,含 + ( ) . - space,可选前导 (,7–15 位数字 | 拒绝 ISO 日期和版本号字符串 |

自由形式的姓名、邮寄地址,以及其他依赖上下文的 PII 不会被检测——确定性规则抓不到它们,除非付出不可接受的误正向用例。加一个 ML/NER 阶段会破坏「确定性」这一特性。

重叠按优先级解决(校验和类型优先于宽松的电话号码规则),然后按跨度长度,最后按位置。

假名化模型

PiiPseudonymizer 按会话保存:

- forward:原始值 → 占位符(跨轮次稳定,这样模型可以一直引用 [[EMAIL_1]])
- 按类型编号,所以 token 读作 [[EMAIL_1]]、[[PHONE_2]]……

没有反向映射。原始值只保存在进程生命周期内的易失内存里,所以任何人都无法还原,包括这个插件自己。这是有意为之的取舍:shield 在构造上就是安全的,代价是转录里只显示占位符。

范围

只重写人类用户消息(source.kind === 'user')。Harness 注入的上下文——运行时上下文、技能目录、工具结果——保持原样,因为它不是用户的提示词,脱敏它可能会破坏智能体合法需要的值(比如沙箱主机 IP)。

配置

- id: pii-anonymizer
name: dsh-pii-anonymizer
config:
enabled: true # master switch
notify: true # emit the local notice when something was shielded
debug: false # log load/shield events (counts only, never values)

安装(作为 bundle)

这个包是 DSH bundle:package.json 声明了 dsh.bundle.patch,cordis.patch.yml 插入 pii-anonymizer 行。配置档在 dependencies 和 dsh.profile.bundles 里都列出它——moqi-tui 的 /plugins 选择器读的就是这里(它读 manifest,不读 Cordis loader)。

从 registry 安装到配置档:

npm install dsh-pii-anonymizer # inside ~/.dsh/profiles/<name>
or, from the terminal app:
/plugins add dsh-pii-anonymizer

tools/register-profile.mjs <profileDir> 为本地 checkout 做 manifest 编辑,并在旁边写一个 package.json.bak:

node tools/register-profile.mjs ~/.dsh/profiles/tui

这个包还必须能从配置档解析到。在这台机器上它被符号链接到共享解析根:

~/.dsh/profiles/node_modules/dsh-pii-anonymizer -> /home/joeri/Projects/dsh-pii-anonymizer

安装状态: 已在全部六个配置档(dev-tui、headless、jev-dev、tui、tui-dev、web)注册并启用。重启应用即可加载。

按配置档回滚:恢复它的 package.json.bak。

开发

node --test # 16 detector + pseudonymizer + message-scope unit tests

node_modules/@deepseek-ai 是指向本地 harness 安装的 dev-only 符号链接,这样 src/index.mjs 在模块加载冒烟测试里能解析它的 peer dependencies。已安装的插件则从配置档解析它们。

端到端测试(无需凭据,无需网络)

tools/mock-provider.mjs 是一个极简的 OpenAI 兼容 SSE 服务器;tools/e2e.patch.yml 把 deepseek 适配器指向它,再加载这个插件。随后针对 mock 跑一轮真实的 harness 循环,tools/requests.jsonl 会精确记录服务商收到了什么。

1. throwaway harness home inside this project (never ~/.dsh)
DSH_HOME=$PWD/../.dsh-scratch dsh --profile pitest \
--from-default-profile headless --dump-config

2. mock provider
node tools/mock-provider.mjs & # writes tools/requests.jsonl

3. one real turn
DSH_HOME=$PWD/../.dsh-scratch DSH_E2E_KEY=dummy \
dsh --profile pitest --patch tools/e2e.patch.yml \
"My email is jane.doe@corp.example and my IBAN is DE89 3704 0044 0532 0130 00"

4. confirm the provider only ever saw placeholders
grep -o '\[\[[A-Z_0-9]*\]\]' tools/requests.jsonl | sort -u

验证结果:服务商收到的是 My email is [[EMAIL_1]] and my IBAN is
[[IBAN_1]],外加 notice;原始邮箱和 IBAN 哪儿都没出现。

状态

- [x] 确定性检测器,带校验和验证
- [x] 按会话稳定假名化(单向,无反向映射)
- [x] 人类消息作用域(注入的上下文保持原样)
- [x] agent/pre-step 接线 —— 单元模拟并通过真实 headless harness 针对 mock provider 跑通
- [x] 向用户发送本地 notice
- [x] 作为 bundle 安装进全部六个配置档,在 /plugins 选择器中列出并启用
预览分享卡片长什么样 ↓JWE24-code/dsh-pii-anonymizer
分享 · DeepSeek Harness Hub
JWE24-code/dsh-pii-anonymizer

发送前自动替换提示词中的邮箱、电话与密钥

回到顶部