dsh-notify-inline:DSH Web 页面内统一状态通知

前言

在 DeepSeek Harness(DSH)里并行跑多个会话时,常见两类信号:一边是权限审批、方案确认或提问需要你介入(P1),另一边是后台会话已经跑完(P2)。若只靠当前标签页里的审批卡片,切走窗口或盯着别的会话时很容易漏掉;若单独再开一个通知窗口插件,又要多维护一套热更新与窗口链路。

下面介绍社区插件 dsh-notify-inline(维护者 laoola,分类:工作流)。它在 DSH Web 主窗口内提供铃铛、角标、通知面板与横幅,并按页面是否在前台自动选择横幅/系统通知;功能上可替代独立窗口插件 dsh-notify-me,README 写明后者等价但需额外窗口,本插件零依赖、纯客户端、随主窗口渲染。当前发布版本为 0.1.8,许可证 MIT,package.json 要求 Node >= 22。

插件定位

dsh-notify-inline 是 DSH Web 客户端的页面内统一通知插件:把「会话需要你」与「会话跑完了」聚合在同一界面,后台时辅以 Windows 系统通知与浏览器标签标题标记。

事件按优先级分为两通道:

通道 含义 典型种类
P1 需要你 approval(权限审批)> plan-review(方案确认)> question(提问)
P2 完成 会话回复完成

路由规则与页面可见性、当前会话是否一致相关:例如前台且事件来自后台会话时,P1 走约 12 秒的顶部横幅(含裁决按钮)与轻音;P2 则先经过「真完成」确认,再按会话攒批后弹聚合横幅。页面在后台时,P1/P2 分别走系统通知与标题标记(README 中示例文案含「需要你」「回复完成」等前缀)。若你正在看的事件所属会话就是当前标签,一般只更新铃铛角标与摇摆动画,避免打断当前会话里已有的审批卡片。

裁决、防抖与条目治理

P1 可在横幅或面板上直接同意/拒绝,链路与会话内审批卡一致,调用 interaction.answer('allowed-once' | 'rejected')。同意按钮需长按 800ms(带进度动画)以降低误触;对 rm -rf、git push --force、Remove-Item -Recurse -Force、danger-full-access 等高危命令不提供一键同意,只保留「去处理」。

P2 为减少多步 agent 在轮间 idle 时误报完成,引入 doneConfirmMs(默认 10000ms,设置抽屉可调 3~60 秒):idle 持续达到阈值才视为真完成;期间若会话回到 running、出现等待输入、重跑或用户打开该会话,则取消。通过后还有 doneBatchMs(默认 5000ms,可调 1~30 秒)在同会话内攒批,静默期内无新事件才 flush 一条聚合通知。默认开启的「会话单次提示」(perSessionNotify,存于 localStorage['dshNotifyInline.config'])使同一会话在未处理前对 P2 横幅/系统通知只弹一次,跳转成功或切回该会话后解除;P1 不受这些闸门影响。

v1.8 起条目有 24 小时治理线:P2 超期未处理会在启动恢复与周期轮询中静默清除;P1 超期则灰显「已过期」留在面板回看,不再计入角标与待裁决口径。未处理条目持久化在 localStorage['dshNotifyInline.items'](盘上仅保留未处理项,上限 200 条,500ms 防抖写入);已处理经裁决或跳转成功即从面板移除。

角标与面板头使用「未处理组数」:P1 逐条计,P2 按「会话标题 + 分钟桶」融合后每组计 1。面板设置支持主题 跟随宿主 / 浅色 / 深色(默认跟随),监听宿主主题信号并映射到 data-dshni-theme。

安装与启用

README 推荐通过 Web profile 的 package.json 从 GitHub 安装,而非 git clone。步骤如下。

  1. 编辑 ~/.dsh/profiles/web/package.json,在 dependencies 中加入:
"dsh-notify-inline": "github:laoola/dsh-notify-inline"
  1. 在同一文件的 dsh.profile.bundles 数组中追加 "dsh-notify-inline"。

  2. 在该 profile 目录执行:

pnpm install
  1. 刷新 DSH Web 页面使 client bundle 生效;升级版本后可 Ctrl+F5 强刷。

宿主侧 index.js 为 no-op,主要满足 cordis 装配;客户端通过 cordis.patch.yml 注入 @deepseek-ai/dsh-client-ui-conversation,immediately: true,铃铛默认挂在会话头 utilities 槽(order: -100,位于 token-monitor 左侧),槽位不可用时降级为右下角浮动按钮。

典型用法与调试

安装并刷新后,插件随 Web 客户端自动加载,一般无需额外启动命令。可在浏览器控制台使用 window.__dshNotifyInline 做验收与调参。

探测当前宿主跳转、通知权限与挂载情况:

__dshNotifyInline.spike()

注入测试事件(面板设置里也有同类按钮),例如模拟后台审批:

__dshNotifyInline.test('approval-bg')

运行时调整配置(与设置抽屉持久化到同一 key):

__dshNotifyInline.setConfig({ doneConfirmMs: 3000, doneBatchMs: 10000, banner: false, volume: 0.3 })

查看未处理组数(与角标口径一致,v1.6 起):

__dshNotifyInline.groups()

卸载时从 dependencies 与 dsh.profile.bundles 移除 dsh-notify-inline,再 pnpm install 并刷新;disposer 会清理 DOM 与标题标记。

适用场景与注意

适合长期在 DSH Web 中开多会话、需要在前台轻量提醒、在后台仍能回跳处理的开发者。与 dsh-notify-me 相比,更适合希望通知 UI 完全留在主窗口、不增加独立窗口的场景。

使用前请注意:

  • 插件在当前 DSH 进程与浏览器上下文中运行,会读写 localStorage、请求系统通知与 WebAudio;安装前请自行审阅 GitHub 源码 与 MIT 许可证。
  • 系统通知与提示音依赖用户手势后的权限授权;未授权时后台触达主要依赖标签标题标记。
  • 多标签页同时打开同一宿主时,各实例共用 localStorage key,可能互相覆盖,常规单标签使用不受影响。
  • 宿主兼容分代:老版本用 uiSession.pendingInteractions 等,0.1.6-alpha.2 及以上(含 0.2.0-rc.2)用 uiSession.sessionStatus;跳转优先 uiWorkspace.openSession(),不可用时有 DOM 兜底。

DSH 生态强调「一切皆插件」;社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。本插件在目录页归类为工作流,GitHub 星标目前为 0。

小结

经过上面的步骤,你可以在 Web profile 中启用 dsh-notify-inline,用一套铃铛面板统一承接 P1 裁决与 P2 完成提醒,并按前台/后台自动切换触达方式。更多信息见目录页 laoola/dsh-notify-inline 与仓库 github.com/laoola/dsh-notify-inline。

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

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

Xiaoye