前言¶
在 DeepSeek Harness(DSH)里同时开多个工作区、多个会话时,当前窗口以外的会话结束一轮回答,你往往要手动切过去才能知道「那边已经回完了」。下面介绍社区插件 dsh-session-notify:在 Web UI 顶部居中弹出可堆叠、可关闭的 Toast,标出工作区与会话名,预览回复摘要,点击即可跳转到对应会话;后台会话若在等待提问或工具审批,会用琥珀色卡片提示问题文案。
这是什么¶
dsh-session-notify 由维护者 platinum952 发布,分类为客户端插件。它面向 DSH 的浏览器端:Host 侧仅保留空的 Loader 条目,逻辑几乎全部在浏览器半部完成。插件监听 Host 上各会话状态,在非当前正在阅读的会话完成回答时推送类似微信风格的顶部通知;当前窗口已打开的会话以及 internal subagent 子会话不会弹 Toast。
生态上,DSH 强调「一切皆插件」;SkillHub 目录页 是社区站点,与 DeepSeek / 幻方无官方从属关系。安装前请自行查看 GitHub 源码 与 MIT 许可证,并理解插件随当前 DSH 进程与用户权限运行。
核心功能¶
卡片内容与交互(与 README 一致):
- 标题:
<工作区文件夹>-<会话标题>,单行省略。 - 正文:回复开头字符,两行省略;最长摘录由配置
maxBodyChars控制(默认 200),可见行数由 CSS 决定。 - Attention:后台会话因
user-questions/request或approval/request阻塞时,同款卡片呈琥珀色并显示问题文本;该会话再次运行后卡片自行消失。 - 堆叠:最多保留 6 张(默认
maxToasts),新的在上,旧的需手动关或从底部挤掉。 - 关闭:每张卡片右上角有
×。 - 跳转:点击卡片打开对应会话。
- 外观:浅色卡片、宽软阴影、18px 圆角、上下渐变与淡入淡出;样式使用公开的
--dsw-alias-*主题 token 与--dsh-frame-overlay-top,随明暗主题与 Windows 标题栏继承,而非自绘一套皮肤。
工作机制概要:浏览器半部订阅转发的 api-session/status,在会话停止 running 时读取 session/projections 的水印( durable 标题与工作目录),再通过 session/page 拉取一页消息并对齐水印,取该页最后一条 assistant 消息;若该消息是结束本轮的回复,则写入 frame 级 shell.overlay 槽位。Attention tone 来自上述两个 waterfall,插件从 listener 作用域解析 asking session、展示问题并始终 next(),不阻断真实应答流程。插件不持久化状态:刷新页面后堆栈清空,仅页面打开期间完成的回复会被通知。
兼容性:针对 DeepSeek Harness 0.2.x(@deepseek-ai/dsh-*)构建,依赖浏览器 wire API(转发的 api-session/*、session.projections / session.page、shell.overlay)。这些接口属 pre-stable,Harness 若更名需插件跟进。Remote 命名空间应使用 ctx.get('remote.session'),而非插件上下文中可能为 undefined 的 ctx.remote.session。
安装与启用¶
包为 DSH bundle(Host 行 + 浏览器半部)。在持有本仓库 package.json 的目录下,安装到正在运行的 profile:
plugin_manager install_bundle target: /absolute/path/to/dsh-session-notify
或在 profile 内的 shell 中:
pnpm add /absolute/path/to/dsh-session-notify
然后将 dsh-session-notify 写入 profile 的 cordis.patch.yml(或在 Plugin Manager 中启用对应行)。刷新页面一次:浏览器半部由已安装包提供,新加载页面才会激活。
卸载:plugin_manager remove_bundle(或移除对应行)。
当前 package 版本为 0.2.0(见仓库 package.json)。
配置¶
浏览器半部不读 Loader 行配置,可调项在 client.js 文件顶部常量,改完后刷新页面:
| 选项 | 默认值 | 含义 |
|---|---|---|
maxToasts |
6 |
屏幕上保留的卡片数;超出时最旧的从底部消失。 |
ttlMs |
0 |
自动关闭延迟;0 表示直到手动关闭;正数在窗口隐藏时暂停计时。 |
pageMessages |
8 |
单次 tail 读取请求的消息条数。 |
maxBodyChars |
200 |
回复摘录最长字符数。 |
includeActiveSession |
false |
为 true 时也对本窗口已打开的会话弹 Toast。 |
典型用法¶
- 按上一节将 bundle 装进 profile 并启用,刷新 Web UI。
- 在多个工作区或多标签中并行跑会话;当你盯着的不是某个后台会话时,该会话结束一轮回答,顶部会出现带工作区与会话名的 Toast。
- 需要处理时点击卡片进入会话;不需要时点
×关闭。若某后台会话在等你答问题或点审批,琥珀色卡片会显示问题文案,处理并继续运行后会自动消失。 - 若希望当前窗口正在看的会话也通知,编辑
client.js将includeActiveSession设为true后刷新。
开发侧可运行 npm test(node --test,通过假 Client 上下文测行为)与 node --check client.js;无构建步骤、无额外依赖。
适用场景与注意¶
适合:经常在 DSH 里并行多个 workspace / session、又不想频繁切 tab 确认「那边是否已回复」的开发者。
注意:
- 仅页面打开期间、且会话在后台完成的事件会被 Toast;刷新后历史不会补发。
- 安装路径必须使用你本机 clone 或下载后的绝对路径,资料未提供
dsh plugin add github:...一类命令,请勿凭插件名拼接。 - 插件与 DSH 0.2.x 及上述 wire API 绑定,升级 Harness major/minor 时需核对兼容性说明。
- 再次强调:安装前阅读源码与 MIT 许可,并评估在当前 profile 权限下运行第三方 bundle 的风险。
结尾¶
dsh-session-notify 用轻量浏览器逻辑补上「并行会话时的可见性」:命名工作区与会话、预览回复或待答问题、一点即跳转。目录与讨论见 SkillHub,源码与 README 见 GitHub。