Releases: BananaSoldier01/dsh-tidychat
Release list
v0.2.5 — Hardening(工程收口)
本次内容(自 0.2.4)
工程收口批次,新增一个 P0 修复 + 三处定位条微调 + 文档一致:
- 折叠状态会话隔离(P0):
foldState从Map<turn, boolean>改为Map<sessionId, Map<turn, boolean>>——修复跨会话同轮次串扰:会话 A 手动展开第 5 轮后切到会话 B,B 的第 5 轮不再错误继承展开态 - pointermove 节流:定位条高频鼠标移动只记录最新坐标,rAF 帧内统一处理一次,不再每事件一次 React 渲染;离开/卸载时清理挂起帧
- 测量前不渲染:宿主布局未就绪(
pos === null)时不再渲染到写死的 280px 猜测位,等测量成功再出现(切会话不再闪现错位条) - 快照/DOM 轮次一致性诊断:诊断报告新增「会话快照轮次 vs DOM 轮次」对照;不一致时在「系统检测」段自动提示(
⚠️ 加载中或 DOM 更新滞后) - 文档:README 双语钉版示例更新至 v0.2.5;package description 补齐「智能加载更早历史」
功能无新增;纯函数抽取与自动化测试按计划推迟(0.3.0 前置)。
安装 / 更新
dsh plugin --profile web add @bananasoldier01/dsh-tidychat
# 或
dsh plugin --profile web add git+https://github.com/BananaSoldier01/dsh-tidychat.git#v0.2.5v0.2.4 — npm 包元数据刷新
本次内容(自 0.2.3)
功能零改动,仅 npm 包元数据/文档刷新:
- 双语 README 随包:
README.en.md(英文完整版,默认仍中文)纳入包内,npm 页 README 更新至含 0.2.4 路线图; repository.url规范化(npm pkg fix,GitHub →git+https形式,消除发布警告);- awesome-dsh-plugin 收录 PR #3067 已合并(session 分类 + 截图条目),插件进入 dsh-market 插件源。
安装 / 更新
dsh plugin --profile web add @bananasoldier01/dsh-tidychat # npm(推荐)
# 或
dsh plugin --profile web add git+https://github.com/BananaSoldier01/dsh-tidychat.git#v0.2.4v0.2.3 — npm 发布准备
本次内容(自 0.2.2)
按 awesome-dsh-plugin 投稿推荐项整理 npm 发布链路:
- peerDependencies:
@deepseek-ai/dsh-settings从dependencies移入peerDependencies(官方运行时包由宿主 profile 提供,避免重复运行时) - npm 发布配置:
prepublishOnly=pnpm build(发布前自动构建),files白名单已就绪(lib/)——发布后即可dsh plugin add @bananasoldier01/dsh-tidychat一条命令安装(预构建,免 allowBuilds 授权) - README:安装部分改为推荐 npm 一行式,GitHub 钉版本示例更新至 v0.2.3
功能无变化(0.2.2 的提示卡可读性修复原样)。
安装 / 更新
dsh plugin --profile web add @bananasoldier01/dsh-tidychat
# 或
dsh plugin --profile web add git+https://github.com/BananaSoldier01/dsh-tidychat.git#v0.2.3v0.2.2 — 提示卡可读性(issue #6)
本次内容(自 0.2.1)
针对 issue #6 的悬停提示卡可读性,并修复官方深色模式下误判玻璃底导致的「暗底暗字」:
- 头部提级:提示卡
#序号 · 时间由最弱一级(label-tertiary)提升到label-secondary,亮色主题下不再发虚;正文跟随label-primary(与对话正文同色),明暗随主题自动切换 - 保守对比度兜底:仅当提示卡浮层背景「不透明」(
bg-layer-3alpha ≥ 0.85)且 label token 与背景对比 <3:1 时才写纠偏色(亮底深字 / 暗底亮字);玻璃/半透明浮层(官方深色rgba(255,255,255,0.1)类)一律跳过、跟随主题 token——避免把半透明白玻璃误判成浅底 - 长摘要折行:
overflow-wrap: anywhere——摘要含长代码/URL 时在卡片内折行,不撑破卡片(悬停时摘要溢出框体的问题) - 颜色解析增强:
parseRgba支持rgba逗号 / 空格+斜杠语法、#rgb/#rgba/#rrggbb/#rrggbbaa、transparent
验证:类型检查 / 构建通过;判定矩阵 10/10(官方深色玻璃 SKIP、官方浅色 OK、异常 token 的不透明主题 FIX);bundle 服务端一致性逐字节确认。
安装 / 更新
dsh plugin --profile web add git+https://github.com/BananaSoldier01/dsh-tidychat.git#v0.2.2
# 或从 main 更新
dsh plugin --profile web update @bananasoldier01/dsh-tidychat下一版本(候选)
- Turn Index 层(fold/navigator/autoload 共享索引,替代每次全量扫描)
- 运行中回合的已完成步骤折叠(issue #2)
v0.2.1 — 定位条配色完善(PR #5 合入)
本次内容(自 0.2.0)
PR #5(drscrewdriver)配色功能合入 main,并完成 4 点改进:
- 背景真实冒泡:默认色 auto 的背景判定从会话滚动容器沿父级向上冒泡找第一个非透明背景(alpha=0 跳过),不再只查固定候选
- auto 尊重主题:默认色 auto 优先用宿主淡色文字色,与实际背景 WCAG 对比 ≥3:1 才使用,不足自动切纠偏灰;强调色 auto(默认)= 跟随主题品牌色(
--dsw-alias-state-business-primary),不再默认硬编码蓝 - 配色折叠为高级项:设置卡片内「配色(高级)」可折叠收起,明度档在 auto 时禁用;两个色系均支持「自动」chip(默认色明暗渐变预览 / 强调色品牌色预览)
- 配置枚举化:host schema 四个配色字段改为
z.union枚举收敛取值(无效值拒绝、缺省回落);插件卸载时清除写入:root的临时 CSS 变量
另外包含 PR #5 的既有功能:定位条默认色 / 强调色两组「色系 × 5 级明度(l1 极浅 → l5 极深)」正交配置。
安装 / 更新
dsh plugin --profile web add git+https://github.com/BananaSoldier01/dsh-tidychat.git#v0.2.1
# 或从 main 更新
dsh plugin --profile web update @bananasoldier01/dsh-tidychat下一版本(候选)
- Turn Index 层(fold/navigator/autoload 共享索引,替代每次全量扫描)
- 运行中回合的已完成步骤折叠(issue #2)
v0.2.0 — Adaptive Conversation Navigation Rail
本次内容(自 0.1.5)
左缘定位条从「固定列表」升级为 Canvas Minimap 全局导航:
- 固定高度 + 自适应:
min(min(70vh,660px), max(48px, 轮次×12px))——轮次少时按 12px/轮 收紧(间距紧凑),轮次多时封顶 - Turn 全局均匀映射:
y = index/(total-1) × railHeight;仅 1 个 canvas + 1 个提示卡,不随 turn 数增长 DOM(2000 turn 每帧 O(N) 矩形无压力) - 鱼眼 hover:hover 附近 ±4 turn 间距放大、远处自动压缩;命中测试与绘制共用同一布局函数(所见即所得,二分命中)
- Drag scrubbing:pointer 捕获,拖动时仅预览目标 turn,松手才跳转
- 当前 turn 高亮:以「阅读区顶部」为准(含 header 偏移);行位置缓存按「行数/内容高度」变化自动重建(修复折叠导致的坐标漂移),滚动 rAF 节流 + 二分检测
- 精确跳转:
scrollTo计算,用户消息滚到阅读区顶部(非 viewport 中心、不埋进 header) - 主题自适应:颜色从 CSS 变量读取(深浅色),DPR 处理
兼容性:fold / divider / autoload / diagnostics 均不受影响(rail 数据来自会话快照,与折叠的 CSS 隐藏无关)。
安装 / 更新
dsh plugin --profile web add git+https://github.com/BananaSoldier01/dsh-tidychat.git#v0.2.0
# 或从 main 更新
dsh plugin --profile web update @bananasoldier01/dsh-tidychat下一版本(候选)
- Turn Index 层(fold/navigator/autoload 共享索引,替代每次全量扫描)
- 运行中回合的已完成步骤折叠(issue #2)
v0.1.5 — 稳定性收尾 + 可观测性 + 一键报告问题
本次内容(自 0.1.4)
稳定性收尾(用户无感的内部修复)
governorBusy改为 active-session 派生状态:修跨会话 race(A 加载中途切到 B,A 的旧回调曾污染 B 的 busy 状态)。状态枚举化为 idle/loading/settling/paused/done,isGovernorBusy()从当前会话派生,删除全局布尔。- DOM 查询系统收口:applySurgery 主查询 / jumpTo / countAnchors / findLoadOlderButton 全部收口到会话滚动容器(未挂载时回退 document);按钮匹配移除泛化的「加载更多 / Load more」,只保留会话专属文案。
- async cleanup 收口:disposers 登记表统一清理 timer/requestIdleCallback/subscribe;
generation守卫保留作第二道防线。 - 避免无效扫描:5 秒兜底加 dirty 门(无变化时跳过全量扫描);scan 记录耗时、清 dirty;长会话下减少无用 DOM 查询。
可观测性 + 一键报告问题(核心新功能)
- 调试性能报告:debug 开启时每 10s 输出
[tidychat perf](轮次 / 扫描耗时 / 定位条 / 自动加载状态),window.__tidychatReport()手动触发。 - 📤 一键「生成诊断报告并提交」(设置面板):
- 自动生成完整报告:时间 / DSH 版本占位 / 插件版本(构建时注入)/ 浏览器 / 会话规模 / 性能(最近+峰值+扫描次数)/ 自动加载 / 定位条 / 开关配置
- 异常自动检测:扫描峰值超预算、autoLoad 暂停、autoLoad 关闭、autoLoad 未触发等自动写入「系统检测」段
- 现象快捷标签:6 个可多选标签(滚动卡顿/输入卡顿/界面卡顿/定位条异常/自动加载异常/折叠异常)
- 标题+正文全预填:打开 GitHub issue 新建页即已填好,用户检查后提交即可——全程零手写
其它
- README 兼容性更新:适配 DSH ≥ 0.1.0-rc.7(含 0.1.1-rc.x 实测 rc.1/rc.2)
安装 / 更新
dsh plugin --profile web add git+https://github.com/BananaSoldier01/dsh-tidychat.git#v0.1.5
# 或从 main 更新
dsh plugin --profile web update @bananasoldier01/dsh-tidychat下一步(0.1.6)
- 左缘定位条超长优化(窗口化 / 随内容滚动,方案未定)
- Turn Index 层(fold/navigator/autoload 共享索引)
v0.1.4 — 定位条体验修复
本次内容(自 0.1.3)
定位条(左缘导航条)一组体验修复:
- 贴会话区真实左缘(合并 PR #3):锚点从 0×0 的
[data-slot=conversation.session]改为真实滚动容器[data-conversation-scroll],不再落到写死的 284px fallback,侧栏展开/收起自适应 - 半透明 pill 底衬 + 深色主题可读(PR #3):竖条改
label-primary 78%+bg-layer-3半透明圆角底衬,并补充color-mix()旧浏览器兜底 - 移除 pill 边框:删掉
box-shadow的 inset 边框,只留半透明底衬 - 即时重排:ResizeObserver + window resize 监听会话容器尺寸,侧栏展开/收起时定位条立即跟随,消除 5s 兜底延迟
- 留白自适应隐藏:隐藏判据从「容器总宽度」改为「内容左缘与容器左缘的真实间距 gutter」——dsh 会话内容居中且 max-width 748px,窄窗口内容铺满、留白归零时会压正文/输入框;现测真实 gutter,不足定位条宽度(48px)即隐藏,随窗口宽度自适应(Codex 同款「空间足够才显示」)
其它:
- 新增 bug / feature 两类 issue 模板
- 路线图更新:0.1.4 计划项移至 0.1.5(含定位条超长优化,方案未定,下个版本进行)
兼容性
适配 DSH ≥ 0.1.0-rc.7(rc.7/rc.8 契约点均未变化,插件无需改动)。
安装 / 更新
dsh plugin --profile web add git+https://github.com/BananaSoldier01/dsh-tidychat.git#v0.1.4
# 或从 main 更新
dsh plugin --profile web update @bananasoldier01/dsh-tidychatv0.1.3 — 智能加载修复 + 深色模式适配
修复(自 0.1.2)
智能加载更早历史(governor)三处核心 bug:
- 不自动加载:会话桥触发时正文仍在「载入历史」,按钮未渲染;原实现 直接标记 done(终态)导致永不加载。改为保持 idle + 退避重试(2s,上限 15 次),并补充英文文案
Load earlier的匹配。 - 只加载一页就停:Long Task 检查过于激进——加载一页历史后 dsh 渲染新增行会自然产生一次 >50ms 的 long task,被误判为卡顿而 PAUSED。移除 Long Task 刹车,回到以
applySurgery耗时(scanMs)作为唯一且跨浏览器的性能信号。 - 每页测的是二次 scan / settle 时序 race:batch 期间抑制普通 scan,settle 后只执行一次 measuredScan;settle observer 先挂载再点击。
其它健壮性:
- 按钮/anchor 查找限定到会话滚动容器(找不到回退全文档)
- 会话切换立即重绑观察器(不再最多滞后 5s)
btn.disabled不再误判 done(保持 idle + 退避重试)- 到达历史最前端才干净收尾 done(
grew && !按钮)
深色模式:
- 定位条摘要卡背景 token 修正为
--dsw-alias-bg-layer-3(浅色纯白 / 深色深灰,随外观动态切换)。此前用了不存在的bg-elevated(恒白框)和恒深色的tooltip-bg。
安装 / 更新
# 安装
dsh plugin --profile web add git+https://github.com/BananaSoldier01/dsh-tidychat.git#v0.1.3
# 从 main 更新
dsh plugin --profile web update @bananasoldier01/dsh-tidychat下一步(0.1.4)
- 左缘定位条窗口化(只渲染视野附近消息、随滚动更新,解决长会话溢出)
- 降低全量扫描成本(缓存行列表 + 无变化跳过)
v0.1.2 — 智能加载更早历史(自适应性能闸门)
修复
解决长会话卡顿:原 autoLoad 只要还有「加载更早」就每 1.2 秒点一次、最多 60 次,把全部历史灌入 DOM。而 DSH 会话列表是非虚拟化渲染,DOM 越大整个页面越卡——形成「加载 → DOM 变大 → 更卡 → 继续加载」的正反馈。
改动
将 eager auto-load 改为 session 级自适应历史加载控制器:
- scan 与 autoLoad 解耦:scan 只负责折叠/分隔线/导航,加载逻辑独立成 governor
- 空闲单页加载:
requestIdleCallback(Safari 用setTimeout兜底),主线程空闲才加载下一批 - 性能闸门:每加载一页测一次
applySurgery耗时,软预算(连续 3 次超 30ms)或硬预算(单次 50ms)即自动暂停;Long Task API(Chromium/Firefox)作为增强刹车 - 预算用时间、非行数/次数:阈值是「UI 延迟预算」,跨机器性能自洽,快机器多加载、慢机器提前停
- 会话隔离:
Map<sessionId> + generation,防切换会话后陈旧 callback 串台;暂停状态按会话各自保存 - 暂停不自动恢复:保留宿主「加载更早」手动按钮,并在按钮旁轻提示一次
- 观察范围收窄:MutationObserver 从
document.body收到[data-conversation-scroll] - 顺手消除
applyFold相同 textContent 的冗余 DOM mutation
不新增任何用户设置,开关文案改为「智能加载更早历史」。
行为变化
| 场景 | 之前 | 现在 |
|---|---|---|
| 短会话 | 自动加载完 | 一样,自动加载完 |
| 长会话 | 一路加载到卡死 | 机器吃力前自动暂停,页面保持流畅 |
| 想继续看 | — | 手动点「加载更早」 |
后续
- 0.1.3:增量扫描(addedNodes → 只处理新增 Turn),进一步降低大 DOM 下的全量扫描成本
- 长期:导航索引脱离当前 DOM window,点击历史位置时按需加载