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