dsh-notify:DeepSeek Harness 桌面通知插件

前言

DeepSeek Harness (DSH) 採用插件化架構,允許開發者擴展功能。在運行長會話或後臺任務時,可能會錯過關鍵節點。dsh-notify 是一個插件 bundle,用於在會話完成任務、提問或需要審批,且你不在當前會話時,發送桌面通知並播放提示音。

功能

該插件主要提供以下能力:

  1. 觸發時機:支持在以下事件觸發通知
    • 會話一輪對話結束(turn/end)
    • 持久化目標完成(goal/change)
    • Agent 調用提問接口(tool/call)
    • 需要用戶審批的動作(approval/asked)
  2. 子代理過濾:只監聽頂層會話。插件通過會話頭部的 origin: 'subagent' 標記過濾掉所有子代理(subagent)的事件,避免干擾中間過程。
  3. 在場檢測:僅在用戶離開時通知。
    • 當頁面爲當前標籤頁且窗口有焦點時,視爲“在會話中”,不彈通知。
    • 切換標籤頁、最小化或關閉頁面時,視爲“離開”,觸發通知。
    • 標籤頁崩潰或斷連超過 45 秒(TTL),會自動視爲離開。
  4. 系統默認提示音:嘗試調用 canberra-gtk-play -i message 或 pw-play/paplay 播放系統提示音,支持通過配置關閉。
  5. 通知後端:支持 Linux notify-send(自動檢測)、純控制台輸出,或任意自定義命令(支持模板替換)。

安裝

本包是一個 DSH 規範的 bundle,包含宿主插件和瀏覽器客戶端半部。

從本地目錄安裝

# 1. 構建(如果尚未構建)
npm install
npm run build

# 2. 安裝到指定 profile
dsh plugin --profile web add /path/to/DSH_remind

dsh plugin 會自動檢測 dsh.bundle.patch 並追加到 profile 的 bundle 列表中,重啓 profile 即可生效。

從 GitHub 安裝

dsh plugin --profile web add github:you/dsh-notify#<commit-sha>

驗證配置層

在不啓動的情況下檢查配置是否正確加載:

dsh --profile web --patch /path/to/DSH_remind/cordis.patch.yml --dump-config

配置

默認零配置即可運行。在 profile 的 cordis.patch.yml 中按 id 覆蓋該行。

默認配置參數

字段 類型 默認值 說明
backend auto \| notify-send \| console \| command auto 自動檢測 notify-send,否則降級爲控制台
command string '' 自定義命令模板,經 /bin/sh -c 執行,支持 {title} 和 {message} 佔位符
urgency low \| normal \| critical normal notify-send 的緊急度
onTurnComplete boolean true 一輪迴答完成時通知
onGoalComplete boolean true goal 完成時通知
onUserQuestion boolean true Agent 提問時通知
onApproval boolean true 需要審批時通知
onlyWhenAway boolean true 僅在離開時通知
playSound boolean true 播放系統提示音
debounceMs number 0 同類通知的最小間隔(毫秒)

自定義命令示例

在 command 後端中自定義通知行爲:

# 通知 + 自定義提示音文件
config:
  backend: command
  command: 'notify-send --app-name "DeepSeek Harness" --urgency critical "{title}" "{message}" && paplay "$HOME/.local/share/sounds/custom.oga"'
# 通知 + 留痕到日誌文件
config:
  backend: command
  command: 'notify-send "{title}" "{message}"; echo "$(date "+%F %T") {title} | {message}" >> "$HOME/.local/share/dsh-notify.log"'

工作原理

插件分爲瀏覽器端(客戶端半部)和宿主端(bundle 行):

  • 瀏覽器端:監聽頁面可見性變化(visibilitychange)、焦點/失焦(focus/blur)以及心跳(15s)。將當前會話 ID 和在場狀態通過 RPC 上報給宿主。
  • 宿主端:訂閱 session/event 流。在處理事件前,先檢查會話是否爲頂層會話(排除 subagent),再檢查 presence 服務中記錄的用戶是否“在場”。
  • 執行:通過防抖處理,最終觸發通知和聲音播放。通知失敗不會影響會話本身的運行。

在 Headless 或 TUI 環境中,由於沒有瀏覽器端上報,presence 恆爲“離開”,所有事件均會觸發通知。

注意事項

  1. 純事件觀察者:插件不會攔截或修改任何會話行爲,通知故障不會影響 DSH 的運行。
  2. 權限與安全:安裝前請檢查源碼與許可證。插件以當前 DSH 進程的權限運行,自定義命令需注意安全風險。
  3. Headless 場景:無瀏覽器環境的場景下,所有事件均會觸發通知。

鏈接

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

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

小夜