dsh-job-notify:DSH 后台任务与对话轮次的 Windows 原生通知

前言

在 DeepSeek Harness(DSH)里跑 agent,常见两种「人不在桌前」的情况:shell 在后台执行构建,你去接水;agent 停在选项或工具审批上等你拍板,你在看别的窗口。Harness 窗口若不在前台,这些结算很容易被漏掉。社区插件 dsh-job-notify 只做一件事:在该需要你的时候,通过 Windows 10/11 系统通知把你叫回来。它不联网、不替你做决策,只是旁听众多 Harness 事件并发 Toast。

这是什么

dsh-job-notify 由 imnotRiv3r 维护,归类为客户端插件(package 名 @local/dsh-job-notify,当前版本 1.3.1,MIT)。适用系统为 Windows;非 Windows 上插件保持空闲。兼容 DeepSeek Harness Desktop >=0.2.0-rc.1 且 <0.3.0(见 package.json 的 dsh.compatibility)。

会在哪些时刻提醒

插件覆盖四类「该回来」的时刻,以及一轮对话正常结束时的通知:

时刻 通知内容要点 默认
后台任务完成 命令、耗时 开
后台任务失败 / 异常退出 命令、退出码、耗时 开
agent 等你选择 会话名、问题、问题数量 开
工具等你批准 会话名、工具名、原因 开

另有一类「这一轮聊完了」:会话名 + 最后一条 assistant 回答的节选(Markdown 会剥离,不渲染)。

后台任务是否响铃的核心判据是 awaited === false:只有没人等的结算才提醒。前台 shell(调用方在等)、agent 正在 job_output(wait: true)、你取消的轮次(aborted)、子代理/workflow 子任务、会话卸载 teardown 等场景会保持安静。DSH 对非零退出码可能报告为 status: completed + detail: "exit code: N",插件按退出码判断成败,避免失败构建被写成「已完成」。

安装与启用

前置条件:Windows 10/11;Harness 已安装且版本在兼容范围内;系统设置中允许 DeepSeek Harness 通知;Node.js 随 Harness 提供,无需单独安装。

下面步骤来自仓库 README 的「30 秒装好」说明。先在本地拉取代码并安装依赖:

git clone https://github.com/imnotRiv3r/dsh-job-notify.git E:\dshWorkspace\dsh-job-notify
cd E:\dshWorkspace\dsh-job-notify
npm install --no-package-lock

然后在 Harness 中:插件 → 添加插件 → 选择本地目录 E:\dshWorkspace\dsh-job-notify。插件管理器会把 bundle 写入 profile 的 dsh.profile.bundles,Host 侧立即生效,配置页在下一次刷新页面后出现。

验证:让 agent 在后台执行例如 Start-Sleep -Seconds 5,约 5 秒后应弹出通知。

插件以 link: 指向该目录,勿删或移动目录。@local 表示本地 scope,本项目不发布到 npm。

若需手写 profile,可在 package.json 中加 link: 依赖并把 @local/dsh-job-notify 列入 dsh.profile.bundles,重启 Harness;bundle 的 cordis.patch.yml 会向 Loader 插入 job-notify 行(详见 README「手动安装到 profile」)。

配置

在 Harness:插件 → 后台任务通知,详情页直接展开配置区;勾选即时生效,写入 profile 的 cordis.patch.yml。

总开关

字段 默认 作用
enabled true 关闭后不订阅任何事件

什么时候提醒

字段 默认 作用
notifyTurnEnd true 每轮对话结束
notifyQuestions true ask_user_question 等你选择
notifyApprovals true 工具调用等你审批
onCompleted true 后台任务完成
onFailed true 失败 / 异常退出
onKilled true 被 job_kill 或归档停止
skipAwaited true 仅无人等待的后台任务;false 时前台命令也会提醒

正文显示

字段 默认 作用
showLabel true 任务标签(命令,截断到 140 字)
showDuration true 耗时
showExitCode true 退出码或失败原因

高级:appId 默认 com.deepseek.dsh(Toast 的 AppUserModelID),非法值回退默认。

手写 cordis.patch.yml 示例:

- id: job-notify
  name: "@local/dsh-job-notify"
  config:
    notifyTurnEnd: false
    showLabel: false

典型用法与行为细节

后台任务标题大致分为:后台任务已完成(退出码 0)、后台任务异常退出(非 0)、后台任务失败(未启动或 producer 抛错)、后台任务已停止(job_kill 或归档)。

对话轮次结束:标题为会话标题,新会话无标题时用工作区目录名;正文为最后一条 assistant 节选;含本轮实际耗时。取消/打断、子代理会话(origin: "subagent")不提醒。

需要你决策:问题走 user-questions/request waterfall,插件始终 next(),不替你回答;审批读 approval/asked 审计事件,不改变审批结果。

发送路径:事件经筛选后进入串行队列(最多 8 条、单条 10 秒超时),由 toast.ps1 经 Windows PowerShell 5.1 投递到通知中心,AUMID 复用桌面版已注册的 com.deepseek.dsh,来源显示为 DeepSeek Harness。

手动测一条通知(README 开发节):

$payload = @{ title = '测试通知'; body = '来自 dsh-job-notify'; appId = 'com.deepseek.dsh' } | ConvertTo-Json -Compress
$encoded = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($payload))
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\toast.ps1 -PayloadBase64 $encoded

适用场景与注意

适合在 Windows 上长时间用 DSH、且经常切走桌面的开发者。插件在 Harness Host 进程权限下运行,通知正文来自本机会话(命令、节选、会话名),会进入 Windows 通知历史;敏感项目请自行评估。安装前建议阅读 GitHub 仓库 源码与 MIT 许可证;通知文案固定中文;点击通知目前不会聚焦 Harness;仅 Windows;大版本 Harness 升级时配置页可能需适配。

常见问题摘录:全屏看视频时横幅可能被系统抑制,通知仍可在通知中心(Win + N)查看;配置区空白时检查 Config 是否对字段挂了 .volatile();若前台命令也弹通知,将 skipAwaited 改回 true。

结尾

dsh-job-notify 把「没人等的后台结算」和「需要你拍板的停点」收敛到 Windows 原生 Toast,减少盯着 Harness 窗口的必要。插件目录与源码:

DSH 生态强调「一切皆插件」;SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系。本文事实取自上述仓库 README 与 package.json。

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

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

小夜