dsh-password-prompt:在 DSH Web GUI 中弹出密码面板

前言

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 认领 passwordaccount + password 问题。
  • 作为 bundle + dual-face plugin:声明 dsh.bundledsh.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 模式下同时返回 accountsecretFile 路径。

在这个流程里,密码不进入模型上下文。agent 可通过 askpass 脚本把文件内容用于 ssh,或通过:

sudo -S < file

用于 sudo。使用完成后删除文件。

适用场景与注意

  • 适合在 DSH Web GUI 中处理需要用户输入密码或账号的 agent 任务,替代交互式终端输入。
  • README 安全警告:该插件未经严格安全测试或独立审计,不保证任何密码的安全、保密或完整性。用于生产、金融或其他高敏系统前,必须审查代码并接受风险。
  • 插件随 DSH 进程加载,安装时应把源码审查视为必要步骤;尤其注意安装时构建权限、客户端注入内容和文件路径处理。
  • allowBuilds 允许执行包构建代码;只安装信任的 commit,并建议固定 SHA。
  • web profile 需要手动加入 @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
羽毛球分组比赛记分
小程序二维码

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

小夜