TelosmaYLX/dsh-session-notify0

@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).

包名
@telosmaylx/dsh-session-notify
版本
0.1.10
许可证
MIT
最近更新
2026年8月28日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:TelosmaYLX/dsh-session-notify

配置

绝大多数配置在 DSH Web UI → 设置 → 插件 → 会话完成提醒 面板完成(保存后点「点击刷新」生效)。仅「触发原因白名单」与「跳过子代理」两项在宿主 cordis.patch.ymlconfig 中配置。

设置面板

面板在官方「设置 → 插件」面板中注册(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] 系统通知(Notification API)能否弹出由浏览器与站点访问方式共同决定:Edge/Chrome 对"不熟悉"的站点会自动屏蔽通知(地址栏出现「通知已屏蔽」)——点击地址栏左侧权限图标 → 网站设置 → 通知 → 允许即可恢复;http://IP 这类非安全上下文访问时 Notification 根本不存在,请改用「仅页内提示」。设置面板「通知权限」区域会实时显示当前状态并给出对应操作指引(可一键请求授权)。Firefox 窗口聚焦时通知显示为页内横幅、失焦才进系统通知中心。

[!NOTE] 面板中「跳过子代理会话」保存的是设置文档里的布尔值;宿主 cordis.patch.ymlconfig.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
字段类型默认值说明
reasonsstring[][completed, aborted, blocked, error, max-tokens]触发提醒的 turn/end 原因白名单
skipSubagentsbooleantrue跳过子代理会话(origin=subagentdelegationDepth>0

宿主配置项

- insert:
    - id: dsh-session-notify
      name: '@telosmaylx/dsh-session-notify'
      config:
        reasons: [completed, aborted, blocked, error, max-tokens]
        skipSubagents: true
字段类型默认值说明
reasonsstring[][completed, aborted, blocked, error, max-tokens]触发提醒的 turn/end 原因白名单
skipSubagentsbooleantrue跳过子代理会话(origin=subagentdelegationDepth>0