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

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

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

小夜