yuloop/dsh-secret-vault ↗★ 0

dsh-secret-vault

Paste secrets and PII locally: the model gets handles, field digests and a content kind — never the values. 适合需要在开发中让智能体使用凭据但又防止明文泄露的用户。

パッケージ
dsh-secret-vault
互換性
未検証
バージョン
4.4.0
ライセンス
MIT
最終更新
2026/10/26

同名パッケージの別リポジトリ

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:yuloop/dsh-secret-vault

ドキュメント

README 全文を読む ↗

中文 | English

dsh-secret-vault

把密钥、API key、身份证、手机号这类东西粘进 DSH 网页的私密面板,让 agent 拿着它干活,却读不到它。 插件把正文落在本机一个随机名文件里,只交给模型一个不透明句柄和一份不含值的摘要; 任何点名私密目录的工具调用一律拒绝。

你粘贴 ──► 本机文件(0600,随机名)            ← 正文只存在这里,不进聊天/日志
                │
                ├─► 句柄 + 字段摘要 ──► 模型    (网址、模型名、密钥长度+指纹、PII 类型、内容类型)
                └─► 掩码骨架 ──► 分类器         ([[SECRET]] / [[PII]] / [[URL]],定长)

为什么要它

贴在聊天里的密钥是永久的:进会话日志、进发给模型服务商的请求、进这些数据的每一份备份。 这个插件把「交接」从聊天通道里挪出来,于是 agent 能用一把凭据,而明文从未进入它的上下文。

它做什么

  • 本地投放箱:随机 tmp- 文件名,目录 700、文件 600、单份上限 128 KiB; 每天 04:00 清理已用文件,未用文件 24 小时后过期。
  • 确定性字段抽取(不用模型, --yes # 删除该会话的文件(不可恢复)

没有软链时等价写法:`node bin/secret-vault.mjs …`。

## 安全模型——保证什么、不保证什么

**构造上保证:**

- 正文从不经过聊天、附件或 LLM 通道;
- 私密内容的工具结果只带类型、长度和指纹;
- 分类器只看掩码骨架,骨架永不落盘;
- `state.json` 不含任何值(有测试直接 grep `state.json` 断言)。

**不保证:**

- **操作系统级隔离**。DSH 以单一用户运行;其他进程、其他插件、备份、任何 root shell 都能读到文件。
  把私密内容搬进独立低权限进程是后续工作。
- 蓄意构造的脚本仍可把值带出去;守卫拦的是误操作,不是恶意。
- 用密钥配置过的东西自己会留一份明文副本(这正是「用起来」的意思)。

## 开发

```bash
npm test                          # 57 个测试:解析、PII 校验、分类、路由、运行时
node tools/train-tfidf.mjs        # 重训 144 KB 线性分类器(合成语料)
node tools/eval-classify.mjs      # 门禁:高危错判 0 · 拒判 ≤25% · P99<100ms · macro-F1≥0.85

评测语料是合成的,所以 0.897 的 macro-F1 只能当上限;harness 已经搭好,换成真实样本即可复核。

MIT 许可。