Skip to content

Releases: Max-Null/dsh-chat-rail

dsh-chat-rail 0.6.13

Choose a tag to compare

@Max-Null Max-Null released this 02 Oct 09:24

修复

  • 点击跳转后高亮会落到上一条(issue #1)。落位把目标行居中(视口 50%),而 scroll-spy 按「离 40% 线最近」选行——相邻条目中心间距小于视口高度的 20% 时,40% 线离上一条更近;落位自己派发的那次 scroll 经 60ms 去抖就把高亮改判到上一条。消息越矮、间距越密越容易中(行高 40/60/80/100px 实测全部选中上一条)。

新增

  • 点击条目立即变蓝,不再等滚动结束——未加载的条目本就要先分页,落位前根本没有 scroll 事件可供 scroll-spy 更新。
  • 跳转落位期间冻结 scroll-spy 的重算:settle 之后再等一个 150ms 去抖窗口才交还,且交还时不重算,高亮留在点击的那条,直到用户自己滚动。

说明

  • issue #1 报的另两件事——「平滑滚动期间悬浮窗乱跳」与「多个平滑动画互相抢占」——在当前版本已不成立。0.6.x 早已把落位改成瞬时定位(jumpToMessage 直接赋 scrollport.scrollTop,见 docs/决策/2026-09-28-跳转改瞬时定位-方案.md),那条「smooth → 连续 scroll → 高亮反复改判 → 高亮跟随再把 rail 自己滚」的链条失去了触发源。无头浏览器按两边真实几何重放:

    落位方式 scroll 事件 updateActive 执行 高亮变化 rail 自我滚动
    0.3.1(smooth) 31 7 5 5 次
    0.6.12(瞬时) 1 1 1 1 次
  • 因此没有采用建议里的「150ms 滚动静止检测」:在瞬时落位下它会让落位刚结束就重算一次,而那次重算正好判给上一条,等于把刚修好的问题制造回来。

  • 跳转所有权改用单调递增 token 表示:连点两条已加载的条目时,被取代的旧跳转不得解除新冻结、也不得抹掉新跳转的分页指示。

  • 测试 50 → 57(新增 7 条钉所有权规则;做过变异验证——移除所有权检查后对应用例确实转红)。

  • 未包含「滚动中点击其它条目直接接管」:分页期间条目仍 disabled,去掉这道守卫会让 loadThrough 并发,安全性未在真机验证,留作后续。

dsh-chat-rail 0.6.12

Choose a tag to compare

@Max-Null Max-Null released this 01 Oct 19:22

修复

  • 附件回填在 DSH 0.2.0-rc.2 上失效(表现为「加号只把文本填进输入框、图片不进去」)。该内核把两个运行时方法改了名:createDraftImages(files) → createDrafts(sessionId, files)、addImages(ids) → addAttachments(ids);旧调用藏在可选链与降级分支后面,所以不报错也没有提示。现在两代名字都探测,按内核实际提供的那一代调用。
  • 收藏 ★ / 添加 + 的按钮提示移到按钮下方,与官方复制按钮一致(原先挂在上方,会伸进消息行盖住正文)。

升级

dsh plugin --profile <name> add @max-null/dsh-chat-rail

或精确 pin:

dsh plugin --profile <name> add @max-null/dsh-chat-rail@0.6.12

dsh-chat-rail 0.6.11

Choose a tag to compare

@Max-Null Max-Null released this 01 Oct 17:34

修复

  • tip 面板不再越过输入区。悬停到靠下的条目时,面板此前会从条目顶边一路向下探(最高 70vh)压到 composer 上——既盖住发送按钮,又因为 tip 自己接管指针事件而把点击一并吞掉。现在面板底边钉在 composer 座位(官方锚点 [data-composer-seat])上沿之外,空间不够就内部滚动;连 120px 的最小可读高度都放不下时,top 整体上移。
  • .crl_tip 补 box-sizing: border-box:content-box 下 max-height 只约束内容高度,padding 与 border 会再撑出 22px,足以把上面那道闸门顶穿。

升级

dsh plugin --profile <name> add @max-null/dsh-chat-rail

或精确 pin:

dsh plugin --profile <name> add @max-null/dsh-chat-rail@0.6.11

dsh-chat-rail 0.6.10

Choose a tag to compare

@Max-Null Max-Null released this 01 Oct 17:18

调整

  • 导航条 z-index 由 5 → 19:压过官方右侧面板(10)、列拖拽手柄(11)与标题栏座位(15),又停在 shell.overlay(20)之下 —— 此前这三档在几何重叠时都能压住导航条。
    上限不是保守起见:shell.overlay 是独立的层叠上下文,越过 20 会把那一层整体盖住(插件中心的「插件更新」弹窗就注册在那里)。
  • README「兼容性」中那条层级说明同步更新。

升级

dsh plugin --profile <name> add @max-null/dsh-chat-rail

或精确 pin:

dsh plugin --profile <name> add @max-null/dsh-chat-rail@0.6.10

dsh-chat-rail 0.6.9

Choose a tag to compare

@Max-Null Max-Null released this 29 Sep 16:38

修复

  • 导航条不再盖住 shell.overlay 那一整层:.crl_nav 的 z-index 由 90 降到 5。

官方 frame 的浮层梯度是「右侧面板 10 → 拖拽手柄 11 → 标题栏座位 15 → shell.overlay 20 → 全屏右面板 40」。上一版取 90 只调开了与 DSH 菜单(100)的先后,仍高于整层 shell.overlay —— 该层是独立的层叠上下文,其中一切(包括插件中心注册在那层里、自身没有 portal 的「插件更新」弹窗)都会输给层外的元素,于是被导航条挡住。

5 仍高于会话列内容,同时低于右侧面板 10 与拖拽手柄 11(手柄须始终可拖)。

文档

  • README「兼容性(重点)」把层级判据改成官方的浮层梯度,并写明为什么取 5。

dsh-chat-rail 0.6.8

Choose a tag to compare

@Max-Null Max-Null released this 29 Sep 11:17

修复

  • 导航条不再压住 DSH 的菜单与 tooltip:.crl_nav 的 z-index 由 100 降到 90。DSH 的下拉菜单与 tooltip 同为 100(ui-primitives/Menu.module.css),而导航条是挂到 body 末尾的 portal——同层级时 DOM 靠后者在上,导航条因此把菜单压住。90 仍高于侧栏 30 与 dockkit 70,只让菜单赢。

文档

  • README 的「兼容性(重点)」补上这条层级约定:该段此前只覆盖与侧栏、底栏、官方轮次导航的避让,没有写与菜单/浮层的叠放。

dsh-chat-rail 0.6.7

Choose a tag to compare

@Max-Null Max-Null released this 28 Sep 22:29

dsh-chat-rail 0.6.7

版本决策

  • 0.6.6 → 0.6.7(patch):只放宽 peer 版本范围 + 校订 README,没有新的用户可见能力,非 break。但没有它,本插件在 SSiD 下一版内核(0.2.0-rc.1)上不会被装载。

为什么必须发这一版

SSiD 内嵌内核将从 0.1.7-rc.2 升到 0.2.0-rc.1。DSH 在装载插件前逐个检查 peerDependencies 里的每个 @deepseek-ai/dsh-* 声明(packages/boot/app-boot/src/plugin-compatibility.ts):

semver.satisfies(runtimeVersion, requirement, { includePrerelease: true })

caret 对 0.x 的上界是下一个 minor 的 -0 预发布,于是:

范围 对 0.2.0-rc.1
^0.1.7-rc.2(旧) false —— 判不兼容,插件不被装载
^0.1.1-rc.1 false
>=0.1.7-rc.2 <0.3.0(新) true

相对于 npm 0.6.6 的增量

  • fix(compat):peerDependencies 与 devDependencies 的 9 个 @deepseek-ai/dsh-* 声明统一改为 >=0.1.7-rc.2 <0.3.0——保留原下限,只放宽上界。@deepseek-ai/cordis 与 @deepseek-ai/schemastery 不在该检查的命名空间内(只匹配 @deepseek-ai/dsh 与 @deepseek-ai/dsh-*),保持不变。pnpm-lock.yaml 同步 9 条 specifier,解析版本仍是 0.1.7-rc.2。
  • docs(README) 核对(先假定写错,再回源码找证据):
    • 版本要求原写「需要 DSH ≥ 0.1.0-rc.6」,与 peer 下限 0.1.7-rc.2 矛盾——按上面的判据,那个内核根本装不上。已改为与 peer 一致的写法,并说明 caret 为何不可用。
    • 收藏原写「按会话持久化(localStorage)」,实际是 host 文件($DSH_HOME/chat-rail-favorites.json,经 /chat-rail/api/favorites 读写;localStorage 仅作旧数据一次性迁移)。
    • 架构段的投影锚点字段补全为 { seq, time, text, hasImage, images, id }。
    • 其余断言(260px 退场阈值、[data-conversation-scroll] 锚点、--dsh-sidebar-height 避让、conversation.input.dock 槽、TurnNavigator 双 aria-label、loadThrough 200 条 / loadOlder 50 条、只显示收藏开关行为)逐条回源码核对,与实现一致,未改。

判据来源(实测)

用 DSH checkout 自带的真 semver 7.7.4 逐条验证:0.2.0-rc.1 对全部 9 个新范围的 satisfies 均为 true,对旧 caret 式均为 false;0.1.7-rc.2 对新范围仍为 true(没有丢下限)。

回归确认(L1)

  • pnpm typecheck ✅
  • pnpm test 50/50 ✅
  • pnpm build ✅(lib/ 重新构建,产物与上一版逐字节一致——本次不改用户可见行为,docs/shots/ 未动)

兼容性

需要 DSH >=0.1.7-rc.2 <0.3.0,与本插件的 peerDependencies 一致。

dsh-chat-rail 0.5.0

Choose a tag to compare

@Max-Null Max-Null released this 29 Aug 22:50

dsh-chat-rail 0.5.0

版本决策

  • 0.4.0 → 0.5.0(minor):新功能「安装后自动屏蔽 DSH 官方轮次导航」+ 1 个收藏粘性修复,非 break。

相对于 npm 0.4.0 的增量

  • feat(client):屏蔽官方 TurnNavigator(轮次导航)——DSH 0.1.2-alpha.1+ 自带轮次导航竖轨(与右键 messages 同名右缘位置;仅轮次维度)。安装本插件后自动隐藏官方竖轨,由本插件统一承担会话导航。锚点用 aria-label 中英双文案(轮次导航 / Turn navigation),不用 CSS module 类名(hkplfa_slot 这类 hash 随构建漂移)。
    • L2 实测(SSiD dev)通过:官方竖轨消失、导航/收藏功能正常、console 0 error。记录:docs/验证记录-2026-08-30-屏蔽官方TurnNavigator.md(含截图)。
  • fix(client):收藏开关粘性正确——收藏开关粘住胶囊顶部(含 padding 区域),行不再从顶部透过(8658e46)。
  • docs:家族清单同步(header-unify → quick-toolbar 迁出)、L2 留痕。

回归确认(L1)

  • pnpm typecheck ✅
  • pnpm test 22/22 ✅

dsh-chat-rail 0.4.0

Choose a tag to compare

@Max-Null Max-Null released this 27 Aug 17:39

dsh-chat-rail 0.4.0

画卷式消息导航,新增收藏与快速填充。

✨ 新功能

  • 消息操作按钮:每条用户消息的复制按钮左侧新增两个按钮
    • 星 ★:收藏/取消收藏(收藏后变为黄色实心星),按会话持久化
    • 加号 +:一键把消息全文 + 历史附件回填输入框(走官方附件通道)
  • 导航条联动:收藏的消息指示条显示为黄色;展开态标题前显示黄色星标
  • 只显示收藏:导航条顶部星形过滤开关,点亮后只显示收藏的消息

💾 持久化(host 侧)

  • 收藏数据存 host 文件(~/.dsh/chat-rail-favorites.json,经 /chat-rail/api/favorites GET/PUT)
  • 为什么:client localStorage 按 origin 隔离,思灵 DSH web 端口每次启动随机 → 旧方案跨重启丢收藏
  • localStorage 旧数据自动一次性迁移后清除;加载完成前以 localStorage 兜底

🎨 UI 打磨

  • 星/加号按钮与复制按钮完全同款:28px 圆形、DSW token 颜色、hover 浅蓝圆背景
  • hover 黑底 tooltip(收藏消息 / 取消收藏 / 填充到输入框),与 host Tooltip 一致
  • 展开态筛选按钮为完整标签行(星 + 「只显示收藏」),杜绝竖排
  • 收藏条为当前阅读位置时光晕同色(黄),不再「黄点蓝光」
  • 筛选按钮钉在导航条顶部(sticky,长会话滚动不跟随滚走)
  • 无收藏时隐藏筛选按钮(过滤激活时取消最后一条收藏自动释放过滤)

🐛 修复

  • conversation 服务注入声明(此前直接访问导致插件崩溃)
  • 只显示收藏过滤下剩 1 条时导航条不再消失
  • host 半端 webServer 注入导致投影单测批量失败(fake 服务分流修复)

验证

  • 单测 22/22、E2E 11/11(真实 SSiD 界面驱动,幂等重置收藏后重测)、typecheck 通过
  • 长会话真机验收通过(筛选按钮 sticky、无收藏隐藏、收藏持久化跨重启保留)