dsh-session-notifier:會話需要你動手時用系統通知提醒你

前言

在 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 設置裏打開 會話提醒 即可配置:

  1. 總開關與上述六個節點開關;
  2. 前臺策略(三者互斥,不疊加):smart(推薦,僅後臺彈系統通知)、always(始終只彈系統通知)、never(只彈頁內條)。若走了系統通知路徑,就不再彈頁內條;只有通知發不出去(未授權或不支持 Notification)時才用頁內條兜底;
  3. 提示音(內置 assets/mambo.wav,Host 經 GET /api/session-notifier/sound 提供;系統通知設 silent: true,音量由 soundVolume 0–1 控制,默認 0.8)、標籤頁標題未讀計數、提示條停留秒數;
  4. 免打擾時段(支持跨零點,例如 23:00 → 08:00);
  5. 「申請系統通知權限」、實時權限狀態、發一條測試提醒。

提示音僅在系統通知路徑播放,頁內條不響。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,避免對着無效的開關操作。

典型用法

  1. 按上文完成 install_bundle 並重啓 dsh web;
  2. 打開 設置 → 會話提醒,開啓總開關,按需打開各節點開關;
  3. 點擊「申請系統通知權限」;在 localhost 等安全上下文下一般可申請;被拒絕時仍可用頁內條,並在瀏覽器站點設置裏改權限;
  4. 使用「發一條測試提醒」確認通知與(若啓用)提示音;
  5. 保持 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。

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

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

小夜