全部插件

DSH / BUNDLE / CLIENT-UI

dsh-credential-handoff

v0.1.1xiaohj233 / dsh-credential-handoff86a8113fda

可安装组合包UI 与客户端插件社区 · Topic 自动分析Web UI

概览

dsh-credential-handoff

Conversation-local credential handoff that writes through the DSH credential service without returning the secret to model context.

README / ZH

插件文档

dsh-credential-handoff

English | 中文

状态:功能插件,已在 DeepSeek Harness 0.1.0-rc.6 上测试。

dsh-credential-handoff 让 agent 向用户索要一个指定名称的凭据,而无须把秘密放进模型上下文。浏览器会弹出会话局部的密码对话框,把值写入 DSH 的凭据服务,最后只向工具调用返回固定的状态元数据。

问题

agent 能发现某个凭据缺失,但让用户把密钥粘进普通聊天,密钥就会落进对话记录和模型上下文。本插件为这个时刻提供一条只写的交接路径。

行为

request_credential 工具接受一个凭据引用(如 TAVILY_API_KEY)、可选的标签和原因。每个会话同一时刻只允许一个待处理的请求;对话框十分钟后过期。工具结果只报告该引用,以及它是新建的还是替换的。

HTTPS 下允许提交凭据;明文 HTTP 下只对精确的回环主机(localhost127.0.0.1 和 IPv6 回环)放行。非回环的明文 HTTP 提交,界面控件和提交处理都会拦下。

非目标

本包不是保险库、加密提供者、凭据查看器,也不为子进程注入凭据,更不是 DSH 凭据 provider 的替代品。它无法保护被攻陷的浏览器、宿主进程或 DSH 凭据后端。

机制

  • Host:注册 request_credential,等待一个带标签的 userQuestions 请求。
  • Client:只处理这个带标签的问题,直接调用 credentials.set
  • 结果:用固定文本回答待处理的问题,返回不含值的元数据。

秘密不会出现在本插件产生的问题回答、工具结果、常规日志或会话事件负载里。

兼容性

已在 DeepSeek Harness 0.1.0-rc.6、Node.js ^22.19.0 || >=24、pnpm >=10 上测试。DSH 仍是发布候选版本,后续版本可能改动 question、credential 或 client-slot 的约定。

安装

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

安装后重启 Web profile。

配置

无需任何插件设置,模型直接调用:

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

凭据引用采用 shell 风格命名:以字母或下划线开头,后面跟字母、数字或下划线。

卸载

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

移除插件会一并移除工具和对话框,但不会删除 DSH 凭据 provider 里已存好的凭据。

安全

不要把 DSH Web 控制面暴露给不可信网络。拦下明文非回环提交,只保证本插件不会经由这条通道把秘密发出去,并不会给 DSH 加上认证;配置的凭据 provider 自身的存储特性需要另行审查。

测试

npm test
npm run check:syntax
npm run scan:secrets -- synthetic-test-value lib/index.js lib/client.js test/validate.test.js
npm pack --dry-run

测试覆盖:引用校验、秘密形态处理、传输分类、问题/结果映射和包语法。

局限性与上游现状

DSH 已提供 resolvedescribesetunset 凭据服务,本插件只是补了一个会话局部的交接 UI 和模型工具,不会把凭据值读回浏览器或模型。

rc.6 的通用问题 UI 总会提供一个 Other 文本答案;若客户端的接管 bundle 加载失败,回退问题会提醒用户不要粘贴秘密、直接取消,但宿主无法去掉那个通用字段。直接客户端也可以绕过本插件调用 DSH 自己的凭据 API;更广的 Web 控制面的传输与认证仍是上游的职责。

License

MIT。详见 LICENSE

LIMITATIONS

已知限制

DSH already provides `resolve`, `describe`, `set`, and `unset` credential services. This plugin adds only a conversation-local handoff UI and model tool. It does not read credential values back into the browser or model. The rc.6 generic question UI always offers an `Other` text answer. If the client takeover bundle fails to load, the fallback question warns the user not to paste a secret and to cancel, but the host cannot remove that generic field. Direct clients can also call DSH's own credential API outside this plugin; transport and authentication for the wider Web control plane remain upstream responsibilities.