前言¶
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):
approval/request:沙箱提權、bash/shell/exec、run_code、讀寫刪文件、聯網、插件安裝與 MCP 等工具調用等審批。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 截斷後放在 〔…〕 中。
通知鏈路¶
- 生成消息文本。
- 發現 NapCat:配置
endpoints→ 進程端口探測 → 默認端口;對每個候選調用 OneBotget_login_info,僅當user_id等於配置的selfQQ才使用,避免連錯實例。 - 用
send_private_msg發給ownerQQ。 - 失敗則 Windows Toast(WinRT),再失敗試托盤氣泡。
- 均失敗則放棄本次通知。
相同申請文本在 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。