🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

任务通知提醒 ltao0829/dsh-task-notify

DeepSeek Harnessv0.3.0
ltao082926 天前有提交已提供中文文档扫描:未发现敏感能力

AI 编程代理的生命周期通知层,当前支持 DeepSeek Harness。

34.2/100
综合分
6
GitHub 星标
44
npm 周下载
—/5
用户评分

数据截至 2026/10/9 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @ltao0829/dsh-task-notify
npm 源 · @ltao0829/dsh-task-notify 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 26 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@ltao0829/dsh-task-notify @ 0.3.0
✓Node 引擎要求 >=22.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/24 12:52:24

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-api-job-controller@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-session@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-package-manifest
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 生命周期通知层
  • 覆盖轮次与任务通知
  • 审查与失败通知

为 AI 编程智能体提供生命周期通知层——DeepSeek Harness 插件,覆盖轮次、任务、审查与失败通知

v0.3.02026-10-02
DSH 0.2 系列首个功能版本:通知自定义、覆盖率回归门禁和 npm 下载量徽章。peer 范围未变,0.2.x 安装可原地升级。 · 安装 · 从 npm 安装——写明版本范围,注意下面的冷却说明 dsh plugin --profile add @ltao0829/dsh-task-notify@^0.3.0 · 或从 Git 安装,锁定到发布标签 dsh plugin --profile add git+ 然后重启 dsh web 并刷新页面。设置页出现在「设置 → 插件 → 任务完成提醒」。 写明版本很重要。pnpm 11 默认把 minimumReleaseAge 设为 24 小时,所以发布不满一天的版本在版本解析中不可见。2026-10-02 实测,本版本发布四分钟后,不带版本的 dsh plugin add @ltao0829/dsh-task-notify 解析到 0.1.0——即最新一个超过 24 小时的版本,它不一定是紧邻的上一个版本——兼容性门禁拒绝了它。拒绝是明确的,DSH 会还原 package.json、锁文件和 node_modules,不会留下装了一半的配置档。写明版本或范围会记入 minimumReleaseAgeExclude 并立即安装;两个方向都针对本版本验证过。 · 亮点 · 标题 / 正文模板,支持 {title}(任务标题)、{session}(会话 ID)和 {kind}(本地化事件类型)占位符。模板留空则沿用内置本地化文案,未知占位符原样保留,输出按纯文本渲染——模板无法注入标记。 · 四种提示音——无 / 单音 / 经典双音 / 自定义音频 URL——外加 0–100% 音量控制。自定义模式 URL 为空时回退到双音;URL 无法加载时降为静音。 · 弹窗位置与时长——屏幕四角任选,停留 3–15 秒(此前固定右下角 5 秒)。 · 免打扰时段和按会话静音——本地时间窗口可跨午夜(如 22:00 → 08:00),期间屏蔽所有提醒;指定会话永不触发提醒。 · 针对 src/ 的只升不降覆盖率门禁,以及完全由 npm 公开下载 API 支撑的 npm 下载量徽章。未加入任何客户端上报——隐私保证不变。 · 变更内容 · 新增 · 通知自定义。八个布尔开关有了面向用户的配置:模板、提示音样式与音量、弹窗角落与时长、免打扰时段、按会话静音列表。 · 测试覆盖率测量与回归门禁。@vitest/coverage-v8(锁定到精确的 vitest 版本)、pnpm run coverage 脚本,以及针对 src/ 的 V8 覆盖率,使用 text + lcov 报告器。CI 在两个 Node 分支上构建后运行覆盖率,并从 Node 24 分支上传 coverage/lcov.info 作为产物。 · 两个 README 中的 npm 下载量徽章。这个数字要附上说明:它统计每月 npm tarball 下载量(含 CI 安装和镜像源),不是活跃用户数。 · 变更 · 设置存储升级到 dsh.taskNotify.v3。残留的 v2 记录会迁移一次——所有开关保留,已废弃的 sound 布尔值映射为 soundMode: 'double'(关闭映射为 'off')——之后删除 v2 键。加载时每个存储字段都会清洗:无效值降为默认值,volume / toastSeconds 限制在 0–1 / 3–15。因此升级会保留你现有的开关,无需重新配置。 · 正文模板框改为独立的带标签字段,不再是标题标签下的第二个框——占位符不能当作无障碍名称。 · 安装冷却说明现在基于实测运行撰写,不再照搬 pnpm 行为的文档。 · 修复 · 修正 DSH 0.1.x 安装路径。早先文档让 DSH 0.1.x 用户安装 0.1.2,但 npm 上只有 0.1.0 和 0.2.0,也不存在 v0.1.1 / v0.1.2 标签,所以该说明无法执行。0.1.x 系列现标注为已停止维护。 · 验证 在隔离的一次性 DSH_HOME 中针对真实 DSH 0.2.0-rc.2 验证(见 docs/verification-evidence.md): | 阶段 | 结果 | | --- | --- | | pnpm pack | 从打标签的提交打包出 tarball | | dsh plugin --profile web add | 通过 0.2 兼容性门禁 | | dsh --profile web --dump-config | task-notify 出现在组合后的 bundle 树中 | | dsh web 启动 | 启动文档以 HTTP 200 获取(跟随 token 重定
v0.1.02026-10-02
· 新增 · 回合完成提醒:智能体回合(思考或工具调用)结束时触发。 · 后台任务提醒:后台命令或子代理任务结束时触发(完成 / 失败 / 被终止)。 · 待审提醒:运行中的任务等待批准、计划评审或问题回答时触发。 · 失败提醒:智能体回合出错(lastAgentError)或后台任务失败 / 被终止时触发。 · 三种通知渠道:系统级浏览器通知、页内浮层提示、可选的双音提示音。 · 按事件配置,七个独立开关,保存在 localStorage(dsh.taskNotify.v1)。 · 宿主端(src/index.ts)注册 task-notify 设置区块。 · 纯快照比对检测器(src/detect.ts),配 Vitest 单元测试(tests/detect.spec.ts,15 个测试)。 · CI 工作流(.github/workflows/ci.yml):推送和拉取请求时执行类型检查 + 测试 + 构建。 · 英文 README.md 与中文 README.zh-CN.md 文档。 · 安全 · 无外部服务器、遥测、分析或 API key。通知在本地生成;设置只存在 localStorage;对话内容从不上传。
v0.2.02026-10-02
· ⚠️ 破坏性重定向:本版本只支持 DeepSeek Harness 0.2 0.1.x 系列基于 @deepseek-ai/dsh-client-runtime 和 settings.plugin.item 座位构建,这两者在 DSH 0.2 中都已移除。DSH 0.2 的安装校验会检查 @deepseek-ai/dsh* 上的 peerDependencies,直接拒绝 0.1.x,就算强行装进去插件也加载不了。如果你还在跑 DSH 0.1.x,请留在 v0.1.2。 把插件重定向到 DeepSeek Harness 0.2(0.2.0-rc.2)。 · 安装 · 从 npm 安装——要写明版本范围,见下面的冷却说明 dsh plugin --profile add @ltao0829/dsh-task-notify@^0.2.0 · 或从 Git 安装,锁定到发布标签 dsh plugin --profile add git+ 然后重启 dsh web 并刷新页面。设置页在「设置 → 插件 → 任务完成提醒」下。首次点击或按键时浏览器会请求通知权限——允许后即可收到系统级通知。 写明版本很重要。pnpm 11 默认把 minimumReleaseAge 设为 24 小时,所以发布不到一天的版本在版本解析时不可见:dsh plugin add @ltao0829/dsh-task-notify 会静默解析到上一个版本(0.1.0),然后因不兼容被拒绝。写明版本或范围会记入 minimumReleaseAgeExclude,立即安装。等发布满一天后,只写包名就会解析到 0.2.0。 · 亮点 · 检测现在合并三个独立的 DSH 0.2 客户端数据源,不再用已退役的单一 sessions.list 存储:ctx.sessions.list(目录 + Host 基线)、ctx.uiSession.sessionStatus(实时运行状态和待处理交互)、ctx.jobs.state(按会话划分的任务清单)。 · 后台任务按会话通过 IJobs.watchRows 监听。默认对页面加载以来观察到在运行的每个会话各开一条 job.list 流;新增的「监听所有会话」设置可切换到整个目录。 · 待处理交互按不透明的请求键跟踪,所以替换请求(先审批、再提问)会再次提醒,而同一请求的重连重放保持静默。 · 设置移到 settings.plugins.tab 座位——插件区里的一个页面,不再是已退役的 settings.plugin.item 卡片。 · 提示文案现在通过插件自己的命名空间本地化(zh / en),不再硬编码中文。 · 变更内容 · 变更 · 客户端上下文类型来自 @deepseek-ai/cordis 加上各领域包的声明合并;不再引用 @deepseek-ai/dsh-client-runtime。 · Host 部分现在不做事——schemastery 的 Config schema 连同依赖一起删掉;Host 部分只是加载锚点,不持有设置。 · 构建外部依赖跟随 0.2 平台模块表(@deepseek-ai/dsh-client-store 和 -ui-dockkit 加入;dsh-client-runtime、dsh-client-web-react、dsh-client-schema-form 移出)。 · 主题 token 按 0.2 别名表刷新:提示用 --dsw-alias-bg-overlay,设置页不再用已移除的 --dsw-alias-label-tertiary。 · Node.js 最低版本提到 >=22(DSH 0.2 的工具链要求);CI 矩阵现在是 Node 22 和 24。 · 新增 · Manifest 契约测试(tests/manifest.spec.ts):manifestVersion、Web 客户端平台、engines.dsh 范围、各 peer 范围锁定、patch/plugin 身份一致。 · tests/client-apply.spec.ts:针对假客户端上下文端到端驱动 apply(ctx)——0.1.1 键控槽位回归正是从这个座位漏过去的。 · tests/bundle.spec.ts 和新的验证阶段,断言发布的 lib/client.js 只 require 平台模块(冻结模块表答不了的 require 在浏览器里就是启动时抛错)。 · 「监听所有会话」设置,带 zh / en 文案。 · 修复 · DSH 0.2 的兼容性校验重新接受安装。已退役的 dsh.compatibility 块和 0.1.x 的 peer 范围都删了;每个 D
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-task-notify AI 编程代理的生命周期通知层,当前支持 DeepSeek Harness。 English · 简体中文 AI 编程代理越来越多地运行长时间、自主的任务:一轮任务可能持续数分钟,而用户通常已经切到别的窗口。本项目在代理任务生命周期之上补上了缺失的通知层:当代理完成、失败、后台任务结束、或开始等待人工介入(审批 / 计划评审 / 提问)时,立即通过页面 toast、操作系统级桌面通知以及可选提示音提醒你。 借鉴 Codex 的桌面通知体验,而非 Codex 集成。与 OpenAI 无关联,也不受 OpenAI 赞助。 目前本项目以 DeepSeek Harness(DSH)插件形式发布;其生命周期检测核心与宿主无关,设计目标是逐步演进为支持更多编程代理的适配器。 为什么需要它 长任务代理反转了传统注意力模型:用户提交任务后就会切走,而不是盯着终端。纯 UI 状态提示(后台标签页里的一个 spinner)恰恰在关键时刻失效——用户没有在看。dsh-task-notify 把生命周期变化转化为可打断的、系统级的信号,闭合自主代理与分心用户之间的反馈环。 演示 录屏尚未入库,因此下表只列出三个片段的文件名,而不是直接嵌入图片。录制方案(场景、工具、体积建议)与恢复图片所需的精确写法见 docs/demo-guide.md。
展开完整文档(README 剩余 1 节)
dsh-task-notify

AI 编程代理的生命周期通知层,当前支持 DeepSeek Harness。

English · 简体中文

AI 编程代理越来越多地运行长时间、自主的任务:一轮任务可能持续数分钟,而用户通常已经切到别的窗口。本项目在代理任务生命周期之上补上了缺失的通知层:当代理完成、失败、后台任务结束、或开始等待人工介入(审批 / 计划评审 / 提问)时,立即通过页面 toast、操作系统级桌面通知以及可选提示音提醒你。

借鉴 Codex 的桌面通知体验,而非 Codex 集成。与 OpenAI 无关联,也不受 OpenAI 赞助。 目前本项目以 DeepSeek Harness(DSH)插件形式发布;其生命周期检测核心与宿主无关,设计目标是逐步演进为支持更多编程代理的适配器。

为什么需要它

长任务代理反转了传统注意力模型:用户提交任务后就会切走,而不是盯着终端。纯 UI 状态提示(后台标签页里的一个 spinner)恰恰在关键时刻失效——用户没有在看。dsh-task-notify 把生命周期变化转化为可打断的、系统级的信号,闭合自主代理与分心用户之间的反馈环。

演示

录屏尚未入库,因此下表只列出三个片段的文件名,而不是直接嵌入图片。录制方案(场景、工具、体积建议)与恢复图片所需的精确写法见 docs/demo-guide.md。

| 任务完成 | 需要审核 | 后台任务失败 |
| docs/demo-turn.gif | docs/demo-review.gif | docs/demo-failure.gif |

功能

- 对话任务完成提醒 —— 助手一轮任务(思考或工具调用)结束时提醒。
- 后台任务完成提醒 —— 后台命令或子代理作业结束时提醒(completed / failed / killed)。
- 需要审核提醒 —— 运行中等待审批 / 计划评审 / 回答提问时提醒。
- 失败提醒 —— 对话任务报错或后台任务失败 / 被终止时提醒。
- 三种通知通道 —— 浏览器系统通知 + 页面 toast + 可选双音提示音。
- 逐项开关 —— 每类事件和每种通道均可独立开关。
- 可自定义 —— 标题 / 正文模板、提示音样式与音量、toast 停靠角落与停留时长、免打扰时段、按会话静音。

环境要求

| 依赖项 | 说明 |
| DeepSeek Harness | 0.2.0-rc.2 或更新的 0.2.x —— 兼容性网关读取的是 peerDependencies,本包把所有 DSH peer 固定为 ^0.2.0-rc.2 |
| Node.js | >=22.0.0(CI 覆盖 Node 22 与 24;桌面端内置运行时为 Node 24) |
| pnpm | 仅在使用 dsh plugin 命令行安装时需要;桌面端使用其内置的 pnpm |

安装

从 npm 安装 —— 请写明版本范围,原因见下方冷却期说明
dsh plugin --profile <profile> add @ltao0829/dsh-task-notify@^0.3.0

或从 Git 安装,锁定发布标签
dsh plugin --profile <profile> add git+https://github.com/ltao0829/dsh-task-notify.git#v0.3.0

<profile> 是要装入的 DSH Profile:dsh web 服务器用 web,桌面端用 desktop。安装会把包写入该 Profile 并注册它的 bundle patch,由后者插入唯一一行 task-notify,同时挂载插件的宿主半部与浏览器半部。

在桌面端请从应用自身的 设置 → 插件 安装。desktop Profile 由 Electron 应用独占管理:活动 Profile 的插件变更会立即生效、无需重启,而 dsh --profile desktop … 会拒绝在第二个命令行进程里运行该 Profile。

装入 dsh web 服务器后,重启服务并刷新页面。首次在页面里点击/按键时,浏览器会请求「通知」权限,点允许即可收到系统通知。

版本必须与 DSH 系列对应。 0.2.x 与 0.3.x 需要 DeepSeek Harness 0.2;0.1.x 需要 DSH 0.1.x。两个系列不能互相通用:DSH 0.2 的兼容性网关会直接拒绝 0.1.x 系列,而 DSH 0.1.x 也无法加载更新的系列。

0.1.x 系列已停止维护。npm 上只有 0.1.0;之后的 0.1.1、0.1.2 修复只存在于 Git 历史中,从未打过标签、也从未发布。如果你仍在 DSH 0.1.x,请先把 DSH 升级到 0.2,再安装 0.3.x。

为什么要写版本范围而不是裸包名。 pnpm 11 内置了 24 小时供应链冷却期(minimumReleaseAge 默认为 24 * 60 分钟)。发布时间不足一天的版本对版本解析不可见,因此裸写 dsh plugin add @ltao0829/dsh-task-notify 会解析到发布已满一天的最新版本——2026-10-02 实测:0.3.0 发布 4 分钟后安装,它选中了 0.1.0,随后被兼容性网关拒绝。这个拒绝是显式报错而非静默失败:DSH 会打印 peer 不匹配的原因,并还原 package.json、lockfile 与 node_modules,Profile 不会停在半装状态。写明版本或范围后,pnpm 会写入 minimumReleaseAgeExclude 并立即安装;等该版本发布满一天后,裸包名也会正常解析到它。

卸载

dsh plugin --profile <profile> remove @ltao0829/dsh-task-notify
桌面端:在「设置 → 插件」中移除

这会同时移除包与它的 bundle 条目,task-notify 行随即从合成后的 Profile 中消失。浏览器侧的 localStorage 记录(dsh.taskNotify.v3)不属于 Profile:若希望重装后从默认值开始,请手动清除该键。

配置

设置页面位于 DSH 设置界面的「插件」区(DSH 0.2 新增的 settings.plugins.tab 插槽),页面标题为任务完成提醒。配置存于 localStorage(键 dsh.taskNotify.v3)。遗留的 v2 记录会被迁移一次——所有开关保留,旧的提示音开关映射为双音模式——随后 v2 键会被移除:

| 开关 | 默认 | 说明 |
| 启用提醒 | 开 | 总开关 |
| 对话任务完成提醒 | 开 | 助手一轮任务结束时提醒 |
| 后台任务完成提醒 | 开 | 后台命令 / 子代理作业结束时提醒 |
| 监听全部会话的后台任务 | 关 | 为会话列表中每个会话各开一条后台任务流,而非仅监听本页面打开后活跃过的会话 |
| 需要审核时提醒 | 开 | 运行中等待审批 / 计划评审 / 提问时提醒 |
| 失败时提醒 | 开 | 对话任务报错或后台任务失败 / 被终止时提醒 |
| 浏览器系统通知 | 开 | 同时发送操作系统通知(需授权) |

提示音、弹窗与免打扰

| 设置 | 默认 | 说明 |
| 提示音 | 无 | 无 / 单音 / 双音 / 自定义音频 |
| 音频 URL | 空 | 提示音为自定义音频时播放;留空或加载失败时回退为双音 |
| 音量 | 100% | 对所有提示音样式生效 |
| 弹窗位置 | 右下 | 四个屏幕角落任选 |
| 停留时长(秒) | 5 | 弹窗显示 3–15 秒后自动消失 |
| 自定义标题 / 正文模板 | 空 | 占位符:{title}(任务标题)、{session}(会话 ID)、{kind}(事件类型);留空使用内置文案 |
| 免打扰时段 | 关 | 该本地时间段内不触发任何提醒;支持跨零点(如 22:00 → 08:00) |
| 静音的会话 | 空 | 每行一个会话 ID;这些会话不触发任何提醒 |

页面内 toast 没有开关——它是始终可用的通道,也是系统通知被拒绝、提示音被拦截时的兜底。模板输出按纯文本渲染,模板无法注入任何标记。

故障排查

| 现象 | 原因 | 处理 |
| 有 toast,但没有系统通知 | Notification.permission 不是 granted,插件会静默跳过而非报错 | 授予通知权限。浏览器只允许在用户手势中弹窗,因此在页面里点击一次即可;或把浏览器系统通知关掉再打开,它会主动请求权限 |
| 没有提示音 | Web Audio 在用户手势之前处于 suspended 状态 | 在页面里点击一次或按一下键盘,音频会在首个手势解锁 |
| 完全没有任何提醒 | 总开关或对应事件开关是关的 | 检查启用提醒与各事件开关 |
| 设定时段附近没有提醒 | 已开启免打扰时段,当前本地时间落在窗口内 | 关闭免打扰时段或调整时间;静音的会话列表中的会话同样保持静音 |
| 已经跑完的任务没有补发提醒 | 页面加载后的首个快照只建立基线 | 属预期行为——刷新页面不会重放历史 |
| 只对当前在看的会话有后台任务提醒 | 默认只为「本页面打开后被观察到运行过」的会话各开一条 job.list 流 | 打开监听全部会话的后台任务 |
| 任务失败但没有提醒 | lastAgentError 只存在于被 retain 的会话 face 上 | 属预期行为——插件覆盖工作区已保持打开的会话,不会为了监听报错而额外 retain 会话 |
| 安装被判为不兼容 | 0.1.x 插件装在 DSH 0.2 上,或反之 | 让两个系列对应,见安装中的配对说明 |
| 用裸包名装到了旧版本 | pnpm 11 的 24 小时 minimumReleaseAge 冷却期 | 写明范围:@^0.3.0 |

架构

coding agent(编程代理) │ ▼ 宿主适配器(当前为 DeepSeek Harness;未来可扩展 Claude Code / Codex / OpenCode) │ ▼ 会话快照(N-1 与 N) │ ▼ 生命周期检测器 ──► 事件:turn | job | review | failure │ ▼ 通知分发器 │ │ │ ▼ ▼ ▼ 系统通知 toast 提示音

检测器(src/detect.ts)是纯函数:快照进去,生命周期事件出来。它不依赖 DSH 或 DOM,因此未来支持更多编程代理只需实现新的快照提供者,而无需重写通知核心。

DSH 0.2 的数据来源

DSH 0.2 移除了原先同时承载 jobsBySession 与逐行 pendingInteraction 的单一 sessions.list store。监听器现在把三个彼此独立的客户端数据源折叠成一份快照:

| 数据源 | 服务 | 提供内容 |
| 会话目录 | ctx.sessions.list | id、标题、宿主基线的运行标志、引用计数 |
| 客户端状态投影 | ctx.uiSession.sessionStatus | 实时的 running、待处理交互(key + kind)、未读完成标记 |
| 后台任务名册 | ctx.jobs.state | 每个被监听会话的 JobView 行,由每会话一条 job.list 流驱动 |

值得注意的行为:

- 首个快照只建立基线 —— 刷新页面不会补发历史提醒;此后才出现的会话或任务名册同样视为既存,不触发提醒。
- 待处理交互以其不透明请求 key 追踪:被替换的新请求(审批之后又来一个提问)会再次提醒,而重连时对同一请求的重放不会重复提醒。
- job.list 是按会话的流。默认只为「本页面打开后被观察到运行过」的会话各开一条;未在此页面运行过的会话,不可能持有本页面正在等待的后台任务。开启「监听全部会话」则改为覆盖整个会话列表,代价是每个会话一条流。
- 对话失败检测读取 lastAgentError,而该字段只存在于被 retain 的会话 face 上。因此本插件覆盖工作区已经打开的会话,不会为了监听报错而额外 retain 会话。

通知通道

toast 直接挂载到 document.body,不依赖 React root,也不占用任何插槽,因此在没有对话座位的界面上(未选中会话、设置面板打开等)依然可用。最多同时堆叠 4 条,每条显示 5 秒。系统通知只在权限已是 granted 时发送;提示音会先 resume() 处于 suspended 状态的 AudioContext——每条通道都选择静默降级,而不是抛错。

项目结构

src/index.ts 宿主半部 —— 惰性加载锚点 src/detect.ts 纯生命周期检测器(三源折叠 + 快照 diff) src/client/index.ts 浏览器半部 —— 监听器、后台任务流与失败监听、UI 注册 src/client/notify.ts toast / 系统通知 / 提示音 src/client/locales.ts zh + en 词典与命名空间声明合并 src/client/settings.ts localStorage 设置存储 src/client/TaskNotifySettingsCard.tsx 设置页面(settings.plugins.tab) tests/.spec.ts 检测器、生命周期、设置、通知、Manifest 与 apply() 测试

安全与隐私

- 无外部服务器,无云后端。
- 无遥测、无分析、无追踪。
- 无需 API 密钥。
- 通知全部在浏览器本地生成。
- 设置仅保存在本地 localStorage。
- 插件不会上传或外传对话内容。

与其他 DSH 插件一样,插件以你 DSH 进程的权限运行。

路线图

本节是"计划中工作"的唯一真源;CHANGELOG.md 只记录已经交付的内容。每项的范围、依赖、风险与验收标准见 docs/roadmap-plan.md。

当前阶段

- [x] 对话任务完成通知
- [x] 后台任务通知
- [x] 审批 / 计划评审 / 提问通知
- [x] 失败通知
- [x] 系统通知 + toast + 提示音
- [x] npm 正式发布(@ltao0829/dsh-task-notify)
- [x] CI/CD(typecheck + test + build + pack dry-run)

近期

- [ ] README 演示录屏
- [x] npm 下载量徽章(shields.io,仅用 npm 公共统计 API)
- [ ] 采用度趋势跟踪(周度下载量变化)
- [ ] 跨平台通知后端
- [x] 通知自定义
- [x] 测试覆盖率度量与"只升不降"回归门禁
- [ ] 提升监听器与通知渲染器的覆盖率

长期

- [ ] 与代理无关的生命周期 API
- [ ] 更多编程代理集成(Claude Code、Codex、OpenCode……)
- [ ] 可复用的通知核心

相关项目

- dsh-launcher —— DeepSeek Harness Web 的一键启动器。

两者共同构成一套面向 AI 编程代理工作流的小型工具集。

同一作者的另一个项目:buaa-auto-auth —— 为一台 Windows 机器每天自动完成校园网(SRun)认证。

贡献

见 CONTRIBUTING.md。

兼容性与一次性 Profile 验证

- Node.js:>=22.0.0(CI 矩阵覆盖 Node 22 与 24)
- DeepSeek Harness:^0.2.0-rc.2

DSH 0.2 已不再读取被废弃的 dsh.compatibility 字段。Profile 导入插件前,evaluatePluginCompatibility(@deepseek-ai/dsh-app-boot)会把插件 peerDependencies 中所有 @deepseek-ai/dsh / @deepseek-ai/dsh- 项与唯一运行时版本逐一比对,预发布版本参与范围匹配。因此本包把所有 DSH peer 固定为 ^0.2.0-rc.2,并在 engines.dsh 中镜像同一范围;只要有任何一项漂移,tests/manifest.spec.ts 就会失败。

0.2.0 是破坏性的重新定位,而非增量发布:0.1.x 系列基于已被移除的 @deepseek-ai/dsh-client-runtime 与 settings.plugin.item 插槽构建,这两者在 DSH 0.2 中都不复存在。npm 上只发布过 0.1.0;0.1.1 与 0.1.2 仅存在于 Git 历史中。

一次性 Profile 验证命令

在不污染任何现有用户配置(~/.dsh)的隔离临时 Profile 中,验证插件安装、配置合成、Web 启动监听与卸载:

pnpm run verify:profile

脚本默认等待 DSH 首次准备 Profile 最多 90 秒。如果 CI Runner 或本机需要调整,可将 DSH_WEB_START_TIMEOUT_MS 设置为正整数毫秒值。插件安装另有默认五分钟的等待限制,可通过 DSH_PLUGIN_INSTALL_TIMEOUT_MS 调整。

验证日志证据报告:docs/verification-evidence.md。

限制与边界说明:Catalog 准入及一次性 Profile 验收证明插件生命周期契约与标准 Web Profile 启动兼容;系统级操作系统通知依然依赖用户在浏览器前端授予通知权限。一次性 Profile 验证会把打包后的 tarball 装入一个临时 DSH_HOME,证明插件被接受并成功加载;此外构建产物还会被单独校验,确认其外部依赖只包含平台模块。该脚本不驱动真实浏览器,页面内通知行为由 jsdom 测试套件覆盖。

开发

pnpm install
pnpm run typecheck
pnpm test
pnpm run coverage
pnpm run build
pnpm run verify:profile

必须先 pnpm run build 再 pnpm test:tests/bundle.spec.ts 会断言产出的 lib/client.js 只 require 冻结的平台模块。lib/ 是提交进仓库的,因此改动源码后必须把重新构建的产物一并纳入提交。

License

BSD-3-Clause
预览分享卡片长什么样 ↓ltao0829/dsh-task-notify
分享 · DeepSeek Harness Hub
ltao0829/dsh-task-notify

AI 编程代理的生命周期通知层,当前支持 DeepSeek Harness。

这是你的仓库?认领条目

回到顶部