## 0.1.6 发布验证 · 2026-10-11 本次发布包含下述三插件浮层隔离和样式归属 / 恢复修复,搭配划词解读 0.10.2、最近会话 0.2.3。发布前重新执行构建、版本一致性检查、完整视图测试与三插件独立 DOM / Chrome 验证;真实 Harness 验收由用户完成。下方的“main 未发布”描述是当时的历史记录。 ## 三插件浮层隔离 · main 未发布 · 2026-10-11 按用户选定方案,完整视图移除公共 shell.overlay 的 70 层级覆盖及对解读胶囊的隐藏样式。解读保留官方槽的生命周期锚点,由自身挂载 body fixed 根(70),公开 data-dsh-floating-owner="explanation";稳定 ref 避免重渲染摘挂。解读自行观察完整视图状态并隐藏 / 恢复自己的胶囊。完整视图通过公开归属识别伴随窗口,旧类名保留兼容。最近会话列表从 30 降为 19,低于公共浮层 20 和解读根 70。 两个原公共层 / 胶囊回归先在旧实现失败,跨仓库独立集成先复现解读仍受公共父层限制及最近会话仍高于 20。修复后完整视图 75 项检查、解读全套测试(真实 host 在线部分隔离为不可达,明确跳过)、解读 / 最近会话构建与类型检查通过;解读新增自有根与胶囊状态的独立浏览器检查纳入既有面板冒烟。 三插件 Chrome 独立验证 15 项全部通过:分栏与全屏重叠处 elementFromPoint 命中解读、公共层保持 20、空白命中背景按钮、宿主模型菜单 1100 越过解读、连续 Esc 依次收聊天和解读、胶囊往返、稳定 ref、槽卸载 / 再挂载及插件卸载不删除其他节点。使用实际解读 / 完整视图客户端,最近会话采用实际构建 CSS 和静态列表夹具;宿主菜单使用核对后的层级夹具。无头虚拟时钟适配 rAF,未验证动画时序。未操作真实 Harness,未发送真实模型请求或修改宿主设置。 三个插件版本保持不变,只提交与推送,不发布新版本;更新完整视图时应同时更新解读插件以获得独立根和胶囊控制。 ## 样式归属与丢失恢复 · main 未发布 · 2026-10-11 样式原先只有 `data-dsh-full-view-style` 私有标记。核对本机 `@deepseek-ai/dsh-client-modules` 0.2.0-rc.2 的 `claimStyles` / `removeOwnedStyles`:后加载的模块会认领所有未带 `data-plugin` 的样式,该模块重载时会删除被误认领的完整视图样式。已有 head 监听会安排同步,但原同步函数不会补回样式。 创建样式时明确标记 `data-plugin="@yfwu2020/dsh-full-view"`;既有同步在插件仍启用时检查自己的样式是否仍在 head,丢失则重新挂回同一节点。检查在完整视图查找前执行,因此普通分栏中也能恢复;不重装交互、不处理其他插件的样式。卸载先断开监听及取消待执行同步,再删除自己的样式。 4 项回归在旧实现均失败,修复后通过,覆盖其他模块认领 / 删除、反复丢失后恢复并保留草稿与工具栏、分栏中恢复,以及重装后的旧清理回调和卸载。`npm run check`:构建成功,75 项检查通过。另在独立 DOM 环境直接执行本机 Harness 的实际认领 / 清理函数,确认其他插件重载时样式保留、意外删除可恢复、卸载后不复活。未操作或更改真实 Harness、其他插件或宿主设置。 版本保持 0.1.5,仅提交推送源码、构建产物和验证记录,不发布新版本。 ## Esc 以活动小窗退出 · main 未发布 · 2026-10-06 用户确认“焦点”表示最后点击或操作的小窗,包含标题、消息和窗内空白。旧实现只看键盘事件目标,点消息后键盘仍留在另一窗时会退出错误窗口;本轮引入完整视图拥有的活动标记,两端各自处理自己的 Esc。外部点击清为 none,关闭 / 收起后不让程序归还焦点重新激活;Tab / 非 Esc 键盘操作和原生菜单仍可正常使用。退出与卸载清理标记和监听。 新增回归先复现消息点击不激活聊天,再验证点击消息与解读历史、保留另一窗口键盘焦点、窗外点击、连续 Esc、收起后焦点不反弹、卸载清理。完整视图 `npm run check` 71 项通过。解读隔离测试执行真实捕获处理器,覆盖活动聊天 / 活动解读 / 窗外归属与旧键盘目标矛盾、收起聊天、菜单、设置、录音、输入法及旧版完整视图兼容;构建通过。 独立预览加载两端本次构建客户端和本地模拟 API:先点击解读输入,再点击聊天可见消息(键盘落到 body),Esc 收回聊天、解读保持;不重新点击再按 Esc 关闭解读。点击解读正文后先退解读,再收聊天;点击标题激活聊天也先收聊天。点击窗外非输入区域后活动归属为 none,先退解读、再收聊天。临时点击记录确认命中真实节点,避免两窗重叠时点击被上层窗口截获。截图 `.local/active-window-chat-first.png` 展示先收聊天的结果,仅为独立预览。未操作 Harness 或写配置,实机验收由用户完成;仅提交推送,不发布。 ## 连续 Esc 与外部焦点退出 · main 未发布 · 2026-10-06 上次焦点限制过严:解读关闭后焦点落到 body,或聊天收起后焦点仍在紧凑编辑器,导致剩下的窗口都不接收下一次 Esc。本轮调整两个插件各自的事件路由:展开聊天内先退聊天,其他焦点先退解读;解读关闭后聊天允许外部焦点 Esc 收起。每次只退一层,保持菜单、设置、录音、输入法及审批保护。 两个回归在修复前均失败,修复后完整视图 `npm run check` 70 项通过;解读隔离测试执行真实 Esc 捕获处理器,覆盖外部优先、展开 / 紧凑聊天、原生菜单、设置、录音、历史、输入法及普通分栏,构建通过。未运行访问真实 Harness 的在线测试。 独立预览加载两端本次构建的真实客户端与本地模拟 API。验证聊天焦点先收聊天再退解读;解读焦点先关解读,焦点落到 body 后下一次再收聊天;导航按钮焦点先关解读,再收聊天。每组第二次都通过原生键盘发送 Esc,不重新点击或重新指定焦点。聊天菜单 Esc 只关闭菜单,两窗保持打开。截图 `.local/escape-outside-first.png` 展示外部焦点首次 Esc 后仅剩完整聊天。未操作 Harness 或修改其配置;实机验收由用户完成。两端仅提交推送,版本不变、不发布。 ## 共存窗口 Esc 按焦点退出 · main 未发布 · 2026-10-06 此前解读插件在 document 捕获阶段全局消费 Esc,同时聊天的 popupOpen 检测会被可见解读窗口挡住,两者共同造成解读固定优先。此次联动修改两个插件:解读仅在完整视图中限制为 panel / historyList 的焦点目标;聊天 Esc 忽略解读自己的弹窗,但保留原生菜单、审批、输入法及其他弹窗保护。不改变图钉语义、普通分栏解读全局 Esc 或解读内部的逐层退出。 两个回归先在旧实现失败:聊天不能在解读打开时收起,解读会消费另一窗口的 Esc。修复后完整视图 `npm run check`:70 项检查通过;解读新增隔离测试执行真实捕获 handler,覆盖焦点归属、输入法 / 已处理事件、设置下拉 / 抽屉、语音、同级历史及分栏行为,解读构建通过。未运行会访问真实 Harness 的在线测试。 独立预览加载两端真实客户端,使用本地模拟 API,不发送模型任务、不写 Harness 配置:聊天输入内 Esc 后聊天 compact、解读仍 flex;重新展开聊天后解读输入内 Esc 仅隐藏解读,聊天保持展开;聊天原生菜单内 Esc 先关闭菜单、两窗保留;焦点在导航按钮时 Esc 不退出两窗。截图 `.local/escape-chat-focused.png` 为独立预览,实机验收由用户完成。两个插件都须更新最新主分支才能获得配合行为,版本不变,仅提交推送,不发布。 ## 收起侧栏时首标签避让 macOS 窗口按钮 · main 未发布 · 2026-10-06 此前完整视图无条件把首列 DockKit 左侧留白覆盖为 10px,遗漏 frame 的 `[data-sidebar-collapsed]` 状态,导致侧栏收起后标签进入红黄绿按钮区域。对照已提取的宿主 sidebar-right / layout 客户端,宿主分别提供窗口模式 88px 和系统原生全屏 10px 的规则;修复仅将插件覆盖限制为侧栏展开,收起时恢复宿主级联,不修改 DSH 设置或源文件。 扩充既有回归,在旧代码确认侧栏收起仍为 10px 而非 88px,测试失败;修复后覆盖侧栏收起 / 展开往返、系统原生全屏进出、分栏及卸载恢复,浮动面板保持原间距。`npm run check`:69 项检查全部通过。 独立预览加载发布用客户端和模拟宿主的语义标记 / 间距规则:收起后留白为 88px,首标签左缘 x=89,模拟窗口按钮右缘 x=72,无重叠;系统原生全屏隐藏按钮且留白为 10px;重新展开侧栏后留白为 10px,标签左缘 x=231。截图 `.local/traffic-clearance-fixed.png` 是独立预览,未操作真实 Harness,实机由用户验收。版本保持 0.1.4,只提交推送,不发布。 ## 紧凑条命中区收窄及拖动悬停阴影 · main 未发布 · 2026-10-06 按用户指定将上下抓握区改为 12px(向外 6px、向内 6px)、左右缩放区改为 8px 宽、内框全高(向外 2px、向内 6px)。保留 compact overflow:visible !important,减少外部占用但不裁切命中区。拖动区悬停通过 :has 匹配并加深阴影,160ms 平滑过渡,离开恢复;未改变触发模式与指针事件逻辑。 `npm run check`:69 项检查全部通过。独立浏览器实际测得上下区域高 12px,左右区域为 8×46px(48px 外框扣除边框)。真实鼠标移动到 top 区后匹配 hover,两层阴影 alpha 从 0.133/0.067 变为 0.2/0.133;移开后恢复。实际拖动左右区域使宽度从 470 增到 510px,对边锚点不变;实际拖动上缘使小窗从 (480,542) 移到 (520,512),仍为 compact,松手没有残留拖动标记。附件、模型、发送按钮中心均可命中。截图 `.local/compact-drag-hover.png` 为独立预览,未操作 Harness。版本保持 0.1.4,只提交推送,不发布。 ## 扩大紧凑条抓握与缩放区 · main 未发布 · 2026-10-06 旧样式在 48px 高紧凑条中仅留下 6×18px 的左右缩放目标,靠近圆角顶部或条外无法命中;准确拖动旧区域可缩放,说明指针逻辑有效。上下抓握区扩大为 18px,左右缩放区扩大为 14px 宽、内框全高,增加部分主要向外。独立预览的原生 #chat overflow:hidden 优先级截掉了条外区域,复现扩大后仍无法命中;compact 改为 overflow:visible !important 后相同坐标命中 w/e 与 top/bottom,分别为 ew-resize / grab。 独立预览直接加载构建产物:在左端外侧、距顶部 4px 处拖动,宽度从 450 增到 490px,右侧锚点保持 960px;在上方 5px 处拖动,紧凑条从 (470,537) 移到 (520,497),仍为 compact。附件、模型、发送按钮中心均命中原按钮。展开后右下角实际拖动,宽高由 490×540 调到 470×570;返回紧凑正常。`npm run check`:69 项检查全部通过。未操作 Harness;由用户做实机验收。版本保持 0.1.4,只提交推送,不发布。 ## 紧凑条拖动与点击光标区分 · main 未发布 · 2026-10-06 仅修改外缘光标样式,compact 外缘及 pointer capture 的按钮本身用 grab,frame 拖动标记存在时用 grabbing;原按钮和缩放光标保持。`npm run check`:69 项检查通过。独立预览测得外缘及捕获按钮为 grab,附件与收球按钮为 pointer,左右缩放为 ew-resize;实际拖动后紧凑条移到 (560,537),仍为 compact 且松手恢复 grab。以实际样式在 DOM 中检查拖动标记的级联:按钮及外缘均为 grabbing,去除标记后均恢复 grab。 未操作 Harness。截图 `.local/compact-cursor-preview.png` 是独立预览的紧凑条外观,不包含系统鼠标光标。版本保持 0.1.4,只提交推送,不发布新版本。 ## 无感标题栏拖动 · main 未发布 · 2026-10-06 `npm run check`:69 项检查全部通过。新增回归先在旧版确认拖拽手柄仍存在,再覆盖移除手柄、标题非按钮、标题后代 / 标题栏留白 / 整栏拖动、操作按钮 SVG 后代不触发拖动。既有标题单击、方向键移动、双击复位、拖动取消 / 吸附、固定及返回分栏检查继续通过。 独立浏览器预览直接加载本次构建,标题背景 computed 为透明,标题和 toolbar 的 box-shadow 均为 none。通过标题实际拖动,小窗从 (240,20) 移到 (420,131),松手后拖动标记清理;草稿保持,图钉仍可切换为固定状态。截图 `.local/plain-titlebar-preview.png` 仅为独立预览,README 继续使用历史真实 Harness 截图并注明旧拖拽图标已移除。未操作 Harness。版本仍为 0.1.4,只提交推送,不发布新版本。 ## 聊天小窗图钉固定 · main 未发布 · 2026-10-06 `npm run check`:68 项检查全部通过。新增回归覆盖图钉默认未固定、仅完整小窗显示、无悬停标题、固定后侧栏 / 空白 / 网页 iframe 不收起且不抢焦点、解除后恢复原行为;显式隐藏 / 恢复、Esc、返回分栏不被阻止,退出 / 卸载与会话切换清理固定状态。 独立预览直接加载客户端构建:图钉选中后 aria-pressed=true,点击区域 26px,使用蓝色高亮;网页表单可输入,activeElement 为 IFRAME,聊天仍 expanded 且原草稿保留。键盘 Enter 解除固定后点击侧栏,聊天恢复 compact。独立截图保存在 `.local/pinned-chat-preview.png`,不作为 README 的真实 Harness 截图。未操作 Harness。版本保持 0.1.4,只提交推送,不发布新版本。 ## 默认闲置回收延长至 90 秒 · main 未发布 · 2026-10-06 默认 `compactIdleSeconds` 从 30 改为 90(1 分 30 秒),宿主配置及浏览器构建共用此默认值。`npm run check`:66 项检查全部通过。使用虚拟时钟验证 89 秒仍保留紧凑条、用户操作重新开始完整 90 秒、流式更新不延长截止时间、边界到期回收;菜单 / 拖动 / 中文组合 / 待办暂停、完整小窗不自动隐藏、配置关闭回收继续有效。未操作 Harness。README 更新等待时间,保留此前真实截图并注明其展示回收后的外观。 版本仍为 0.1.4,只提交推送,不发布新版本。历史验证记录中的 30 秒是当时版本的实际行为。 ## 全屏隐藏解读胶囊与双小窗共存 · main 未发布 · 2026-10-06 `npm run check`:66 项检查全部通过。新增两项回归先在旧代码失败,分别复现全屏胶囊仍显示、捕获阶段点击解读入口导致聊天先收起。覆盖胶囊内联 display、球形态、保留解读 / 引用入口和面板、其他插件不隐藏、退出 / 卸载恢复,以及入口点击、正文、追问输入、面板 iframe、关闭解读和普通工作区收起行为。 独立预览同时加载两插件实际客户端构建,槽位及解读响应使用本地模拟。全屏后胶囊 computed display 为 none;点击实际划词按钮打开解读面板、点击模拟译文并输入追问后,解读 display 为 flex 且聊天保持 expanded。关闭解读后聊天仍展开,返回分栏后胶囊恢复 flex。截图保存在忽略目录 `.local/explanation-chat-coexist.png`,不作为 README 的 Harness 实机截图。未操作 Harness,未发起实际模型请求。 只修改完整视图插件,解读插件代码及版本保持不变;完整视图版本仍为 0.1.4,只提交推送,不发布新版本。 ## 划词解读共享浮层兼容 · main 未发布 · 2026-10-06 `npm run check`:64 项检查全部通过。读取本机 Layout 与 SidebarRight 样式,以及用户的 dsh-selection-explain 0.9.0 客户端:解读球和按钮位于官方 shell.overlay,父层 z-index 为 20;宿主全屏 dock 升到 40,插件聊天为 50、DockKit 浮窗为 60,解读子按钮的 2147483000 无法跨越父层上下文。仅在本插件完整视图中将共享父层改为 70。 新增回归检查先在原层级失败,再确认完整视图共享浮层越过各面板,原 pointer-events 穿透及按钮交互保持,返回分栏和卸载恢复 20。独立预览同步加载两个真实客户端 bundle,使用模拟宿主槽和本地 API 返回值,不发送真实解读任务:对照层级 20 时,解读按钮 display:flex 却被 DIV 盖住,球被 IFRAME 盖住;层级 70 时,两者中心的 elementFromPoint 命中各自节点。沙箱 srcdoc 网页原桥正常报告选区并显示解读入口,网页表单可继续输入且值保留。 本轮未修改 dsh-selection-explain,未操作 Harness 窗口;宿主实际验收由用户完成。版本保持 0.1.4,只提交与推送,不发布新版本。 ## macOS 首列标签栏多余留白 · main 未发布 · 2026-10-06 `npm run check`:63 项检查全部通过。静态读取本机 Harness SidebarRight 样式,首列全屏 dock 在 macOS 普通窗口中预留 88px,系统全屏为 10px。宿主规则优先级高于插件原先的 10px 覆盖,导致工作区内仍保留窗口控件留白。修正现有变量覆盖的优先级,仅作用于插件完整视图中的全屏首列 dock。 回归检查先复现 88px 而非 10px,再确认修复后 10px、宿主样式晚加载也不回退、浮动面板间距保持、返回分栏恢复原间距、卸载恢复宿主全屏 88px。独立浏览器预览直接复用提取的原宿主规则与插件样式,实际 padding-inline-start 修复前 88px、修复后 10px,标签与工作区左侧对齐。未操作 Harness 窗口,实际宿主验收由用户完成。 版本保持 0.1.4,只提交与推送,不发布新版本。 ## 紧凑条上边缘主动收起 · main 未发布 · 2026-10-06 `npm run check`:62 项检查全部通过。新增检查先在缺少入口时失败,再验证主动收起复用连续缩入、关闭自动回收仍可用、原编辑器和草稿保留、展开后入口隐藏、返回分栏清理,以及待回应和输入法组词时禁用。 独立浏览器预览直接加载构建产物:横条命中区 48×18px,中心与输入条中心一致,伪元素高度 3px,无 title;鼠标点击和原生 Enter 均能收成鲸鱼球,动画结束后临时层清理,点击鲸鱼恢复完整小窗。恢复后草稿「保留原来的草稿」仍在,Esc 收回紧凑条后入口重新显示。未操作 Harness 窗口,实际宿主验收由用户完成。 版本保持 0.1.4,只提交与推送,不发布新版本。 ## 运行时隐藏鲸鱼小点 · main 未发布 · 2026-10-05 `npm run check`:60 项检查全部通过。修改前针对运行小点的检查失败,修改后确认运行时隐藏小点并保留鱼尾动画标记;需要回答时提醒点仍可见,完成未读提醒及查看后清除行为保持正常。 独立预览加载构建产物:模拟运行时小点 hidden=true、display:none,鱼尾运行标记=true;模拟待办时小点 hidden=false、display:block,鱼尾运行标记=false。未操作 Harness 窗口,实际宿主验收由用户完成。 版本保持 0.1.4,只提交与推送,不发布新版本。 ## 鱼尾清晰度 · main 未发布 · 2026-10-05 `npm run check`:60 项检查全部通过。核对本机 @deepseek-ai/dsh-client-ui-chat 0.2.0-rc.2:原生运行 APNG 为 28×28 像素,宿主默认按 14px 显示;同一组件提供 viewBox 16×16 的原生 SVG 静止图。此前插件将 APNG 首帧放入 24px 图标,2x 屏幕需要 48px,导致位图插值模糊。 静止图改为原组件的 SVG 路径,不重新描绘;运行仍使用原 APNG,并恢复原生显示尺寸。DeepSeek MIT 版权与完整许可同时保留在源文件和编译后的客户端中。新增检查覆盖可解析的 SVG 输出、宿主动画来源保持不变、未挂载宿主运行组件时也能显示矢量静止图。 独立预览将原位图首帧与原生 SVG 均按 48px 显示:后者轮廓明显更清晰。两者颜色、圆形背景和外框尺寸相同,差异来自图像来源与缩放。未操作 Harness 窗口,实际宿主验收由用户完成。 版本保持 0.1.4,只提交与推送,不发布新版本。 ## 完成小点仅提醒未读 · main 未发布 · 2026-10-05 `npm run check`:59 项检查全部通过。新增覆盖回合结束身份、未查看完成显示提醒、打开后再收起不重复点亮、新回合完成再次提醒、历史已读结果不显示完成点、展开时完成视为已查看、切换会话清除对应提醒、运行 / 待回应不受完成已读状态影响。 独立预览加载构建产物,通过本地模拟运行确认:鲸鱼球状态下完成,完成点 display 非 none;点击恢复,再隐藏,完成点 display:none;再启动并结束模拟回合,完成点重新显示。既不运行真实任务,也不操作 Harness 窗口。宿主实际验收由用户完成。 版本保持 0.1.4,只提交与推送 main,不发布新版本。 ## 附件排列修复 · main 未发布 · 2026-10-05 `npm run check`:55 项检查全部通过。静态核对宿主 InputBar 与 ComposerAttachments:附件轨道在原生 DOM 中位于 DraftEditor 前方。问题来自插件把输入区和两侧按钮固定在 grid-row:1,附件被自动排到下一行。改为按原始顺序自动分配行,并填补操作栏所在行的列空位;不重排或重建附件节点。窄宽度规则同样遵循自动行排列。 独立预览新增演示附件入口,使用本地模拟文件 / 图片标签和删除按钮,不读取实际文件、不上传。浏览器先复现附件在输入下方,再加载修复构建:紧凑条附件底部 85px、输入区顶部 93px,按钮中心均为 105px;展开小窗仍在上方,304px 宽度下附件在输入上方、输入在按钮上方。逐个删除附件后恢复 48px 紧凑高度,草稿保留;返回分栏后附件顺序和内容保留。 按用户要求,本轮只验证代码和独立预览,未操作 Harness 窗口;宿主实际上传 / 图片预览验收由用户完成。版本保持 0.1.4,不发布新版本。 ## 连续缩入 · main 未发布 · 2026-10-05 用户在独立动画预览中选定「连续缩入」后,移植到插件。`npm run check`:构建成功,55 项检查全部通过。新增覆盖完整窗口原布局不重排、外框缩入同一锚点、鱼尾末段出现、半途中反向连续恢复、恢复输入焦点、紧凑条闲置回收不抢焦点、减少动态效果直接切换、工作区尺寸变化、切换会话与退出清理旧回调及外框、鲸鱼球自由移动及恢复窗口边界。 浏览器验证页直接加载实际构建产物逐帧核对:内容保持 400×540 的布局,装饰外框由完整尺寸收拢到 40×40。约 120ms 内容透明度为 0、鱼尾尚未出现;约 326ms 外框约 49×53、鱼尾透明度约 0.51;600ms 外框已清理,小窗透明度维持 0、鱼尾为 1。动画中间的原 DOM 只平移 / 裁切,不压缩文字。原有 dsh-fv-appear 入场动画重新启动导致的末尾闪回已复现并移除;旧隐藏 / 恢复 CSS 淡出也不再叠加。恢复后原草稿文本与编辑器实例保留,焦点返回原输入。 Harness macOS Desktop 实际管理页切换完整视图插件开关,加载本地构建;进入已有会话完整视图、聚焦输入展开小窗、点击「−」缩成原生鲸鱼球、点击球恢复完整小窗,AX 确认原输入框获得焦点;再按 Esc 回到紧凑条,闲置超过 30 秒后自动收成鲸鱼球,未将焦点抢到球上。`continuous-whale-main.jpg` 直接裁自这次实际桌面的缩入完成状态。截图工具未捕获完整逐帧视频,连续时序的测量证据来自浏览器验证页。 版本仍为 0.1.4,只提交 main;不创建标签 / Release,不发布 npm。 ## 鲸鱼球状态 · main 未发布 · 2026-10-05 `npm run check`:构建成功,48 项检查全部通过。新增覆盖匹配回合的完成状态、运行与待办优先级、原生主题色同步、问题 / 审批 / 计划确认区分、隐藏球收到待办保留提醒、点击恢复原待办焦点、处理后恢复原形态以及键盘移动。 静态核对本机 Harness 工作区 sessionStatuses 与原生 StateDot:ongoing 使用 label-tertiary,done 使用 success-primary,warning 使用 warn-primary,idle 使用 idle-primary。运行使用中性灰色,与宿主标题的运行标识一致。 实际 Harness 桌面重新加载本地插件并进入右侧完整视图:展开聊天后点击「−」,恢复球显示无文字的原生鲸鱼尾巴,内部右上角有绿色完成点;辅助标签为「恢复聊天,已完成」。README 的 `whale-status-done-main.jpg` 直接裁自这次真实桌面截图,不包含聊天内容。 浏览器验证页直接加载构建产物与模拟宿主状态:运行显示运行色并启用鱼尾动画标记;待办出现时已隐藏的球保持隐藏聊天,变为提醒色并停止动画;点击球展开原待办。实测发现 visibility 动画会阻止立即聚焦,修复为显示立即可见、隐藏延迟至淡出完成后,复测待办按钮真正获得焦点。处理后恢复球形,结束运行变为完成色;深色主题下状态正常。 真实桌面本轮仅有已完成会话,因此运行和待回应状态的切换证据来自模拟状态验证与自动检查,未将其称为实际 Harness 运行测试。保留原生 APNG 来源,未在宿主发消息或触发真实审批来制造测试状态。 版本保持 0.1.4;只提交和推送 main,不创建标签 / Release,不发布 npm。 ## 未发布滚动条与输入框对齐 · 2026-10-05 根因:当前宿主聊天和输入区处在同一个 `[data-conversation-scroll]` 中,宿主设置 `scrollbar-gutter: stable` 及 2px 右边距。紧凑形态释放滚动条占位,完整小窗则保留占位,导致输入框可用宽度变化。修改仅作用于浮窗:隐藏聊天与长草稿的滚动条、取消预留宽度和聊天右边距,保留原 overflow 和滚动节点。 `npm run check` 构建成功,45 项检查全部通过。新增回归检查在模拟宿主 stable gutter 下验证聊天和输入区隐藏轨道、释放占位且 overflow-y 仍为 auto;聚焦展开保留滚动位置和节点;退出后恢复宿主 gutter、滚动条宽度及右边距。 真实 macOS Harness 中重新启用插件后,紧凑条聚焦展开完整小窗,再用 Esc 收回。相同位置的底部截图确认附件、权限、模型、麦克风、发送按钮和输入区域横向对齐,小窗内不显示纵向滚动条;在消息区向上滚动后截图显示较早消息,确认滚动能力保留。长草稿的隐藏轨道及恢复覆盖自动检查,本轮未输入或发送消息。 补充复查:本地浏览器验证页直接加载本次构建,连续三次在动画中途反向展开 / 收起。输入区域 x 始终为 929px、宽度为 258px,底部外框位置差异小于 0.01px。12 段长草稿使输入滚动区达到 144px 上限、内容高度为 576px,原 overflow-y 为 auto 且轨道隐藏;展开 / 收起的输入外框均约为 x=861px、宽=398px、底边=699px。闲置回收再恢复后,第 1 至第 12 段内容全部保留。此项是浏览器测量,未当作 Harness 实机截图。代码提交 `79c2ab4` 的 [GitHub Check plugin](https://github.com/yfwu2020/dsh-full-view/actions/runs/37230478955) 已完成且通过。 公开局部截图 `scroll-compact-main.jpg` 和 `scroll-expanded-main.jpg` 直接裁自本次 Harness 窗口;完整聊天截图保存在忽略的 `.local/`,不公开。只提交推送 main,版本保持 0.1.4,不发布 npm、标签或 GitHub Release。 ## 未发布自动回收与标题拖动 · 2026-10-05 紧凑原生输入条默认闲置 30 秒后调用原平滑隐藏过渡,显示 Harness 原生鲸鱼入口。用户在输入条内的指针、键盘、输入及滚动操作重新计时;流式消息和活动订阅不延长截止时间。菜单、拖动、中文组合输入和当前会话待办暂停计时;展开小窗不自动回收。自动隐藏不抢工作区焦点。标题和工具栏空白取消单击切换,标题接入拖动和方向键移动,保留双击复位。配置 `compactIdleSeconds` 为 0 时禁用回收。 `npm run check`:构建成功,44 项检查通过。新增验证覆盖 30 秒边界、用户操作重置与后台更新不重置、原工作区焦点和草稿保留、恢复后保持展开、菜单 / 拖动 / 中文组合 / 待办保护、退出 / 卸载清理、关闭回收配置、标题单击不切换、标题指针拖动及方向键移动。真实 HTTP 配置路由验证自定义回收时间和非法值拒绝。 真实 macOS Harness 中重新启用插件:进入完整视图后收成紧凑条,保持闲置并等待超过 30 秒,可访问树只留下“恢复聊天”入口,原输入条隐藏;点击鲸鱼球直接恢复完整小窗和原输入框。标题单击后仍保持完整小窗,聚焦标题按左方向键后截图确认向左移动 16 CSS 像素。鼠标拖动工具在标题和原有点状手柄上均未移动小窗,不作为工具实测通过的证据;随后用户亲自在 Harness 按住会话标题拖动,并确认“能正常拖动”。 公开图片 `idle-whale-main.jpg` 直接裁自本次真实自动回收后的窗口截图;只显示恢复入口及邻近工作区边界,完整会话截图留在忽略的 `.local/`。此次没有发送消息或录音。 本轮只提交推送 main,版本保持 0.1.4,不发布 npm、标签或 GitHub Release。 # 验证记录 ## 未发布聚焦展开、隐藏统计与形态过渡 · 2026-10-05 按用户截图调整:完整视图始终隐藏输入框底部统计;用户聚焦或点击输入框直接展开完整小窗,取消仅揭示标题栏的中间状态;隐藏恢复直接展开。高度与顶部位置使用 280ms 缓动,隐藏恢复带透明度和轻微缩放过渡,减少动态效果时关闭动画。 先调整行为测试,确认旧实现的统计、聚焦及恢复行为不符合要求。浏览器验证另发现标题收起后程序归还焦点又触发展开,补充回归并以同步焦点保护修正。最终 `npm run check` 构建通过,41 项测试通过,覆盖输入聚焦、已聚焦输入框再次点击、标题收起后的焦点归还、原草稿 / 节点保留以及退出分栏还原统计。 本地浏览器加载相同构建客户端:进入时 48px;聚焦显示消息区;Esc 收起途中实际尺寸从约 540px 经过 72.67px 向 48px 变化,顶部位置同步从 160px 经过 627.32px 向 652px 变化,确认尺寸连续插值。此验证页用于测量,不作为 Harness 实机截图。 真实 macOS Harness 0.2.0-rc.2 中,通过插件管理页停用 / 重新启用加载本轮构建,最终保持启用。实际点击原输入框显示完整消息区和标题栏;展开后输入框底部不再显示统计数字。点击标题收回无标题的输入条,原编辑器保留焦点;再次点击原输入框重新展开。减号隐藏后出现鲸鱼入口,点击恢复完整小窗。公开图片只裁切输入条、完整小窗的顶部和底部,原会话完整截图不公开。实测过程中曾因窗口焦点变化误发送一段只读检查文字,已向用户说明;之后通过控件操作完成验证,没有删除原记录。动画的连续尺寸测量来自浏览器,Harness 实机验证覆盖最终形态与操作。 本轮只提交推送 main,不改变 0.1.4 版本,不发布 npm 或 Release。 ## 未发布处理状态与原生鲸鱼入口 · 2026-10-05 删除 DOM 内容变化驱动的“有新内容 · 查看”,改为从 DSH `uiSession.sessionStatus` 和当前 binding 的 `eventSource` 读取真实运行状态及回合起始时间。最终耗时放在原输入框占位位置,与按钮同一行,不增加输入条高度,草稿优先。隐藏后的恢复入口只有 Harness 思考时自带的鲸鱼尾巴:运行播放宿主 APNG,完成、待办和减少动态效果时显示相同图形的静止帧。 `npm run check` 构建成功,40 项测试通过。覆盖旧回合不能成为下一回合的计时起点、会话身份与 binding 代际切换、开始时间缺失、运行 / 待办 / 完成状态、占位区域显示与草稿优先、秒级计时器及订阅清理。原生图片适配覆盖宿主样式资产读取、APNG 第一帧提取和截断数据处理。验证页模拟宿主 store,不作为真实截图。 真实 macOS Harness 0.2.0-rc.2 中观察用户主动启动的任务,原生可访问树显示耗时从“已处理 45 秒”到“已处理 56 秒”,期间没有上方新内容提示。任务结束后耗时隐藏。第二次任务中,隐藏入口辅助名称为“恢复聊天,正在处理”,没有可见文字;恢复后耗时从“已处理 2 分 3 秒”到“已处理 2 分 5 秒”,收起 / 恢复没有重置回合时间。上述运行验证发生在最终占位位置与原生图标调整之前,证明时间来源与运行状态,不能作为最终布局和动画的实机验证。 最终修改后,原生开发工具只读确认宿主动画资产、静止帧及 CSS mask 均已加载;真实截图确认使用宿主细线鲸鱼尾巴,而非自行绘制的图形。实际点击小球恢复原输入框,聚焦显示操作栏,点击工作区后收回单行输入条。最终占位位置、草稿优先及原生动画的运行状态切换通过自动检查;当前任务已经结束,尚未补到最终版本运行时的截图与动画观测。未发送测试消息、录音或修改原任务。 公开图片 `compact-input-main.jpg`、`compact-toolbar-main.jpg`、`whale-restore-main.jpg` 直接裁自本轮真实空闲窗口截图;未保留旧双行耗时布局图片。完整会话与工作区截图位于忽略的 `.local/`,不公开。仅提交推送 main,版本保持 0.1.4,不发布 npm 或 Release。 ## 未发布图标尺寸与悬停调整 · 2026-10-04 原生开发工具只读检查发现权限主图标为 14px,模型脑形图标和麦克风为 18px。统一主操作图标为 18px,保留原生下拉箭头的 14px 尺寸;返回普通分栏或卸载后,尺寸覆盖不再生效。取消鼠标悬停触发操作栏,保留聚焦、拖动、菜单打开和展开时显示。 `npm run check` 构建成功,35 项测试通过;现有焦点交互检查覆盖未聚焦时 pointerenter 不显示操作栏、随后聚焦仍可显示,以及减号隐藏和恢复。真实 macOS Harness 读取的权限主图标、模型脑形图标和麦克风均为 18px,下拉箭头为 14px;实际聚焦输入框显示操作栏,点击文件区后回到单行输入条。README 两张局部图片更新为这轮真实窗口截图。全程未发送消息或录音,仅提交推送 main,不发布新版本。 ## 未发布移除重复隐藏按钮 · 2026-10-04 按用户要求移除操作栏右侧「×」,保留左上角「−」隐藏整个小窗和恢复入口。同步移除相关控件引用与样式,已有隐藏、恢复和审批保护测试改用减号操作。 `npm run check` 构建成功,35 项测试通过。真实 macOS Harness 操作栏已确认不再显示「×」;实际点击「−」后显示恢复入口,点击入口回到原输入框。README 的操作栏图片已替换为本轮真实截图的局部裁切。只提交及推送,不更改 0.1.4 版本号,不发布 npm 或 Release。 ## 未发布圆角、模型图标与减号修复 · 2026-10-04 环境:真实 DeepSeek Harness macOS Desktop 0.2.0-rc.2,`dsh-app://app/`,浅色宿主,右侧打开 HTML 文件。加载本仓库构建产物,使用原生鼠标、键盘、可访问树和窗口截图验证。 通过原生开发工具只读检查确认:外框与输入卡片已有圆角,但紧凑状态的原会话内容根节点仍绘制方形白底。修复为仅让标记的紧凑输入路径背景透明,保留菜单溢出;模型入口只做图标适配,不替换原按钮或事件。按用户选择,左上角「−」改为隐藏整个小窗并保留恢复入口。 `npm run check` 构建成功,35 项测试通过。新增覆盖紧凑背景透明化与展开 / 退出还原、模型按钮重绘与事件 / 辅助标签保留、减号在两种状态下隐藏、恢复后的草稿 / 焦点以及减号提示含义。 真实 Harness 实测确认: - 无操作的紧凑条、聚焦揭示操作栏、展开聊天均保持完整圆角,方形白底不再盖住边缘。 - 脑形模型图标可见,点击打开原生“模型与推理等级”菜单;原模型与推理等级保持不变。 - 附件 / 指令菜单能在输入条上方完整显示,没有被圆角裁切;Esc 正常关闭菜单。 - 紧凑与展开状态分别点击「−」,都只留下恢复入口。恢复后回到紧凑输入条,未发送草稿保留,焦点返回原编辑器。 - 标题仍能展开聊天;实际点击外缘可以展开及收起。返回分栏后还原原输入布局,再次进入完整视图仍显示紧凑条。 - 测试结束清空未发送草稿,保留原会话、右侧文件及 509 × 584px 尺寸偏好,回到原来的完整视图紧凑状态。未发送消息、录音或选择附件。 完整截图保存在忽略的 `.local/dsh-corners-after-*.jpg`、`.local/dsh-model-menu-after.jpg` 和 `.local/dsh-attachment-menu-after.jpg`,未上传已有会话与工作区上下文。README 新增的 `docs/images/compact-input-main.jpg`、`compact-toolbar-main.jpg` 直接裁自这些真实截图,只展示空输入框和操作栏,没有重新绘制界面,并标明 main 尚未发布。 这轮没有切换真实宿主主题,也没有触发模型回复或审批流程;相应边界沿用下方记录。仅提交并推送 main,版本号保持 0.1.4,不创建标签 / Release,不发布 npm。 ## 未发布真实桌面复测与兼容修复 · 2026-10-04 环境:本机 DeepSeek Harness macOS Desktop,内置 layout / sidebar-right 0.2.0-rc.2,实际窗口 `dsh-app://app/`,加载本仓库构建产物。此前的窗口定位问题本轮已解除。下列结果来自真实桌面鼠标、键盘和原生可访问树,不是浏览器演示页。 实测发现:已安装的划词解读插件将 `role="dialog"` 的设置页留在 `display:none` 的父层内;子节点自身的 computed display 仍是 flex。完整视图误认为菜单打开,阻止外部点击和 Esc 收起。修复为同时检查祖先的 display;没有修改其他插件或宿主。回归测试先复现失败,修复后 `npm run check` 构建成功、32 项测试通过。 修复后在真实 Harness 中确认: - 进入 / 再次进入完整视图默认显示紧凑输入条;原生输入、按钮靠右和输入焦点揭示工具栏正常。 - 原草稿在展开 / 收起、隐藏 / 恢复、刷新窗口、返回分栏和再次进入完整视图后保留;恢复时焦点回到原编辑器。 - 聊天内 Esc 能收起;实际点击右侧文件区域能收起;实际点击输入条外缘能展开。 - 实际拖动标题手柄移动小窗,保持紧凑且不误展开。实际拖动紧凑左缘,宽度 537 → 587 → 537px。 - 实际拖动展开小窗右下角,尺寸 537 × 514 → 477 × 474px;双击该角恢复 400 × 540px,仍保持展开并保留草稿。测试后已还原 537 × 514px 与右下角位置。 - 模型、权限、附件 / 指令菜单正常打开及关闭,保持原模型与权限。展开状态下第一个 Esc 关闭模型菜单,第二个 Esc 才收起聊天。 - 测试结束清除未发送的测试草稿,发送按钮恢复禁用,回到原会话的分栏和原 README 标签。全程没有发送消息、录音或选择附件。 截图直接截自真实桌面,保存在被忽略的 `.local/dsh-native-verified.jpg`、`.local/dsh-native-fixed-expanded.jpg` 等文件。截图含已有会话和工作区上下文,只用于本机验证,没有上传公开仓库。README 的已发布版本截图继续保留其版本标注。 本轮没有触发真实模型回复或审批任务,实时回复提醒、待审批 / 提问 / 计划确认的桌面流程尚未复测;这些行为仍只有自动测试及浏览器模拟证据。原生控制台观察到宿主 changes.summary 的 404 与 plugins/events 的加载失败,未将其归因于本次修复,不作“控制台零错误”的结论。其他操作系统、其他宿主版本和所有菜单组合未穷举。 只提交和推送 main,不修改版本号,不创建标签 / Release,不发布到 npm。 ## 未发布交互补齐 · 2026-10-04 参考检查:用户提供的真实 Codex 紧凑输入条 / 操作栏截图,以及本机浮动聊天和右面板输入条的静态实现。工具禁止操控 Codex 自身窗口,没有将这轮检查称为 Codex 现场实测。参考实现只用于核对行为,没有纳入插件源码或发布文件。 `npm run check` 构建成功,31 项测试通过。新增行为覆盖焦点揭示操作栏、隐藏恢复、外部点击 / Esc、原生菜单与输入法保护、审批 / 提问 / 计划确认替换输入框、消息变化提醒、拖动取消与吸附、左右缩放锚点、视觉视口限制、单击与双击区分、内嵌子会话隔离,以及停用时计时器与辅助属性清理。 浏览器验证页加载本轮 `lib/client.js`,使用真实鼠标与键盘操作确认: - 原输入框草稿在隐藏 / 恢复、展开 / 收起和返回分栏过程中保留;网页表单文字仍保留,iframe 加载次数仍为 1。 - 紧凑条焦点 / 悬停操作栏可用。默认宽 400px,卡片宽 398px;发送按钮距右缘 5px。 - 顶部手柄实际拖动 200px / 80px 后仍保持紧凑。左缘实际拖动增宽 50px 后右边锚点不变。 - 右下角实际拖动缩放有效;双击恢复 400 × 540px 且保持展开。标题双击恢复默认尺寸与右下角位置。 - 点击预览 iframe 收起为输入条;菜单自身的 Esc 优先关闭菜单;聊天内的 Esc 收起并保留编辑焦点。 - 隐藏时模拟原生待办替换输入框,能自动展开并操作;处理完成后恢复隐藏入口。收起时新增会话内容提供查看入口。 - 取消位置和尺寸过渡,复核从预览移入原输入框再连续点击操作栏,防止标题揭示期间输入命中被移到标题。 - 深浅主题跟随宿主颜色变量。560 × 680px 浏览器视口、左侧栏宽 220px 时,小窗宽 300px;输入和原按钮分为两行,附件 / 权限 / 模型 / 发送均可见。验证后已恢复默认浏览器视口。 浏览器控制台在页面初始化阶段记录到 MutationObserver 参数错误;交互与布局验证均完成,但本轮未定位该日志来源,不作“控制台零错误”的结论。 本机 DSH 的 conversation、approval 和 user-questions 组件经过静态核对。真实桌面自动点击仍无法定位窗口,本轮没有完成新版交互的实际 DSH 桌面复核。README 保留标注历史版本的真实桌面图片,没有用浏览器验证页冒充 DSH 桌面。 本轮不修改 0.1.4 版本号,不创建标签 / GitHub Release,不发布到 npm。新增交互属于 main 分支,操作说明见 [交互设计](docs/interaction-design.md)。 ## 未发布修复 · 2026-10-04 用户反馈收起输入条的按钮集中在左半边。将验证页补齐原生 `data-slot="main"` 容器及输入框的 flex 结构后,复现外层小窗宽 400px、内部输入框仅 180px 的问题;收起时外层被转成 flex,内部容器的 `flex: none` 使其按内容宽度收缩。 修复收起时整条输入路径的宽度和盒模型,确保原输入框撑满可用空间;移除发送按钮原有的上移偏移。浏览器检查确认输入框宽 398px,发送按钮距小窗右缘 5px,模型与发送按钮中心纵坐标相同。展开与收起均保留草稿,按钮保持靠右。构建及原有 16 项测试通过。 本机插件已重新构建;本次只提交源码和构建产物,不发布新版本。桌面自动点击仍无法定位窗口,本轮交互证据来自补齐原生结构的浏览器验证页。 ## 0.1.4 · 2026-10-04 `npm run check`:构建成功,16 项测试全部通过。新增覆盖默认紧凑输入条、原输入与发送事件、外缘展开/收起、草稿和后台回复保留、统计详情收起/展开、原生控件替换后的重新适配,以及退出时清理临时标记。 浏览器验证页加载发布用 `lib/client.js`:空输入条高度 48px;实际鼠标点击外缘、拖动外缘、键盘 Enter 切换均有效。拖动后仍保持收起,展开后草稿和底部位置保留。原权限按钮的辅助标签保留。 与本机 Desktop 0.2.0-rc.2 所带 conversation / permission / model-selection 客户端源文件核对了输入框、控制行和详情区结构。当前桌面截图可读取,但自动点击返回 `noWindowsAvailable`;本轮未完成真实桌面的紧凑输入条交互复核。README 继续使用明确标注版本的真实桌面旧图,没有将开发验证页当作 Harness 截图。 以下是基础完整视图的历史验证记录。 日期:2026-10-04。插件:`@yfwu2020/dsh-full-view` 0.1.1。 ## 自动验证 `npm run check`:构建成功,8 项测试全部通过。 - 完整视图保留聊天、输入框、iframe 的原始 DOM 实例,原发送事件处理仍有效。 - 草稿、流式更新、重复进出、关闭右面板和切到全局页面正确更新与还原。 - 卸载清理插件的工具栏、样式与标记,保留原布局状态和已有样式。 - 真实 HTTP 配置路由正确返回配置,卸载后返回 404,非法配置被拒绝。 - 聊天浮起后,右面板继续使用原网格第三列。 - 使用临时 profile 验证首次安装、关闭后重装、旧配置迁移和卸载,保留其他插件的设置。 ## 浏览器交互验证 独立演示页直接加载构建后的 `lib/client.js` 和真实配置路由。 确认进入完整视图后出现原聊天小窗;收起与展开有效;键盘调整大小有效;追加回复仍在原聊天内;返回分栏后草稿及网页表单文字保留,网页加载次数仍为 1。 该演示页用于交互验证;README 的图片改为实际 Harness 桌面截图。 ## 桌面验证 环境:macOS Desktop,内置 layout / sidebar-right 0.2.0-rc.2。 实际桌面窗口出现聊天小窗工具栏、收起聊天和返回分栏按钮、原消息、输入框、模型选择及调整大小手柄;右面板显示退出全屏。视觉检查确认右侧内容占据导航栏右侧工作区,原聊天浮于右下角。 在管理页实际切换插件开关:启用时选择列表包含插件、配置路由 HTTP 200;关闭时选择列表移除插件、配置路由 HTTP 404。插件遵循管理页状态。 README 的分栏、完整视图和收起聊天三张图直接截取自该桌面窗口,使用公开示例网页;图片没有重新绘制或生成界面。安装说明另附用户提供的实际插件管理截图。 通过原生界面验证收起聊天、返回分栏后,原输入草稿仍保留;截图完成后清除了演示草稿。以上检查没有向模型发送测试消息。 ## 验证边界 鼠标拖动、鼠标缩放、所有宿主审批弹窗组合、窄窗口、其他操作系统和其他版本宿主仍需更多交互覆盖。当前记录不代表上述环境已全部通过验证。 插件依赖宿主当前语义 DOM 结构;结构变化时需要更新适配器。