中文EN

dsh-vault

security已测通过npmMIT

Harness 的本地加密凭据保险库:Web 设置页与 vault_* 工具,可存取与复制密码、API 密钥、TOTP 与银行卡信息,支持健康审计、到期轮换、导入导出以及只读/询问访问模式。

下载量 / Downloads
2,699
依赖体积 / node_modules
3.66 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-vault

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-vault — Encrypted Credential Vault for DeepSeek Harness

![License: MIT](LICENSE)

![npm version](https://www.npmjs.com/package/dsh-vault)

![GitHub Release](https://github.com/Ox0400/dsh-vault/releases)

![npm downloads](https://www.npmjs.com/package/dsh-vault)

![GitHub issues](https://github.com/Ox0400/dsh-vault/issues)

![Listed: awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin#L2869)

![Listed: awesome-deepseek-harness](https://github.com/Dominic789654/awesome-deepseek-harness#L903)

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_search returns 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 explicit vault_get by 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

链接

GitHub · Homepage · npm

同类插件