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 認領 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。
  • 非 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
羽毛球分组比赛记分
小程序二维码

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

小夜