dsh-session-notify: Session Reply Toasts for Parallel Multi-workspaces

前言

在 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。

典型用法

  1. 按上一节将 bundle 装进 profile 并启用,刷新 Web UI。
  2. 在多个工作区或多标签中并行跑会话;当你盯着的不是某个后台会话时,该会话结束一轮回答,顶部会出现带工作区与会话名的 Toast。
  3. 需要处理时点击卡片进入会话;不需要时点 × 关闭。若某后台会话在等你答问题或点审批,琥珀色卡片会显示问题文案,处理并继续运行后会自动消失。
  4. 若希望当前窗口正在看的会话也通知,编辑 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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye