dsh-task-popup:任务结束与待确认时的页面通知

前言

在 DeepSeek Harness(DSH)里跑长任务时,Session 从运行中切回空闲,或者出现审批、提问、计划评审等「待确认」状态时,开发者常常要盯着界面或反复切回窗口。本插件不改动 Host 或 Session 事件,而是在 Web 客户端侧订阅已有状态,在右上角弹出提示卡片;环境允许时再发一条原生通知,便于你把注意力暂时放到别处。

这是什么

dsh-task-popup 是社区维护的 客户端 插件,作者 methylorange-kun,仓库 methylorange-kun/dsh-task-popup。它在 DSH 一轮任务结束、或出现待确认操作时弹出通知卡片(并在 Electron / 已授权浏览器中尝试系统通知),且 只对主会话生效,不为子智能体(subagent)会话弹窗。

分类上属于 DSH 插件目录中的「客户端」类;实现上通过 cordis.patch.yml 注入 client.js,依赖 @deepseek-ai/dsh-client-locale 与 @deepseek-ai/dsh-client-ui-layout,在页面加载后立即参与运行(immediately: true)。许可证为 MIT(package.json 版本 1.0.0)。

你会看到什么

任务完成时,页面右上角出现卡片:任务已完成 / 一轮任务已经结束,点击查看结果。待确认时:需要你的确认 / DSH 正在等待你确认一个操作,点击返回处理;若能从状态里拿到工具名,卡片会带上工具名。

交互细节如下:

  • 完成卡片约 9 秒后自动消失,待确认卡片约 15 秒后自动消失;均可点 × 关闭。
  • 点击卡片会尝试把窗口拉到前台。
  • Electron 桌面版或允许通知的浏览器中,在卡片之外可能再出现一条原生通知;权限被拒绝时原生通知静默跳过,页面卡片仍正常显示。

判定逻辑(只读已有 Hook)

插件不改 Host,只订阅 Web 客户端根上的两个标准 Hook:

  1. useSessions:某个 非子智能体 Session 的 running 从 true 变为 false 时,等待 1.2 秒(DONE_DEBOUNCE_MS),确认没有立刻开始下一轮(避免排队消息、连续 turn 误报),再显示「任务已完成」。
  2. useSessionStatus:某个 非子智能体 Session 的 pendingInteraction 从空变为存在时,立即显示「需要你的确认」。审批(approval)、ask_user_question、计划评审等,只要登记为 pending interaction,都会走这条路径。

安装与启用

安装前建议通读仓库源码与 LICENSE,确认你愿意以当前 DSH 进程权限加载该客户端插件。

普通 profile(资料中的方式一)

README 给出的步骤是先克隆仓库,再以本地路径加入 web profile:

git clone https://github.com/methylorange-kun/dsh-task-popup
dsh plugin --profile web add file:C:/path/to/dsh-task-popup

将 C:/path/to/dsh-task-popup 换成你本机克隆目录的实际路径。

Desktop 版(方式二)

在 DSH 插件管理页面选择本插件目录安装,或在插件管理器中执行:

plugin_manager install_bundle  target = C:\path\to\dsh-task-popup

安装后 刷新页面,或 重启 DSH 客户端,以便客户端插件重新加载。

卸载示例:

plugin_manager remove_bundle target = dsh-task-popup

也可在插件管理页面移除。

社区插件目录页:skillhub.cn/plugins/methylorange-kun/dsh-task-popup。该目录为独立社区站点,与 DeepSeek / 幻方无官方从属关系,不等同于官方应用商店。

典型用法

安装并刷新客户端后,无需额外配置即可使用:正常在主会话中跑任务,结束时看右上角完成卡片;当出现审批、提问或计划评审等待你处理时,看待确认卡片。需要更快响应完成通知时,可改 client.js 顶部的去抖时间(见下一节)。

开发与自测:插件无单独构建步骤,client.js 即为浏览器端产物;需要 Node 22+,在仓库根目录执行:

npm test

CI 会执行 node --check client.js 与同目录自测脚本。

可调参数

在 client.js 文件顶部可改这些常量(改完后需让客户端重新加载插件):

  • DONE_DEBOUNCE_MS = 1200:任务结束后等待确认的时间,想更快可改小。
  • DONE_DISMISS_MS = 9000:完成卡片自动消失时间。
  • PENDING_DISMISS_MS = 15000:待确认卡片自动消失时间。

若不需要原生通知,可在 useNativeNotification 中去掉对应调用。

适用场景与注意

适合:长时间让 DSH 在后台跑主会话任务,希望在完成或需要人工确认时能被动提醒,又不想改服务端或 Session 事件逻辑的开发者。

限制(以 README 为准):

  • 仅当 DSH Web 客户端已加载、页面在运行时才会显示页面卡片;窗口最小化或隐藏时看不到卡片,原生通知仍可能弹出(取决于系统与权限)。
  • 原生通知依赖浏览器 / Electron 的 Notification 权限。
  • 仅主会话通知;子智能体会话完成不弹。
  • 待确认依赖 useSessionStatus 的 pendingInteraction;若某种确认方式未登记为 pending interaction,则不会弹待确认卡片(DSH 内置的审批、提问、计划评审会登记)。
  • 社区插件:DSH 升级后若客户端槽位或标准 Hook 变化,可能需要同步调整本插件。

结尾

dsh-task-popup 用客户端订阅 useSessions / useSessionStatus,在任务结束与待确认两类节点给出可见提醒,并可选原生通知,适合「主会话长时间运行、人不在前台」的日常开发节奏。

  • 目录页:https://www.skillhub.cn/plugins/methylorange-kun/dsh-task-popup
  • 源码与说明:https://github.com/methylorange-kun/dsh-task-popup
羽毛球分组比赛记分
小程序二维码

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

小夜