dsh-plugin-completion-notify
已验证dsh-plugin-completion-notify · v0.6.2 · MIT · Web 界面
Desktop notifications for dsh web: when a session finishes, or a popup is waiting for your approval, plan review, or answer, while you are not looking at it
安装
dsh plugin add dsh-plugin-completion-notify 用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。
源码
发布到 npm 但没有公开仓库。安装前请检查包内容。
标签
作者
说明文档
dsh-plugin-completion-notify
任务完成、或弹窗等待用户确认时弹出系统桌面通知的 dsh web 插件(dsh-plugin 社区插件)。
功能
- 非当前会话完成 → 弹出系统通知(无论页面在前台还是后台)
- 当前会话在后台完成(用户切走/最小化,
document.hidden)→ 弹出系统通知 - 当前会话在前台完成 → 不打扰(你看得到)
- 弹窗等待用户处理时也通知,规则与完成时一致:
- 审批(工具/权限等执行确认)、计划审阅(计划批准)、提问(等待回答)都会触发;正文按类型区分(「等待审批 / 计划待审 / 等待回答」)
- 信号来自会话 UI 层的 ui-session pending-interactions feed(会话弹窗注册的会话级等待);非当前会话出现等待弹窗 → 弹出系统通知(无论页面前后台)
- 当前会话的弹窗在页面后台打开 → 弹出系统通知;前台打开则不打扰(弹窗已在你眼前)
- 同一等待只通知一次;等待被应答/会话移除后再次等待可再通知
- General 设置页提供启用开关(默认开启,一个开关同时管完成与等待确认通知)
- 权限在用户首次交互或开启开关时请求(浏览器要求手势)
- 通知显示时长由系统设置控制(设置行内已写明入口),插件不做强制常驻,见已知限制
依赖
peer 依赖(npm 已发布):
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-settings(host 半注册 settings 命名空间)@deepseek-ai/schemastery(host 半 settings schema)react
构建
pnpm install
pnpm run build
产物:lib/index.js(host 半,注册 ui-completion-notify settings 命名空间)、lib/client.js(浏览器半)。
安装
插件是 dsh.bundle 形态(声明配置层),一条命令即可安装进 profile:
dsh plugin --profile web add dsh-plugin-completion-notify
dsh plugin add 自动把包加入 dsh.profile.bundles 配置层并安装依赖。完成后重启 profile 生效:
dsh web # 或 dsh --profile <name>
手动挂载(不通过 dsh plugin add)时在 profile 的 cordis.patch.yml 加:
- insert:
- id: completion-notify
name: dsh-plugin-completion-notify
发布
npm publish
GitHub 仓库添加 dsh-plugin 话题。
已知限制
- 浏览器通知权限必须授予:首次交互时请求;被拒则静默
- 通知显示的时长由系统控制,插件不强制常驻:Notifications API 没有时长参数。Windows 默认仅约 5 秒,可在「设置 → 辅助功能 → 视觉效果 → 在以下时间后关闭通知」调长(等价注册表值
HKCU\Control Panel\Accessibility\MessageDuration,本机实测为 5);macOS 在「系统设置 → 通知 → 浏览器」把提醒样式设为「提醒」即可保持到手动处理。系统的"勿扰/专注助手"也可能抑制横幅 - 页面关闭后无通知(无 service worker push);页面级通知在页面关闭/刷新后即消失,无法跨页面常驻
- 去重是页面生命周期内的内存态:刷新后,仍处于「已完成」或「等待确认」状态的会话可能补弹一次
- 断线重连可能补弹一次:等待 feed 在重连/会话卸载时清空并由会话重建,无法区分「新等待」与「仍在等待的重现」
- 等待通知在出现时判定一次:当前会话的弹窗若在前台出现(未通知),之后切到后台不会补发——与完成通知的规则一致
- 等待信号依赖 ui-session pending 交互 feed(当前 dsh web 架构):运行时没有该 feed 的版本会自动退化为只保留完成通知