dsh-notify

DSH PLUGIN通知与集成

仓库 qgx1992/dsh-notify

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

dsh-notify 是 DeepSeek Harness 的通知显示层插件,在 web 侧渲染全局 toast 栈,订阅桌面壳桥事件,点击可程序化激活会话,无壳时自动降级订阅 sessions store 自绘通知。

一句话选型结论

按资料字段整理

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

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

安装

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

    兼容的 DSH 版本为 0.2.0-rc.2 等 11 个;版本不匹配时安装会报错。

  2. 2
    执行安装命令

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

  3. 3
    确认已挂载

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

  4. 4
    试跑并检查权限

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

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

能做什么

4 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-notify:DeepSeek Harness 的全局 toast 通知显示层插件

  • 全局 toast 通知栈
  • 订阅壳桥事件
  • 点击激活会话
  • 无壳自动降级

适用场景

通知联网搜索

上游标签

deepseek-harnessdsh-plugin

验证等级与安全审查

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

上面的结论来自上游最近一次自动化验证(2026-10-08): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
L5 · 运行已测 ✓ 通过
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 方式:Web 启动
  • L5.3_HTTP_SERVED HTTP 服务响应 方式:HTTP 请求
  • L5.4_PLUGIN_INVENTORY_ACTIVE 插件清单中已激活 方式:插件清单查询
— · 其它检查项
  • L4_0_SANDBOX 沙盒安装判定 方式:沙盒安装执行

风险详情

  • 审查结论 通过
  • 结论说明 vet 静态分析未发现可疑行为,判定为干净(clean)。
  • 风险计数 严重 0 / 高 0 / 中 0
  • 风险详情 未发现严重或警告级问题。

选择建议

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

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。
  • 标注了兼容的 DSH 版本(0.2.0-rc.2 等 11 个),按版本装不容易报错。
  • 列出了 4 项功能,能直接看出它解决什么问题。

先想清楚的地方

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

更适合

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

不太适合

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

同类对比

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

仓库档案

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

README 全文

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

dsh-notify

DSH 通知显示层插件(可插拔通知显示层的 web 侧)
全局右上角 toast 栈,订阅桌面壳 __dshExo 桥事件(对话完成 / 服务事件 / 更新就绪),点击经官方 dsh-client-runtime 的 sessions store 程序化激活会话(替代壳侧 __reactFiber$ DOM hack);无壳时自动降级订阅 sessions store 自绘轮次完成 toast。

> 面向 DSH-Exoskeleton 设计文档 docs/NOTIFICATION-PLUGIN-DESIGN.md §6 实现。壳核分离不破坏:检测逻辑(zstd watcher / 服务健康 / 更新)留在主进程,本插件只负责显示与交互。


1. 解决什么问题

用户问题 本插件对应的解法
通知不弹 / 漏报 桌面壳把事件经 webview 预加载桥(__dshExo)投递给页面内插件 → auto 决策「webview 在线优先」,dev/portable 无 System Toast 时通知仍然在页面内可见
点击跳错会话 / 跳不过去 插件在页面内直接用官方 @deepseek-ai/dsh-client-runtime/client 的 sessions store 程序化选中/打开会话(会话 ID 精确),不再从壳外猜 DOM、不依赖 __reactFiber$
每轮对话都通知,太吵 显示层策略化:聚合窗口、每轮/聚合粒度由壳侧 hub 决定后下发(本插件只渲染);无壳降级时同会话连发原位刷新而非堆积,避免覆盖层通知风暴

2. 架构(两种数据源,运行时互斥)

┌─ 壳桥模式(默认,覆盖式首选)────────────────────────────────────┐
│  DSH-Exoskeleton 主进程 notification-hub(壳侧,P1)              │
│   └─ webviewProvider(P2:WebContentsView 预加载桥 __dshExo)      │
│        │ onEvent(ev)                              send()           │
│        ▼                                                ▲          │
│  ┌─ dsh web 页面 ─────────────────────────────────────────────┐   │
│  │  dsh-notify 插件(本包)                                   │   │
│  │   · 检测到 window.__dshExo → ready() 握手 → 订阅 onEvent    │   │
│  │   · 渲染 toast 栈(按 kind 分级)                          │   │
│  │   · 点击 → ctx.sessions.open(id) 程序化激活                 │   │
│  │          → __dshExo.send('notify:click', …)                │   │
│  └────────────────────────────────────────────────────────────┘   │
└──────────────────────────────────────────────────────────────────┘

┌─ 无壳降级(浏览器直开 dsh web,无 __dshExo)───────────────────┐
│  dsh-notify 插件                                                │
│   · 订阅 ctx.sessions.list,检测 completed 0→1 边缘(= 侧边栏    │
│     绿色 "done":运行中→完成且未选中)                            │
│   · 自绘「对话完成」toast;点击 → ctx.sessions.open(id)          │
│   · 页面内闭环,无 OS 通知                                        │
└────────────────────────────────────────────────────────────────┘
  • 事件是"事实",显示是"策略":本插件只渲染壳/列表喂给它的完成事件,聚合/渠道等策略由壳侧 hub 决策。
  • 桥与降级互斥(有桥绝不再开 sessions 降级),天然无双通道重复。

3. 桥契约(window.__dshExo)

> 壳侧 P2 已落地(src/preload/dsh-view.ts + window-manager.attachDshView 挂 preload +
> notification-hub webview 通道),本契约即当前实现,供壳侧后续维护对齐。

插件只消费最小白名单 API,不依赖任何任意 IPC:

// 壳侧 → 页面(预加载桥 window.__dshExo,经 contextBridge 暴露)
interface DshExoBridge {
/** 订阅壳推送的通知事件,返回取消函数 */
onEvent(cb: (ev: NotificationEvent) => void): () => void
/** 页面 → 壳:点击 / 已读回执 */
send(channel: 'notify:click' | 'notify:seen', payload: { id: string; sessionId?: string }): void
/** 页面 → 壳:握手(插件就绪后才投递,防事件丢失) */
ready(): void
/** 壳版本探针(仅用于日志) */
appInfo(): { version: string }
}

// 通知事件(与设计 §3.1 一致)
type NotificationEventKind =
| 'session-done' | 'service-ready' | 'service-error' | 'service-restarting' | 'update-ready'

interface NotificationEvent {
id: string
kind: NotificationEventKind
title: string
body: string
ts: number
session?: { sessionDir: string; workspace: string; uuid: string; file: string; turn?: number; project?: string; sessionTitle?: string; firstUserText?: string }
service?: { port?: number; error?: string; restartCount?: number }
update?: { version?: string }
actions?: { onClick?: () => void }   // 原生 provider 专用;webview 通道序列化后无回调
}

桥侧交互时序(壳实现参考):

壳 webviewProvider 建桥(preload:sandbox+contextIsolation 暴露 __dshExo)
→ 等页面 __dshExo.ready() 握手
→ 握手后「webview 在线」,auto 决策投向 webview provider
→ view.webContents.send('dsh-notify:event', ev) → preload 转发给 onEvent 订阅者
→ 收到 notify:click → windowManager.show()(会话激活由插件侧 ctx.sessions.open 完成)
→ 收到 notify:seen → hub 记录已读回执(R-26)
未握手不投递(防漏报);握手丢失 → native 兜底。

4. 安装

从包源(npm / GitHub,推荐 —— 任意机器可装)

# npm 源(发布后)
dsh plugin --profile web add dsh-notify
# GitHub 源
dsh plugin --profile web add github:qgx1992/dsh-notify

桌面壳内也可用「插件」面板安装:目录会按 dsh-plugin topic / npm keywords 自动发现,一键安装。

> 已知坑(AGENT.md §7.1):新发布 <24h 时 pnpm 供应链策略可能报
> ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION,把该版本加进 profile 的
> minimumReleaseAgeExclude 白名单即可。

本地开发装法(改源码调试用)

# 因项目路径含空格+中文,link: 直连会在 dsh→pnpm 转发链里被拆坏;
# 用无空格 junction 指向真实目录(改动实时生效,路径移动后需重建 junction)
New-Item -ItemType Junction -Path &quot;$env:USERPROFILE\dsh-notify-link&quot; `
-Target &quot;D:/A-my project/研究agent桌面端/DSH-Exoskeleton/plugins/dsh-notify&quot;
dsh plugin --profile web add link:C:/Users/QIU/dsh-notify-link

装完后:dsh web 重启生效(客户端 bundle 在启动时组合,仅刷页面不生效),
页面刷新即加载 /plugins/dsh-notify/client.js。


5. 行为细节

  • toast 栈:右上角,全局。按 kind 分级:对话完成=信息、服务就绪=成功、服务异常=错误、服务重启=警告、更新就绪=信息(左侧竖色条 + DSW 主题变量,自动适配亮/暗色)。
  • 自动关闭:信息 8s / 成功 6s / 错误与更新 15s / 警告 12s;× 手动关闭;同屏上限 5 条(超出淘汰最旧)。
  • 对话完成 toast:项目「X」· 标题(壳下发 body 原样渲染;无壳降级由插件按 cwd 项目名 + displayTitle 组装)。点击 → ctx.sessions.open(sessionId) 程序化激活 + notify:click 回传。
  • 激活可靠性与防御:open() 前先校验会话 id 是否在列表(unknown id 会 fail loud,避免炸进插件);列表瞬态(phase=pending)下每 500ms 重试至多 4 次;再点可按需复用 byId 精确 id。
  • 已读回执:事件渲染即 notify:seen(壳侧 hub 用以上报投递成功/去重)。
  • i18n:独立 locale NS dsh-notify(zh/en)。data 前缀:data-dsh-notify-*。
  • DOM 纪律:toast 栈是插件自建的 fixed 覆盖容器,绝不搬动 DSH slot 渲染出的节点(搬节点 ↔ 框架重渲染互相触发会导致渲染进程 100% CPU 卡死,见 AGENT.md 已知坑);卸载插件(fiber dispose)整体拆除样式 + 根容器 + 全部 toast。
  • 静默降级:所有异常 try/catch,不向壳/页面抛。

6. 设计验证结论(对应设计文档 §11「待验证清单」)

# 待验证项 结论(本插件取证)
1 dsh-client-runtime 的 sessions store 是否暴露程序化选中/打开会话的 API ✅ 存在。ISessions.open(id: SessionId): void("Select a session as current"),实现 SessionRuntime.open;ctx.sessions 可见(inject &quot;sessions&quot; 后)。§6.3 首选路径可行
2 页面是否容忍注入 __dshExo 全局 插件侧只消费,不注入;__dshExo 命名冲突检测由壳侧 preload 负责(R-27,页面无同名全局时才注入)
4 WebContentsView + sandbox + preload + contextBridge 兼容性 壳侧 P2 阶段验证;本插件按标准 contextBridge 契约实现,无特殊前提
— 覆盖式 toast 渲染安全性 ✅ 与生态先例(dsh-pet)同型:自建 position: fixed 容器 + ``,不搬 slot 节点

无壳降级的"轮次完成"信号:SessionSummary.completed(侧边栏绿色 done 标记,
SessionManager 在 running→idle 且未选中时 arming)。勘察结果见
@deepseek-ai/dsh-client-runtime/lib/types/client/contract/sessions.d.ts 与
sessions/service.d.ts。


7. 与 DSH-Exoskeleton 壳侧协作(P0–P2 已落地,P3/P4 约定)

壳侧已完成(本次同步交付,npm run typecheck / npm test(113 项)通过):

  • P0 ✅:AUMID 对齐(index.ts setAppUserModelId(&#x27;io.dsh.exoskeleton&#x27;),与 electron-builder.yml appId 一致)。
  • P1 ✅:src/main/notification-hub.ts(dispatch / 聚合策略 / Provider 路由 / 投递回执日志 R-26),原 notify.ts 降为 native 内部实现。
  • P2 ✅:src/preload/dsh-view.ts 预加载桥(window.__dshExo 白名单,R-27)+ window-manager.attachDshView 挂 preload + hub webview 通道(在线判定 = view attach && 收到 ready() 握手)+ 三处事件源(session-watcher / index 服务事件 / updater)改走 hub。

约定:webview 通道下,壳收到 notify:click 只需 windowManager.show(),会话激活由插件 ctx.sessions.open() 完成 —— 这是替换 activateSessionInWebUi DOM hack 的关键收益;壳侧 activateSessionInWebUi 保留为 native 通道 / 页面异常时的兜底(actions.onClick 携带)。

P3 / P4(未做,按需后续):把 dsh-notify 加入 RECOMMENDED_PLUGINS 默认预置/推荐;管理面板「设置」页渠道自检 + 通知渠道/粒度/聚合窗口 UI(现状:notifyChannel 默认 auto 已生效,粒度默认 per-turn 保持现状零回归,聚合窗口默认 20000ms,均可在 config.json 手动调整)。


8. 目录结构

plugins/dsh-notify/
├── package.json          # dsh.client.platform=web;dsh.client.inject 留空(不静态注入源码上下文)
├── cordis.patch.yml      # bundle 挂载声明(insert 进 DSH 配置树)
├── lib/
│   ├── index.js          # 宿主(node 侧)入口:纯浏览器插件,无宿主行为
│   └── client.js         # 浏览器 bundle:toast 栈 + 桥订阅 + 程序化激活 + 无壳降级 + i18n
├── README.md             # 本文档
└── LICENSE               # MIT

9. 开发 / 发布

  • 改 lib/client.js 后:node --check lib/client.js 语法校验 → node test/smoke.cjs 冒烟测试(在无浏览器环境用最小 DOM shim 真实执行 apply(),覆盖:bundle 导出形状 / 无壳降级 completed 边缘弹 toast / 程序化激活 / 更新就绪 notify:install / 同事件去重 / 卸载拆除)→ 本地 link: 重装 → 重启 dsh web 实测。
  • 当前默认本地分发:不推 GitHub、不 npm publish。版本语义化(改代码后 bump),README/description 维护好即可。
  • 平台标记:dsh.client.platform = &quot;web&quot;;exports[&#x27;./client&#x27;] 供模块系统组合 /plugins/dsh-notify/client.js。

常见问题

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

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

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

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

dsh-notify 安全吗?

低风险。vet 静态分析未发现可疑行为,判定为干净(clean)。

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

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

dsh-notify 支持哪些 DSH 版本?

上游记录的兼容版本包括 0.2.0-rc.2、0.2.0-rc.1、0.1.7-rc.2、0.1.7-alpha.2、0.1.6-alpha.2、0.1.6-alpha.1、0.1.5-rc.2、0.1.3-alpha.2。版本较多,只列出前 8 个。

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

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

dsh-notify 有哪些功能?

全局 toast 通知栈、订阅壳桥事件、点击激活会话、无壳自动降级。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 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-aurabot-qq

dsh-aurabot-qq

让 DeepSeek Harness 里的 AI 以「大肥鱼」人格住进 QQ,通过 OneBot v11 网关聊天、发表情语音、写空间日记并

未标注验证等级 633 星

dsh-dafeiyu

dsh-dafeiyu

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

L5 · 运行验证通过 425 星

dsh-trading

dsh-trading

L3 · 安装规范通过 235 星

qgx1992 的其它插件

2 个

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