dsh-desktop-notify

DSH PLUGIN通知与集成

仓库 guanhaisen/dsh-desktop-notify

通知与集成 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

English | 中文

一句话选型结论

按资料字段整理

dsh-desktop-notify 是通知与集成类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类通知与集成 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-19 创建于 2026-10-17
README 8.7 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:guanhaisen/dsh-desktop-notify
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

通知与集成
字段来自项目仓库与公开索引,中文说明由本站标注

适用场景

通知

上游标签

dsh-plugindsh-plugin-desktopdsh-plugins

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在通知与集成场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-desktop-notify当前 L5 · 运行验证通过 低风险 0 未标注 有
treg L3 · 安装规范通过 低风险 4,976 未标注 无
dsh-purge 未做沙盒验证 未标注 3,412 未标注 有
dsh-im L5 · 运行验证通过 低风险 1,837 0.1.7-rc.2 等 10 个 有
dsh-dafeiyu L5 · 运行验证通过 低风险 425 0.1.7-rc.2 等 10 个 有
dsh-trading L3 · 安装规范通过 低风险 235 未标注 无

仓库档案

通知与集成
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方guanhaisen仓库 dsh-desktop-notify · 默认分支 master
分类通知与集成notify
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-17 · 2026-10-19最后推送 2026-10-17
本站收录2026-10-30首次进入本站目录的时间

README 全文

8.7 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-desktop-notify

English | 中文

给 DeepSeek Harness 加上桌面通知。
会话需要你时弹出 Windows 通知,点一下就能跳回那个会话。

两种触发时机:

触发 何时弹出
需要你介入 Agent 卡在等你授权,或等你回答问题。
跑完了 一个正在运行的会话停了下来,且这一轮至少跑了 minRunMs。

安装

需要桌面端应用。通知这条链路依赖 Electron 运行渲染进程;浏览器标签页没有
AppUserModelID,没身份可挂。

在插件页面里装(不用开终端)

打开 设置 → 插件 → 添加插件,在「包名或地址」输入框里粘下面任一种:

粘什么 什么时候用
github:guanhaisen/dsh-desktop-notify 直接从本仓库装。不需要先发布到 npm。
https://github.com/guanhaisen/dsh-desktop-notify 同上,写成网址形式。
D:\path\to\dsh-desktop-notify 装本机已有的代码目录。必须是绝对路径。

然后点「安装」。插件管理器会在你的 profile 里执行 pnpm add、把 bundle 加进
profile 的清单,通知功能通常不用重启就生效 —— 如果第一枚通知没来,按 Ctrl+R
刷新一下页面。

> 从 git 安装取的是仓库的默认分支。如果你 fork 之后默认分支不是 main,
> 就把完整地址带 ref 粘进去:github:你/dsh-desktop-notify#main。

> 插件页面明确提示:已安装的插件暂不支持自动更新,要升级就卸载后重新安装。
> github: 形式跟随默认分支,所以重装即可拿到新提交。

从命令行装

# 在 DSH 桌面 profile 目录里执行:
#   Windows: %USERPROFILE%\.dsh\profiles\desktop
pnpm add github:guanhaisen/dsh-desktop-notify

或者 link 一份工作副本,改完代码保存即生效:

pnpm add link:/path/to/dsh-desktop-notify

无论哪种方式,包名都必须出现在该目录 package.json 的 bundle 列表里 ——
插件页面会自动加,命令行安装不会:

{
"dsh": {
"profile": {
"bundles": ["...已有的 bundle...", "dsh-desktop-notify"]
}
}
}

> 必须保持 dependencies 为空:pnpm 不会安装被 link 的包自己的依赖,
> 一旦解析失败,Cordis 插件树初始化会整体抛错,DSH 直接起不来。

这些情况下不会弹通知

这一段看起来像 bug,其实是设计:

情况 为什么静默
你正看着那个会话 提示已经在眼前了,再弹是打扰。
这一轮跑得比 minRunMs(20 秒)短 快速回答不值得通知。
开窗时那个会话本来就在跑 首次快照只做基线,否则每次启动都炸一堆通知。
Windows 开了勿扰模式 系统会拦掉横幅。通知仍会进通知中心。

如果这些都不符合、却还是没有通知,去看决策日志 —— 见
验证它真的能用。它把每一次"没弹"连同原因都记下来了,
所以"为什么我没收到通知"是能查的。

为什么这是一个插件,而不是改外壳

最直觉的做法 —— 在 Electron 主进程里加一个 Notification 调用 —— 在这里行不通,
而想清楚为什么,整个设计就出来了。

桌面端 Host 不是 Electron 主进程。 lib/main.js 把它作为一个独立的 Node 子进程
拉起来:

spawn(this.node, ['--expose-internals', entry, ...], { stdio: ['ignore','pipe','pipe','ipc'] })

这个子进程是 Electron 可执行文件以 Node 模式重新进入的,所以 Host 插件里
require('electron') 拿不到 Notification,那个进程也没有 AppUserModelID。
而外壳自己的通知代码(lib/main.js)只用在一件事上:强制更新。

但渲染进程什么都有:

  • dsh-app: 注册时带了 standard: true 和 secure: true,所以窗口是安全上下文 ——
    这是 Web Notification API 的硬性前提。
  • 应用 session 装了权限处理器,对所有非 media 权限直接返回 true。

于是渲染进程里一个普通的 Web Notification,就是一枚真正的 Windows 通知,
且挂在应用自己的身份(electron.app.DeepSeek Harness)下。不用改外壳、不用辅助进程,
应用升级也不会失效。

状态从哪来

不轮询,也不另造一份真相。@deepseek-ai/dsh-client-ui-session 已经在维护的正好就是
这几个事实,并作为 ctx.uiSession.sessionStatus 暴露出来:

Map

数据源是 api-session/status 这个 Remote 事件。本插件只读它。

pendingInteraction 就是这个交互对象本身,它的 kind 是三者之一:

kind 由谁产生 显示的文案
approval @deepseek-ai/dsh-client-ui-approval 某个工具请求越权执行
question @deepseek-ai/dsh-client-ui-user-questions Agent 提了一个问题
plan-review 同上,当问题实际是一份计划时 有份计划等你审阅

它的 key 是用来去重的标识,所以同一个等待被重复上报时不会弹第二次。

文件构成

文件 作用
index.js Host 半。只占住浏览器半绑定的那个 Loader 行。不注册任何东西 —— 没有工具、没有服务、没有路由。
client.js 浏览器半。监听会话状态、判定何时通知、渲染通知、接好点击跳转,并发布 DesktopNotify Inspect provider。
cordis.patch.yml bundle 插入的那一行 Host 记录。
test/watcher.test.mjs 决策逻辑的行为测试,纯 node 就能跑。

配置

在 profile patch 里该插件的那一行设置,或在「插件」页面里改:

键 默认值 含义
notifyOnAttention true 会话卡在等你时通知。
notifyOnComplete true 跑完时通知。
minRunMs 20000 比这短的运行忽略掉。快速回答不值得通知。
sound true 播放系统通知声音。

去重

同一个交互不会重复通知:标识就是交互自己的 key,所以同一个等待被再次上报时保持静默。
开窗后的首次快照被当作基线而不是新消息 —— 这正是避免"一启动就为已在运行的会话
炸出一堆通知"的原因。

验证它真的能用

通知是异步且视觉的,两个半都观测不到操作系统最终渲染出来的那枚通知。
所以浏览器半发布了一个 Cordis Inspect provider DesktopNotify,可以从页面外部查询:

方法 回答什么
status 半挂载了吗?Notification.permission 是什么?是不是安全上下文?跟了哪些会话、从何时开始?
testToast 立刻真弹一条,并报告实际构造出了什么。
decisions 内存里的决策日志 —— 每一条发出去的,以及每一条故意没发的,连同原因。

decisions 就是用来回答"为什么我没收到通知"的:被静默的记录会带
suppressed: 'watched'(你正看着那个会话)或 suppressed: 'too-short'
(跑完时还没到 minRunMs)。

这个日志只在内存里,上限 100 条。它刻意不落盘:一个可能悄悄没出现的文件,
比没有文件更糟。

对着操作系统核实

testToast 返回 delivered: true 只说明 Notification 对象构造出来了。
要确认通知真的到了操作系统,对比 Windows 自己记录的这个应用 AUMID 的时间戳:

$k = 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings\electron.app.DeepSeek Harness'
[DateTime]::FromFileTime([int64](Get-ItemProperty $k).LastNotificationAddedTime)

这个插件就是这么验证的:先静置 12 秒做对照,确认时间戳不动;再每弹一次,确认它前进。

> 提醒一句:时间戳前进只证明通知平台接收了,不等于横幅渲染出来给人看了。
> 完整的验证还得加上人眼确认。我自己踩过这个坑 —— 排查半天,最后发现是勿扰模式。

开发

node --check index.js
node --check client.js
node test/watcher.test.mjs

测试会在假的 __ModuleLoader__ 下加载 client.js,喂给它合成的会话状态变化,
断言哪些通知应该弹、决策日志记了什么。失败时退出码非 0。

约束

dependencies 必须保持为空。 桌面 profile 用 pnpm 的 link: 协议安装这个包,
而 pnpm 不会安装被链接的包自己的依赖。一旦声明依赖,Cordis 插件树初始化时
依赖解析会失败,DSH 就起不来了。

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-desktop-notify 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:guanhaisen/dsh-desktop-notify` 即可。

dsh-desktop-notify 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-desktop-notify 安全吗?

低风险。

dsh-desktop-notify 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-desktop-notify 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

同名或近似条目

8 条
不同作者的仓库分开列,请确认你要装的是哪一个
通知与集成
按星标排序,可作替代方案

treg

treg

Treg 是面向 Agent 工具的 OpenRouter,聚合 60 个提供商的 2896 个端点,按调用计费,统一令牌访问,无需注册各供

L3 · 安装规范通过 4,976 星

dsh-purge

dsh-purge

dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚

未标注验证等级 3,412 星

dsh-im

dsh-im

将IM机器人接入DeepSeek Harness,支持飞书、微信、钉钉等九种渠道,通过扫码或凭据配置,统一管理多机器人连接。

L5 · 运行验证通过 1,837 星

dsh-dafeiyu

dsh-dafeiyu

DSH 大肥鱼是一款由 DeepSeek Harness 真实工作状态驱动的桌面伴侣插件,以始终置顶的透明窗口实时展示 Agent 的思考、

L5 · 运行验证通过 425 星

dsh-trading

dsh-trading

L3 · 安装规范通过 235 星

guanhaisen 的其它插件

2 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。