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