dsh-credential-handoff:讓 agent 請求憑據而不把密鑰放入模型上下文

前言

在 DSH 插件化使用場景中,agent 有時會判斷某個工具缺少一個 API key。如果讓用戶直接在普通對話裏粘貼密鑰,密鑰會進入會話記錄,也可能進入模型上下文。

dsh-credential-handoff 針對這個場景提供一條會話內的只寫交接路徑:由瀏覽器對話框收集憑據,通過 DSH credential service 寫入,工具調用只收到固定狀態元數據,不把密鑰放回模型上下文。

這是什麼

xiaohj233/dsh-credential-handoff 是一個 DSH Feature Plugin,許可證爲 MIT。

它註冊 request_credential 工具,讓 agent 請求指定憑據而不把密鑰放入模型上下文。已覈實資料顯示,該插件測試於 DeepSeek Harness 0.1.0-rc.6。

核心功能

  • 提供 request_credential 工具,讓 agent 請求指定憑據,而不把密鑰放入模型上下文。
  • 通過 DSH credential service 以只寫方式寫入憑據,並向工具調用返回固定狀態元數據。
  • 每個會話允許一個待處理請求,對話框十分鐘後過期。
  • 工具結果只報告憑據引用,以及它是已配置還是被替換。
  • HTTPS 允許提交;明文 HTTP 僅允許精確 loopback 主機;非 loopback 明文 HTTP 在控件和提交處理中被阻止。
  • Host 註冊 request_credential 並等待帶標籤的 userQuestions 請求;Client 只處理該標籤問題,並直接調用 credentials.set。
  • 憑據引用使用 shell 風格名稱:首字符爲字母或下劃線,後續爲字母、數字或下劃線。
  • 無需插件設置項。

安裝與啓用

安裝命令如下:

dsh plugin --profile web add "github:xiaohj233/dsh-credential-handoff#v0.1.0"

安裝後重啓 Web profile。

典型用法

模型調用 request_credential 的示例如下:

{"ref":"TAVILY_API_KEY","label":"Tavily API key","reason":"Required for Tavily search"}

這個調用只表達憑據請求。密鑰值不通過該工具調用返回給模型上下文;工具結果只報告憑據引用,以及它是已配置還是被替換。

卸載命令如下:

dsh plugin --profile web remove dsh-credential-handoff

刪除插件會移除工具和對話框,但不會刪除已由配置的 DSH credential provider 存儲的憑據。

適用場景與注意

適合在 DSH Web profile 中,由用戶在會話內補充憑據,同時希望工具結果不回傳密鑰的場景。

不適合作爲以下用途:

  • 不是 vault。
  • 不是加密提供者。
  • 不是憑據查看器。
  • 不是子進程憑據注入器。
  • 不是 DSH credential providers 的替代。

它也保護不了已經被攻陷的瀏覽器、宿主進程或 DSH credential backend。

需要注意的邊界包括:

  • DSH 爲 release candidate,後續版本可能更改 question、credential 或 client-slot 合約。
  • 不要將 DSH Web 控制平面暴露給不可信網絡。阻止非 loopback 明文提交,不等於爲 DSH 增加認證。
  • 在 rc.6 中,通用問題 UI 始終提供 Other 文本答案;如果客戶端接管包加載失敗,fallback 會提示不要粘貼密鑰並取消,但 host 無法移除該通用字段。
  • 直接客戶端也可能繞過該插件調用 DSH 憑據 API;更廣泛 Web 控制平面的傳輸和認證仍是上游職責。
  • 插件會隨當前 DSH 進程權限運行,安裝前應檢查源碼與許可證。

鏈接

GitHub:https://github.com/xiaohj233/dsh-credential-handoff

羽毛球分组比赛记分
小程序二维码

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

小夜