
项目地址https://github.com/hawkongz/dsh-task-reminder平台DeepSeek HarnessDSH Web协议MIT运行时依赖零背景任务跑完了唯一的信号是运行灯灭了DeepSeek Harness 里 Agent 一个回合常要跑几分钟。这期间你切到别的窗口处理别的事任务停止的唯一信号是会话列表里的运行指示灯灭了。这个信号有三个盲区一是不区分正常完成与中途报错二是 Agent 因ask_user_question挂起等你回答时同样是灯灭——你不切回去它就一直等三是你不在浏览器前屏幕上的任何变化都看不见。插件效果dsh-task-reminder 是一个纯浏览器端插件宿主半侧index.js是一个空的apply() {}运行时零依赖宿主只把它作为客户端插件发给页面。任务停止时它做两件事发一条Windows 系统弹窗Web Notification——操作系统右下角的原生通知浏览器退到后台也看得到点击它窗口回前台并打开对应会话并响一声 Web Audio 合成的提示音。弹窗时机二选一任何情况都弹每次停止都提醒不管窗口是否在前台或仅非前台窗口切走标签页或浏览器窗口失焦时才提醒。没有应用内卡片——系统弹窗是唯一的视觉通道。三种停止原因全覆盖任务完成、等你回答Agent 阻塞在ask_user_question/ 计划评审、出错停止api-session/error——任何让回合失败的错误网关 HTTP 错误如 400 / 401 / 429 / 500 / 502、服务商故障、连接失败。工作原理三条检测通道与一次一报、错误优先检测用三条通道宿主转发事件api-session/status、官方会话列表自身的running位、uiSession.sessionStatus快照里的running位与侧边栏运行指示灯同源fork 子会话的列表投影陈旧时这条路仍可靠。三条通道共用一张边沿表一次完成绝不会提醒两遍分类在途时的重复边沿另由在途守卫与完成→完成去重双兜底。分类保证一次停止只报一次错误优先。停止到达时插件读会话持久日志里最后一条turn/end的 reasoncompleted含max-tokens截断报完成error只报错误、正文取网关原文绝不出现完成弹窗取消aborted不报。读取时同时取最后一条turn/start——最新回合未闭合时读到的是上一回合的turn/end重试等它落盘所以点「停止」不会被误报成任务完成。分类不可用时完成弹窗先发5 秒内后到的同一停止的错误会撤回它只留错误。提示音与弹窗在同一次处理里发出且提示音不管窗口在不在前台每次停止都响。设置项一览独立设置页设置 → 任务提醒。五个设置项全部持久化在浏览器本地存储重启后仍在。设置项默认持久化键系统弹窗开dsh.task-reminder.notify弹窗时机任何情况都弹 / 仅非前台窗口任何情况都弹dsh.task-reminder.notify-mode完成提示音开dsh.task-reminder.sound提示音音效四种两声·经典dsh.task-reminder.sound-choice提示音音量0–10080dsh.task-reminder.volume「恢复默认」一键写回上表默认值。四种音效两声经典 / 三声上扬 / 上升琶音 / 圆润三角波点选即按当前音量发声没有单独的试听按钮。浏览器控制台另有两个排障钩子// 前台状态、五个配置、通知权限、三条通道计数、重复抑制次数、最近几条停止 __dshTaskReminder.state() // 立刻发一条任务完成弹窗并放一声不等任务停止 __dshTaskReminder.test()安装步骤前置条件跑着webprofile 的 DSHdsh web、PATH上有 pnpmdsh plugin会把参数转给它、Node.js 20 或更新跑自检用dsh plugin --profile web add hawkongz/dsh-task-reminder一条命令同时完成两件事把包装进 profile 目录并把它追加进 profile 的dsh.profile.bundles——不需要单独登记。想跟 GitHub 仓库最新代码可换github:hawkongz/dsh-task-reminder带#tag钉某个发布标签。本包不带构建脚本pnpm 不会拦安装。然后重启宿主并硬刷新浏览器宿主只在进程启动时读客户端产物浏览器又会缓存旧 bundle两步都省不掉dsh web验证登记dsh --profile web --dump-config | Select-String task-reminder打开「设置 → 任务提醒」页面在插件就活了。首次加载浏览器会弹一次通知权限申请选「允许」即可权限按 Origin 共享本站点授权一次所有插件通用。自检不需要浏览器node test/verify-client.mjs用桩服务跑浏览器半侧断言模块身份、接线、边沿判定、三条通道去重与重复边沿抑制、未闭合回合不误报完成、两种弹窗时机、三种停止原因与分类对账、每种音效的振荡器参数、通知权限路径等全部路径。排障弹窗不响怎么办按从便宜到贵的顺序查链路控制台执行__dshTaskReminder.state()notificationSupported必须为true、notificationPermission必须为granted且每次完成后stats.notifications要往上加。计数在动说明浏览器已接受 toast丢失在系统展示层不是插件的问题。权限还是default点设置页「系统弹窗」行下的「申请通知权限」按钮再选「允许」是denied去浏览器地址栏的站点权限里放行通知再点一次那个按钮。浏览器收了但屏幕上没有那是 Windows 在压浏览器 toast。查「设置 → 系统 → 通知」总开关和浏览器这一项的应用开关、专注助手设为「关」仅优先级会压掉普通 toast并按Win N打开通知中心看看。十秒隔离测试页面控制台执行new Notification(DSH test, { body: 能看到我吗 })。这条也不显示就是 Windows / 浏览器在压任何插件代码都绕不过。提示音没声音量可能为 0、标签页可能被静音、或自动播放策略在首次交互前挂起了 AudioContext——在页面里点一下或按个键即可。一个浏览会话的第一声可能慢几秒Chrome 首次音频渲染要启动系统音频设备且只允许从用户手势触发打开页面后先在页面里点一下可预热之后提示音即时。项目地址https://github.com/hawkongz/dsh-task-reminder — MIT 协议欢迎 Star / Issue。