前言¶
DeepSeek Harness(DSH)裏的智能體要調用 Git、HTTP API 時,常需要把 token 或 API key 寫進工具參數或命令行。這些內容會進入會話日誌和模型上下文,事後也難以從記錄裏徹底抹掉。社區插件 vault-manager(npm 包名 @dreagonmon/vault-manager)把整套憑據生命週期擋在對話之外:祕密只在用戶彈窗裏輸入,主密碼不經工具參數傳遞,執行命令前用佔位符展示待審命令,輸出中對已用祕密做脫敏。
這是什麼¶
vault-manager 由維護者 Dreagonmon 發佈,在 DSH 插件目錄中歸類爲 admin-security。它在本地用單個主密碼保護加密文件,向 shell 命令注入已保存的憑據,同時約定:智能體只能看到條目名稱、備註、時間戳、退出碼以及脫敏後的輸出,看不到祕密明文和主密碼,也無法從工具返回判斷主密碼是否改成功。
插件以 bundle 形式提供 Host 側邏輯與 Web 彈窗(shell.overlay),無第三方運行時依賴。
核心能力¶
工具一覽¶
| 工具 | 是否彈窗 | 作用 |
|---|---|---|
vault_save |
是 | 保存或覆蓋一條憑據;用戶輸入主密碼(首次即設置)與祕密值 |
vault_list |
否 | 列出名稱、備註與時間戳,不返回祕密值 |
vault_use |
是 | 運行含 {{條目名}} 佔位符的 shell 命令;彈窗展示完整命令供確認,批准後解密、替換、執行,返回退出碼與脫敏輸出 |
vault_delete |
否 | 刪除指定條目 |
vault_change_password |
是 | 修改主密碼並整體重加密;工具始終返回中性文案,不向智能體泄露是否成功 |
安全與存儲要點¶
- 主密碼經 scrypt(N=16384, r=8, p=1)拉伸爲 256 位密鑰;各祕密值單獨 AES-256-GCM 加密。
- 默認 vault 文件路徑爲
~/.dsh/vault.json(亦可用$DSH_HOME/vault.json),寫入權限0600,原子替換。 - 彈窗通過 Harness Web 源上的本地
/vault-api與 Host 通信;帶外來Origin的請求會被拒絕。 - 解密後的值僅在單次工具調用期間駐留進程內存;默認每次 save/use/改密都會再次詢問主密碼。
README 也列出了已知限制:替換後的命令會短暫出現在本機進程命令行(多用戶主機上 ps 可見);脫敏只覆蓋輸出中與祕密完全一致的子串;無瀏覽器連接或彈窗超時則調用失敗且不執行、不保存。
安裝與啓用¶
官方說明中有三種常見方式:
- 從 npm 註冊表安裝:通過插件管理器的
install_bundle,包名爲@dreagonmon/vault-manager。 - 本地檢出時:向
install_bundle傳入包目錄路徑。 - 在能解析該包的 profile 中加入 patch 行。
package.json 要求 Node >= 22.12.0、dsh >= 0.2.0,許可證爲 MIT,當前發佈版本 1.0.0。
在 profile 中插入插件並可選配置的示例:
- insert:
- id: vault-manager
name: '@dreagonmon/vault-manager'
config:
redactOutput: true
可選 config 字段(均來自 README):
| 字段 | 默認值 | 含義 |
|---|---|---|
path |
~/.dsh/vault.json |
vault 文件位置 |
redactOutput |
true |
命令輸出中的祕密替換爲 *** |
commandTimeoutMs |
120000 |
命令最長執行時間 |
promptTimeoutMs |
1800000 |
彈窗無響應超時(30 分鐘) |
典型用法¶
下面步驟復現 README 中的流程:先存 GitHub PAT,再在 git push URL 中用佔位符引用。
agent: vault_save { name: "github-token", note: "PAT for HTTPS git operations" }
user: [popup] master password + secret value
agent: vault_use {
command: "git push https://{{github-token}}@github.com/me/repo.git main",
entries: ["github-token"]
}
user: [popup] reviews the command, types the master password
agent: { exitCode: 0, stdout: "...", stderr: "..." } # secrets redacted
使用 vault_use 時,entries 聲明本次會解密哪些條目;命令字符串裏用 {{條目名}} 與 vault 中的名稱對應。用戶在彈窗裏看到的是佔位符形式的命令,批准並輸入主密碼後才真正執行。
適用場景與注意¶
適合:需要在 DSH 會話裏讓智能體「發起」帶憑據的操作,但又不希望 token 進入模型上下文或落進可檢索日誌的開發者;例如 HTTPS Git 推送、調用需 API key 的 curl 等。
使用前請自行覈對:插件以當前 DSH Host 進程的用戶權限運行,vault 文件與執行的 shell 命令都受該權限約束。安裝前建議閱讀 GitHub 倉庫 源碼與 MIT 許可證;目錄頁見 SkillHub 插件頁。DSH 社區插件目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
靜態加密不能替代主機層面的訪問控制:能讀取 Host 進程內存或在 vault 文件可讀時拿磁盤副本的攻擊者,仍在信任邊界討論範圍內。
結尾¶
vault-manager 把「錄入—審批—執行—回傳」拆成彈窗與佔位符兩道門,把智能體可見面壓到元數據與脫敏輸出。若你的工作流裏頻繁出現「Agent 需要祕密但你不願祕密進上下文」,可按上文安裝 bundle,從 vault_save 與 vault_use 試起。
- 目錄頁:https://www.skillhub.cn/plugins/Dreagonmon/vault-manager
- 源碼與文檔:https://github.com/Dreagonmon/vault-manager