前言¶
DSH 的理念是「一切皆插件」。当 agent 需要在网页端向用户询问密码或账号密码时,交互式终端并不是最自然的交互方式。MagicCrazyMan/dsh-password-prompt 是一个 DeepSeek Harness 插件,目标是让 agent 在 Web GUI 中通过 password_prompt 工具弹出 masked password panel,用户输入后继续执行任务。
这是什么¶
这是由 MagicCrazyMan 维护的 DSH 插件,包名为 dsh-password-prompt,许可证为 MIT。它面向 Web GUI 客户端,提供 password_prompt 工具,解决 agent 在浏览器界面中向用户请求密码、或同时请求账号和密码的问题。
核心能力¶
- 提供
password_prompt工具:agent 调用后,浏览器弹出 masked HTML password panel,等待用户输入。 - 支持
account + password模式:同一面板中增加account字段。 - 密码不直接返回给 agent:密码写入私有
0600文件,工具仅返回文件路径;account模式下同时返回account和文件路径。 - 使用 DSH 公共接口:
ctx.userQuestions.ask()和浏览器conversation.composer链;插件以 priority-1的 composer entry 认领password或account + password问题。 - 作为 bundle + dual-face plugin:声明
dsh.bundle和dsh.client,自动扫描并服务/plugins/<id>/client.js。 - 在 stock、未修改的 DSH 安装上工作:不需要 DSH core 改动,也不需要手动编辑
cordis.patch.yml。 package.json声明客户端注入:@deepseek-ai/dsh-client-runtime、@deepseek-ai/dsh-client-connection、@deepseek-ai/dsh-client-ui-conversation、@deepseek-ai/dsh-client-ui-slots、@deepseek-ai/dsh-client-ui-primitives。
安装与启用¶
下面先安装插件,再处理 pnpm >= 10 的构建权限,最后为 GUI profile 增加 Web 应用 bundle。
1. 使用 demo profile 安装插件¶
资料未确认 npm 发布状态,因此这里使用 Quick start 推荐的 GitHub 安装路径:
pnpm dsh plugin --profile demo add github:MagicCrazyMan/dsh-password-prompt
这一步会在 demo profile 中添加 dsh-password-prompt。
2. 处理 pnpm >= 10 的安装时构建权限¶
首次 pnpm add 会按设计失败:pnpm >= 10 需要在允许之后才执行 git 依赖的构建代码。错误信息会给出绑定 commit SHA 的 key。按提示在 profile 的 pnpm-workspace.yaml 中添加类似内容:
allowBuilds:
dsh-password-prompt@https://codeload.github.com/MagicCrazyMan/dsh-password-prompt/tar.gz/<commit-sha>: true
然后重跑安装命令。allowBuilds 是允许执行包构建代码的权限;只从信任的 commit 安装,建议 pin 住 commit SHA:
github:MagicCrazyMan/dsh-password-prompt#<sha>
3. 为 GUI profile 增加 Web 应用 bundle¶
非 web profile 默认只有 @deepseek-ai/dsh-base,没有 Web UI。资料中的建议不是执行:
dsh plugin add @deepseek-ai/dsh-web-app
而是手动把 @deepseek-ai/dsh-web-app 加入 profile manifest 的 dsh.profile.bundles。例如:
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-password-prompt"
]
}
}
}
如果 profile 中已经存在 web 相关 bundle,则确认 dsh-password-prompt 在插件集中即可。plugin-set 变更后,需要重启正在运行的 web server 或 dsh。
启动与验证¶
启动 DSH:
pnpm dsh --profile demo --host 127.0.0.1 --port 3082
在另一个 shell 中验证 HTTP 响应:
curl --noproxy '*' -o /dev/null -w '%{http_code}\n' http://127.0.0.1:3082/
预期返回:
200
再验证插件客户端文件:
curl --noproxy '*' -o /dev/null -w '%{http_code}\n' \
http://127.0.0.1:3082/plugins/dsh-password-prompt/client.js
预期返回:
200
典型用法¶
对 agent 说:
连 192.168.1.10 需要密码,用 password_prompt 问我要。
或者:
连 192.168.1.10 的账号密码都问我。
agent 调用 password_prompt 后,浏览器弹出 masked panel。用户输入后,工具返回 secretFile 路径;account 模式下同时返回 account 和 secretFile 路径。
在这个流程里,密码不进入模型上下文。agent 可通过 askpass 脚本把文件内容用于 ssh,或通过:
sudo -S < file
用于 sudo。使用完成后删除文件。
适用场景与注意¶
- 适合在 DSH Web GUI 中处理需要用户输入密码或账号的 agent 任务,替代交互式终端输入。
- README 安全警告:该插件未经严格安全测试或独立审计,不保证任何密码的安全、保密或完整性。用于生产、金融或其他高敏系统前,必须审查代码并接受风险。
- 插件随 DSH 进程加载,安装时应把源码审查视为必要步骤;尤其注意安装时构建权限、客户端注入内容和文件路径处理。
allowBuilds允许执行包构建代码;只安装信任的 commit,并建议固定 SHA。- 非
webprofile 需要手动加入@deepseek-ai/dsh-web-app;插件集变更后需要重启 web server 或dsh。 - 资料未确认 npm 发布状态,本文不将 npm 路径作为可用安装方式。
资源¶
- GitHub:https://github.com/MagicCrazyMan/dsh-password-prompt
- 目录页(链接来自资料,未另行验证页面内容):https://www.skillhub.cn/plugins/MagicCrazyMan/dsh-password-prompt