TelosmaYLX/dsh-session-notify ↗★ 0
@telosmaylx/dsh-session-notify
DSH session completion notifier: appends a plugin system message to the session log on turn/end and pushes browser notifications (Web Notification + toast), with a fully customizable official settings panel (presets, 5-language templates, cache-hit rate & tok/s from official projections).
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:TelosmaYLX/dsh-session-notify说明文档
阅读完整 README ↗配置
绝大多数配置在 DSH Web UI → 设置 → 插件 → 会话完成提醒 面板完成(保存后点「点击刷新」生效)。仅「触发原因白名单」与「跳过子代理」两项在宿主 cordis.patch.yml 的 config 中配置。
设置面板
面板在官方「设置 → 插件」面板中注册(settings.plugin.item keyed slot,key = session-complete-notify),样式逐值复刻原生插件卡片(12px 圆角、展开收起、旋转 chevron、footer 状态位 + 弃置 ghost + 主色保存按钮):
| 区域 | 内容 |
|---|---|
| 预设 | 下拉选择内置或自定义预设;「新增」把当前配置另存为自定义预设;当前预设可「删除」 |
| 语言 | 5 种语言单选,切换即时重渲染整个面板 |
| 推送方式 | 三选一:双通道(系统通知 + 页内提示,默认)/ 仅系统通知 / 仅页内提示 |
| 推送标题 | 所有原因共用的标题模板(普通输入框,原生占位提示:输入才消失、清空恢复);留空时各原因用默认标题(完成=任务已完成、出错=任务出错、中止=任务已中止、阻塞=任务被阻塞、上限=任务达到输出上限);{title} 引用会话标题(点「+ 会话标题」在光标处插入) |
| 模板 × 5 | 每条结束原因(完成、出错、中止、阻塞、输出上限)独立一个 Chip 编辑器:文字 + 内联信息胶囊,光标处插入、点击移除、实时预览 |
| 跳过子代理会话 | 复选框(保存时一并写入设置文档) |
| 通知权限 | 状态实时显示:已授权(绿)/ 尚未授权(附「请求授权」按钮)/ 已被浏览器屏蔽(附地址栏操作指引)/ 环境不支持 |
| 按原因定制标题 | 折叠区(默认收起):每个结束原因一个独立标题输入框,留空 = 用全局模板或语言默认标题 |
| 保存 | 写入宿主设置文档(language / templates / titleTemplate / titleTemplates / pushMode);保存后显示「点击刷新」链接 |
| 重置 | 一键还原默认值(语言保留当前选择,标题/模板/推送方式恢复默认)并立即保存 |
[!NOTE] 「推送方式」的取舍:
dual(默认)同时弹 Windows 系统通知与页内 toast,toast 是保底通道,防止系统通知被平台静默(专注助手、通知横幅关闭)。但 QQ 浏览器等国产 Chromium 壳浏览器会把Notification渲染成「浏览器内置的页内推送弹窗」(页面顶部/角落的横幅,不经 Windows 通知中心)——此时dual会造成页内两个提示(浏览器内置弹窗 + 插件 toast)。这类浏览器请选「仅页内提示」(不再调用Notification,浏览器内置弹窗不会出现,页内只有插件自己的小 toast);「仅系统通知」模式在 QQ 浏览器无效(它永远渲染为页内弹窗)。设置面板每个原因的「发送」测试按钮同样受此影响。
[!NOTE] 系统通知(
NotificationAPI)能否弹出由浏览器与站点访问方式共同决定:Edge/Chrome 对"不熟悉"的站点会自动屏蔽通知(地址栏出现「通知已屏蔽」)——点击地址栏左侧权限图标 → 网站设置 → 通知 → 允许即可恢复;http://IP这类非安全上下文访问时Notification根本不存在,请改用「仅页内提示」。设置面板「通知权限」区域会实时显示当前状态并给出对应操作指引(可一键请求授权)。Firefox 窗口聚焦时通知显示为页内横幅、失焦才进系统通知中心。
[!NOTE] 面板中「跳过子代理会话」保存的是设置文档里的布尔值;宿主
cordis.patch.yml的config.skipSubagents是其启动默认值,两者任一为真即跳过。
文案模板与占位符
每条结束原因独立一个模板输入框,标签即开关 —— 在模板里插入对应信息标签,该项数据才会显示:
| 占位符 | 含义 | 示例值 |
|---|---|---|
{title} | 会话标题(推送标题模板也可用) | 重构登录模块 |
{duration} | 本轮用时(turn/start 起表 → turn/end 结束) | 3 分 25 秒 / 3m25s |
{usage} | token 消耗(输入 = 未缓存 + 缓存读 + 缓存写) | 1,240 输入 / 3,560 输出 |
{error} | 错误信息(无错误时显示 none;单行化,80 字符截断) | connection timeout |
{cache} | 缓存命中率(官方投影口径,无数据为空) | 96.5% |
{tps} | 生成速度(官方投影口径,无数据为空) | 92 tok/s |
{label} | 已废弃 —— 渲染时自动剥除,旧模板仍兼容(插入菜单已移除该选项) | — |
模板留空即使用内置默认文案(自动带用时与消耗)。折叠行 summary 与正文同源(渲染结果截断至 120 字符)—— 只看折叠行的用户也能看到真实标题与用时、消耗。
预设系统
- 内置预设:仅「默认」,作为基线。
- 自定义预设:保存在
localStorage(key =dsh-scn-custom-presets):- 「新增」命名后保存为自定义预设;保存后可「修改」自动同步、「删除」移除;
- 自动编号的未命名预设:从「默认 / 空白」直接保存时,自动生成
未命名、未命名 2、未命名 3…(编号取当前最大值 + 1); - 表单显示「来自:xxx · 已修改」来源指示(来自预设但内容已改动时)。
- 保存即同步:保存时若表单来源是自定义预设则更新该预设,否则新建或继续编号未命名预设。
宿主配置项
- insert:
- id: dsh-session-notify
name: '@telosmaylx/dsh-session-notify'
config:
reasons: [completed, aborted, blocked, error, max-tokens]
skipSubagents: true
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
reasons | string[] | [completed, aborted, blocked, error, max-tokens] | 触发提醒的 turn/end 原因白名单 |
skipSubagents | boolean | true | 跳过子代理会话(origin=subagent 或 delegationDepth>0) |
宿主配置项
- insert:
- id: dsh-session-notify
name: '@telosmaylx/dsh-session-notify'
config:
reasons: [completed, aborted, blocked, error, max-tokens]
skipSubagents: true
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
reasons | string[] | [completed, aborted, blocked, error, max-tokens] | 触发提醒的 turn/end 原因白名单 |
skipSubagents | boolean | true | 跳过子代理会话(origin=subagent 或 delegationDepth>0) |