dsh-vault
Harness 的本地加密凭据保险库:Web 设置页与 vault_* 工具,可存取与复制密码、API 密钥、TOTP 与银行卡信息,支持健康审计、到期轮换、导入导出以及只读/询问访问模式。
安装
dsh plugin --profile web add dsh-vault
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-vault — Encrypted Credential Vault for DeepSeek Harness







English | [中文](README-zh.md)
dsh-vault is a security-focused plugin for DeepSeek Harness that stores sensitive credentials — usernames, emails, phone numbers, passwords, TOTP secrets, and developer credentials like SSH connections, API keys, secrets, and OAuth access/refresh tokens — encrypted at rest, and exposes them to the model through CRUD, search, password generation, and TOTP tools, plus a Settings UI page.
Security & Implementation
- Zero external crypto dependencies: everything is built on Node's built-in
node:crypto(AES-256-GCM authenticated encryption, scrypt key derivation, RFC 6238 TOTP). - Master password: every entry is encrypted with a 256-bit key derived via
scrypt(master password, salt)and AES-256-GCM. The key never touches disk; after unlock it is cached in-process and re-derived on restart. - Tamper-evident: GCM auth tags plus a fixed-plaintext verification envelope — a wrong master password or modified ciphertext fails immediately, never returning garbage.
- No plaintext at rest: the on-disk document contains no plaintext credentials; each entry uses an independent random nonce.
- Atomic writes: reuses the harness
writeFileAtomic+ file lock; in-process writes are serialized, cross-process writers take the lock. - Search never leaks:
vault_searchreturns summaries only (id/title/kind/username/email/phone/host/port/url/tags) — never passwords, keys, tokens, or TOTP secrets. Full credentials are readable only via explicitvault_getby id.
Entry Model
Each record has a title, an optional kind, and any combination of fields:
Field · Description
kind · login (default) / ssh / api-key / secret / oauth / cookie / card / custom
username / email / phone · Account identity
password · The password
host / port · SSH host and port (e.g. db.internal / 2222)
privateKey · SSH private key (PEM)
apiKey · API key
secret · Generic secret (client secret, shared secret, …)
accessToken / refreshToken / expiresAt · OAuth token pair and expiry (epoch millis)
otpSecret · TOTP secret (bare Base32 or otpauth:// URI)
url / notes / tags · Metadata
Two kinds carry their own shape: a cookie entry stores a captured browser session, and a card entry stores cardNumber / cardExpiry (MM/YY) / cardCvv / cardHolder — search summaries expose only the expiry and holder, never the number or CVV, and the Bitwarden JSON export maps it to a card item (type 3, brand inferred).
fields · Arbitrary key/value pairs (e.g. {"region": "us-east-1"}), searchable
Tools
113 tools in five groups. Basic is what a default install registers; the rest are switched on through [Tool profiles](#tool-profiles) (Settings → Credentials → Permissions → Model tools).
Basic (registered by default) — 11
Eleven tools. Everything below is opt-in.
Tool · Purpose
vault_list · List available vaults in the vault directory (one .json file per vault, excluding access/meta/export files)
vault_search · Search titles/categories/usernames/emails/phones/hosts/ports/URLs/notes/tags/custom fields (incl. numeric/boolean/nested values; whitespace-separated terms OR-match); optional createdAfter/createdBefore epoch-millis filters; returns secret-free summaries; limit must be an integer 1–100
vault_get · Read a full entry by id (including all secrets)
vault_add · Add an entry (any combination of fields; empty strings/arrays are ignored)
vault_update · Update fields by id (unprovided fields kept; empty string clears a field; title is renamable; rotationDays: 0 clears rotation = never rotate)
vault_delete · Soft-delete an entry (moves it to the trash, still encrypted on disk)
vault_fill · Find the entry matching a host/URL/username/title and return its credentials
vault_clipboard · Fetch one entry secret field for direct copy (username/password/apiKey/...)
vault_totp · Generate the current 6-digit code for a stored otpSecret (or a bare Base32 / otpauth URI)
vault_generate_password · Generate a strong random password (length/classes/grouping) or a memorable passphrase (passphrase: true, EFF-style word list, words/separator/wordDigits)
vault_strength · Zero-dependency password strength estimate (score 0–100, weak/fair/strong/very strong)
Management (Standard and up) — 53
Favourites, tags, history, health, templates, attachments, card and 2FA detail.
Tool · Purpose
vault_compare · Compare two entries field by field (onlyA/onlyB/differ/equal) — field names only, never secret values
vault_rename · Rename an entry in one call (shortcut for vault_update)
vault_restore / vault_purge / vault_restore_recent · Bring a trashed entry back / purge it / undo the last delete
vault_lock / vault_unlock · Explicitly lock the vault (wipe the in-memory key) / re-unlock it
`
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:268,最后更新 2026-10-12