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

鲸鱼通知 SailingBoat-ovo/dsh-notify

DeepSeek Harness
SailingBoat-ovo15 天前有提交已提供中文文档扫描:含敏感能力

AI 回复结束时弹出带鲸鱼图标的系统通知

30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add SailingBoat-ovo/dsh-notify
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 10 处,展示前 10 条)
  • 写入本地文件
    lib/index.js:279
    writeFileSync(scriptPath, "\uFEFF" + toastScript(options), "utf8");
  • 执行外部命令固定命令
    lib/index.js:280
    const child = spawn("powershell.exe", [
  • 读取本地文件
    lib/index.js:308
    if (existsSync(target) && statSync(target).size > 0) return target;
  • 读取本地文件
    lib/index.js:308
    if (existsSync(target) && statSync(target).size > 0) return target;
  • 写入本地文件
    lib/index.js:309
    writeFileSync(target, WHALE_PNG_BUFFER);
  • 发起网络请求
    lib/client.js:36
    whaleBitmapPending = fetch(ROUTES.whale, { cache: "force-cache" })
  • 发起网络请求
    lib/client.js:184
    fetch(`${ROUTES.pendingReveal}?_=${Date.now()}`, { cache: "no-store" })
  • 发起网络请求
    lib/client.js:234
    win.fetch("/dsh-notify/_report", {
  • 发起网络请求
    lib/client.js:267
    fetch(`${ROUTES.snapshot}?_=${Date.now()}`, { cache: "no-store" })
  • 发起网络请求
    lib/client.js:525
    fetch(`${ROUTES.whale.replace("/whale.svg", "")}/toast-test`, { method: "POST", cache: "no-store" })
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DSH 插件:会话里 AI 回复结束时,用 DeepSeek 鲸鱼图标弹系统通知

README

由 DeepSeek 最新模型翻译生成
dsh-notify English · 中文 为 DeepSeek Harness (DSH) 提供系统通知:会话的 AI 轮次结束时,DSH 会弹出系统通知,带上黑鲸标记,并告诉你哪个任务完成了。 preview 工作原理(以及为什么这样设计) 宿主订阅会话日志自身的 session/event 流,对 turn/end 做出反应;浏览器通过 Server-Sent Events 接收这些完成事件,然后弹出通知。 这种拆分是有意为之。早先的版本试过在浏览器里读取客户端投影来检测完成,两次尝试都静默失败了: | 尝试 | 为什么从未触发 | | sessions.list.byId[].running | DSH 0.2.x 把 running 留在会话对象上,不再实时刷新列表行,所以 true → false 的边沿从未出现。 | | sessions.binding(id).session | binding() 返回 this.scopes.get(id)?.binding —— 它只对已经保留的作用域作答,所以根级插件对每个会话都拿到 undefined。 | 两者都是私有内部实现。
展开完整文档(README 剩余 1 节)
dsh-notify

English · 中文

为 DeepSeek Harness (DSH) 提供系统通知:会话的 AI 轮次结束时,DSH 会弹出系统通知,带上黑鲸标记,并告诉你哪个任务完成了。

preview

工作原理(以及为什么这样设计)

宿主订阅会话日志自身的 session/event 流,对 turn/end 做出反应;浏览器通过 Server-Sent Events 接收这些完成事件,然后弹出通知。

这种拆分是有意为之。早先的版本试过在浏览器里读取客户端投影来检测完成,两次尝试都静默失败了:

| 尝试 | 为什么从未触发 |
| sessions.list.byId[].running | DSH 0.2.x 把 running 留在会话对象上,不再实时刷新列表行,所以 true → false 的边沿从未出现。 |
| sessions.binding(id).session | binding() 返回 this.scopes.get(id)?.binding —— 它只对已经保留的作用域作答,所以根级插件对每个会话都拿到 undefined。 |

两者都是私有内部实现。session/event 是文档化的接缝 —— dsh-session 包写明 "Persistence is a plugin concern (subscribe to session/event, drain on session/flush)"* —— 而 turn/end 是会话日志自身事件词汇表里的稳定类型。宿主还持有持久化的会话头,所以标题来自事实来源,而不是来自 UI 投影。

行为

- 任何会话中每个结束的轮次都会触发。
- 标题为 任务完成(轮次失败时为 任务出错);正文写明会话名称。
- 图标:DeepSeek 鲸鱼,由宿主在 /dsh-notify/whale.svg 提供,在浏览器里栅格化为 PNG(Windows 通知偏好位图)。
- 点击通知,请求 shell 聚焦该会话。
- 一个 EventSource 自行处理重连。

安装

dsh plugin --profile web add github:SailingBoat-ovo/dsh-notify
dsh plugin --profile desktop add github:SailingBoat-ovo/dsh-notify

之后重启 DSH —— node 那一半在启动时加载,只刷新页面不够。

诊断

Settings → General 显示权限状态、"Send a test notification" 按钮,以及实时链路状态:

Link: live · 3 completion event(s) received

- 测试按钮能用但计数器一直是 0 → 宿主那一半没加载(重启 DSH)。
- 计数器增长但没有通知 → 操作系统/浏览器在压制通知。

端点

| 路径 | 用途 |
| GET /dsh-notify/stream | 完成帧的 text/event-stream |
| GET /dsh-notify/completions | 最近的完成事件 + 当前序列水位 |
| GET /dsh-notify/whale.svg | 鲸鱼标记 |

测试

npm install
npm test
tests/host-test.mjs(29 条断言)覆盖事件映射(只有 turn/end 算数;标题/cwd/id 兜底;失败信息)、feed(序号单调、历史上限、解绑),以及全部路由,包括 SSE 握手、推送一帧、断开解绑。tests/client-test.mjs(20 条断言)覆盖两个 slot 注册、流接线、通知内容、点击跳转、权限拒绝、设置行渲染。

许可

GPL-3.0-or-later,完整文本见 LICENSE;第三方说明见 NOTICE.md。

工作原理(以及为什么这样设计)

宿主订阅会话日志自身的 session/event,对 turn/end 作出反应;浏览器通过 SSE 收到完成事件后弹出通知。

这个分工是刻意的。此前两版都试图在浏览器里读客户端投影来判断「是否跑完」,两次都静默失效:

| 尝试 | 为什么从不触发 |
| sessions.list.byId[*].running | 0.2.x 把 running 放在会话对象上,列表行不再实时刷新,因此永远等不到 true → false 边沿。 |
| sessions.binding(id).session | binding() 返回的是 this.scopes.get(id)?.binding —— 它只对已被 retain 的 scope 有答案,根级插件对每个会话都拿到 undefined。 |

这些都是私有内部实现。而 session/event 是文档化的扩展点(dsh-session 包里写明「订阅 session/event」是持久化插件的做法),turn/end 是会话日志事件词汇表里的稳定类型。宿主还能读到会话的 header,所以标题取自事实来源,而不是 UI 投影。

行为

- 任何会话的每一轮结束都会通知;
- 标题 任务完成(该轮失败则 任务出错),正文带会话标题;
- 图标是 DeepSeek 鲸鱼:由宿主在 /dsh-notify/whale.svg 提供,浏览器栅格化成 PNG(Windows 通知偏好位图);
- 点击通知让外壳聚焦该会话;
- EventSource 自带重连。

安装

dsh plugin --profile web add github:SailingBoat-ovo/dsh-notify
dsh plugin --profile desktop add github:SailingBoat-ovo/dsh-notify

装完必须重启 DSH —— 宿主半边在启动时加载,只刷新页面不够。

怎么排查

设置 → 通用 里显示权限状态、「发一条测试通知」 按钮,以及实时连接状态:

连接:已连接 · 已收到 3 条完成事件

- 测试按钮能弹、但计数一直是 0 → 宿主插件没加载(重启 DSH);
- 计数在涨、但没弹窗 → 系统/浏览器在拦截通知。

接口

| 路径 | 用途 |
| GET /dsh-notify/stream | 完成事件的 text/event-stream |
| GET /dsh-notify/completions | 最近的完成记录 + 当前序号 |
| GET /dsh-notify/whale.svg | 鲸鱼图标 |

测试

npm install
npm test

tests/host-test.mjs(29 项)覆盖事件映射(只有 turn/end 算数;标题/cwd/id 兜底;失败信息)、feed(序号单调、历史上限、解绑),以及全部路由(含 SSE 握手、推送一帧、断开解绑)。
tests/client-test.mjs(20 项)覆盖两个 slot 注册、流接线、通知内容、点击跳转、权限拒绝、设置行渲染。

许可

GPL-3.0-or-later,完整文本见 LICENSE;第三方说明见 NOTICE.md。
预览分享卡片长什么样 ↓SailingBoat-ovo/dsh-notify
分享 · DeepSeek Harness Hub
SailingBoat-ovo/dsh-notify

AI 回复结束时弹出带鲸鱼图标的系统通知

这是你的仓库?认领条目

回到顶部