会话结束自动推送 Bark 到手机,可逐会话开关
29.7/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Dalcui/dsh-session-notice该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-session@deepseek-ai/dsh-settings@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 会话结束推送手机
- 逐会话开关通知
- 三步连通测试
DSH 会话 Bark 通知插件:会话头部按钮切换「会通知」状态(持久化),轮次停止时经 Bark 推送到手机;设置页配 server/key 并提供 ping→push→register 三步连通测试
README
由 DeepSeek 最新模型翻译生成dsh-session-notice
DSH(DeepSeek Harness)会话 Bark 通知插件:在会话界面点一个按钮切换「会通知」状态,该会话轮次停止时自动经 Bark 推送到手机。
- 正常结束 → 推送最后一条文本消息(长文按「首段 + 末段」摘要)
- 异常停止(出错 / 被阻塞 / Token 上限 / 崩溃遗留 / 钩子中止)→ 推送完整错误内容(不按正文那样摘要截取)与必要信息
- 你主动点「停止」不通知(aborted 且 cause 为 user/parent/disposed 等中止链,含主会话停止时级联到 subagent 的 parent 中止)
- 开关按会话独立、持久化(服务重启后保持),随时可切换
- 插件管理页本插件详情页配置 Bark server / key,并提供 ping → push → register 三步连通测试(dsh ≥ 0.1.7;0.1.5 为「设置 → 插件配置区」卡片)
安装
版本要求:适配 dsh 0.1.5 – 0.2.0-rc.2。
- dsh 0.2.0 起(本仓库 0.2.1 起):插件需在 peerDependencies 声明兼容的 dsh 运行时版本,否则启动时被跳过加载(Plugin ... is incompatible with dsh ...)。
展开完整文档(README 剩余 1 节)
dsh-session-notice
DSH(DeepSeek Harness)会话 Bark 通知插件:在会话界面点一个按钮切换「会通知」状态,该会话轮次停止时自动经 Bark 推送到手机。
- 正常结束 → 推送最后一条文本消息(长文按「首段 + 末段」摘要)
- 异常停止(出错 / 被阻塞 / Token 上限 / 崩溃遗留 / 钩子中止)→ 推送完整错误内容(不按正文那样摘要截取)与必要信息
- 你主动点「停止」不通知(aborted 且 cause 为 user/parent/disposed 等中止链,含主会话停止时级联到 subagent 的 parent 中止)
- 开关按会话独立、持久化(服务重启后保持),随时可切换
- 插件管理页本插件详情页配置 Bark server / key,并提供 ping → push → register 三步连通测试(dsh ≥ 0.1.7;0.1.5 为「设置 → 插件配置区」卡片)
安装
版本要求:适配 dsh 0.1.5 – 0.2.0-rc.2。
- dsh 0.2.0 起(本仓库 0.2.1 起):插件需在 peerDependencies 声明兼容的 dsh 运行时版本,否则启动时被跳过加载(Plugin ... is incompatible with dsh ...)。本仓库已声明 ^0.1.5-rc.1 || ^0.1.7-rc.1 || ^0.2.0-rc.1。dsh 0.2.0 运行时取消 cause 收敛为 user/parent/disposed/hook;持久化联合类型仍保留 legacy(无 cause 的 0.1.x 旧记录),本插件照常识别并归入「用户主动停止不通知」静默链。
- dsh 0.1.7(0.1.7-rc.2 起可用):dsh-settings 重构(settings.register 移除,改为插件 Config 导出 + volatile 字段 + ctx.settings.describe/update;客户端设置入口从 settings.plugin.item 迁移到 plugins.bundle.config)。
- dsh 0.1.5 及以下旧版请用本仓库 0.1.5 时代的历史提交。
推荐:link 安装(符号链接,改动源码后无需重装)
dsh plugin --profile web add link:/path/to/dsh-session-notice
或从 GitHub 安装
dsh plugin --profile web add github:Dalcui/dsh-session-notice
安装后若插件行未自动生效,重启 web profile:launchctl kickstart -k gui/$(id -u)/io.deepseek.dsh-web
注意:请使用 link: 或 github: 协议。file: 协议在 pnpm 下是「安装时刻快照」,新增源文件不会同步到 .pnpm store,会导致 ERR_MODULE_NOT_FOUND 并使整个 profile 加载失败。
使用
1. 配置密钥:插件管理 → 已安装 → 查看 dsh-session-notice → 展开设置,填写 Bark 服务器(默认官方 https://api.day.app)与设备密钥(Bark App 内查看)。密钥只存 Host 侧,界面仅显示末 4 位,不落浏览器、不进日志。
2. 测试连通:点「测试推送」,三步独立状态:①服务器可达(GET /ping)②测试推送送达(POST /push,唯一「就绪」信号)③仅在失败时诊断 key 是否已注册(GET /register/<key>,不产生推送)。
3. 开启通知:回到会话,点头部的铃铛按钮(单色图标,跟随主题,无文字)。鼠标悬浮显示操作说明,点击切换后短暂显示结果反馈;开启后该会话每次轮次停止都会推送。
设置项
| 字段 | 默认 | 说明 |
| Bark 服务器 | https://api.day.app | 官方或自建;可带路径前缀;Basic Auth 用 user:pass@host 形式 |
| 设备密钥 | 空 | Bark App 内查看;role('secret'),只回显末 4 位 |
| 分组(group) | 空 = 按工作区 | 手机通知按项目聚合、支持按分组静音 |
| 正文摘要字数 | 200 | 通知只显示约 4 行,超出按「首段 + 末段」摘要并标注总字数;范围 40–1000 |
实现要点
- 回合结束监听:Host 侧 ctx.on('session/event') 按 event.type === 'turn/end' 分派,完整区分六种停止原因(agent/turn-stopping 只自然收尾触发、会漏异常路径,故不采用)。主会话等待 subagent 返回时不会误通知——subagent 调用是未完成的工具调用,回合不结束即不写 turn/end;只有真正收尾才推一条汇总。
- 用户主动停止不通知:aborted 且 cause 属 user/parent/disposed(含 cause 缺失的历史事件)保持沉默——停止是用户自己按的,通知只会打扰;主会话被停时其 subagent 收到的是 parent 级联中止,同样静默(防一次点击多条轰炸)。hook(自动化策略终止,附 reason 文案)保留推送。
- 正文双层预算:
- 展示层 —— 仅正常完成时对正文做默认 200 字摘要(方案 C:首段 + 末段,跳过代码块,按码点不劈 emoji),超出缀「(共 N 字)」。因为 iOS 横幅约 4 行(≈80–120 中文字),全量塞入既看不全又笨重。异常停止不做展示层摘要,错误内容完整保留(仅协议层字节闸门兜底)。
- 协议层 —— 整包 JSON ≤ 3900 字节(同时满足 nginx 8192B 与 APNs 4096B),truncateByBytes 按码点兜底。
- 折叠 id:id = sha1(sessionId|turn) 前 16 位 hex(≤64B ASCII,服务端当 apns-collapse-id);UA 固定 dsh-bark-notify/<ver>;超时 8s 且默认不自动重试(服务端 3s timeout < APNs 往返,超时=结果不确定)。
- 失败分类:网络 / 鉴权(418 纯文本,不按 401 判)/ 体积(413 HTML)/ 密钥错误(device token,熔断不重试)/ 上游 5xx / 格式错;403/429 属运维层,不归密钥错。
- /register 安全红线:只允许 GET {server}/register/<key>,key 为空禁止发请求、永不带 query/body(裸 /register 是写接口,会覆盖设备 token)。
- 直连传输(绕开环境代理劫持):发送/探测默认走 directFetch(node:http/https + agent:false,不读取 HTTP(S)_PROXY / NODE_USE_ENV_PROXY)。原因:Node ≥ 24 在进程环境携带 NODE_USE_ENV_PROXY=1 与代理变量(如 launchd plist 注入 Clash Verge 的 127.0.0.1:7897)时,全局 fetch 会被劫持到代理,代理不可达时推送全部 fetch failed、无任何日志。若自建 Bark 服务器必须在代理网络内才可达(罕见),可用环境变量 BARK_USE_FETCH=1 显式回退全局 fetch。
- HTTP 路由而非 connection.rpc:ctx.connection.rpc.handle 在本机 0.1.5-rc.1 上会用调用者 fiber 访问 ctx.webServer 而抛 cannot get property "webServer" without inject,导致整个 profile 崩溃循环。因此改用与 dsh-codebuddy-cli 相同的写法:ctx.inject(['webServer'], webCtx => webCtx.webServer.register({ kind: 'exact', path: '/plugins/dsh-session-notice/' })),客户端直接 fetch。4 个路由逐个 try/catch(dsh 0.1.7 起对重复路由注册直接 throw,防止极端 HMR 时序下全部路由丢失)。
- 卡片样式:dsh-client-ui-settings-plugins 不导出 PluginCard(跨插件值导入被纯度门禁禁止),故自写 CSS 复刻原生观感(--dsw-alias- 主题变量、12px 圆角、34px 输入框、15/13 字号)。
- group 归一化:trim + 去控制字符 + ≤40 字节;归一后为空则省略字段(group:"" 会形成空名分组),超限回退 <basename> · <sha1(cwd) 前 6>。
0.2.0 适配说明
dsh 0.2.0-rc.2(本机实测,2026-09-30):
- 插件 peerDependencies 版本门禁(唯一破坏面):dsh-app-boot 新增 evaluatePluginCompatibility,逐项检查插件 peerDependencies 中 @deepseek-ai/dsh / @deepseek-ai/dsh- 是否 semver 满足运行时版本(includePrerelease;workspace:^|~| 视为当前运行时)。不满足的插件整体跳过加载(组合树缺失、patch 报 entry not found、HTTP 路由 404)。解法:peerDeps 增加 ^0.2.0-rc.1 分支(或用 workspace:,但二者不可混用——workspace: 前缀会使整条 range 恒不满足)。
- 复核未变:ctx.settings.describe()/update() 契约、webServer.register({ kind:'exact' })、session/event 的 turn/end 六种 live reason 形状(blocked/max-tokens/interrupted/error/completed/aborted;0.2.0 另有 forked 种子标记,仅 fork 种子构建写入、运行时不发出,插件按未知 kind 沉默)、Session.snapshotEvents()、客户端 slots plugins.bundle.config(keyed,key=包名)与 conversation.session.header.utilities(list,standardProps 带 sessionId)、浏览器半 window.__ModuleLoader__.load({id, factory}) 懒 CJS 格式、schemastery .volatile()/.role('secret')。
0.1.7 适配
dsh-settings 0.1.7 重构了插件设置契约(本机 0.1.7-rc.2 实测):
- 旧:ctx.settings.register(ns, schema, { base, applies }) → scope 的 get()/update()
- 新:插件导出 Config(schemastery schema,字段标 .volatile() 才允许写入且 live 生效),读写走 ctx.settings.describe()(Host 侧不带 redactSecrets 时 value 含完整 secret)与 ctx.settings.update(ns, patch, expectedRevision?)(merge 写入 profile patch,cordis.patch.yml 可见 config: 节)
- 客户端设置入口从 settings.plugin.item(0.1.7 已删除)迁移到 plugins.bundle.config(keyed,key = npm 包名 dsh-session-notice,owner 以 view: 'page' 渲染)
- volatile 字段经 cosmokit Volatile<T> 包装,读取需解包;启动时用组合层解析值兜底,激活后以 describe 为准(300ms TTL 缓存)
- 会话开关 enabledSessions 持久化在 profile patch;toggle 进程内串行化防并发覆盖
切换到 0.1.7 后首次需重新填写 Bark key(旧 0.1.5 设置存储不自动迁移;dsh 0.1.7 只迁移旧 settings.yaml 的已知 section,第三方 namespace 不在其列)。
开发
npm install --legacy-peer-deps # 类型检查所需 @deepseek-ai/ 从本机 DSH/profile 链接
npm run build # tsc(Host 半)+ esbuild(浏览器半 → lib/client.js)
npm test # node:test(100 用例:纯函数 + 有状态 mock + 假接线)
npm run typecheck
本地 typecheck 需把 @deepseek-ai/* 类型包软链进 node_modules(它们随 DSH 安装提供,不在公共 registry)。
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Dalcui/dsh-session-notice
会话结束自动推送 Bark 到手机,可逐会话开关
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,362已汉化DSH
71.4
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,076已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,814已汉化DSH
71.1
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。