Skip to content

Releases

v1.0.7 — 歌词定位改为 DOM 注入,宿主 UI 更新不再漂移

Choose a tag to compare

@YardonYan YardonYan released this 06 Nov 09:31

修复

  • 宿主 UI 更新后歌词漂到页面角落、不再贴状态行的根因:歌词用 position: fixed + 视口坐标定位,而 fixed 会被任何带 CSS transform 的祖先截获 —— 宿主新版在输入框区域引入了 transform,坐标体系整个失效。
  • 渲染层重写为 DOM 注入:歌词 span 直接插入状态行元素的父容器、紧跟其后流式排布,自动继承宿主的滚动 / transform / 布局 —— 宿主以后改 UI 也不会再漂移。字体字号颜色仍从状态行实时克隆。
  • 悬停翻译改用原生 title 属性。

升级

刷新页面即可(client.js 改动不需要重启宿主)。

v1.0.6 - 修复软限流下的故障转移

Choose a tag to compare

@YardonYan YardonYan released this 05 Nov 08:46

修复

  • 抓到限流的第三种形态:POST /api/search/get/web 有时不返回 405、也不返回空,而是把 result 替换成一串加密哈希垃圾(软限流)。旧故障转移逻辑把这种响应当成"干净的搜索无结果"直接放弃,不会尝试备用端点 —— 导致 1.0.5 的故障转移在软限流下失效,歌词照样空白
  • 修复:主端点只要拿不到有效的 result.songs 数组(无论 405、哈希垃圾还是空)一律尝试备用端点;只有备用端点也拿不到才算真无结果
  • 端到端实测:主端点软限流 + 备用端点正常的环境下,《Wake up》(谢帝)成功拿到 2277 字符歌词

升级说明

更新后重启 DSH。

v1.0.5 - 双端点搜索故障转移

Choose a tag to compare

@YardonYan YardonYan released this 05 Nov 08:25

修复

  • 实测发现 music.163.com 的限流窗口远比预想长(一小时以上),60 秒退避后重试仍会撞 405,歌词可能长时间空白
  • 搜索增加双端点故障转移:主端点 POST /api/search/get/web 被限流时,自动切换到 GET /api/search/get 变体 —— 两个端点限流计数独立,实测主端点被封时备用端点仍正常返回结果;歌词直查接口 /api/song/lyric 与搜索限流独立,不受此问题影响
  • 干净的"无结果"回答不会浪费备用端点调用,只有限流/网络错误才触发转移

历史版本情况

  • 1.0.4:修复切歌后歌词消失,限流窗口内做 60 秒负缓存
  • 1.0.3:加固 Host 端,插件激活失败不再拖垮整个 web 端(web boot: 1 entry did not activate)
  • 1.0.2 / 1.0.1:修复 Client 端启动崩溃

升级说明

更新后重启 DSH 即可。限流期间歌词最坏延迟为"下一首换歌时",不再按天空白。

v1.0.2 修复宿主无法启动

Choose a tag to compare

@YardonYan YardonYan released this 05 Nov 01:43

修复真正让宿主起不来的问题。1.0.0 与 1.0.1 都带这个缺陷,请升级到本版本。

根因

  • 客户端插件的 apply 会去宿主上下文里取配置:ctx.config、ctx.options、ctx.plugin.config
  • 宿主内核启动早期,cordis 上下文中那些尚未注册的属性,读取就会抛异常
  • 异常被 fiber 的日志层吞掉,插件静默进入 failed,宿主随即拒绝启动整个 web 端,表现是双击没反应、也没有窗口
  • 1.0.1 修的是「等 slots 就绪」,方向没错,但异常发生在那一行之前,所以对本次故障无效

本次改动

  • anchorText 只从 apply 的第二个参数读取,彻底删除探测宿主上下文的整条路径
  • 错误提示改用 console 输出,不再触碰 ctx.logger。错误处理路径本身也可能因同类访问而抛异常,那样等于没兜住
  • 保留等待式挂载(ctx.inject(['slots']))与宿主无该接口时的直接挂载兜底

验证

  • 新增两条针对根因的测试:一条用记录型 Proxy 断言 apply 不读 ctx.config、ctx.options、ctx.plugin;一条用「任何属性访问都抛异常」的 Proxy 断言异常不会外泄
  • 把 client.js 退回 1.0.1 再跑同一批测试,这两条立刻变红,确认测试能咬住这个缺陷
  • npm test 9 条全绿
  • 修复后宿主连续两轮完整启动,控制台 did not activate 计数为 0

配置说明

anchorText 配在插件 patch insert 的 config 字段里,由宿主作为 apply 的第二个参数传入。不要让代码去 ctx 上找配置,这正是本次崩溃的来源。

完整变更记录见仓库根目录的 CHANGELOG.md。

v1.0.1 修复启动崩溃

Choose a tag to compare

@YardonYan YardonYan released this 04 Nov 10:40

此版本存在启动崩溃问题:客户端插件激活失败会让宿主无法启动。请改用 v1.0.2。


修复一个会让宿主直接起不来的问题。1.0.0 请勿继续使用,直接升级到本版本。

修复了什么

  • 客户端在宿主启动阶段读取 slots 服务,而那一刻该服务通常还没挂载,读取直接抛异常
  • 宿主对客户端插件激活失败是零容忍:一个插件失败,整个 web 端就拒绝启动,表现是双击没反应、也没有窗口
  • 现在改为等待 slots 服务就绪后再注册歌词行,取不到就静默待命。最坏情况只是不显示歌词,应用永远能启动

验证方式

  • 新增 6 条回归测试,覆盖服务缺失、服务延迟就绪、注册过程抛错三种情况,npm test 全绿
  • 把 client.js 退回修复前再跑同一批测试,6 条里 5 条变红,确认这批测试确实能抓住该缺陷,不是摆设
  • 插件在 DSH 里的实际显示效果仍需在 Windows 上人工确认一次

��级方式

本地目录安装的,重新执行一次安装命令后重启 dsh web:

dsh plugin --profile web add "<仓库路径>" --save-exact

完整变更记录见仓库根目录的 CHANGELOG.md。

v1.0.0 首个公开版本

Choose a tag to compare

@YardonYan YardonYan released this 04 Nov 09:06

此版本存在启动崩溃问题:客户端插件激活失败会让宿主无法启动。请改用 v1.0.2。


首个公开发布。

桌面网易云音乐在放什么,DeepSeek Harness 输入框上方的状态行右边就浮现当前那句歌词,同字体、同字号、同颜色,看起来只是那句话有点长。

新增

  • 通过系统媒体传输控件读取桌面网易云音乐的播放状态,宿主端常驻 worker 每秒上报一次
  • 宿主端按歌名与歌手检索并拉取歌词,合并原文与翻译,按歌曲维度缓存七天
  • 浏览器端每秒轮询播放状态,把当前演唱行贴在状态行右侧,字体、字号、颜色从状态行实时克隆
  • 播放进度由宿主端秒表推算,切歌归零、暂停停表、恢复续走
  • 宿主状态行不存在时不渲染,���持隐蔽
  • 歌词路由只响应回环地址并校验 Origin,防 DNS rebinding
  • 悬停歌词显示完整句子与翻译,浮层不拦截点击,下方控件照常可用
  • 支持 anchorText 配置,适配非中文界面
  • 中英文界面文案

安装

环境要求:Windows 宿主、桌面版网易云音乐,并已在设置中打开系统媒体控件开关。

dsh plugin --profile web add "<仓库路径>" --save-exact

安装后重启 dsh web,再刷新页面。

已知限制

拖动进度条后歌词会漂移,单曲循环时秒表会走出歌尾,纯音乐与翻唱版本可能匹配到错误歌词。完整列表见 README 的注意事项与已知限制一节。

完整变更记录见仓库根目录的 CHANGELOG.md。