dsh-secret-ask:不讓密鑰進對話的 DSH 插件

前言

智能體要調一個帶 API key、token 或密碼的命令時,常見做法是讓用戶把值粘貼到聊天裏。值一旦進入對話,就同時進了消息記錄、模型上下文和會話日誌,事後清理成本高,誤粘貼的風險也存在。

zayyehtut 維護的 dsh-secret-ask 換了一條流程:插件彈出一張遮罩卡片收值,值直接經本地迴環請求寫入本地憑據存儲,不落聊天;需要時再由插件把它注入到單條命令的環境變量裏。下面介紹它的能力、安裝與用法。

這是什麼

dsh-secret-ask 是 DeepSeek Harness 的插件,作者 zayyehtut,MIT 許可證,版本 1.0.0,聲明的環境是 dsh >=0.2.1-rc.5 <0.3.0-0(README 標註在 0.2.1-rc.5 上測試)。它解決的問題是:讓智能體臨時申請一個祕密值,同時保證該值不出現在對話消息、模型上下文或會話日誌裏。

插件本體是純 ESM JavaScript,客戶端只有一個 React 遮罩卡片,不需要編譯步驟。

核心功能

遮罩卡片收值。 卡片帶密碼框和顯示切換,輸入的值只存在於該卡片的 React 狀態裏,卡片卸載即清空。保存後提交到本地憑據存儲 $DSH_HOME/.credentials.yaml。

三個工具。 ask_secret 申請並存儲祕密,run_with_secret 在單條命令中使用,forget_secret 按名刪除。模型只能看到祕密的名稱和是否已配置,看不到值。

單命令注入。 值作爲環境變量傳給那一條子進程,命令輸出裏與存儲值精確匹配的文本會被替換成 ***。

取消是乾淨的。 選擇「Not now」只報告請求已取消,不存儲任何部分值或草稿。

安裝與啓用

官方給出三種方式。

方式一,DeepSeek Harness 桌面應用(README 標爲最簡單):

  1. 在左側欄打開 Plugins。
  2. 點 Add plugin,在包字段粘貼:
   github:zayyehtut/dsh-secret-ask
  1. 點 Install,然後 Enable now。
  2. 重載一次窗口,讓客戶端卡片加載完成。

方式二,命令行(dsh web 場景):

dsh plugin --profile web add github:zayyehtut/dsh-secret-ask

裝完重啓 dsh web。如果用的是自定義 profile,把 web 換成你的 profile 名。

需要注意的是,桌面應用使用自己管理的 profile,往 profiles/web 做 CLI 安裝不會在桌面應用裏顯示,桌面用戶應走方式一。

方式三,社區 dsh-market 目錄。插件已提交到該目錄,出現後搜索 Secret Ask 即可一鍵安裝。

典型用法

首次運行時,讓智能體去做一件需要祕密值的事,例如:“用我的 GitHub token 發佈這個。”

  1. 智能體調用 ask_secret,對話框出現標題爲 Secret requested 的卡片,顯示變量名和一行用途說明。
  2. 粘貼值,按 Save(或回車)。卡片確認,智能體繼續,值不會回顯到對話記錄。
  3. 之後智能體需要值時調用 run_with_secret,例如執行讀取 $env:GITHUB_TOKEN 的命令。

如果某個名稱已經存有值,ask_secret 默認不重複請求,除非智能體傳 replace: true。

三個工具的職責與模型可見信息如下:

工具 作用 模型看到的信息
ask_secret 申請具名祕密並存儲;已配置時爲 no-op,除非 replace: true 名稱 + 已配置標誌
run_with_secret 在單條 PowerShell 命令中把具名祕密作爲環境變量傳入 脫敏後的輸出 + 退出碼
forget_secret 按名刪除已存祕密 名稱 + 已配置標誌

當命令需要祕密但該名稱未配置時,調用會以 not configured: NAME 失敗,提示智能體先調 ask_secret。

配置

插件默認在 bundle 中插入一行,卡片模式開啓。要改行爲,在 profile 的 cordis.patch.yml 里加一條對應 patch:

- id: secret-ask
  config:
    entryMode: card        # card = 遮罩卡片(默認);question = 原生問題卡片
    timeoutMs: 600000      # 卡片等待時長,單位毫秒;上限 1 小時
    # enabled: false       # 掛載該行但不註冊任何工具

entryMode: question 改用原生問題卡片,存儲邏輯相同,但原生卡片會在 Web UI 裏保留草稿,因此 README 建議保留卡片模式。enabled: false 是分階段安裝開關:行照常掛載,但不註冊工具。

安全與隱私

值不進入模型上下文。工具參數和結果只帶名稱;卡片的提交請求把值直接發給本地進程。README 同時說明了幾條邊界,使用前值得確認:

  • 提交路由 /api/secret-ask 只接受迴環 POST,要求 x-dsh-secret-ask: 1 頭、同源校驗、請求體上限 64 KiB,且不記錄、不回顯值。
  • 卡片不寫瀏覽器存儲(無 localStorage、無草稿存儲、不入對話),輸入在卸載和提交後清除。
  • 輸出脫敏是精確匹配,只替換長度 4 字符以上的存儲值;命令若對祕密做了轉換或編碼,仍可能打印結果。
  • 憑據文件對同一 Windows 用戶下運行的任何程序可讀,這與 Harness 自身憑據存儲的限制一致,插件不是隔離沙箱。
  • run_with_secret 在常規沙箱策略下執行單條命令,工具返回後不會讓進程繼續存活,也沒有後臺任務或沙箱提權。

故障排查方面,卡片不出現通常是頁面在插件加載前就打開了,重載窗口即可;卡片默認等待 10 分鐘,超時會提示 No value was entered before the request timed out,重載後再次調用工具即可。

適用場景與注意

適合需要臨時給智能體提供 API key、token、密碼,又希望值不進對話、不進會話日誌的場景,尤其是通過 dsh web 或桌面應用使用、已經依賴 Harness 憑據存儲的用戶。

安裝前注意兩點:一是插件以當前 DSH 進程的權限運行,憑據文件對同用戶進程可讀,不應把它當作隔離邊界;二是從源碼或目錄安裝前,應自行查看源碼並確認許可證(本插件爲 MIT)。生態背景上,DSH 的理念是“一切皆插件”,社區目錄 dsh-market 是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係,插件也不是官方應用商店上架項。

結尾

dsh-secret-ask 的價值在於把“臨時提供祕密值”這件事從聊天裏挪出去:遮罩卡片收值、本地憑據存儲保留、按需單命令注入並做輸出脫敏,流程簡單,也沒有額外服務依賴。目錄頁見 https://www.skillhub.cn/plugins/zayyehtut/dsh-secret-ask ,源碼見 https://github.com/zayyehtut/dsh-secret-ask 。

羽毛球分组比赛记分
小程序二维码

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

小夜