概览
dsh-notify-me
README / ZH
插件文档
目录摘要
dsh.pub 核对固定版本的组合包契约、运行时事实与分发语义;完整 README 请查看源仓库。
在 GitHub 阅读完整 READMELIMITATIONS
已知限制
**运行前提** - 默认只在页面开着时提醒(后台标签 / 最小化可以,关标签页即失效——浏览器层方案固有限制)。开启宿主侧兜底后,页面关闭仍能收到**外部推送**:它要 profile 里 `hostFallback.enabled: true`、`gateway.target`(或 `hostFallback.target`)与一个 0600 凭据文件,而且宿主进程自己在跑。 - 通知经由浏览器弹出,需允许浏览器通知权限;每次页面加载后第一次出声 / 弹通知前要先在页面上点过一下;未授权时只剩提示音与标题标记。 - 系统通知横幅只画在主屏:Windows 没有设置项、Chromium 没有 API 能把它指到别的显示器(多屏时副屏收不到)。要跨屏只能靠外部推送转到手机(1.12.0 起页面里不再画审批卡片)。 - 配置存在浏览器 `localStorage`:换浏览器 / 设备或清除站点数据后回到默认值(设置页可一键恢复默认)。 **平台差异** - 快捷裁决按钮要 Service Worker:`http://127.0.0.1`、`https` 可用,`http://192.168.x.x` 这类局域网地址不行;**桌面端(`dsh-app://`)已实测无法注册 Service Worker**(宿主未开放 `allowServiceWorkers` 特权),审批通知退回无按钮样式。宿主不渲染通知按钮时,`debug()` 的 `bridge` 字段会说明原因,其余功能不受影响。 - Windows 的系统通知标签上限 64 字符,而 Chromium 交给平台的是 `n#<origin>#<tag>` 整串——桌面页面 `dsh-app://app` 一项就占去 16 个。插件按当前 `location.origin` 算剩余预算,超长时保留可读前缀、尾部换成短哈希,所以 `debug()` 里看到的标签可能被截短;平台仍然拒发时,原文记在 `debug().lastToastReject`,设置页的测试按钮也会如实报出来,不再「提示已发送但什么都没弹」。 - 桌面端(Windows)点通知后窗口仍可能抬不起来:目标窗口属于更高完整性级别(提权 / UAC)、在另一个虚拟桌面、前台被别的进程反复抢回去,或窗口被 `SW_HIDE` 隐藏到托盘时,宿主脚本回 `FOCUSED=0`、路由回 `202`,对话照常切(详见[桌面端怎么抬窗的](#桌面端怎么抬窗的))。 - 桌面端(macOS / Linux)点通知依赖 `dsh://open` 深链:系统未注册 `x-scheme-handler/dsh`、或壳没有 `second-instance` / `open-url` 处理时抬不起来;Linux 上已实测正常,macOS 未实测。 - macOS:提醒、提示音、标题标记、点通知跳转都没有平台假设,照常工作;但 DSH Desktop(Electron)的系统通知要求应用已签名,未签名的通知直接发不出去,官方 macOS 版是否满足这一前提未实测;审批按钮在 macOS 桌面宿主上的渲染同样未实测(Windows 桌面端已实测不渲染)。 **提醒内容与时机** - `≥ 0.1.6`(含 `0.2.0-rc.2`、`0.2.1-rc.2`)的「回复完成」提醒正文只有会话名,不再附带回复摘要——宿主快照已不再提供 `nodes`;提醒本身照常触发。 - 标题标记由宿主与插件共同写 `document.title`:宿主重算标题时标记可能被覆盖,直到下一次提醒事件重新写成。 - 「当前对话不弹通知」按「窗口是否在前台」判定:被别的应用盖住、切到别的应用、最小化都算后台;回到前台或重新有键鼠输入后恢复静默。 - 按对话静音的标记注在宿主的 `sidebar.session.row.leading` 槽位,而宿主在「这条会话有运行状态」时用状态点占着这个位置,标记就不渲染——正在跑的后台任务看不到划掉的铃铛,停下后自动回来;静音本身不受影响。 **外部推送** - 受浏览器跨域(CORS)限制:端点不放行时自动降级为「送出但不可确认」(no-cors),如实标为「已送出不可确认」;Discord、飞书、Server酱、WxPusher 放行跨域,可直接确认送达。钉钉不放行任何 CORS 头、又只收 `application/json`,页面发不出去,所以没有做成目标类型(自建中转 + 自定义目标才行)。临时失败(网络中断、5xx、429)按退避重试,重试仍失败进失败记录,其余错误立即停、不重试;转发在本地提醒决定要发之后才触发,所以被静音的提醒也不会外发。 - 同源中继补上的只是「页面够不到要认证的网关」这一类:页面 POST 到同源路由,宿主补凭据并回传网关的真实状态码。仍然成立的边界有几条——中继与宿主侧兜底都要求宿主进程在运行(`dsh web` 或桌面端主进程),它们不是独立守护进程,宿主退出就都停;宿主跑在代理环境里时网关域名要进 `no_proxy`,否则投递会绕到代理出去;兜底只补外部推送,本地系统通知、提示音、标题标记与审批按钮仍要页面在;`pageLeaseMs: 0` 是调试开关,页面开着也会收到两份;中继路由路径等同于口令,别让它出现在公开记录里。 **设置页图标补丁** - 左侧导航行图标靠 DOM 补丁:外壳按分区 id 硬编码图标且 `settings.section` 没有图标字段,插件只能在面板渲染后把那一行的 `<svg>` 换成铃铛。命中依赖宿主当前的面板结构(`data-shortcut-modal="settings"` + 导航按钮里的标签 `<span>`),DSH 改了这套结构就会静默回落到默认齿轮,其余功能不受影响。标志与命名的取舍见 [docs/brand/README.md](docs/brand/README.md)。
