前言¶
用 DeepSeek Harness(DSH)跑长任务时,窗口切到后台或你在别的应用里,智能体跑完一轮、等你审批工具、或任务失败,往往要你自己切回 DSH 才能发现。社区插件 dsh-plugin-desktop-notify(维护者 chendaleiQ,分类:客户端)在 DSH 桌面应用里补上系统级桌面通知,并在 macOS Dock 图标上显示「需要你处理的会话数」;点通知会直接切到对应会话,而不是只把应用叫到前面。下面介绍它的能力、安装方式、偏好项,以及给外部脚本用的本地 HTTP 接口。
这是什么¶
dsh-plugin-desktop-notify 是发布在 npm 上的 DSH 插件(当前版本 0.6.1,MIT 协议)。README 将其描述为:在任务完成、等待你操作、任务失败时提醒你,并为 DeepSeek Harness 桌面应用提供类似 Codex 风格的 macOS 通知与 Dock 未读角标;点击横幅可跳回相关会话。
仓库与目录页:
- GitHub:https://github.com/chendaleiQ/dsh-plugin-desktop-notify
- SkillHub 目录:https://www.skillhub.cn/plugins/chendaleiQ/dsh-plugin-desktop-notify
核心功能¶
插件在渲染层监听会话状态,在以下情况触发提醒(均可通过偏好单独开关):
- 任务完成——包括 DSH 窗口在后台、你在其他应用时。
- 等待你操作——工具审批、提问、执行计划确认等。
- 任务失败——当前轮次出错时提示。
- Dock / 任务栏角标(小红点)——在应用图标上显示需要你处理的会话数量;你看过相关会话后计数清零。
- 点击通知——切到对应会话;带
sessionId时定位到该会话,而非仅激活窗口。
默认 不 对子智能体会话发提醒,可在偏好里改为包含子智能体。正在前台查看的会话默认不弹通知(notifyViewed 默认为 false)。
通知文案跟随 DSH 语言设置(设置 → 通用 → 语言):默认中文,切到英文后通知同步为英文。系统通知中心里显示为 DeepSeek Harness(使用渲染层原生通知)。
安装与启用¶
在 DSH 桌面版 左侧栏打开「插件」→「安装」,填写包名:
dsh-plugin-desktop-notify
安装完成后按 ⌘R 刷新窗口。也可填写 GitHub 地址 https://github.com/chendaleiQ/dsh-plugin-desktop-notify,或本地插件目录的绝对路径。
插件以当前 DSH 进程权限运行;安装前建议在 GitHub 查看源码与 MIT 许可证,确认符合你的环境要求。
偏好设置¶
偏好保存在浏览器 localStorage 键 dsh-plugin-desktop-notify.preferences 中,主要字段如下:
| 字段 | 默认 | 说明 |
|---|---|---|
notifications |
true |
总开关 |
notifyComplete |
true |
任务完成时通知 |
notifyPending |
true |
等待审批 / 回答 / 计划确认时通知 |
notifyError |
true |
任务失败时通知 |
notifyViewed |
false |
正在看的会话也通知(默认跳过) |
badge |
true |
显示小红点 |
excludeSubagents |
true |
忽略子智能体会话 |
titleComplete / titlePending / titleError |
空 | 自定义标题,空则使用内置文案 |
maxBodyChars |
140 |
通知正文长度上限 |
典型用法:排查与外部脚本发通知¶
渲染层自检¶
在 DSH 渲染层打开开发者控制台,可查看平台能力与小黄点状态:
__DSH_DESKTOP_NOTIFY__.capabilities() // 平台、通知权限、小红点、服务可达性
__DSH_DESKTOP_NOTIFY__.state() // 小红点、待处理会话、最近一次通知/点击
__DSH_DESKTOP_NOTIFY__.report() // 上面全部 + 窗口焦点,便于排查
本地 HTTP 接口¶
宿主在 回环地址 上提供两个路由,供脚本、浏览器代理、定时任务调用;实际 URL 写在 ~/.dsh/desktop-notify.endpoint,调用方无需猜测端口。
| 方法 | 路径 | 作用 |
|---|---|---|
POST |
/desktop-notify/request |
发一条通知,body:{"title": "...", "body": "...", "sessionId": "可选"} |
GET |
/desktop-notify/pending |
渲染层取走待显示的通知(脚本一般不用调) |
用 curl 发一条示例通知:
curl -s "$(cat ~/.dsh/desktop-notify.endpoint)" \
-H 'content-type: application/json' \
-d '{"title":"BrowserOS 需要你","body":"有一个接管请求"}'
Python 示例(README 中用于监听 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 时点击会切到该会话。接口只监听回环地址,不需要登录。
适用场景与已知限制¶
适合谁:经常在 DSH 里挂长任务、又需要切到其他应用工作的开发者;希望工具审批、失败告警以系统通知形式送达,并通过角标一眼看到还有多少会话待处理。
已知限制(来自 README):
- Windows:点击通知可以切到对应会话,但窗口不一定被带到前台——
AppUserModelID与主进程 focus 通道属于桌面端能力,渲染层插件无法完全解决。 - 宿主半边(
index.js,osascript 兜底)默认关闭;仅当渲染层拿不到Notification时才需要打开;enabled: false只关 osascript 兜底,不影响上述 HTTP 接口。
DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文仅介绍该社区插件本身的行为与配置。
结尾¶
dsh-plugin-desktop-notify 把「任务完成、待你操作、失败」三类事件接到 macOS 风格桌面通知与 Dock 未读角标上,并支持点击回到具体会话;外部工具还可通过 ~/.dsh/desktop-notify.endpoint 向 DSH 投递通知。需要安装或查 issue 时,见 GitHub 仓库 与 SkillHub 目录页。