前言¶
在 DSH 里跑 Agent 时,密码和 API Token 往往会散落在环境变量、临时笔记或对话上下文里:人要在浏览器里核对一条密钥,Agent 又需要在脚本里按名称取 secret,两边若各存一份,同步和权限边界都容易乱。社区插件 dsh-credential-vault(维护者 xiaoran0829,分类 admin-security)把凭证收进本机加密库:人在 DSH Web 顶栏「凭证库」tab 用主密码查看,Agent 通过同目录下的 vaultctl.mjs 读取,数据默认落在 ~/.dsh/vault,插件本身不向第三方发网络请求。
这是什么¶
dsh-credential-vault 是 DSH Web 的 Cordis 插件(dsh.bundle.patch + dsh.client),在 Connection fence 上注册需登录态的 HTTP 路由,对外代理与 GUI 登录流程保持不变。当前版本在 package.json 中为 1.0.3,许可证 MIT。仓库与说明见 GitHub,社区目录页见 SkillHub。
核心功能¶
加密与存储¶
条目明文中的 secret 使用 AES-256-GCM 加密;机器密钥为 32 字节,写入 ~/.dsh/vault/key.bin,文件权限 0600,目录 0700。store.json 同样 0600 且原子写入。可通过环境变量 DSH_VAULT_DIR 更换 vault 目录。主密码经 PBKDF2-SHA256(210000 次) 派生,与机器密钥分工:浏览器解锁走主密码,Agent CLI 走机器密钥。
浏览器侧(人类查看)¶
会话顶栏会出现 「凭证库 / Vault」 tab。首次使用必须设置主密码(至少 8 位);每次打开页面都会重新上锁,输入正确主密码后,仅在内存中持有约 15 分钟 的解锁 token。未解锁时相关 API 返回 401 locked;解锁后列表返回条目元数据,不含 secret 明文。
支持的字段包括:名称、用户名、密码/Token、验证地(网址或程序)、初次录入方、修改更新记录、有效截止期,以及截止提醒(单选:不提醒 / 提前 7 天 / 提前 3 天 / 到期当天)。新增、编辑、删除均可手动完成;修改会追加到记录里。解锁失败在 5 分钟内限流 12 次。
Agent 侧(vaultctl)¶
vaultctl.mjs 通过机器密钥直接读写库,不受主密码限制。这是「Agent 可无门槛查阅」的 deliberate trade-off:运行 DSH 的 OS 账户能读 key.bin,因此也能间接读全部 secret。
路由与兼容¶
路由前缀为 /api/credential-vault.*,继承 GUI 登录态与 Host/Origin 校验。插件对 DSH 0.2.x 使用 ctx.connection.fetch.register,对 0.1.0-rc.6 使用 ctx.webServer.register;若两者都不存在则跳过路由并打 warn,不拖垮宿主。作者本机当前使用 DSH Web 0.2.1-rc.3;已对 @deepseek-ai/dsh@0.1.0-rc.6 做静态适配与 Node 级冒烟,完整 Web 生命周期证据在资料中仍为 null。
安装与启用¶
package.json#dshWorkshop 声明接入方式为 guided(harness-cordis + third-party adapter),当前没有 Registry 一键安装命令,也没有资料中的可执行安装步骤。按 DSH 插件的 guided 流程把仓库接入当前 profile 后,需 重启 DSH Web 的 profile 才会生效(lifecycle.activation: restart-profile)。安装或升级后同样建议重启 profile。
插件声明权限包括:filesystem:write、crypto:use、http:route、process:env。仅写入 vault 目录,不起子进程、无 install script、无网络外发。
典型用法¶
浏览器¶
- 安装并重启 profile 后打开 DSH Web 会话。
- 在顶栏进入「凭证库」,首次设置主密码(≥8 位)。
- 每次新开会话或刷新后再次输入主密码解锁(15 分钟内同页免重复输入)。
- 在界面中新增或编辑条目,按需设置截止期与提醒。
Agent CLI¶
<install-dir> 换成本机插件安装目录(与 vaultctl.mjs 所在路径一致):
node <install-dir>/vaultctl.mjs list
node <install-dir>/vaultctl.mjs show "<名称>"
node <install-dir>/vaultctl.mjs add --title "..." --secret "..." --site "..." --expires 2026-12-31 --reminder 7d
list 列条目;show 按名称查看(含 secret);add 可带 --title、--secret、--site、--expires、--reminder(示例中为 7d)。
适用场景与注意¶
适合:希望在 DSH Web 内集中管理密码与 API Token、又需要 Agent 通过 CLI 按名称取 secret 的个人或小团队环境;分类上属于 admin-security,侧重本地保管而非云端同步。
务必知晓:
- 主密码无法通过 UI 找回。忘记主密码只能删除
~/.dsh/vault/store.json重来,条目全部丢失(key.bin与 store 需一并理解:资料强调删 store 重来)。 - Agent 权限等于 DSH 进程权限。机器密钥对运行账户可读,任何能执行
vaultctl.mjs或读 vault 目录的主体都能拿到 secret;安装前应阅读源码与 MIT 许可证,确认与自身威胁模型一致。 - Profile 代际恢复不能回滚已写入的 vault 内容;
dshWorkshop.lifecycle.dispose在资料中为 unknown,卸载行为无官方证据。 - 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态是「一切皆插件」,本插件是第三方贡献。
仓库已有 node --check index.js vault.js vaultctl.mjs client.js 通过记录,无单元/集成测试与官方基线生命周期测试;兼容声明以作者本机为准。
结尾¶
dsh-credential-vault 把密码与 API Token 收进本机 AES-256-GCM 库:浏览器用主密码、短时内存解锁,Agent 用 vaultctl.mjs 直连机器密钥。接入为 guided 模式,生效依赖 profile 重启;使用前请接受「主密码不可找回」与「Agent 可读全库」这两条设计取舍。
- 目录页:https://www.skillhub.cn/plugins/xiaoran0829/dsh-credential-vault
- 源码与 README:https://github.com/xiaoran0829/dsh-credential-vault