Repository navigation
Releases
v0.3.14 — context-injection rows in the reader's line language; user-message text on its own line
0.3.14
-
修复用户消息里「缩略图与正文并排」:宿主在槽位外再包一层
display:contents的[data-slot],真正的 flex 项是它里面的块,原来只约束.blocks的直接子元素,文字块因此按内容宽度落在缩略图右侧。补一条穿透槽位的选择器后,真实引擎实测(1440 与 520 两种宽度)都是「88px 方图在上、正文独占整行」:块流 250×120.4 = 88 + 10 gap + 22.4,正文字块 width 250、flex-basis: 100%、位于方图下方 10px;npm test446 项全绿,新断言锁住槽位选择器。 -
上下文注入行与系统提示词行改用阅读器自己的行语言:此前是宿主 24px 折叠行(14px 副文本比 13px 标题还大、hover 只有字色变化、展开体是 141px 代码视口),夹在 32px 的过程行之间矮一截。现为同一套
Line:32px 行高、5px/8px 内距、8px 圆角、13px + 宿主字号的正文层级,hover 与展开共享--cv-row-hover/--cv-row-open表面,16px 图标槽在 hover/展开时换成右→下箭头;tool-registry这类生产者名降为--cc-text-500副文本,与角色名之间是过程行同形的 2px 圆点(corner-shape: round)。保留data-context-source、data-context-summary、data-context-injection-body、data-context-form、data-system-prompt-body与data-reader-line-*标记。 -
展开体改用阅读器共享详情面:1px
--cv-detail-border、--cv-detail-radius(10px)、--cv-surface底色、左缩进--cv-indent(28px),仍以--cv-process-max-height(320px) 封顶并在内部滚动,等宽字体与代码字号不变;折叠时不再挂载 body(原来先渲染再由动画裁剪)。 -
实测(真实引擎,组件 SSR 标记 + 仓库样式表,因为宿主此时仍在服务启动快照里的旧 bundle):行 726×32、padding 5/8、圆角 8、标签 13px/20px;hover 底色 rgba(20,20,19,.055)、展开 rgba(20,20,19,.035);图标 opacity 1→0、箭头 opacity 0→1 并 rotate(90deg);展开体宽 690(726−28−8)、margin 6px 8px 12px 28px、1px rgba(20,20,19,.1)、圆角 10px、max-height 320px、13px/18px 等宽。
npm test446 项全绿,新增tests/context-injection-row.test.ts8 项锁住行语法与详情面。
v0.3.11 — 表格单层外框;0.2.x / 0.3.x 首批正式发布
0.3.11
- 修复表格的双重底边:外层容器统一绘制一层外框,内部表格无外边框,最后一行不再重复画底线。保留行间分隔、表头底色、表格间距和横向滚动;只有表头的表格采用相同规则。
自 v0.1.15 起的累计变更
这是 v0.1.15 之后的第一个正式发布,v0.1.15..v0.3.11 共 104 个提交、199 个文件(+21,701 / −12,196),包含此前未单独发版的 0.2.x 阅读页重构与 0.3.x 全过程(记录呈现、过程分组与折叠、正文/界面/代码字体继承、代码卡片与表格框线、回退可见性、实时跟随与阅读保护等)。逐版明细见 CHANGELOG.md。
兼容与安装
- 宿主:DeepSeek Harness 0.2.0-rc.2(peer 依赖精确钉在该版本;
@deepseek-ai/cordis4.0.4、react18.3.1)。 - 通过 dsh-market 安装,或直接让助手安装
https://github.com/Vinzelles/dsh-clearview;附件的dsh-clearview-0.3.11.tgz为同一提交的构建产物。 - 本版
npm test共 420 项通过;表格单层边框等视觉结论来自真实主题下的浏览器验证。单元测试通过不等于页面已加载,安装后仍需在真实宿主验证。
v0.1.15 — 0.1.2+ client-store boot fix, generic call card, compat observers
0.1.15
- 未接入记录统一降级为「工具调用」默认卡片。此前阅读页遇到本构建未接入的记录
类型(如 AgentTeams 投射的agent-teams节点、更新内核新增的 kind、append-surface
未认领的兜底记录)会显示「此记录类型暂未接入阅读页 / 未识别的会话记录」的
css.unknown灰盒,读起来像阅读页自身的缺口。现在这些记录一律渲染为默认提示卡
(NoticeCardinfo 样式,与命令记录/工作流记录同款):标题「工具调用」,meta 保留
记录类型(unknown kind 时取 payload 的type或节点 id,记录仍可辨识),展开即见
原始记录 JSON(RecordJson,与其余卡片同一「卡片唯一可展开」节奏)。新增 DOM 标记
data-reader-generic-call;command-input无文本的回退路径共用同一组件。 - 修复 0.1.2 内核上插件「启动即失败」(启动页 Failed to load plugins)。0.1.14 的
结论「0.1.2 由 client-modules 的 compat 种子同名承接dsh-client-runtime/client」
不成立:0.1.2-rc.1 的启动壳只预置 8 个平台种子(react、react/jsx-runtime、
react-dom、react-dom/client、@deepseek-ai/cordis、@deepseek-ai/dsh-client-store、
@deepseek-ai/dsh-client-ui-slots、@deepseek-ai/dsh-client-ui-primitives),
既没有 runtime 包、也没有它的 compat 别名。当时「看起来能用」只是因为该机内核文件被
手工打过一次 compat 补丁——内核重装/升级(profile 的 node_modules 是指向内核的
junction)即失效,插件立刻退回
client-modules: require("@deepseek-ai/dsh-client-runtime/client") missed the module table。
该错误是bundle 级硬失败而非局部降级:值导入被客户端构建提升成工厂顶部一次写死的
require,宿主模块表答不上来时整条 loader entry 的导入抛错,插件全部功能不加载。
修复:store.ts不再静态导入defineStore,改在懒 CJS 工厂作用域内用模块表解析器
逐条try/catch查表——@deepseek-ai/dsh-client-store(0.1.2+ 平台种子)优先,
@deepseek-ai/dsh-client-runtime/client(0.1.1 真实预载模块)兜底,两条都缺失才抛出
写明尝试记录的明确错误;类型侧仍走import type(编译期擦除,不产生 require)。
构建产物因此只剩 react、react/jsx-runtime、@deepseek-ai/dsh-client-ui-primitives
三个双版本共有外部依赖(0.1.1 与 0.1.2/0.1.3 的种子表交集的子集)。
验证方式不再依赖「有人说能用」:把本机内核恢复为未打补丁的 0.1.2-rc.1 原版后,
用 headless Chrome 真实启动 Web UI——dsh-clearview五个 compat 补丁
(composer-readability / memory-tail-keep / perf-guard / rewind-bridge /
turn-metrics-footer)全部 applied,无任何 loader 报错;恢复打补丁内核后同样零回归
(两条路径都实测过)。npm test150 项全绿。
新增tests/client-store-resolution.test.ts回归锁 3 项:① src/client 禁止对已删包做
值导入(TS 编译器 API 判定,import type与内联{ type X }放行);② 引擎解析表必须
两个拼写齐全且新平台拼写在前(防止宿主另装同名 compat 种子时抢在真实引擎之前);
③ 构建产物不得再出现写死的 legacy require。三项均做过反向验证(重新引入值导入后
测试确实报store.ts: { defineStore }失败)。
另注:同环境里@dsh-external/dsh-prompt-enhancer,以及 dsh-tavily / dsh-notification
等插件仍对已删除的 runtime 包做值导入,属同一类缺陷,需各自仓库按同样方式修;
本仓库的改动只覆盖 dsh-clearview 自身,不再需要任何内核侧补丁。 - 0.1.5-rc.2 内核实测通过。0.1.5-rc.2 的平台种子表扩到 9 项(新增
@deepseek-ai/dsh-client-ui-dockkit),本插件依赖的三项外部(react、
react/jsx-runtime、@deepseek-ai/dsh-client-ui-primitives)与 store 引擎的
首选拼写@deepseek-ai/dsh-client-store仍在表内;用 headless Chrome 实启
Web UI 复核:插件正常加载,五个 compat 补丁(composer-readability /
memory-tail-keep / perf-guard / rewind-bridge / turn-metrics-footer)全部
applied,compat 样式注入成功,无任何 loader 报错。槽位
conversation.view/conversation.session/conversation.input.dock与
entriesOfSlot在该版内核中同样齐备。
v0.1.14 — DSH 0.1.2 compatibility hardening (0.1.9–0.1.14)
DSH 0.1.2(0.1.2-rc.1)兼容修复总览——自 v0.1.8 以来的全部版本,以 v0.1.14 收口。
0.1.9 核心更新导致插件整体失效的修复
- 0.1.2 客户端平台重组:useSession 快照瘦身(chat/pending 拆分为独立标准钩子)——新增 compat 会话快照桥,合成回旧形状,0.1.1 零开销透传
- 原生会话 store persist 键收敛 dsh.conversation.chat → dsh.conversation:入口绑定谓词放宽为两版共有身份(persist 前缀 + setView)
- workspaces 服务失去 openPath/listDirectory:openFile/listDirNames 改按特性检测走 remote.session.openWorkspacePath / remote.directoryPicker.list
- defineStore 固定走两版唯一共有的 dsh-client-runtime/client 取径(0.1.2 为 compat 种子)
0.1.10 对话流节点全覆盖
- 接入 0.1.2 新增投影:turn-process(阅读页自有过程折叠,不渲染)、system-prompt(新增「系统提示词」折叠行,含 preamble 定位)
- 接入条件触发的老节点:command-input(用户样式块)、workflow-run(汇总记录卡)、unknown(重文案为「未识别的会话记录」)
- 全部载荷防御性窄化(node-payloads),不可读回退原始记录卡,不再出现「暂未接入」误报
0.1.11 轮次统计行修复 + token 用量
- normalizeSnapshot 双形态归一(0.1.1 完整快照 / 0.1.2 扁平 chat 快照),修复统计行整段消失
- 0.1.2 新增 tokenUsage:按字段存在性插入「用量 N tok」(原生 formatTokens 同规则);NaN 边界守卫
0.1.12 上下文注入原始键名修复
- 14 个词典键 0.1.2 迁至 ui-chat 'chat' NS:locale-bridge 在 seat 回显键名时回退内置 zh 词典(与原生文案逐字一致),0.1.1 命中原样透传
0.1.13 折叠区展开即崩修复
- 0.1.2 primitives 把 JsonTree/TerminalBlock/ReadBlock/DiffBlock/SearchBlock/WebBlock/MarkdownText 的文案从内置默认改为必传 labels:补齐 7 组词典 + 包装层,全部调用点接入
0.1.14 全面兼容性核查收口(本版本)
- 功能全集 × 0.1.2 实际契约矩阵核查(节点 kind 全集、快照形状、locale 桥、槽位 props、服务注入、compat DOM 锚点、工具证据契约)
- 修复 JsonBlock.truncatedLabel(0.1.2 删除内置默认且无守卫直调;>20k 原始记录展开即崩——工具大参数卡最易触发):JsonBlockL 包装 + 回归锁测试
- CodeBlock 复制文案显式回退(0.1.2 内置默认删除,防空白按钮)
- memory-tail-keep(收尾总结防吞)改用 normalizeSnapshot——该防护在 0.1.2 上自 0.1.9 起静默失效,本版本恢复
- 退役零消费者的画布色变量计算(每 5s getComputedStyle + 主题观察者)
验证:typecheck 干净;147/147 测试;构建外部依赖仍为四枚双版本共有种子;功能矩阵中未发现其余必现缺陷。
v0.1.8
0.1.8
-
修复「一直停在最底部、结束时却出现回到最新按钮且位置有偏移」:阅读视图的
「阅读守卫」里focused()此前把任意位于阅读器内、持有 DOM 焦点的元素都当作
暂停自动跟随的依据。但用户在阅读中点一下任意控件(展开/收起过程的 Disclosure、
过程/工具页签、可滚动的思考卡片tabIndex=0)就会留下「偶然焦点」,它并非用户
正在键盘操作,却会静默暂停跟随——末尾的内容追加便拉开真实偏移,回合结束时活动条
消失、跳转坞(detached && !activity.key)随之出现,点下去才看见位置其实偏了。
修复:focused()收窄为仅文本编辑面(textarea / 文本 input / contenteditable)
才视为焦点守卫;阅读器内本无文本输入,故偶然焦点不再停摆跟随,视口继续贴底,
偏移与误报的跳转坞消失。文本选择守卫(selected())与决策表不变(选中文本时仍
应暂停跟随),97 项测试全绿。DOM 复现:聚焦 Disclosure 按钮后底部追加 400px 内容,
修复前 gap 444/视口停摆/跳转坞出现,修复后 gap≈0/视口贴底/无跳转坞。 -
修复思考卡片吞掉滚轮导致「鼠标在主流程区滚动无反应」:
.reasonViewport
(思考卡片视口,overflow: auto的嵌套垂直滚动区)此前设了
overscroll-behavior-y: contain。当滚轮落在这个视口的顶部或底部滚动边缘时,
滚轮事件被完全吞掉(既不滚动卡片、也不回传外层阅读器滚动区),实测
outerDelta=0;而多轮会话里几乎每轮都有思考卡片、且思考内容常超出 224px
折叠预览(或 560px 展开上限)形成可滚动视口,主流程大面积出现滚轮死区——
表现为「鼠标处于 mainFlow 区域时滚动无反应、必须移到两侧空白才能滚动」,
是否触发取决于鼠标位置与卡片内部滚动位置,故非必现。修复:去掉该
contain,边缘滚轮按嵌套滚动惯例回传外层(实测恢复 -100 量级回传,与
.toolRaw、pre、上下文注入块等其他嵌套滚动区一致),CSS 处加了注释防止
回归。 -
修复长会话向上滚动时滚动位置突然跳到更上方(content-visibility 占位跳变 + 原生 scroll anchoring 误补偿):重会话(内容规模或轮次数超阈值)下 perf-guard 点亮
data-dshcp-heavy,已关闭轮次以content-visibility: auto离屏渲染;但从未渲染过的轮次使用 480px 回退占位。向上滚动读历史时,滚动手势中途发生占位 → 真实高度(数千 px)的交换,原生 scroll anchoring 的锚点位于交换盒内部或相邻处,会按「交换引发的重排」做补偿,把视口拽到明显更早的位置(用户报告的「向上滚动时突然跑到上方得多的位置」;真实环境实测每次交换步 ~146px 反向跳变,且contain-intrinsic-size: auto的「记住上次高度」在当前 Chromium 的后续滚动轮次里不可靠——占位回退仍复现,多次上滚反复触发)。修复:只有真实高度已测得的轮次才参与离屏渲染——perf-guard 的 2s 低频轮询为已关闭轮次点亮data-cv-armed并把实测高度写入内联contain-intrinsic-size(CSS 规则相应加上[data-cv-armed="1"]门控);从未渲染的轮次保持完整布局(真实几何,向上滚进入时不发生尺寸跳变),已渲染轮次再离屏时占位 = 真实尺寸,elide/render 交换尺寸中性。真实环境实测:修复前 18 步上滚在交换步出现 -146px 跳变,修复后 18 步 0 跳变,重会话的离屏渲染收益保持不变。新增tests/cv-arm.test.ts覆盖cvArmSize边界。 -
新增「本会话文件改动」面板:会话结束后在对话流末尾按 新增/修改/删除 三类汇总:
阅读视图在对话流最底部(回合结束后出现)展示一个只读汇总卡片,把本会话实际发生
的文件变更按三类分组列出,路径用相对路径(越出会话工作区时保留绝对路径并折叠),
点击路径按会话 cwd 解析后交给工作区打开器打开。分类基于工具调用证据而非猜测:
write/str_replace_editor等文件工具的创建/更新结果视图(「Created file」/
「Updated file」文本、空 diffs 元数据)判新增或修改;edit恒为修改;无视图时回退
参数里的文件路径(默认修改);删除没有专用文件工具,只能来自终端命令——对
rm/Remove-Item/del/git rm等移除动词与mv/Move-Item/git mv移动(两路径才计:删源- 增目标)做成功命令的词法解析(失败命令、动态变量、通配、根目录等一律不计),
并按路径净状态折叠(先建后删=净零不显示、最后删除=删除、首次创建=新增、否则
修改)。宁缺勿错:无法判定的调用不计入,未知工具默认修改而非新增。可见性与
对话流一致地收敛:对话执行中、有排队消息、本会话有后台任务(运行/停止中)或
窗口仍在加载时整卡卸载,回合结束且无运行内容时淡入出现;窗口未覆盖全部历史时
标注「仅已加载记录」,被回滚(rewind)隐藏的轮次不计入(与可见转写一致)。
无任何文件改动时显示「无文件改动」。纯展示,不改动对话流原有内容与交互;新增
tests/file-changes.test.ts22 项(分类、shell 词法、净状态折叠、路径相对化等)。
- 增目标)做成功命令的词法解析(失败命令、动态变量、通配、根目录等一律不计),
-
补齐非命令类单行操作执行时的状态动画:工具行的状态呼吸(状态徽标脉冲 + 摘要扫光)
此前只挂在running相位上。终端命令执行期长,扫光可见;而 write/edit 的大部分可见
时间处于preparing(模型正在流式生成工具输入,写文件时即整个文件内容),read/搜索等
的真实执行耗时又在毫秒级——running一闪而过,这些行只剩一个小圆点在呼吸,观感上
「没有动画」。现在两个在途相位(preparing/running)共用同一套状态动效,与行底色高亮
(本就覆盖两相位)对齐;data-motion=off与prefers-reduced-motion降级清单同步
补上 preparing 选择器。