dsh-plugin-sops-vault:在 DSH Web 侧栏管理 sops+age 凭据库,智能体只见结构

前言

在 DeepSeek Harness(dsh)里跑智能体时,账号、密钥、TOTP 种子往往还要单独开密码管理器或本地 YAML。常见 GUI(KeePassXC、Bitwarden 等)面向「人独占」的二进制库:难 diff、审计弱,若把主密码交给 Agent,边界就模糊了。用 sops + age 加密的 YAML 仓库则相反:allowlist 加密保留可读结构,git 留历史,脚本也好接——缺的是和 DSH Web 一体的操作面板。

下面介绍社区插件 dsh-plugin-sops-vault(维护者 skyzhao1223,SkillHub 分类 admin-security)。它把本机 sops + age + git 凭据库挂进 DSH Web GUI 侧栏;模型侧不获得本插件提供的工具,Agent 集成最多只能看到从加密文件解析出的结构,明文仅在用户点击「揭示」时由 Host 流向浏览器。

这是什么

一句话:DSH 插件,在 Web 侧栏提供 Vault 面板,由 Host 半部通过 /vault-api 同源调用,在宿主机上直接驱动 sops 与 git,读写 <vaultDir> 下的 secrets.yaml、.sops.yaml 等。

与「把密钥塞进 Agent 工具」不同,README 用架构图强调硬边界:侧栏列表、搜索、分组、详情抽屉里的按字段揭示/复制/编辑/删除,以及 TOTP 动态码,都走浏览器与 Host 的 same-origin fetch(带 Origin 校验);不向模型开放明文通道。

核心功能

以下能力均来自项目 README 与 package.json 描述(当前包版本 0.3.5,MIT 许可证)。

侧栏 Vault 面板

  • 按前缀分组的条目行、搜索、git dirty 标记。
  • 详情抽屉:单字段 👁 揭示、复制、编辑、删除;实时 TOTP 与倒计时环。
  • 新建条目、安全审计;可从浏览器 Authenticator 扩展一键导入种子。
  • 种类过滤:仅 TOTP 的「动态码」视图(类似 Authenticator)。
  • 两级分组:group → company → entries;可为 group / company / entry 配置 logo(logos.json + <vaultDir>/logos/)。
  • 访问日志(不记录字段明文);界面支持中英文。

Host API(/vault-api)

统一 JSON 形态 {ok, data|error}。常用端点包括:

端点 方法 作用
/vault-api/meta GET 全库结构,不解密解析加密文件
/vault-api/reveal POST 单字段明文({name, field}),对应人工点击
/vault-api/totp POST Host 侧根据种子计算当前 6 位码
/vault-api/totp-batch POST 一次解密批量动态码,支撑动态码视图
/vault-api/audit GET allowlist/泄漏审计报告
/vault-api/audit-log GET 访问日志尾部
/vault-api/set / rm / create / save POST 写字段、删字段、新建条目、git 提交
/vault-api/dirty GET git 工作区是否脏
/vault-api/import-scan / import-apply GET / POST 扫描并导入 Chrome Authenticator 扩展中的 TOTP

Logo 上传走 /vault-api/logo 等路由;SVG 被拒绝,栅格图有大小与类型嗅探限制,详见 README。

与 DSH 版本的兼容

插件同时适配 DSH shell 两代接口:shell.run(0.1.x)与 shell.execute + execution.result(0.2.x),按次 feature detect。

前置条件

Host 上需要:

  • Node.js ^22.19.0 || >=24.0.0,pnpm。
  • PATH 上有 sops、age、git(README 示例:brew install sops age)。
  • 凭据库目录,默认 ~/Vault(可通过配置 vaultDir 覆盖),建议用 sops-vault-kit 的 ./install.sh 初始化,包含:
  • secrets.yaml:sops 加密 YAML,条目在顶层 systems: 下;
  • .sops.yaml:allowlist 模式(unencrypted_regex,仅如 url/appid/env/owner/note 等字段明文);
  • age 密钥可被 sops 读取(Linux 默认 ~/.config/sops/age/keys.txt,或 SOPS_AGE_KEY_FILE)。
  • 已能运行 dsh web(Host 需要 webServer 与 shell 服务)。

无需额外守护进程;插件直接调用 sops 与 git。

安装与启用

官方 README 给出的本地构建与挂载流程如下。注意:--patch 是 全局 dsh 选项,应写成 dsh web --patch <file>,不要把其它 web 选项插在 --patch 前面(例如 dsh web --no-open --patch … 会解析失败)。

git clone https://github.com/skyzhao1223/dsh-plugin-sops-vault && cd dsh-plugin-sops-vault
pnpm install
pnpm build          # tsc (node half + types) + tsdown (browser bundle)
pnpm test           # 127 unit tests
pnpm verify         # load-path check against the built artifact

dsh web --patch "$PWD/cordis.yml"

overlay 会插入一行插件配置,例如:

- insert:
    - id: vault-panel
      name: './lib/index.js'
      # config:
      #   vaultDir: ~/Vault     # leading ~ is expanded
      #   sopsBin: sops         # resolved via PATH
      #   gitBin: git
      #   timeoutMs: 15000

若改为发布包安装,将 name 换为安装到 dsh 树后的包名。重新构建 client bundle 后需刷新浏览器。

典型用法

  1. 只看结构、不给 Agent 明文:通过 /vault-api/meta 或侧栏列表查看条目名、分组与哪些字段已加密;这与 README 中「模型最多看到结构」的设计一致。
  2. 人工揭示与复制:在详情抽屉对某一字段点击揭示,Host 执行 POST /vault-api/reveal,明文只进入当前浏览器会话。
  3. 动态码:打开 TOTP 视图或单条 TOTP;批量场景由 totp-batch 减少重复解密。
  4. 维护库:在面板内编辑字段后 save 提交 git;用 audit 检查 allowlist 是否泄漏敏感字段名。
  5. 从 Authenticator 迁移:工具栏「导入动态码」经 import-scan / import-apply 读取本机 Chrome 系浏览器里 Authenticator 扩展的 LevelDB 数据(只读解析,无原生依赖),再写入 vault。

凭据文件形态以 sops-vault-kit 为准:业务数据写在 systems: 映射下,公开元数据字段名与 .sops.yaml 规则一致。

适用场景与注意

适合谁:已经或打算用 sops + age + git 管理个人/小团队密钥,并在 DSH Web 里希望「人点才出明文」、同时让 Agent 侧最多感知条目结构(例如配合自定义集成读 meta,而非本插件给模型的工具)。

安全与权限:

  • 插件以当前 dsh 进程权限 在 Host 上执行 sops、git 和读浏览器配置目录(导入 TOTP 时);安装前应阅读源码与 MIT 许可证,确认信任维护者与发布来源。
  • 远程 logo URL 会向对应主机暴露你的 IP 与打开面板的时间,UI 中有提示。
  • 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本文事实以 GitHub README 为准。

结尾

dsh-plugin-sops-vault 补的是「加密 YAML 凭据库 + DSH Web」之间的 GUI 缺口:git 可审计、sops 可脚本化,侧栏负责日常操作,并把明文揭示锁在人的一次点击之后。进一步了解与截图见 GitHub 仓库(含 中文 README)与 SkillHub 目录页。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜