前言¶
在 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