Перейти к основному содержимому
C

dsh-plugin-desktop-notify

chendaleiq/dsh-plugin-desktop-notify

Desktop notifications and an app-icon unread badge for DeepSeek Harness. A banner fires when a turn finishes, when an approval, question or plan confirmation is waiting, and when a turn fails; the badge shows how many sessions need you and clears once viewed, and clicking a banner switches to that session. Follows the DSH interface language, subagent sessions stay quiet by default, titles and body length are configurable, and a loopback HTTP interface lets scripts and other tools post notifications.

Установка

dsh plugin --profile web add github:chendaleiq/dsh-plugin-desktop-notify

README

dsh-plugin-desktop-notify

给 DSH 加桌面通知 + 应用图标小红点:任务完成、等待你操作、任务失败时提醒你,点通知直接回到那个会话。

npm license DeepSeek Harness plugin

任务跑完时右上角弹出的通知横幅(真实录屏)

(真实录屏,只截取了通知区域)

它做什么

  • 任务完成——包括窗口切到后台、你在别的应用里的时候
  • 等待你操作——工具审批、提问、执行计划确认
  • 任务失败——这一轮出错时提示
  • 小红点——应用图标上显示「需要你的会话数」,你看过之后才清零
  • 点击通知——切到对应会话,而不是只把应用叫到前面

子智能体的会话默认不提醒(可在偏好里打开)。

安装

DSH 桌面版 → 左侧栏「插件」→ 安装,填包名:

dsh-plugin-desktop-notify

装完按 ⌘R 刷新窗口。也可以填 GitHub 地址 (https://github.com/chendaleiQ/dsh-plugin-desktop-notify)或本地目录的绝对路径。

偏好

存在浏览器 localStorage 的 dsh-plugin-desktop-notify.preferences:

字段默认说明
notificationstrue总开关
notifyCompletetrue任务完成时通知
notifyPendingtrue等待审批 / 回答 / 计划确认时通知
notifyErrortrue任务失败时通知
notifyViewedfalse正在看的会话也通知(默认跳过)
badgetrue显示小红点
excludeSubagentstrue忽略子智能体会话
titleComplete / titlePending / titleError空自定义标题,空 = 用内置文案
maxBodyChars140正文长度上限

语言

跟随 DSH 的语言设置(设置 → 通用 → 语言):默认中文,切成英文后通知文案同步变成英文。

自检

渲染层控制台:

__DSH_DESKTOP_NOTIFY__.capabilities()   // 平台、通知权限、小红点、服务可达性
__DSH_DESKTOP_NOTIFY__.state()          // 小红点、待处理会话、最近一次通知/点击
__DSH_DESKTOP_NOTIFY__.report()         // 上面全部 + 窗口焦点,便于排查

给其它工具用的通知接口

宿主半边在回环地址上开了两个路由,供脚本、浏览器代理、定时任务调用:

方法路径作用
POST/desktop-notify/request发一条通知,body:{"title": "...", "body": "...", "sessionId": "可选"}
GET/desktop-notify/pending渲染层取走待显示的通知(脚本不用调)

地址写在 ~/.dsh/desktop-notify.endpoint,所以调用方不用猜端口:

curl -s "$(cat ~/.dsh/desktop-notify.endpoint)" \
  -H 'content-type: application/json' \
  -d '{"title":"BrowserOS 需要你","body":"有一个接管请求"}'

Python(比如监听 neo 的守护脚本):

import json, pathlib, urllib.request

url = pathlib.Path.home().joinpath(".dsh/desktop-notify.endpoint").read_text().strip()
request = urllib.request.Request(
    url,
    data=json.dumps({"title": "BrowserOS 需要你", "body": "有一个接管请求"}).encode(),
    headers={"content-type": "application/json"},
)
urllib.request.urlopen(request, timeout=3).read()

要点:

  • 通知由 DSH 自己弹出(归属 DeepSeek Harness),不是 Script Editor
  • 点通知会把窗口叫到前面;带 sessionId 时会切到那个会话
  • 接口只监听回环地址,不需要登录;enabled: false 只关 osascript 兜底,不影响接口

已知限制

  • Windows:点通知会切到对应会话,但窗口不一定到前台——AppUserModelID 和主进程 focus 通道属于桌面端,渲染层插件做不到
  • 通知归属:系统通知中心里显示为 DeepSeek Harness(用的是渲染层原生通知)
  • 宿主半边(index.js,osascript 兜底)默认关闭;只有渲染层拿不到 Notification 时才需要打开

开发

node test/client.test.mjs      # 渲染层:文案、小红点、点击链路
node test/host.test.mjs        # 宿主兜底:dryRun 下的事件处理

协议

MIT · 仓库 https://github.com/chendaleiQ/dsh-plugin-desktop-notify

Похожие плагины