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

私匣 Tu-Zhenzhao/privy-vault

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

加密保管敏感信息,取用前需 Passkey 授权

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · security
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/20) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 37 处,展示前 37 条)
  • 写入本地文件
    personal-vault-broker/design/generate-first-frame.mjs:24
    const png=join(directory,'frame.png');await writeFile(png,bytes);
  • 执行外部命令固定命令
    personal-vault-broker/design/generate-first-frame.mjs:25
    execFileSync('cwebp',['-quiet','-lossless','-exact','-m','6',png,'-o',output]);
  • 读取本地文件
    personal-vault-broker/design/generate-first-frame.mjs:26
    console.log(`Actual idle frame: ${(await stat(output)).size} bytes, 616×616 lossless WebP`);
  • 删除本地文件递归
    personal-vault-broker/design/generate-first-frame.mjs:27
    } finally {await rm(directory,{recursive:true,force:true});}
  • 写入本地文件
    personal-vault-broker/design/interaction-check.mjs:40
    await writeFile('/tmp/privy-verifying-mobile.png',Buffer.from(shot.data,'base64'));
  • 写入本地文件
    personal-vault-broker/design/interaction-check.mjs:74
    await writeFile('/tmp/privy-first-frame-mobile.png',Buffer.from(posterShot.data,'base64'));
  • 读取本地文件
    personal-vault-broker/design/preview-server.mjs:5
    const preview = await readFile(new URL('../public/assets/verify-preview.png', import.meta.url));
  • 读取本地文件
    personal-vault-broker/design/preview-server.mjs:6
    const orbClient = await readFile(new URL('../public/assets/vault-orb.js', import.meta.url));
  • 写入本地文件
    personal-vault-broker/design/preview-server.mjs:22
    await mkdir(screenshotDirectory, { recursive: true });
  • 写入本地文件
    personal-vault-broker/design/preview-server.mjs:23
    await writeFile(new URL(screenshotName, screenshotDirectory), Buffer.concat(chunks));
  • 执行外部命令固定命令
    personal-vault-broker/design/studio-check.mjs:4
    const browser = (...args) => execFileSync('npx', ['--yes', 'agent-browser', '--session', 'vault-check', ...args], { encoding: 'utf8', timeout: 60000 }
  • 读取密钥环境变量
    personal-vault-broker/dsh-plugin/index.js:28
    const token = process.env.PERSONAL_VAULT_CLIENT_TOKEN;
  • 发起网络请求
    personal-vault-broker/dsh-plugin/index.js:38
    const request = http.request({ socketPath, method, path, signal, headers: {
  • 读取本地文件
    personal-vault-broker/dsh-plugin/index.js:70
    try { return JSON.parse(await readFile(path, 'utf8')); }
  • 发起网络请求
    personal-vault-broker/dsh-plugin/index.js:118
    const response = await fetch(url, options);
  • 写入本地文件
    personal-vault-broker/dsh-plugin/index.js:234
    await mkdir(dirname(RECEIPTS_PATH), { recursive: true, mode: 0o700 });
  • 写入本地文件
    personal-vault-broker/dsh-plugin/index.js:236
    await writeFile(temporary, `${JSON.stringify({ version: 1, processed: [...receipts].slice(-2000) })}\n`, { mode: 0o600 });
  • 写入本地文件
    personal-vault-broker/dsh-plugin/index.js:237
    await rename(temporary, RECEIPTS_PATH);
  • 写入本地文件
    personal-vault-broker/dsh-plugin/index.js:254
    await mkdir(dirname(CALLBACK_SOCKET), { recursive: true, mode: 0o770 });
  • 删除本地文件
    personal-vault-broker/dsh-plugin/index.js:255
    await unlink(CALLBACK_SOCKET).catch(error => { if (error?.code !== 'ENOENT') throw error; });
  • 写入本地文件
    personal-vault-broker/dsh-plugin/index.js:279
    await chmod(CALLBACK_SOCKET, 0o660);
  • 删除本地文件
    personal-vault-broker/dsh-plugin/index.js:282
    await unlink(CALLBACK_SOCKET).catch(error => { if (error?.code !== 'ENOENT') throw error; });
  • 读取密钥环境变量
    personal-vault-broker/dsh-plugin/smoke-test.js:8
    process.env.PERSONAL_VAULT_CLIENT_TOKEN = 'smoke-test-token';
  • 发起网络请求
    personal-vault-broker/dsh-plugin/smoke-test.js:48
    const request = http.request({ socketPath: process.env.PERSONAL_VAULT_CALLBACK_SOCKET,
  • 删除本地文件递归
    personal-vault-broker/dsh-plugin/smoke-test.js:66
    await rm(directory, { recursive: true, force: true });
  • 读取本地文件
    personal-vault-broker/src/assets.ts:5
    export const orbClient = readFileSync(new URL('../public/assets/vault-orb.js', import.meta.url));
  • 读取本地文件
    personal-vault-broker/src/assets.ts:8
    export const orbPoster = `data:image/webp;base64,${readFileSync(new URL('../public/assets/orb-first-frame.webp', import.meta.url)).toString('base64')}
  • 发起网络请求
    personal-vault-broker/src/callbacks.ts:27
    const request = http.request({
  • 读取密钥环境变量
    personal-vault-broker/src/cli.ts:6
    const token = process.env.PERSONAL_VAULT_CLIENT_TOKEN ?? fail('PERSONAL_VAULT_CLIENT_TOKEN is required');
  • 写入本地文件
    personal-vault-broker/src/database.ts:33
    if (path !== ':memory:') mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
  • 读取本地文件
    personal-vault-broker/src/generate-preview.ts:35
    const existing = await readFile(output).catch(() => Buffer.alloc(0));
  • 写入本地文件
    personal-vault-broker/src/generate-preview.ts:41
    await mkdir(dirname(output), { recursive: true });
  • 写入本地文件
    personal-vault-broker/src/generate-preview.ts:42
    await writeFile(output, rendered);
  • 读取本地文件
    personal-vault-broker/src/public-api.ts:11
    const previewImage = readFile(new URL('../public/assets/verify-preview.png', import.meta.url));
  • 删除本地文件
    personal-vault-broker/src/server.ts:18
    await unlink(config.socketPath).catch((error: NodeJS.ErrnoException) => {
  • 写入本地文件
    personal-vault-broker/src/server.ts:22
    await chmod(config.socketPath, 0o660);
  • 发起网络请求
    personal-vault-broker/src/unix-client.ts:12
    const request = http.request({
扫描于 2026/10/31(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

自托管的个人信息保险库,用于 DeepSeek Harness。支持通行密钥审批、加密存储、可信投递。

README

由 DeepSeek 最新模型翻译生成
私匣 · Privy Vault 你的信息,你来授权,AI 才能取用。 当前为 0.3.2 早期公开版本,未经过独立安全审计。敏感信息推荐使用默认 L2 策略。 私匣将敏感字段加密保存。Agent 平时只搜索字段名和标签;需要具体资料时,发送验证链接。你完成 Passkey 验证后,原会话自动继续,支持的消息渠道会在规定时间后删除或撤回资料消息。 当前范围 - 已有 DeepSeek Harness 插件,包含搜索、最近使用、请求、状态与兑换工具。 - 支持 Telegram、Discord 和 Photon iMessage;未提供 OpenClaw 插件。 - L0 不需要 Passkey;L1 可复用近期验证;默认 L2 策略每次请求都需要验证。 - 支持管理员命令行录入、更新、批量导入和 Passkey 管理。 - 网页是验证与安全查看页面,目前没有资料管理后台。 - 适用于单一所有者、可信本机 Agent 的部署;不是多租户安全隔离产品。 本地体验 适配器针对 DSH 0.1.1-rc.2,新版兼容性仍待验证。普通 Agent 可检索和请求资料;写入需要所有者授权的管理员操作。主机管理员、交付插件和消息平台仍可能接触明文,不能承诺“大家都看不到”。DSH Web 交付存在已知限制,详见安全文档。
展开完整文档(README 剩余 1 节)
私匣 · Privy Vault

你的信息,你来授权,AI 才能取用。

当前为 0.3.2 早期公开版本,未经过独立安全审计。敏感信息推荐使用默认 L2 策略。

私匣将敏感字段加密保存。Agent 平时只搜索字段名和标签;需要具体资料时,发送验证链接。你完成 Passkey 验证后,原会话自动继续,支持的消息渠道会在规定时间后删除或撤回资料消息。

当前范围

- 已有 DeepSeek Harness 插件,包含搜索、最近使用、请求、状态与兑换工具。
- 支持 Telegram、Discord 和 Photon iMessage;未提供 OpenClaw 插件。
- L0 不需要 Passkey;L1 可复用近期验证;默认 L2 策略每次请求都需要验证。
- 支持管理员命令行录入、更新、批量导入和 Passkey 管理。
- 网页是验证与安全查看页面,目前没有资料管理后台。
- 适用于单一所有者、可信本机 Agent 的部署;不是多租户安全隔离产品。

本地体验

适配器针对 DSH 0.1.1-rc.2,新版兼容性仍待验证。普通 Agent 可检索和请求资料;写入需要所有者授权的管理员操作。主机管理员、交付插件和消息平台仍可能接触明文,不能承诺“大家都看不到”。DSH Web 交付存在已知限制,详见安全文档。

安装 Node.js 22.13+,然后从仓库根目录执行:

cd personal-vault-broker
npm ci
npm run check
npm run preview

打开 http://127.0.0.1:4173。预览中的 Passkey 是模拟交互,不连接真实资料。

文档入口

- 部署及维护:真实 HTTPS、Linux 服务、客户端接入、健康检查与备份。
- Agent 数据更新操作手册:新增、更新、批量导入、验证及错误处理。
- 安全边界:哪些内容被加密、授权复用与消息删除的限制。
- 发布评估:已经验证什么,哪些项目仍未验证。
- 公开发布:如何导出不包含私人运维文件和旧历史的源码。

中文名为“私匣”,英文名为“Privy Vault”。为兼容现有部署,命令、目录和变量仍使用 personal-vault。名称没有经过商标独占性核验。
预览分享卡片长什么样 ↓Tu-Zhenzhao/privy-vault
分享 · DeepSeek Harness Hub
Tu-Zhenzhao/privy-vault

加密保管敏感信息,取用前需 Passkey 授权

回到顶部