dsh-qq-approval-notify:DSH 審批與提問的 QQ 提醒

前言

DeepSeek Harness(DSH)在沙箱提權、命令執行、寫文件等場景會彈出審批;ask_user_question 或計劃審覈也會在界面等你作答。人若不在電腦前,很容易錯過彈窗。社區插件 dsh-qq-approval-notify(維護者 EviMing,分類:工作流)在本機監聽這些事件,優先經 NapCat 給指定 QQ 發私信;NapCat 不可用或發送失敗時,再嘗試 Windows 通知;仍失敗則寫日誌並放棄,不影響 DSH 本身的審批與提問流程。

這是什麼

一句話:Host 側 DSH 插件,把「需要你處理的審批」和「需要你回答的界面提問」轉成 QQ 私信或 Windows 桌面提醒,只做提醒,不參與批准或代答。

插件只裝在 Host,不需要 Client 代碼;實現上僅使用 Node 內置模塊,無額外 npm 依賴。當前 package 版本爲 1.1.0,許可證 MIT。

核心功能

監聽的場景

插件觀察兩類 waterfall 事件(只觀察、始終 next(),fire-and-forget):

  1. approval/request:沙箱提權、bash/shell/exec、run_code、讀寫刪文件、聯網、插件安裝與 MCP 等工具調用等審批。
  2. user-questions/request:ask_user_question 及計劃審覈等界面提問。

審批策略爲 never 時不會產生審批請求,插件也就不會發通知;需要在 ask 或會觸發審批的模式下才有意義。

消息格式

審批類消息形如:

【申請{XX}權限】申請原因

XX 按審批類型映射爲人話標籤(例如沙箱提權爲「沙箱」,shell 爲「執行命令」,write/edit 爲「修改文件」,web_fetch 爲「聯網」等)。原因優先使用 DSH 的 displayReason.zh,與審批彈窗一致。dsh-ops 的 ops_bash 提權走獨立通道,顯示爲「執行命令」;經 dsh-sandbox 的提權顯示爲「沙箱」。

提問類消息形如:

【需要你回答】<標題>:<問題>(單選:選項 A / 選項 B)

多題時首行帶 【需要你回答】,後續以 - 開頭;選項會標「單選 / 可多選」;detail 截斷後放在 〔…〕 中。

通知鏈路

  1. 生成消息文本。
  2. 發現 NapCat:配置 endpoints → 進程端口探測 → 默認端口;對每個候選調用 OneBot get_login_info,僅當 user_id 等於配置的 selfQQ 才使用,避免連錯實例。
  3. 用 send_private_msg 發給 ownerQQ。
  4. 失敗則 Windows Toast(WinRT),再失敗試托盤氣泡。
  5. 均失敗則放棄本次通知。

相同申請文本在 dedupeMs(默認 20000 ms)內只通知一次,減輕重試風暴;設爲 0 關閉去重。

實現上爲何要用 prepend

Web 端轉發器對 approval/request 與 user-questions/request 註冊了不 prepend 的監聽器,會把事件轉給瀏覽器並結束鏈,後註冊的觀察者不會被調用。本插件用 ctx.on(..., handler, { prepend: true }) 排在鏈首,仍立刻 return next(),不影響正常審批與提問。

安裝與啓用

官方 README 推薦在 Windows 上用 tarball 安裝(未開開發者模式時,pnpm 對本地目錄建符號鏈接可能被拒):

cd D:\DSH_WorkArea\qq-approval-notify
npm pack --pack-destination dist

然後由 DSH 的 plugin_manager 安裝生成的 dist\local-qq-approval-notify-<版本>.tgz。改源碼後重新 pack 並重裝即可;配置文件在包外,重裝不會丟失。

裝好後若運行中的 DSH 無變化,需重啓 DSH:Node 會緩存已加載的 ESM,重裝或開關插件不會替換進程內舊代碼。

安裝前應自行查看 GitHub 倉庫 源碼與 MIT 許可證;插件以當前 dsh 進程權限運行。

配置

默認讀取:

%DSH_HOME%\qq-approval-notify.json

DSH_HOME 未設置時爲 C:\Users\<你>\.dsh。也可用環境變量 DSH_QQ_APPROVAL_CONFIG 或插件行配置裏的 configFile 指定路徑。

示例(字段含義以 README 爲準):

{
  "ownerQQ": "2368199809",
  "selfQQ": "3641194452",
  "napcat": {
    "endpoints": ["http://127.0.0.1:3000"],
    "ports": [3000, 3001],
    "token": "你的 NapCat token",
    "timeoutMs": 1200,
    "discoveryCacheMs": 60000
  },
  "windowsNotification": {
    "enabled": true,
    "timeoutMs": 12000
  },
  "dedupeMs": 20000,
  "debug": false
}
  • ownerQQ:收件人(主人)QQ 號。
  • selfQQ:DSH 側登錄的 QQ 號,用於校驗 NapCat 登錄身份。
  • napcat.token:OneBot access token,以 Authorization: Bearer ... 發送。
  • 缺少 ownerQQ 或 selfQQ 時,插件不猜測收件人與 NapCat,僅嘗試 Windows 通知。

典型用法與自檢

本地跑測試(消息格式、配置解析、假 OneBot、真實 NapCat 只讀探測、Windows 通知自檢):

cd D:\DSH_WorkArea\qq-approval-notify
node test/check.mjs

可選:向真實 QQ 發一條自檢消息:

$env:DSH_QQ_LIVE_SEND = '1'; node test/check.mjs

使用上:DSH 正常工作時,一旦有審批或提問事件,插件按上述鏈路通知;在 QQ 裏回覆不會自動批准,也不會替你答題,仍需回到 DSH 界面處理。

適用場景與注意

適合在本機已部署 NapCat(OneBot HTTP)、且希望離開桌面仍能收到 DSH「待處理」提醒的 Windows 用戶。Toast 依賴當前用戶桌面會話;無交互會話時會退回托盤氣泡。

DSH 社區目錄 SkillHub 插件頁 與 GitHub 爲獨立信息源,與 DeepSeek / 幻方無官方從屬關係;生態上 DSH 強調「一切皆插件」,本插件屬於其中的工作流類擴展。

結尾

dsh-qq-approval-notify 把審批與界面提問變成可觸達的 QQ 私信或 Windows 通知,並明確失敗回退與去重策略,適合需要「離開電腦也不漏提醒」的 Host 部署。詳情與 issue 見 GitHub,目錄入口見 SkillHub。

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

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

小夜