Repository navigation
Releases: realguan/dsh-deepseek-chat-embed
Release list
v0.1.2 — 模态弹窗期间原生子视窗让位
修复
DSH Dock 下打开「设置」弹窗时,右侧 DeepSeek 聊天遮挡弹窗。
弹窗经 React Portal 挂在 document.body,遮罩 z-index:1000 + 居中 800px 卡片;而 Dock 的聊天是顶层原生 WKWebView,物理图层压在主页 Webview 之上,遮罩盖不住——弹窗右半边被白底遮挡,表单与关闭按钮不可见不可点,点击右侧也无法击中遮罩。
- 弹窗在场即
hide()让位,退场后自动open()原位接回,会话历史 / 登录态 / 滚动位置零损失 MutationObserver只看document.body直接子节点(不开subtree),不解析节点、不猜 class 名- 判定与策略分离:
anyModalActive()(事实)→modalBlocksHost()(策略)
仅对原生视窗壳生效
| 壳 | 聊天形态 | 遮罩能否盖住 | 行为 |
|---|---|---|---|
| DSH Dock (Tauri) | 原生 WKWebView |
❌ 盖不住 | 让位 |
| 官方桌面版 (Electron) | DOM <webview>(.dsce-overlay z-index 200) |
✅ 官方遮罩 1000 天然盖住 | 零干预 |
| web profile | 无 guest | ✅ | 零干预 |
官方 Electron 下聊天在磨砂遮罩下依稀可见正是官方交互,跟着 hide() 反而会把聊天整个弄消失——那是回归,不是修复。此分流有回归测试钉住。
质量整改(相对初版)
- 删掉 43 行可证明死代码的重复监听(
syncToHost在无 host 时直接 return,而有 host 时attach()已建过监听) - 删掉
[class*="overlay"]式 class 名猜测选择器及整套节点匹配循环 + 死分支 - 抽取
frameThrottle:chrome / modal / scroll 三条路径重复的「压到下一帧、一帧一次」防抖收为一处 hostIsBlockedByModal→anyModalActive+modalBlocksHost:判定与策略分离,策略处按宿主分流- 撤掉 fix 提交里违反仓库惯例的版本号 bump(版本只在
chore(release)动)
契约测试 89 → 100 项全绿(含 4 项环境分流回归断言)。
已知取舍
Dock 下弹窗期间右侧为空白,与官方「聊天在遮罩下依稀可见」仍有差距。追平它需要壳侧新增原生视窗截图 IPC(takeSnapshot → PNG 垫进 DOM),属另一档复杂度,本版不做——已在 docs/embedding-contract.md §11 与代码注释中如实记录,不假装不存在。
升级提示
壳侧无需任何改动(复用既有 embed_chat_open / embed_chat_hide),插件单包即可生效。
v0.1.1 — 修复官方桌面端安装失败;浮层脱流不变量
修复
1. 官方桌面端安装失败(#1)
移除 prepare 构建钩子。pnpm 11 的供应链策略要求 git 托管的包在执行构建脚本前,必须在该 Profile 的 pnpm-workspace.yaml 中按「精确到 tarball(含 commit hash)」加入 allowBuilds;而 dist/ 本就随仓库提交,消费者侧不需要任何构建步骤。
实测(pnpm 11.7.0,与官方客户端同版本):github:realguan/dsh-deepseek-chat-embed#v0.1.1 与默认分支均可直接安装,无任何白名单要求;带 prepare 的 v0.1.0 则会命中该策略。
2. 浮层脱流不变量(2026-10-14 现场故障)
.dsce-overlay 的 position: fixed 原先只来自插件自己注入的 <style>;样式表先被 dispose 时,浮层退化成 <body> 末尾的普通块——壳文档被撑高、整页可滚,并留下一张挂在活 guest 上的 538x124 白卡。
- 脱流不变量(
position/z-index/display/overflow/box-sizing/background)写入行内样式,不再依赖可被移除的样式表; - 应用期与样式表清理时按 DOM 标记清扫残骸;
destroy()先摘 DOM 再释放租约,释放失败只记日志,不拿页面布局陪葬;- 宿主离开视口即让位;补
scroll捕获监听(rAF 节流、只测宿主一个盒子),避免逐帧跑文档级查询。
工程
- 新增
--check门禁:dist与src/client.js不一致时npm run check直接失败且不写文件——删除prepare后没有人会在消费者侧重建 dist,没有这道门禁就会静默发出陈旧 bundle(正反两向已实测)。 - 测试 81 → 89 项;README 更新安装说明、开发门禁与 FAQ。
安装
github:realguan/dsh-deepseek-chat-embed#v0.1.1
v0.1.0 及更早版本仍会命中 pnpm 构建脚本审批;若需继续使用旧版,请按 pnpm 报错提示把对应 key 加入
allowBuilds。