Skip to content

Releases

v1.0.2 — 图标契约对齐与样式表加固

Choose a tag to compare

@oliblue-evan oliblue-evan released this 29 Sep 17:20

修一个会让胶囊退化成「巨型图标」的 bug —— 以及它为什么反复出现。

修了什么

  1. 内联 SVG 写死宽高(时段图标 14 / 刷新 13 / 计量 14)。只有 viewBox 的 SVG 在
    没有样式表时会撑满容器,那正是"巨型月亮"的放大器;现在最坏也只是"没排版但尺寸正常"。
  2. 样式表改为幂等 + 带键注入、不随 dispose 移除。官方客户端插件也是这个写法
    (按 data-plugin-css 键 querySelector,已存在就复用)—— 这样即使出现孤儿注册,
    组件也仍拿得到样式。
  3. 图标线宽对齐官方契约:ICON_REGULAR_STROKE = 1(原来用 1.5,比全应用任何图标都重)。

为什么它反复出现(这一段值得一读)

前两轮的修复其实是对的,但从未到达浏览器:profile 里
node_modules/dsh-usage-pill 是一份物理副本而不是符号链接,宿主一直在发那份旧拷贝 ——
刷新没用,重启也没用。

README 新增「开发提示」,写明排查三步:

ls -la ~/.dsh/profiles/<profile>/node_modules/dsh-usage-pill   # 链接还是物理副本?
curl -s -N --max-time 4 http://127.0.0.1:19387/plugins/events  # 拿 id + rev
curl -s "http://127.0.0.1:19387/plugins/<id>/client.js&rev=<rev>"  # 抓宿主实际发出的字节

换成符号链接后宿主会在下一次轮询自行重读,不必重启;而宿主半边(index.js)改完
必须重启 —— 两套读取路径要分清。


MIT © 李敖(oliblue)· 与 DeepSeek(deepseek-flash)协作完成

v1.0.1 — 修「组件在、样式没了」

Choose a tag to compare

@oliblue-evan oliblue-evan released this 29 Sep 16:27

修一个会让胶囊偶尔退化成「巨型图标 + 挤在一起的文字」的 bug。

现象

徽标偶尔变成一个撑满容器的大图标,文字也挤在一起 —— 即整张样式表没生效,但组件仍在渲染。

根因

slots.inject(key, cb) 返回 dispose 函数,我把它丢掉了,注入没有挂在插件 fiber 上。
插件被 dispose 时(切插件开关 / 客户端热更新 / 重挂载):

  • 由 ctx.effect 管理的 <style> 按预期被移除;
  • 而 slots.inject 的注册泄漏下来继续渲染。

于是进入「组件在、样式没了」的状态:PeriodIcon 是个没有 width/height 的 <svg viewBox>,
尺寸全靠 CSS 的 .umPill svg{width:14px;height:14px},规则一失效就撑满容器;gap:6px 也没了,
¥11.44 · 余 ¥42.39 于是贴在一起。

干净加载时样式注入先于槽位注册,所以首次加载不可能出现;一旦发生,整页重载即可恢复。

修法

照官方每一个客户端插件的写法,把注入包进 ctx.effect:

ctx.effect(() => ctx.slots.inject('slot', () => ctx.slots.register({ ... }, C)), '标签')

并加回归门禁:每个 slots.inject 都必须紧跟 ctx.effect(() => …)。

第一版门禁写成「往前 160 字符里出现过 ctx.effect( 就算过」——变异测试(把修复回退,看门禁是否报错)
证明它完全抓不到回退:有多处注入时,漏包的那处仍能看到前一处留下的 ctx.effect(。
改成紧贴判定后,变异测试确认能报错。

升级

已装过的重装即为更新:

dsh plugin --profile <profile> add github:oliblue-evan/dsh-usage-pill

装完刷新页面(客户端 bundle 走热更新,宿主半边未改动,无需重启 DSH)。

v1.0.0 — 用量、费用与余额

Choose a tag to compare

@oliblue-evan oliblue-evan released this 29 Sep 16:11

输入框下方一枚胶囊,说清四件事:本会话花费 · 账户余额 · 当前峰谷 · 今日时段轴。

亮点

  • 查余额不需要 API Key —— 已登录 DeepSeek 账号的用户走宿主自己的账号授权
    (ctx.remote.account.getBalance),密钥全程不出现;只有「没登录、只有 API Key」的
    用户才回落到宿主路由(带同源 / 跨站 / 非回环三重守卫)。据我所见,同类插件的真实
    余额普遍要求你自行配置 API Key。
  • 金额按每笔用量自身的时刻与模型计价 —— 不会被后来的峰谷切换或模型切换追溯改写。
    拿不到宿主投影时退回「按当前价估算」并在面板里如实标注,绝不让估算冒充账单。
  • 零运行时依赖 —— 宿主半边只用相对路径 import,避免 link: 安装下裸模块名解析失败
    导致整个宿主半边起不来。

功能

区域 内容
徽标 时段图标(☀ 高峰 / 🌙 空闲)+ 当前花费 + 账户余额,三段各说一件事
面板 四桶明细(单价贴在各自行上)· 缓存已省 · 峰谷倒计时 · 今日时段轴
设置 注册在 plugins.bundle.config,5 个展示开关,即时生效、存在本地浏览器
插件页 标题/简介/图标按官方 locale/*.json + package.json.icon 约定提供

工程

  • 48 项断言(npm test),含价目表防漂移门禁、投影注册契约、打包契约(含 iconOf 全部规则)
  • 版式对齐宿主原生:胶囊与真圆显式退出全局超椭圆、开关照抄官方 Switch、
    分隔点按官方 DOM 结构(包在 label 内)以保持 6px 间距
  • 宿主的 dsh-usage-pill 条目自带 patch 层,不手改 profile 的 cordis.patch.yml

安装

dsh plugin --profile <profile> add github:oliblue-evan/dsh-usage-pill

或用 plugin_manager(action: "install_bundle", target: "github:oliblue-evan/dsh-usage-pill")。

装完刷新页面即可;若插件页的标题/简介没显示,说明宿主侧包元数据快照是旧的,
整页刷新(Cmd+R)一次 —— 客户端 bundle 走热更新,与包元数据的取数时机不同步。

完整说明见 README。


MIT © 李敖(oliblue)· 与 DeepSeek(deepseek-flash)协作完成