vault-manager:在彈窗中錄入密鑰,不讓憑據進入 Agent 上下文

前言

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 可見);脫敏只覆蓋輸出中與祕密完全一致的子串;無瀏覽器連接或彈窗超時則調用失敗且不執行、不保存。

安裝與啓用

官方說明中有三種常見方式:

  1. 從 npm 註冊表安裝:通過插件管理器的 install_bundle,包名爲 @dreagonmon/vault-manager。
  2. 本地檢出時:向 install_bundle 傳入包目錄路徑。
  3. 在能解析該包的 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜