🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

桌面通知 drydeuterium/dsh-notification

DeepSeek Harness
drydeuterium11 天前有提交已提供中文文档扫描:含敏感能力

在 Windows 弹窗提醒提问、批准与回合完成

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add drydeuterium/dsh-notification
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · security
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 4 处,展示前 4 条)
  • 执行外部命令来自配置/变量
    index.js:152
    const child = spawn(command, args, { stdio: 'ignore', windowsHide: true })
  • 读取本地文件
    index.js:165
    if (existsSync(ICON_PATH)) {
  • 写入本地文件
    index.js:237
    mkdirSync(path.dirname(cfg.logFile), { recursive: true })
  • 写入本地文件
    index.js:238
    appendFileSync(cfg.logFile, `${JSON.stringify({ ts: new Date().toISOString(), ...entry })}\n`)
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 的桌面通知(Windows toast),覆盖提问、审批、回合结束和错误。宿主侧插件,零依赖。

README

由 DeepSeek 最新模型翻译生成
dsh-notification DeepSeek Harness(DSH)的桌面通知插件。即使你在忙别的事,也能通过 Windows 的 Toast 得知「被提问了」「等待批准」「因错误中断」。 Desktop toast notifications for DeepSeek Harness on Windows: waiting questions, approvals, turn completion and errors. Host-side plugin (no client bundle, no browser permission prompt). - 仓库名是 dsh-notification,包名是 dsh-desktop-notify(因为 npm 上已有同名包,所以分开命名)。
展开完整文档(README 剩余 1 节)
dsh-notification

DeepSeek Harness(DSH)的桌面通知插件。即使你在忙别的事,也能通过 Windows 的 Toast 得知「被提问了」「等待批准」「因错误中断」。

Desktop toast notifications for DeepSeek Harness on Windows: waiting questions, approvals, turn completion and errors.
Host-side plugin (no client bundle, no browser permission prompt).

- 仓库名是 dsh-notification,包名是 dsh-desktop-notify(因为 npm 上已有同名包,所以分开命名)。
- 已验证环境:DSH 0.2.1-rc.2 / Windows 11 / 桌面应用(--profile desktop)

能做什么

| 触发时机 | 发出的通知 |
| 模型提问(ask_user_question / exit_plan_mode) | ❓ 有问题 — 会话名与问题内容 |
| 等待工具执行、沙箱提权的批准(approval/asked) | 🔐 等待批准 — 工具名与理由 |
| 回合完成(turn/end 的 completed) | ✅ 响应已完成 — 会话名与响应预览 |
| 错误 / 中断 / 阻塞 / token 上限 | ⚠️ ⏹ ⏸ — 理由与错误内容 |

实际效果(通知中心示例):

❓ 質問がありますデスクトップ通知要望 — 通知センターを開いて、いまの一覧を確認してほしい。

✅ 応答が完了しました Markdown 整形の確認 — 旋回(戻し) +3.4° → −87.5° まで回した。詳細は wpndatabase.db を参照。

特点是运行在宿主侧。 它不走浏览器的 Notification API,所以不需要通知授权弹窗,窗口最小化时、开着别的会话时、藏在任务栏托盘里时都能收到。
子代理的会话默认排除。

安装

GitHub から直接
dsh plugin --profile desktop add github:drydeuterium/dsh-notification

ローカルのチェックアウトから
git clone https://github.com/drydeuterium/dsh-notification
dsh plugin --profile desktop add .\dsh-notification

dsh plugin 会在配置档目录里跑 pnpm,把声明了 dsh.bundle.patch 的包自动加进 dsh.profile.bundles。不需要手动编辑 package.json。

生效(不必重启)

- 应用启动时读取。
- 应用正在运行的话,把同一个包再装一遍就会触发重新构建并生效:

dsh plugin --profile desktop remove dsh-desktop-notify
dsh plugin --profile desktop add github:drydeuterium/dsh-notification

链接目标包里的改动文件会在下次重新构建时替换,不需要重启应用 (已确认宿主 PID 不变)。如果没生效,就重启应用。

确认是否生效

配置了 logFile 的话,启动时会记录一行实际生效的配置:

{"ts":"...","kind":"startup","pid":7376,"shown":false,"config":{"enabled":true,"language":"ja",
"onQuestion":true,"onApproval":true,"onTurnEnd":true,"onError":true,"onAborted":true,
"onBlocked":true,"rootsOnly":true,"sound":true,"longDuration":true}}

如果 kind: "startup" 带着新的时间出现,说明插件在该宿主上正在运行。

配置

在 cordis.patch.yml 里 desktop-notify 那一行的 config 中修改。要在配置档侧覆盖时,在 ~/.dsh/profiles/<profile>/cordis.patch.yml 里加一行相同 id 的配置(匹配到的行会整体替换 config,所以需要的键要全部重写)。

| 键 | 默认值 | 含义 |
| enabled | true | 总开关 |
| language | ja | ja / en |
| onQuestion / onApproval / onTurnEnd / onError / onAborted / onBlocked | true | 各触发项的开关 |
| questionTools | ['ask_user_question', 'exit_plan_mode'] | 视为等待回答的工具名 |
| rootsOnly | true | 排除子代理 |
| preview / bodyChars | true / 180 | 响应预览与正文最大字数 |
| sound / longDuration | true / true | 通知音 / 约 25 秒显示 |
| minIntervalMs | 500 | 抑制相同内容连续通知的间隔 |
| logFile | null | 通知记录位置(JSON Lines)。调试用 |

例:只停掉完成通知,只保留提问和等待批准

- id: desktop-notify
name: dsh-desktop-notify
config:
onTurnEnd: false
config 会整体替换,注意这一点。上面的例子里,其他键都会回到默认值。

验证(复现步骤)

按顺序排查。

1. 不经过 DSH,先确认到 OS 的链路

powershell.exe -NoProfile -ExecutionPolicy Bypass -File tools\toast-check.ps1
python tools/wpn-history.py

弹出 toast,并且 wpn-history.py 里列出 DeepSeekHarness.DesktopNotify 的处理程序和对应通知,说明 OS 侧链路正常。

2. 通过插件确认

让 DSH 提问,会出现 ❓。不出现就跳到 3。

通知记录(设置了 logFile 时) Get-Content "$env:USERPROFILE\.dsh\logs\desktop-notify.jsonl" -Tail 5

如果留下 "kind":"question" "shown":true,说明插件在工作。

3. 用 DB 确认是否注册到 OS

这是排查「PowerShell 明明成功却看不到」最可靠的方法。
Windows 会把通知记录到 %LOCALAPPDATA%\Microsoft\Windows\Notifications\wpndatabase.db (SQLite)。

python tools/wpn-history.py --limit 30
python tools/wpn-history.py --search "本文の一部" # 一覧から消えていても WAL に残っていれば FOUND

--search 找不到时退出码为 1。即使 toast 投递成功,只要没注册,就怀疑是 docs/detached-spawn.md 里的症状。

4. 还是不出现时

| 症状 | 查看位置 |
| 什么都不出现 / 列表里也没有 | wpn-history.py 开头输出的 SHQueryUserNotificationState 是否为 5 (ACCEPTS_NOTIFICATIONS)。若是 6 (QUIET_TIME),说明处于专注模式 |
| 通知中心里有,但不弹横幅 | 专注模式、通知设置、全屏 |
| 没有应用名或图标 | HKCU\Software\Classes\AppUserModelId\DeepSeekHarness.DesktopNotify 的 DisplayName / IconUri |
| 响两次 | 见下方「已知的坑」 |

工作原理

只订阅一个 session/event。不改写会话日志,也不增加模型可见的工具和提示词。

| 事件 | 用途 |
| tool/call | name 为 ask_user_question / exit_plan_mode 时显示 ❓ |
| approval/asked | 等待批准。正文里放工具名和原因 |
| turn/end | 按 reason.kind 区分显示 完成 / 错误 / 中断 / 阻塞 / token 上限 |
| session/title | 正文里显示的会话名 |
| assistant/message | 附在完成通知里的回复预览(去掉 Markdown 装饰) |

订阅用 ctx.on('session/event', handler, { global: true })。session.header.origin === 'subagent' 的会话用 rootsOnly 排除。

通知通过 child_process.spawn 启动 Windows PowerShell,再用 WinRT 的 ToastNotificationManager 显示 ToastGeneric 模板。零依赖包。
日文把 XML 用 base64、脚本用 -EncodedCommand(UTF-16LE)传递,所以不会乱码。

子进程不要用 detached: true 启动。 detached 时 Show() 看起来成功了,通知却完全没注册到 OS(实测。docs/detached-spawn.md)。

toast 的应用 identity 是 DeepSeekHarness.DesktopNotify。首次会向 HKCU\Software\Classes\AppUserModelId\... 注册 DisplayName 和 IconUri,所以通知会带上「DeepSeek Harness」和图标。

已知的坑

- detached: true — 如上所述,通知送不到。用 tools/detached-repro.mjs --verify 可以复现。
- 和其他通知插件重复通知 — 比如 dsh-pet 会在窗口失焦时通知「对话完成 / 生成失败 / 权限申请 / 用户选择」。
如果完成通知重复,把这边设为 onTurnEnd: false,或者关掉对方的通知。装了多个宿主侧插件时同理。
- 点击通知无法打开会话 — toast 只负责显示。想点击跳转,需要在客户端侧(浏览器 Notification API)实现。
- 正文最多 2 行 — 过长的预览会在通知中心被截断。用 bodyChars 调整。

限制

- 仅限 Windows(process.platform !== 'win32' 时输出警告日志,不做任何事)。
- 通知中心的历史和显示方式由 OS 管理。遵循专注模式和关闭通知的设置。
- 通知音固定为 ms-winsoundevent:Notification.Default。

卸载

dsh plugin --profile desktop remove dsh-desktop-notify

如果要连注册的应用 identity 一起删除: powershell reg delete HKCU\Software\Classes\AppUserModelId\DeepSeekHarness.DesktopNotify /f

仓库结构

index.js プラグイン本体(apply(ctx, config) / 依存ゼロ) cordis.patch.yml バンドル層。行 desktop-notify を挿入する package.json dsh.bundle.patch と表示メタデータ
locale/{ja,en}.json プラグイン一覧に出す title / description
icon.png トーストとプラグイン一覧のアイコン docs/detached-spawn.md detached で届かない件の実測メモ tools/toast-check.ps1 DSH を介さずトーストを 1 件出す tools/wpn-history.py OS の通知 DB を読む(登録されたかの判定) tools/detached-repro.mjs detached の再現実験

许可证

MIT
预览分享卡片长什么样 ↓drydeuterium/dsh-notification
分享 · DeepSeek Harness Hub
drydeuterium/dsh-notification

在 Windows 弹窗提醒提问、批准与回合完成

回到顶部