中文EN

@hawkongz/dsh-task-reminder

notify已测通过npmMIT

对话任务停止时弹一条 Windows 通知并响一声提示音:完成、等你审批或回答、出错都会提醒。点通知回到那个会话,落在你上次提问的位置;桌面端还会把窗口拉到前台。

下载量 / Downloads
1,587
依赖体积 / node_modules
1.16 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add @hawkongz/dsh-task-reminder

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

<div align="center">

<h1>dsh-task-reminder</h1>

<p>任务跑完了,不用再盯着侧边栏那盏灯<br/>DeepSeek Harness(Web 与桌面端)的对话任务提醒:一条 Windows 系统弹窗 + 一声提示音</p>

![License: MIT](LICENSE)

![Platform](https://github.com/deepseek-ai)

![Stars](https://github.com/hawkongz/dsh-task-reminder/stargazers)

![npm](https://www.npmjs.com/package/@hawkongz/dsh-task-reminder)

![下载量](https://www.npmjs.com/package/@hawkongz/dsh-task-reminder)

![Awesome DSH Plugin](https://awesome-dsh-plugin.com/p/hawkongz/dsh-task-reminder/)

![](https://github.com/deepseek-ai/deepseek-harness)

<p><strong>语言:</strong> 简体中文 | <a href="README.en.md">English</a></p>

</div>


目录

  • [这是什么](#这是什么)
  • [30 秒上手](#30-秒上手)
  • [你会看到什么](#你会看到什么)
  • [设置一览](#设置一览)
  • [桌面端(DSH Desktop)](#桌面端dsh-desktop)
  • [常见问题](#常见问题)
  • [进阶](#进阶)
  • [安装细节](#安装细节)
  • [开发与相关文档](#开发与相关文档)
  • [许可证](#许可证)

这是什么

Agent 在 DeepSeek Harness 里跑一个回合常常要好几分钟。这期间你切去别的窗口做事,任务停止的唯一信号就是侧边栏里那盏运行灯灭了——而它不告诉你任务是好端端跑完、还是出错停了;更不会告诉你Agent 正卡在一个问题上等你回答,你不切回去,它就一直在那儿等。

这个插件把这一刻变成一条真正的提醒:任务一停止,立刻发一条 Windows 系统弹窗(就是操作系统右下角的原生通知,浏览器退到后台也看得见),同时响一声合成提示音。点一下弹窗就回到那个会话,并落在你这次提问的位置——接着往下读就行。

三种停止原因都覆盖,而且一次停止只提醒一次、错误优先:完成通知不会和出错通知打架,你手点的「停止」也不会被误报成「任务完成」。所有设置都在自己的设置页里,改完自动保存,重启后仍在。

零运行时依赖:提醒逻辑全部跑在浏览器半侧,宿主半侧只多做两件页面做不到的事(桌面端点通知把窗口拉回前台、以及设置页里的检查更新)。为什么要这样做、边界情况怎么处理,写在 [docs/how-it-works.md](docs/how-it-works.md)。

30 秒上手

需要什么: 跑着 web profile 的 DeepSeek Harness(dsh web)、PATH 上有 pnpm(dsh plugin 会把参数转给它)、一个能硬刷新的浏览器。桌面端不走命令行、也不需要 pnpm——见下面「桌面端」一段。

第一步:装

# Windows(PowerShell),任意目录执行
dsh plugin --profile web add @hawkongz/dsh-task-reminder
# macOS / Linux
dsh plugin --profile web add @hawkongz/dsh-task-reminder

第二步:重启宿主,再硬刷新浏览器

dsh web

改过插件之后这两步都省不掉:宿主只在启动时读插件,浏览器又会缓存旧文件。

第三步:允许通知

打开「设置 → 任务提醒」——页面在,插件就活了。首次装载浏览器会问一次通知权限,选允许;当时错过了也不要紧,点「系统弹窗」这一行下面的申请通知权限按钮可以再问一次。

随便找个会话跑个任务,等着收提醒就行:默认「任何情况都弹」,哪怕你正盯着对话窗口,通知也会出现。

桌面端(DSH Desktop):侧栏 插件 → 添加插件,把 @hawkongz/dsh-task-reminder 填进「包名或地址」,点 安装,然后彻底退出并重开应用。

<sub>侧栏 → 插件 → 添加插件,包名照抄。</sub>

装了 插件市场(dshmarket)也可以直接在市场里搜 dsh-task-reminder 安装,装完同样要重启应用。

你会看到什么

任务完成

标题 对话任务已完成,正文是这个会话的名字。点通知回到会话,落在你这次提问的位置。

<sub>真实弹窗(DSH Desktop,深色主题):应用名、标题、正文都在这一条里。</sub>

Agent 停下来等你

Agent 卡住等你的时候,通知标题会按它等的是什么分开:

它在等你做什么 · 通知标题

批准一个操作 · 审批请求

回答一个问题 · 提问

确认一份方案 · 方案待确认

认不出具体类型 · 等待你的回答

审批通知上直接带「同意 / 拒绝」两个按钮(见下图):点一下就等于审批卡片上的「允许一次 / 拒绝」,不用切回页面;而且在通知上做决定不会把窗口拽到前台。这一条需要浏览器的 Service Worker 支持:普通浏览器在 http://127.0.0.1 与 https 下可用;桌面端(dsh-app://)与局域网 http 用不了,审批通知会退回不带按钮的普通样式,设置页会如实说明。

<sub>真实弹窗(浏览器环境):审批通知带「同意 / 拒绝」,等于审批卡片的「允许一次 / 拒绝」。</sub>

等待类通知在你回答 / 决定之后会自己收掉,不会在通知中心里留下一条点了没反应的陈旧条目。

出错停止

标题 任务出错已停止,正文是网关给的原文(例如 400 Bad Request)。出错的这一次不会再弹一条「任务完成」。

点一下通知

  • 打开对应的会话;
  • 把你这次提问对齐到视口顶部——不是对话底部,这样你接着往下读;
  • 桌面端里,窗口若被最小化或收进了托盘,会先把窗口拉回前台(见[桌面端](#桌面端dsh-desktop))。

提示音

只要这次停止最终判定为要提醒(完成 / 等待 / 出错)就会响,跟你选的通知时机无关:四种现场合成的音效(两声·经典 / 三声上扬 / 上升琶音 / 圆润三角波),或者你自己上传的音频文件。被取消的回合、以及日志还没落盘、等到上限仍判断不了的停止不响。

一次停止只提醒一次

插件读会话自己的日志判断这次停止是完成、出错还是被取消:重复的信号(同一次停止从不同路径报了两次)会被丢掉,被取消的回合不提醒,出错的回合只报错误。日志里本次回合的结束记录还没落盘时,会等它落盘再判断;等到上限仍等不到就不弹不响(宁可漏一次,也不误报成完成);兜底先当成完成、后来发现其实是取消的,会把那条完成通知撤回。判断过程与各种边界情况写在 [docs/how-it-works.md](docs/how-it-works.md)。

设置一览

「设置 → 任务提醒」是一个独立页面:

设置项 · 默认 · 说明

系统弹窗 · 开 · 关掉就只有提示音,不再发系统通知

弹窗时机 · 任何情况都弹 · 另一档是「仅非前台窗口」

通知语言 · 跟随界面 · 只影响通知文案(标题、正文、按钮),设置页永远跟随界面语言

子智能体提醒 · 关 · 子代理的停止默认不打扰你;打开后它们的完成 / 等待 / 出错也会提醒

弹窗一直挂着 · 关 · 打开后横幅不自动收进通知中心,需要你手动点掉

完成提示音 · 开 · 关掉就完全静音

提示音音效 · 两声(经典) · 四种合成音效,外加「自定义」(你自己上传的音频)

自定义音效文件 · 无 · 本机音频,存在你自己的浏览器里,不上传

提示音音量 · 80 · 0–100,0 为静音

恢复默认一键写回上表默认值;你上传的自定义音效文件会保留,要删就在「自定义音效」那一行点清除。

弹窗时机的两档:

  • 任何情况都弹(默认):只要任务停止就弹,不管你是在别的窗口还是正看着对话;
  • 仅非前台窗口:切走了标签页、或者浏览器窗口失焦(人在别的应用里)时才弹。

子智能体提醒为什么默认关:lead 派出去的子代理各自在独立会话里跑,一个回合里很容易连着响好几声,而你真正在等的那个对话还在跑。你盯着的那个会话自己会报完成,所以默认关掉不会漏掉你要的信息;fork 出来的会话照旧提醒。想连子代理一起提醒,把这个开关打开即可。

弹窗一直挂着为什么存在:Windows 上有一个行为——横幅要是没被点过,那个点击可能永远传不到页面,现场表现就是「点了通知什么都没发生」。打开这个开关,横幅一直挂着等你点,点击就必定送得到;代价是每个通知都得你自己收掉。

<sub>真实弹窗:一直挂着的通知不会自己收进通知中心,要你亲手点掉。</sub>

桌面端(DSH Desktop)

桌面端里提醒行为和浏览器里完全一样,只多一件只有主程序做得到的事:点通知时把窗口拉回前台。

页面里的 window.focus() 对已经最小化、或者被收进托盘的窗口无效,所以点通知时页面会请宿主半侧代为触发一次应用自身的「唤起窗口」,把窗口 restore 回前台并聚焦。抢前台时它会确认窗口已经在前台就立刻收手,不会反复抢:成功的那次点击最多打扰 0.7 秒左右,而不是在几秒里一遍遍把你从别的应用里拽回来;窗口本来就在前台时,它连抢都不抢。

装法见 [30 秒上手](#30-秒上手) 的「桌面端」一段:应用内安装,装完彻底退出并重开。

常见问题

通知不弹? 按从便宜到贵的顺序查:

1. 控制台执行 __dshTaskReminder.state():notificationSupported 要是 true、notificationPermission 要是 granted,并且每次完成后 stats.notifications 往上加。计数在动,说明浏览器已经收下了这条通知,丢在系统展示层,不是插件的问题。

2. 权限还是 default:设置页「系统弹窗」行下有申请通知权限按钮,点一次再选允许。已经是 denied 的话,这一档故意不给按钮(不反复骚扰已经拒绝的站点):去浏览器地址栏的站点权限里允许通知即可,权限一变提示就消失;把该站点改回「询问」按钮会重新出现。权限按 Origin 共享,本站点授权一次所有

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:16,最后更新 2026-10-18

链接

GitHub · Homepage · npm

同类插件