Repository navigation
Releases: Bai-2008/dsh-better-panel
Release list
1.3.10 — 自建浮层接管官方模型席 + 毛玻璃观感
更新日志
本分支基于上游 dsh-codex-effort-slider 1.0.0。
下面是相对上游的全部改动(按版本倒序)。
文档分工:入门/安装/使用/FAQ → README.md;
实现细节(接管时序、DOM 锚点、色彩与粒子数学、测试台策略)→ ARCHITECTURE.md;
真机事故复盘(现场 → 根因 → 修法 → 断言,九条)→ INCIDENTS.md;
主题式改动清单与移植对照 → MODIFICATIONS.md。
本文只留"每一版改了什么",每条都指向细节所在。
1.3.10 — 再透一档;阴影不再被"一个框"裁掉
- 阴影被裁成矩形:定位壳
.cxp-root的overflow:auto会裁掉后代的box-shadow。
滚动安全网挪到面板自己那层(.cxp-root{overflow:visible}+.cxp-panel{overflow:auto}),
行内maxHeight两边都给。 - 底色再透一档:保留官方色相、只降 alpha(浅
rgba(248,249,250,.46)、深rgba(67,69,74,.40),
官方令牌是.58/.45)。没有用color-mix()调淡官方值 —— 引擎不支持时整条声明失效,
面板会变成完全没有底色。 - 推理等级卡片也改半透明(浅
rgba(255,255,255,.55)、深.06):实心卡片盖住面板 2/3 面积,
会把毛玻璃整个抵消。
细节与断言 → INCIDENTS.md 第 6、7 条。测试 902 → 908。
1.3.9 — 面板材料对齐官方菜单:毛玻璃 + 浅色主题下看得见的阴影
- 模糊用官方令牌
--dsw-menu-backdrop-filter(blur(40px) saturate(150%))+-webkit-前缀; - 底改用官方菜单填充色相的半透明 rgba;
- 阴影叠官方
--dsw-shadow-lv3再补一层落地阴影(官方elevation-prominent只有 4%~5% alpha,
浅色页面上看不见);深色主题另给一套; - 档位弹层与面板同一种材料。
细节与断言 → INCIDENTS.md 第 6 条。测试 887 → 902。
1.3.8 — 换模型时的默认档位改成「正中(偶数档取中间的下一个)」
默认档位 = floor(n/2):4 档 → 第 3 档、5 档 → 第 3 档、2 档 → 第 2 档。
两处共用同一条规则:点击模型时写回宿主的档位、目录里没有明确档位时滑条停在哪;
会话里明确存着的档位仍优先。宿主的 defaultEffort 不再参与定位。
细节(含"为什么以前没被发现")→ INCIDENTS.md 第 9 条。测试 868 → 887。
1.3.7 — 修:面板永久卡在「会话目录未就绪」
插件级 inject 补上 remote / remote.session:Cordis 的服务访问跟着调用方 ctx 走,
而接管官方席之后我们是 directoryFor() 唯一的调用方(官方组件不再渲染、命中不了它建好的缓存)。
测试台同时复刻了这条规矩 —— 少声明一个服务,离线套件立刻红。
细节 → INCIDENTS.md 第 2 条。测试 864 → 868。
1.3.6 — 把"为什么没就绪"摆到台面上
resolve()不再静默catch:失败原因记进访问器(reason())、每换一条新原因往控制台报一次,
面板在"未就绪"时把宿主原话直接显示出来(悬浮给全文)。- 新增
no-session状态:一个会话 id 都没有时("新会话"空白壳)说
"还没有会话 —— 发一条消息后就能选模型",而不是误导性的"正在重试"。 - 两条会话 id 来路互为备份:kit 的
sessionId优先、inject的binding.key兜底
(inject只回私有键__sessionKey,不能回{sessionId}—— 那会盖掉 kit 里正确的值)。 - 顺手修测试台一处失真:
setupPicker以前从不调用inject,所以"inject 覆盖 kit"离线测不到。
测试 853 → 864。
1.3.5 — 空态说人话;两份"宿主侧"的事故
- 空态区分三种处境并给出
data-phase:unresolved(我们还没拿到)/empty(宿主就绪但没列 provider)/
no-session;按钮的悬浮说明同样带上。 - 查清"宿主就绪但空"的来源(账号 provider 拿不到令牌时静默返回空列表)→ INCIDENTS.md 第 3 条。
package.json的 UTF-8 BOM 让整包被宿主丢弃(rows: []、界面毫无反应)→
INCIDENTS.md 第 4 条;同时补上反面规则:两个.ps1必须带 BOM。
测试 839 → 853。
1.3.4 — 三条真机反馈
- 流式输出时面板消失:聊天区自动滚动触发了"滚动即关闭",改成只重定位、不关闭;
触发器几何为 0(宿主hidden了控件行)时保持原位。
顺带修掉一个隐藏 bug:位置以前是渲染时现读的,重定位不改 state → React bail out → 面板纹丝不动;
现在pos进入 state。 - 浅色主题星尘发黑:星尘固定浅色(它永远落在蓝紫填充层上,跟随主题令牌会在浅色下变深色)。
- 面板右缘对齐输入框右缘(以前是左缘贴触发器)。
细节 → INCIDENTS.md 第 5、8 条。测试 823 → 839。
1.3.3 — 空目录不再是一片空白
- 提示/失败清单都渲染出来,且视口高度算得下它们(以前 44px 装不下 48px 的提示,
被overflow:hidden整句裁掉); - 逐 provider 的失败清单按官方文案渲染;
load失败按退避重试 + 心跳兜底;"就绪但空"主动刷一次全局目录(8s 冷却、最多 3 次);- 按钮文案如实("正在加载模型…")。
细节 → INCIDENTS.md 第 1 条。测试 806 → 823。
1.3.2 — 接管官方那颗模型席按钮(priority: -1 遮蔽)
官方那颗席按钮注册在 single 槽 conversation.input.model(官方没写 priority = 0),
single 槽"同优先级撞了会抛错、换优先级即遮蔽(最低者渲染)",所以用 priority: -1 接管 ——
输入区只剩一颗按钮,没有第二颗。三条时序都有退路(官方席先声明 / 工具行先声明 /
官方席始终没有),最差回到"两颗按钮",绝不会两边都没有。随之接过来两条 owner 语义
(locked、紧凑态两个 CSS 变量)。代价:官方菜单没有入口了(/model 命令仍在)。
细节 → ARCHITECTURE.md 第 3 节。测试 771 → 806。
1.3.1 — 二级页模型列表按「新发布 → 旧发布」排序
宿主目录没有发布日期字段,所以顺序由 id / 显示名里的两个信号算出:
版本号降序(逐段按数字比)→ 同版本时别名在前、快照版在后 → 同为快照按日期降序 →
认不出的沉底并保持宿主原顺序(稳定排序)。
细节 → MODIFICATIONS.md 第七节。测试 751 → 771。
1.3.0 — 自建浮层(第二个界面)
按参考实现复刻自建模型面板:收起态一颗按钮、两级面板(provider → 模型 + 搜索)、
常驻推理等级卡片、档位弹层;写回仍走去抖/去重;新增"无档位模型也能选中(只切模型)"。
官方菜单那条路保留但默认关闭(ENABLE_OFFICIAL_MENU_SLIDER = false,两套互斥)。
工程上两处踩坑记录(chunk 必须自注册、模块表按包名建表)→
ARCHITECTURE.md 第 1 节。测试 465 → 751。
无二次开发需求仅需下载better-dsh-codex-effort-slider-1.3.10.zip,让DSH安装插件压缩包即可