前言¶
在 DeepSeek Harness(DSH)裏跑智能體會話時,常見情況是:交代完任務就切到別的窗口,回來才發現會話早就 idle,或一直停在「等你點允許」「彈窗等你回答」。沒有外部提醒時,只能靠偶爾切回標籤頁碰運氣。社區插件 dsh-session-notifier(維護者 w2018,分類爲客戶端)專門監聽會話裏「需要你動作」的節點,用瀏覽器系統通知和頁內提示條提醒;點通知或提示條會通過宿主接口打開對應會話,而不是 merely 把窗口提到前面。
這是什麼¶
dsh-session-notifier 是 DSH 的 Cordis 插件:Host 側旁聽會話事件並維護有界提醒隊列,Client 側每 2 秒拉取 /api/session-notifier/state?since=N,在合適時機彈出系統 Notification 或頁內 overlay 提示條。運行態配置保存在 $DSH_HOME/storages/session-notifier/settings.json;cordis.patch.yml 僅提供首次安裝默認值,改設置頁選項保存即生效。
與「全靠人盯頁面」相比,它把任務完成、授權等待、提問、登錄失敗、報錯等節點結構化篩出,並區分前臺策略,避免同一條提醒在系統通知和頁內條上重複打擾。
會提醒哪些節點¶
下面表格與 README 一致;子任務結束默認關閉,避免長任務裏幾十次子 agent 刷屏。
| 節點 | 觸發來源 | 默認 |
|---|---|---|
| 一輪任務跑完 | agent/status:先見過 running 再見到 idle |
開 |
| 等你點允許(授權) | approval/request(waterfall,只旁聽不改判) |
開 |
| 彈窗提問等你回答 | user-questions/request |
開 |
| 需要登錄 / 重新授權 | deepseek-account/model-sign-in-required、authorization/settled = failed |
開 |
| 任務出錯 | agent/error、api-session/error |
開 |
| 子任務結束 | subagent/end |
關 |
設計上有幾條硬性約束:Host 只篩事件、不直接調系統通知(權限必須在頁面申請);授權鏈上的 waterfall 監聽器一律 try/catch 後原樣 return next(),避免插件 bug 卡死審批;idle 在初始化或子 agent 結束時也會出現,必須見過 running 纔算一輪結束,且 header.origin === 'subagent' 的子會話不報「完成」。
設置與前臺策略¶
在 DSH 設置裏打開 會話提醒 即可配置:
- 總開關與上述六個節點開關;
- 前臺策略(三者互斥,不疊加):
smart(推薦,僅後臺彈系統通知)、always(始終只彈系統通知)、never(只彈頁內條)。若走了系統通知路徑,就不再彈頁內條;只有通知發不出去(未授權或不支持Notification)時才用頁內條兜底; - 提示音(內置
assets/mambo.wav,Host 經GET /api/session-notifier/sound提供;系統通知設silent: true,音量由soundVolume0–1 控制,默認 0.8)、標籤頁標題未讀計數、提示條停留秒數; - 免打擾時段(支持跨零點,例如
23:00→08:00); - 「申請系統通知權限」、實時權限狀態、發一條測試提醒。
提示音僅在系統通知路徑播放,頁內條不響。Client 會在用戶首次 pointerdown / keydown 時靜音解鎖 <audio>,以繞過瀏覽器自動播放限制。
點系統通知或頁內條時,會調用 uiWorkspace.openSession(sessionId) 選中該提醒所屬會話;子會話會先經 sessions.subagentAddress() 解析再打開。window.focus() 僅爲附帶動作。
安裝與啓用¶
資料中的安裝方式不是 dsh plugin add,而是把插件目錄放到本機任意位置後,用 plugin_manager 的 install_bundle,target 填該目錄的絕對路徑,然後重啓一次 dsh web(新接管的客戶端 bundle 需重新加載)。
package.json 要求 dsh >=0.1.7-rc.2、Node >=22。當前包版本爲 0.1.1,許可證 MIT。Host 的 BACKEND_VERSION 與 Client 的 EXPECTED_BACKEND_VERSION 不一致時,設置頁會提示重啓 DSH,避免對着無效的開關操作。
典型用法¶
- 按上文完成
install_bundle並重啓dsh web; - 打開 設置 → 會話提醒,開啓總開關,按需打開各節點開關;
- 點擊「申請系統通知權限」;在 localhost 等安全上下文下一般可申請;被拒絕時仍可用頁內條,並在瀏覽器站點設置裏改權限;
- 使用「發一條測試提醒」確認通知與(若啓用)提示音;
- 保持 DSH Web 客戶端打開(Client 負責拉取 state 與彈通知);會話在後臺跑到 idle、出現 approval、提問或報錯時,應收到對應提醒;點擊通知應跳回該會話。
開發或自測邏輯時可於插件目錄執行:
node --test "test/*.test.js"
適用場景與注意¶
適合長時間掛會話、經常 multitasking 的 DSH 用戶,以及需要明確感知「授權 / 提問 / 登錄」阻塞點的場景。不適合把「每個子 agent 結束」都當完成提醒的場景——該節點默認關閉正是爲此。
插件以當前 DSH 進程權限運行,安裝前應閱讀倉庫源碼與 MIT 許可證,確認事件旁聽與 API 行爲符合你的環境。系統通知依賴瀏覽器權限與站點策略;前臺策略爲 never 時不會走系統通知路徑。社區目錄 SkillHub 與 DeepSeek / 幻方無官方從屬關係,本文事實以倉庫 README 與 package.json 爲準。
結尾¶
dsh-session-notifier 把「會話在跑、有人在等你」收斂成可配置的提醒節點,用拉取式 state API 和頁內兜底降低漏看成本。目錄頁:https://www.skillhub.cn/plugins/w2018/dsh-session-notifier;源碼與完整說明:https://github.com/w2018/dsh-session-notifier。