前端失焦时把决策、授权、中断与完成推送到 Windows 通知中心
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add CarbonZhao-02692/dsh-desktop-notify该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · desktop
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 16 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 17 处,展示前 17 条)
- 读取本地文件lib/index.js:124
const saved = JSON.parse(readFileSync(configFile, 'utf8')) - 写入本地文件lib/index.js:130
mkdirSync(dirname(logFile), { recursive: true }) - 写入本地文件lib/index.js:131
appendFileSync(logFile, '[' + new Date().toISOString() + '] ' + message + '\n') - 执行外部命令固定命令lib/index.js:185
execFileSync('reg.exe', ['add', base, '/ve', '/t', 'REG_SZ', '/d', 'URL:DSH Desktop Notify', '/f'], { stdio: 'ignore', windowsHide: true }) - 执行外部命令固定命令lib/index.js:186
execFileSync('reg.exe', ['add', base, '/v', 'URL Protocol', '/t', 'REG_SZ', '/d', '', '/f'], { stdio: 'ignore', windowsHide: true }) - 执行外部命令固定命令lib/index.js:187
execFileSync('reg.exe', ['add', base + '\\shell\\open\\command', '/ve', '/t', 'REG_SZ', '/d', command, '/f'], { stdio: 'ignore', windowsHide: true }) - 执行外部命令固定命令lib/index.js:259
const child = spawn( - 写入本地文件lib/index.js:287
writeFileSync(cardJobFile, JSON.stringify(cardJob), 'utf8') - 写入本地文件lib/index.js:303
writeFileSync(toastJobFile, JSON.stringify(toastJob), 'utf8') - 写入本地文件lib/index.js:389
mkdirSync(dirname(configFile), { recursive: true }) - 写入本地文件lib/index.js:390
writeFileSync(configFile, JSON.stringify({ enableCard: cfg.enableCard }, null, 2), 'utf8') - 发起网络请求lib/client.js:34
fetch('/dsh-desktop-notify/status', { cache: 'no-store' }) - 发起网络请求lib/client.js:40
fetch('/dsh-desktop-notify/config', { cache: 'no-store' }) - 发起网络请求lib/client.js:58
fetch('/dsh-desktop-notify/config', { - 发起网络请求lib/client.js:74
fetch('/dsh-desktop-notify/test', { - 发起网络请求lib/client.js:159
fetch(path, { - 发起网络请求lib/client.js:246
fetch('/dsh-desktop-notify/activation?id=' + encodeURIComponent(clientId), { cache: 'no-store' })
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 桌面通知:所有前端失焦时把决策 / 授权 / 中断 / 完成发到 Windows 通知中心;点击复用已有页面切回对话。
README
由 DeepSeek 最新模型翻译生成dsh-desktop-notify
所有 DSH 前端都失焦时,把「需要你决策 / 需要你授权 / 意外中断 / 任务完成」发到 Windows 通知中心;通知标题是会话标题,点击通知复用已打开的 DSH 页面切回对应对话。
Windows 通知截图
安装
dsh plugin --profile web add github:CarbonZhao-02692/dsh-desktop-notify
重启 dsh web,然后硬刷新页面(Ctrl+Shift+R)。插件目前未发布 NPM 包,所以用 github: 源码安装;发布 NPM 后可直接用包名一键安装。
能力分类
界面与体验。
展开完整文档(README 剩余 1 节)
dsh-desktop-notify
所有 DSH 前端都失焦时,把「需要你决策 / 需要你授权 / 意外中断 / 任务完成」发到 Windows 通知中心;通知标题是会话标题,点击通知复用已打开的 DSH 页面切回对应对话。
Windows 通知截图
安装
dsh plugin --profile web add github:CarbonZhao-02692/dsh-desktop-notify
重启 dsh web,然后硬刷新页面(Ctrl+Shift+R)。插件目前未发布 NPM 包,所以用 github: 源码安装;发布 NPM 后可直接用包名一键安装。
能力分类
界面与体验。
它能做什么
| 事件 | 触发点 | 通知内容 |
| 需要你选择决策 | user-questions/request(含方案确认 plan-review) | 需要你选择决策:<问题> |
| 需要你授权 | approval/request | 需要你授权:<工具名> — <原因> |
| 意外中断,请重试 | turn/end reason=error / interrupted / max-tokens,以及 api-session/error | 任务意外中断:<错误>,请重试 |
| 任务已完成 | turn/end reason=completed | 任务已完成(用时 X) |
通知标题取自对应会话的标题(sessionTitle 服务折叠出的标题);标题还没生成时回退到该会话第一条用户消息。通知正文是对应提示。
焦点判定:所有 DSH 前端都失焦
每个 DSH 页面每 3 秒向 /dsh-desktop-notify/focus 上报:
{ "id": "页面 id", "focused": true, "visible": true }
focused = document.visibilityState === 'visible' && document.hasFocus()。浏览器窗口失焦、切到其他标签页、焦点在地址栏,都会使 focused 为 false。
host 的门控只有一条:
- 任意一个页面 focused=true → 不是“所有前端失焦”,静默不发。
- 所有已上报页面 focused=false → 发通知。
- 页面关闭时通过 sendBeacon 上报 closed: true,立即从汇总移除。
- 后台标签页的定时器可能被浏览器节流,所以 3 分钟内没有心跳才按已关闭处理;所有页面都关闭时视为“全部失焦”。
visible 只用于状态展示,不参与门控。
通知模式与点击回到对话
配置项 enableCard 决定通知形态:
enableCard: false(默认)
只显示正常的 Windows toast,不显示自绘卡片:
1. toast 带 activationType="protocol" 和 launch="dsh-desktop-notify://open?session=<id>&origin=<origin>";Windows 调用协议 helper assets/open.ps1。
2. 同时启动 assets/toast-listener.ps1,在隐藏 PowerShell 进程里保持 ToastNotification 存活;如果 Activated 事件被投递,也会调用同一个 helper。
3. helper 把会话 id POST 到 host 的 /dsh-desktop-notify/activate,用 ShowWindow / SetForegroundWindow 恢复并置前 Edge/Chrome 窗口(只有最小化时才 SW_RESTORE,最大化保持不变)。
4. helper 通过 UI Automation 把标题匹配的 DSH 标签页切到前台;已打开的 DSH 页面每秒轮询 /dsh-desktop-notify/activation,收到后调用 uiWorkspace.openSession(sessionId)。
5. host 只把请求投递给用户最后使用的那个页面,多标签不会一起跳。
enableCard: true
只显示右下角原生 WPF 卡片,不发送任何 Windows toast:
1. host 启动 assets/notify-card.ps1,显示应用名、鲸鱼图标、会话标题和正文,不抢焦点,20 秒后自动关闭。
2. 点击卡片调用 assets/open.ps1,后续的激活、窗口恢复、标签页切换与上面相同。
3. 不使用浏览器通知;通知中心不会留下记录。
没有页面时的兜底:如果 host 发现没有任何已连接的 DSH 页面,会让 helper 在默认浏览器打开一个引导页;引导页把会话 id 写入 localStorage 并跳回 DSH,新页面加载后自动打开对应对话。
设置页与测试
DSH 设置 → 通用 → 桌面通知:
- 显示当前上报页面数和焦点汇总状态(有前端聚焦 = 静默中 / 全部失焦 = 会通知)。
- “发送测试通知”按钮:强制发一条 Windows toast,忽略焦点门控,用来验证通知权限、应用名、图标与点击行为。
也可以直接调用 HTTP 接口:
查看焦点状态与最近通知 Invoke-WebRequest -UseBasicParsing http://127.0.0.1:3080/dsh-desktop-notify/status
强制发一条测试通知(force 忽略焦点门控;带 sessionId 时点击会回到该对话) $body = @{ kind='complete'; force=$true; sessionId='session-...'; body='测试通知' } | ConvertTo-Json -Compress Invoke-WebRequest -UseBasicParsing -Method POST -ContentType 'application/json'
-Body ([Text.Encoding]::UTF8.GetBytes($body))
http://127.0.0.1:3080/dsh-desktop-notify/test
配置
默认值在 lib/index.js 的 DEFAULTS 里;通过 loader 行的 config 覆盖:
- id: dsh-desktop-notify
name: '@dsh-external/dsh-desktop-notify'
config:
onlyWhenUnfocused: true # false = 页面聚焦时也发 clickToOpen: true # false = 通知不可点击回会话 enableCard: false # true = 仅自绘卡片;false = 仅普通 Windows toast ignoreSubagent: true # 后台子代理会话不提醒 notifyOnDecision: true notifyOnApproval: true notifyOnInterruption: true notifyOnComplete: true minTurnDurationMs: 0 # 完成提醒的最短轮次时长(毫秒) toastAppId: 'DeepSeek.DSH.Notify' toastAppName: 'Deepseek Harness Notification' toastIconPath: '' # 默认 assets/deepseek-harness.png toastAppIconPath: '' # 默认 assets/deepseek-harness.ico
兼容与运行要求
- DSH web 配置档;实测 0.2.1-rc.2(当前 checkout)。
- Windows 10 / 11,Windows PowerShell 5.1(WinRT toast)。
- Node.js >= 20。
- 页面必须保持打开才能上报焦点;没有页面时点击通知会走兜底新开页。
- 浏览器 / DSH Desktop 需要允许 Windows 通知;系统「专注助手」可能拦截。
- 仅实现 Windows toast;其他平台只写日志、不发通知。
权限与外部服务
- 写入 HKCU\Software\Classes\dsh-desktop-notify(自定义协议 helper)。
- 写入 HKCU\Software\Classes\AppUserModelId\DeepSeek.DSH.Notify(应用名与图标)。
- toast 模式会注册 HKCU\Software\Classes\dsh-desktop-notify 协议;卡片模式不发送 toast,也不注册协议。
- 通过 powershell.exe 显示 toast 或卡片,并在临时目录写一个 .ps1 脚本。
- helper 使用 Windows UI Automation 查找并切换浏览器标签页(不需要管理员权限)。
- 本机 HTTP 路由:/focus、/status、/test、/activate、/activation、/open;其中 /activate 和 /open 只接受 loopback 请求,/open 还需要每次进程随机生成的密钥。
- 没有外部服务、没有上传、没有网络请求(除本机 DSH 地址)。
真实输出
toast 模式(enableCard: false)
<toast activationType="protocol" launch="dsh-desktop-notify://open?session=session-...&origin=http%3A%2F%2F127.0.0.1%3A3080">
<visual><binding template="ToastGeneric">
<text>示例会话标题</text> <text>点击通知应回到对应对话</text> <image placement="appLogoOverride" src="file:///.../assets/deepseek-harness.png"/> </binding></visual>
</toast>
卡片模式(enableCard: true)
shown
clicked
start uri=dsh-desktop-notify://open?session=session-...
activate hwnd=... minimized=False maximized=True foreground=True
tab selected: 示例会话标题 — DeepSeek Harness ... activation queued session=session-... target=dsh-... live=1 activation delivered session=session-... client=dsh-...
已知限制
- 后台子代理会话默认不提醒(它们的完成由主对话那一轮覆盖)。
- enableCard: false 时通知中心里的 toast 点击是否触发协议/Activated 取决于 Windows 环境;当前这台 Windows 10 上两者都未触发。
- enableCard: true 时可点击的是右下角原生卡片;卡片 20 秒后自动关闭。
- 窗口恢复/置前对 Edge/Chrome 使用 Win32 ShowWindow + SetForegroundWindow;只有最小化时才 SW_RESTORE,最大化窗口保持最大化。系统前台锁定、虚拟桌面切换等极端情况仍可能失败。
- 标签页切换 / 窗口激活目前针对 Edge / Chrome;DSH 在 Firefox 中时不会自动切回该标签页。
- 标签页切换按标题匹配;多个标签页标题相同时,可能选中同标题的另一个 DSH 标签页(仍会落在对应会话)。
- helper 日志:%TEMP%\dsh-desktop-notify-helper.log;卡片日志:%TEMP%\dsh-desktop-notify-card.log;toast listener 日志:%TEMP%\dsh-desktop-notify-toast.log。
- Windows 可能缓存 AUMID 的应用名/图标;重启 Explorer 或清空通知历史后会刷新。
开发
插件是纯 ESM/CJS JavaScript,无构建步骤、无第三方运行时依赖。
- host:lib/index.js
- client:lib/client.js
- 协议 helper:assets/open.ps1
- toast listener:assets/toast-listener.ps1
- 原生通知卡片:assets/notify-card.ps1
- 图标:assets/deepseek-harness.png、assets/deepseek-harness.ico
- 条目:cordis.patch.yml
本地修改后重新加载插件或重启 DSH。
License
MIT。见 LICENSE。
图标来自官方 DSH 前端资源(MIT);DeepSeek Harness 与鲸鱼标识归各自所有者,本插件非官方出品。见 NOTICE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
CarbonZhao-02692/dsh-desktop-notify
前端失焦时把决策、授权、中断与完成推送到 Windows 通知中心
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,111已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,341已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,449已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,532已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,353已汉化DSH
70.2
这是你的仓库?认领条目