dsh-quick-toc 0.7.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,235 +1,239 @@
1
- # 更新日志
2
-
3
- **dsh-quick-toc** 的重要变更都记录在这里。英文版见 [CHANGELOG.en.md](CHANGELOG.en.md)。
4
-
5
- ## [0.7.1] - 2026-09-19
6
-
7
- ### 新增
8
- - **「回到我滚到的位置」浮动按钮**:大纲不在底部时,列表右下角本来就有一枚「回到底部」;现在右上角多了一枚方向朝上的同款圆钮,带你回到**离开这个界面时正在看的那一行**。位置在**关闭的那一刻**记录,停靠面板与幕布**各记各的**,互不覆盖;重新打开时按钮才亮出,点它回到那一行**原来的位置**——若它当初被视口上沿裁掉了一截(列表停在底部时就是如此),就还它那一截,而不是硬顶到最上面。用过一次、或者自己滚回同一处,按钮就渐隐并忘掉这次记录,直到下一次关闭再记。它按列表在界面里的实际起点定位,所以停靠面板的把手条与标题栏、幕布自己的工具条都压不住它,并且跟着幕布放大到 34px。
9
-
10
- ### 变更
11
- - **打开面板与幕布时都落在「正在阅读的那一行」**:此前只有幕布这么做,面板只是显示列表上次停在哪,两个界面会不一致。现在同一条规则:当前正在阅读的那一轮对齐到列表顶部、瞬时完成;读的就在最新几轮时列表已经到底,那一行自然停在底部,不需要任何钳制。
12
- - **面板的展开/收起动画改用 `transform`**:原先同时过渡 `left`(布局属性,每帧都要重排整个面板)与 `clip-path`,长会话里成百上千行大纲时主线程跟不上合成器,于是收起会变成「一条线扫过、扫过的内容消失」,而不是面板滑走。现在盒子常驻停在收起位、展开态是叠上去的位移,视觉几何完全不变,动画不再随列表规模变慢。
13
- - **顶部图标的几何校准**:幕布钮从竖长方形改成 12×9 的横矩形(两轴都居中),箭头由朝上改为朝下、尾端压在矩形上边上;层级筛选的三根线加粗到 2.2;「只看提问」的对话泡轮廓同样加粗到 2.2,并略微放大、整体下移一点(泡体是视觉主体、尾巴挂在左下发散,几何居中反而读作重心在上);✕ 与放大镜去掉原先 1px 的平移补偿,改为把几何画在正中——平移在其它尺寸下会差半个像素。
14
- - 设置卡片里「记住阅读位置」「自动加载历史」两行不再带说明文字。
15
-
16
- ### 修复
17
- - **大纲翻历史「一直追不上」**:翻到未加载区域之后,自动加载仍按 50 条一页、每 130ms 一页地爬,深空档里读者已经翻到了,页面却还没铺完。现在分两条路:视野里已经出现「未加载」占位行时,直接按该回合的 seq 一次翻页到位,并往更早的方向多带 8 行余量;只是接近预取带时才一页一页拉。同一处还修掉一个误判——宿主的「加载更早」按钮在加载期间是 disabled,插件把「正在加载」读成了「已到最早」,于是几百轮之前就弹出「已经是最早的消息」。
18
- - **加载时视野被推走,以及「关掉自动加载也会回弹」**:占位行加载后变高,它下面的内容被整体推下去。补偿原先跑在 `requestAnimationFrame` 里(比 DOM 变更晚 1–2 帧,看到的就是「跳一下再弹回来」),而且只补自己发起的加载,宿主自己翻页时完全没有补偿。现在补偿放进布局 effect(与 DOM 变更同一帧、浏览器绘制之前)、锚点取视野里**第一个真实行**(占位行正是要长高的那一批,锚在它们下面才等于让新内容在视野上方长出去),并给列表加 `overflow-anchor: none`——浏览器自带的滚动锚定也会为同一次增长改 `scrollTop`,与我们的补偿叠加会把内容向上顶出去。
19
- - **「用一会儿卡一下 / 开越久越慢」**:自动跟随每次都对会话里**每一条**消息读一次 `getBoundingClientRect`,几千条 × 每秒十几次,工作量随会话长度增长。现在缓存节点列表,只在容器或首尾键变化时重扫;面板收起时把扫描间隔也放宽。
20
- - **自动加载把中间的对话往上抬**:翻页前会把对话区从贴底的吸附区里抬出 26px(0.5.1 为了防止宿主把刚从大纲翻进来的历史重新钉回底部),但它每翻一页都动一次,读者只在大纲里操作却看到中间的对话动了。宿主侧改用大纲自己的静默窗来判断,这段抬升整个删除。
21
- - **一次上滚会连拉好几页**:预取判据原先量的是「已加载 / 未加载边界那一组」,而那一组按定义就贴在视口顶边,条件恒成立。现在从视野里最近的一个占位行起量,并加迟滞。
22
- - **幕布展开时列表先停在偏上的位置、再被跟随拉到底;向上跳转落点不准;打开时会从上面滚下来**:跟随把「正在阅读的那一行」**居中**,读最新回合时「居中」要求的位置超过列表末端,所以总差半个视口;`revealGroupInOutline` 用的是 `scrollIntoView({ block: "nearest" })`,只滚最小距离(落点随机)、而且带一段动画。现在统一成一条规则——**那一行对齐到列表顶部、瞬时完成**。
23
- - **顶部液滴按下去还留一点厚度、停一拍才突然消失**:下压终点是 `scaleY(0.12)`,17px 的穹顶压到底仍剩约 2px 摆在分割线上;而把手要等 220ms 才被摘掉、淡出又刻意延后 0.2s,那 2px 就静止不动地停了一拍,然后整块消失。现在两端都是 `scaleY(0)`——压到底即沉进分割线,冒出来也从 0 起。
24
-
25
- ## [0.7.0] - 2026-09-19
26
-
27
- ### 新增
28
- - **全屏「幕布」大纲**:对话顶边「对话 / 轨迹 / 上下文」标签条里嵌了一枚液滴把手(静止半透明、悬停变实,底边压在标签条下沿的分割线上),点它,大纲以整幅宽度从标签条下面落下来——高度取对话区剩余的 82%(240px 起、最多 760px),上沿贴齐标签条、下沿圆角,没有遮罩也不压暗底下的对话,收起后最新一条消息与输入区仍够得着。收起方式:点任意条目、按 Esc、或点右上角的 ✕;面板标题栏右侧的「幕布」圆钮是另一个入口。**幕布不是第二份列表**——它就是把面板本体搬进这个容器,所以滚动翻页、搜索结果、悬停预览、键盘光标、阅读位置全是一套,从面板切过去不会丢状态。
29
- - **幕布里的宽版排版**:一行三段——最左 `H1–H6` 层级徽标、中间是更大的标题、右侧小字是该节正文的开头;层级筛选在幕布上铺成一行。点放大镜,搜索栏从右侧推进来(360px),大纲列随之向左让位,搜索结果落在右栏。
30
- - **每行末尾的「跳到本节末尾」按钮**:指针停在标题行 / 组头 / 搜索结果 / 幕布条目上时,该行右端渐显一枚圆形按钮(常驻挂载、只切透明度,不占位也不重排),点它跳到这一节内容的结束处——标题行落到下一个同级或更高级标题之前;组头落到整轮对话的最末尾(模型最后一条回复的底部)。所有悬停加深框都在距行右缘 32px 处收住,与圆形按钮恒定留 8px,长标题也不会和它贴在一起。
31
- - **跨会话检索**:搜索范围按钮变成三档:标题 → 全文 → 会话。第三档用宿主的会话全文索引搜**其他会话**的消息正文(只搜正文,模糊开关对它不生效;宿主一次最多返回 20 条),点结果直接切到那个会话,并用同一个关键词继续在本会话内查找。只列当前打得开的会话——已归档、子会话、不在会话列表里的会被略过,并在下方如实报出略过条数;宿主没开启全文索引时直接说明,不会静默失败。
32
- - **记住每会话阅读位置**(设置卡片里默认开):重新打开一个会话回到上次读到的那一轮;位置只存在这台浏览器里,且半小时内读过才恢复(更久以前就直接开在最新处)。记录带 seq,所以那一轮即使已经不在对话窗口里也会自动翻页加载过去;确实翻不回来(宿主说没有更早的历史)就静默丢弃这条记录,不弹任何提示。
33
- - **键盘导航**:↑/↓ 在大纲里移动一枚可见的键盘光标(inset 描边 + 淡填充,与「正在阅读」的蓝框刻意区分),Enter 激活当前行(跳转 / 加载未加载回合 / 切会话),Home / End 到首尾,Esc 收起面板(搜索框里的 Esc 先关搜索)。点过面板任意位置(输入框除外)之后就能直接按 ↑/↓,不必先 Tab 进来;光标位置通过屏幕阅读器播报。
34
- - **只看提问**:标题栏的语音气泡按钮把大纲折起来,每轮只留时间与你的提问首行,在一堆长回复里找自己说过什么更快;切换是渐隐渐显,进入后层级筛选禁用(那时没有标题行),退出即恢复原来的层级选择。
35
-
36
- ### 变更
37
- - **收起后的边缘把手改成「收进边里」**:点击展开时把手先淡出、面板随后滑进来(不再同时动);点击收起时把手被边线裁切着滑回边里,不再是凭空消失。
38
-
39
- ### 修复
40
- - **不再压住其他插件的浮层**:面板与把手原先用一个扁平的 `z-index: 500` 把自己抬到几乎所有东西之上,实测会盖住社区插件自己的弹层(例如上下文插件的卡片在 200)。现在改为钻进应用层叠序里唯一空着的一段——边缘把手 12、停靠面板 14、幕布 16、悬停预览卡 18:仍在对话内容之上(也必须在转写宽度把手 8 之上,否则那把 40px 宽的透明抓取列会在面板边缘把指针抢走),但在所有「自称浮层」的宿主组件与插件之下(布局浮层 20、better-sidebar 25、cordis 30、宿主弹层 100 起)。
41
-
42
- ## [0.6.3] - 2026-09-15
43
-
44
- ### 修复
45
- - **配置卡片的展开/收起箭头与宿主界面的箭头不一致**:箭头原先是一个文本字符(⌄),比宿主 14×14 的 SVG 箭头图标更细;而且字符的墨迹在 20px 行盒里并不居中,旋转绕的是盒子中心,转起来字符就被甩向一旁,看起来不像绕自身翻转。现在换成与宿主一致的 14×14 SVG 箭头图标(内联 SVG,路径与宿主所用图标逐字节一致,类名直接挂在 `<svg>` 上——与宿主插件卡片相同的做法),展开/收起时绕图标自身中心原地翻转。
46
-
47
- ## [0.6.2] - 2026-09-15
48
-
49
- ### 新增
50
- - **收起把手的垂直位置**:设置卡片里新增「把手位置」——**0%–100%、每档 1%** 的滑块,决定面板收起后那枚边缘把手停在对话区的什么高度:`0%` 在最下、`100%` 在最上,默认 `50%`(就是原先固定的居中位置)。无论面板停在哪一侧,把手都按这个高度贴边。
51
-
52
- ### 变更
53
- - **写回默认值等于「未自定义」**:卡片里的字段一旦回到它的默认值(滑块拖回默认档、开关拨回默认状态、层级选回默认集合),该项就从设置的用户层移除——「已自定义」标记与「重置」随之消失,等同于从未改过。0.6.1 及更早版本会把默认值也写进设置文档,并且一直标着「已自定义」。
54
-
55
- ### 修复
56
- - **面板尺寸可能不落盘**:尺寸写入有 0.4 秒去抖,而"已发布"的台账在发起写入的那一刻就被推进——拖动后在 0.4 秒内再动一次(拖高度、拖顶栏、切层级或模糊开关等),前一次的待写会被取消,台账却已经记成发布过,于是那个尺寸再也不会写入。实测:宽度 200 → 150 之后再拖高度,存下来的宽度仍是 200,刷新后面板回到 200。现在台账只在真正写入时推进,被取消的那次会在下一轮重新发出。
57
- - **宽度或高度偏小的面板存了也白存**:读回尺寸的下限与拖动下限不一致——拖动允许宽度到 120px、高度到 60px,但下次打开时低于 180px 宽 / 160px 高的值会被当作无效丢弃,面板回到默认宽度。现在两侧下限一致(120px / 60px)。
58
- - **高度为「自动」时第一次拖高度会跳**:拖拽起点原先按固定的 400px 估算,面板实际更高或更矮时,第一次移动就跳到错误的高度。现在起点取面板的实测高度(缩放后的视觉高度,与存储同一个单位),量不到才退回 400px。
59
-
60
- ## [0.6.1] - 2026-09-15
61
-
62
- ### 新增
63
- - **面板缩放滑块**:设置卡片里新增「面板缩放」——**50%–200%、每档 5%** 的滑块(与字体增强插件的滑块同一形制),把面板**内容**(文字、图标、按钮及其间距)等比放大或缩小。缩放**不改变面板本身的尺寸**:拖出来的宽高在 50% 与 200% 下完全一致,放大只是让内容更大、屏幕上一屏看到的行更少。拖动滑块只移动读数,**松手才写入设置**(避免每个档位都重写设置文档);宿主未确认前读数保持为拖动后的值,不会闪回旧数字。
64
- - **窄面板的顶栏**:面板变得很窄时,四颗按钮保持一行——中间的空白先让位,挤满后整行变成可横向滚动(在顶栏上滚滚轮即可找到后面的按钮),此时顶部的灰色拖拽横条渐隐消失。
65
-
66
- ### 变更
67
- - **跳转动画改回浏览器自己的平滑滚动**:动画交给容器的 `scrollTo({behavior:"smooth"})`(按真实时间推进,因此在 60Hz 与 240Hz 屏幕上时长一致,且带有最后的减速滑停)。保留三层护栏:起跳前先脱离 DSH 的贴底吸附区;飞行中目标的实时偏移若变化超过 40px 就重新瞄准一次(宿主翻页会挪动目标);动画被宿主的补偿滚动打断(超过 400ms 且位移不足 1px)时重新发起。只有浏览器把该调用直接执行成瞬移时,才退回插件逐帧绘制(自绘同样按毫秒计时、先快后慢)。
68
- - **面板尺寸取消上下限**:宽度原先被限制在 180–560px、高度下限 160px。现在只保留「还能拖回来」的 120px 宽 / 60px 高地板,放大缩小都由读者决定。
69
- - **面板缩放只作用于内容**(见上):缩放因子作用在面板内部,面板自身的宽高、位置、折叠裁剪与其折叠动画都不受影响。
70
-
71
- ### 修复
72
- - **长距离跳转在 240Hz 屏幕上等同瞬移**:0.6.0 的逐帧动画按**帧数**计时(22–46 帧),在 240Hz 面板上 46 帧只有约 190ms(实测 5078px 用了 188ms,约 4 倍过快),看起来像瞬移或匀速一闪;60Hz 下同样的帧数是约 770ms,因此离线测试与无头浏览器都测不出这个问题。现在动画按真实时间推进,与刷新率无关。
73
- - **拖动面板尺寸后会被拽回原尺寸**:面板把「自己的改动传出」和「采纳外部改动」记在同一份台账里。拖动期间只要发生一次设置写入或宿主快照刷新,就会拿**尚未落盘的旧值**把面板拽回原尺寸,并且正在等待的落盘会被取消——拖动等于白做。现在两条路径分开记账:只采纳既不同于面板当前状态、也不是自己刚发出的值;尺寸与位置不再从设置里回读(它们只有面板自己会写,回读只可能拿到旧副本)。
74
-
75
- ## [0.6.0] - 2026-09-14
76
-
77
- ### 新增
78
- - **界面中英双语**:新增语言设置——`跟随宿主`(默认,用 DSH 当前的语言)、`中文`、`English`。界面文字全部走字符串表,英文缺失时回退中文。中文的时间戳保留 `昨天` / `前天`,英文的昨天用 `yesterday`、前天及更早一律用 `YY-MM-DD HH:MM` 的日期形式(不用 "2 days ago" 这类相对词)。
79
- - **插件配置卡片**:在 **设置 → 插件 → 插件配置** 里新增「对话大纲」卡片(与 DSH 自带的可配置插件同一处),集中管理:语言、默认停靠边缘(默认左侧)、显示的标题层级、模糊搜索、悬停预览卡片、控制台诊断日志开关。被改动过的字段会标「已自定义」,并带单独的「重置」(回到默认值)。
80
- - **面板与卡片实时互通**:两边读写同一份偏好。在面板里拖动或切换开关,卡片随即显示新值;在卡片里改动,面板当次渲染就生效,不需要刷新页面。
81
- - **偏好存入 DSH 设置**:上述偏好不再只存在浏览器里,而是写入 DSH 的宿主设置文档(跟随配置),插件为此新增了宿主半(注册 `dsh-quick-toc` 设置命名空间,带取值范围校验)。浏览器本地仍保留一份镜像:在不允许写设置的页面上(DSH 对非回环页面如此处理),面板继续按本地镜像工作,行为与 0.5.x 一致。0.5.x 留下的本地值会在宿主层第一次应答时自动导入一次(仅当用户层还是空的时候,不会覆盖已配置的值)。
82
-
83
- ### 变更
84
- - **长距离跳转恢复动画**:0.5.1 为修"点击大纲跳转半途落地"让长跳直接定位,0.6.0 把动画找回来:滚动过程由插件**逐帧绘制**(ease-in-out,时长随距离约 0.37–0.77 秒),不依赖浏览器的「平滑滚动」——部分环境会把它直接执行成瞬移,自绘保证任何设置下都有滚动过程。每帧重瞄目标实时位置(宿主翻页改变偏移也会跟随),落点后短暂复检(约 0.6 秒),所以跨页远跳不会半途停下。
85
- - **面板变大后大纲自动填满**:打开面板或向下拉高时,若最新一页比列表视口矮(最新一组下方留白),窗口自动长大直到内容填满高度或全部回合都已显示。
86
- - **「正在阅读」蓝框的渐显渐隐加长到 0.4 秒**(透明度、蓝色填充与描边同步过渡,吸顶组头的蓝色层同步),换组时的颜色变化更明显、更柔和。
87
- - **顶边距、宽度、高度移出设置**:这三项描述的是"这一块屏幕",改为只能拖拽调整,继续按浏览器保存;设置卡片不再提供数字输入。
88
- - **偏好的读写收敛到一处**:面板不再在每次指针移动时直接写 `localStorage`,而是把变化合并后短延迟落盘;拖动过程中的实时位置仍由面板自己的状态负责。位置与尺寸的键名不变(`panelY.v1` / `panelW.v1` / `panelH.v1`),其余键转为宿主设置的镜像(键名不变,作回退层)。
89
- - **诊断开关进入设置卡片**:可以在卡片里点选,而且打开后当下就会打印一行挂载诊断,不再需要手动改 `localStorage` 再刷新。
90
-
91
- ### 修复
92
- - **面板在部分会话上崩溃(React #310)**:面板的 hook 调用数量在两次渲染之间可能不一致——`useChat` 缺失时的兜底返回、以及"这轮对话还没有任何可显示的回合"时的提前返回,都发生在部分 hook 之后,于是这些 hook 在下一次渲染被补上时 React 抛 `Rendered more hooks than during the previous render`,面板连同它所在的槽位一起消失(0.5.0 / 0.5.1 均存在)。现在面板拆成"不调用任何 hook 的外层守卫 + 内层组件",任何一次渲染的 hook 数量都相同。
93
-
94
- ## [0.5.1] - 2026-09-13
95
-
96
- ### 新增
97
- - **「回到底部」浮动按钮**:大纲列表右下角的圆形按钮。列表不在底部时渐显,滚到底后渐隐;点击把大纲滚回最新一条(近距离平滑滚动,长距离即时到位)。
98
- - **回合时间带日期**:组头、搜索结果行与悬停卡片里的时间不再只有 `HH:MM`——昨天显示 `昨天 15:04`,前天显示 `前天 15:04`,更早显示 `25-09-11 15:04`(年份取后两位;按自然日判定,不是按 24 小时差)。
99
- - **失败回合的报错**:请求超时、上游报错这类没有产出任何回复的回合,现在在组头下方显示一行 `请求失败` 与宿主提供的报错原文;点击跳到对话中该报错的位置,报错原文同样能被全文搜索命中(结果行带「请求失败」标记)。
100
-
101
- ### 变更
102
- - **标题栏改为一边两个按钮**:左侧「层级筛选 + 停靠切换」,右侧「搜索 + 收起」,中间留白把两组顶到两端;并去掉左侧的三条杠装饰标识。
103
- - **层级筛选弹层改为左对齐按钮**(此前在按钮右侧对齐)。
104
- - **挂载诊断日志默认静默**:控制台不再打印 `[dsh-quick-toc] panel mounted …`。需要排查时先执行 `localStorage.setItem("dsh-quick-toc.debug", "1")` 再刷新即可看到该行(`turnOutline` 与跳转加载器的分阶段状态),正常使用不再有噪音。
105
- - **长距离跳转改为即时定位**:跨越很长历史的跳转不再"滚到一半停下"(近距离仍是平滑滚动),落地后还有约 0.6 秒的校验,用于纠正内容高度在飞行途中变化的情况。
106
-
107
- ### 修复
108
- - **失败或中止的回合被误标成「未加载」**:这类回合没有模型回复,既没有时间也没有标题,被当成尚未加载的回合重新列了一遍。现在"该回合的用户消息已加载"本身就是已加载的依据,失败回合另加报错行;被用户中止的回合按普通无标题回合显示。
109
- - **从大纲往上翻加载更早消息时,对话区会被弹回最新一条**,越翻越回到底部:宿主在"这次滚动不是读者发起、且它仍认为读者停在底部"时会强制滚回底部,而从大纲触发的翻页恰好命中该条件。现在点击宿主的「加载更早」之前会先把对话区抬离贴底区,翻页保持原位。
110
- - **无标题回合的组头与其它组头格式不一致**:它此前被整体放大(12px / 600 / 正文色),与常规组头并列时像另一种条目。现在所有组头共用同一套样式(11px、次要色、同一行盒),无标题回合只是"组头下面没有行"。
111
-
112
- ## [0.5.0] - 2026-09-12
113
-
114
- ### 新增
115
- - **全量回合索引**:接入宿主的 `turnOutline` 投影后,大纲覆盖**整段会话**的回合,包括分页窗口尚未加载进来的那些。未加载的回合显示为带「未加载」标记的条目,附宿主提供的提问/回答预览(宿主侧上限 50 / 120 字),点击即通过宿主的回合跳转加载器把该回合翻页加载进来再滚过去。宿主没有该投影时退化为只列已加载的回合。
116
- - **标题行副标题**:每个标题下方显示该节正文的第一句(跳过空行、围栏代码块、表格线与纯项目符号),同名标题一眼可辨。
117
- - **悬停预览**:悬停标题行或结果行约 0.26 秒后弹出预览卡片,显示标题、回合时间、层级路径与该节开头(最多 260 字);面板停靠右侧时卡片弹在左侧;移开鼠标渐隐。
118
- - **搜索归一化(常开)**:大小写、全角/半角、连续空白差异视为同一个匹配,命中高亮落在原文的真实字符上。
119
- - **「模糊」开关**:搜索框右侧、与「标题/全文」并排的独立开关。开启后允许关键字中间夹少量其他文字(子序列匹配,跨度有上限),开关状态会被记住。
120
- - **未加载的回合也能被搜到**:「全文」范围同时搜索未加载回合的预览文本,命中行的点击同样是"先加载、再定位并高亮"。
121
- - **边界提示**:搜索结果下方提示「向上滚动可加载更早的消息」,往上一滚即消失;大纲态滚到第一条、或已在最后一条仍继续下滚时,面板底部浮出「已经是最早的消息」/「已经到底了」,渐显、停留约 2.6 秒后渐隐。
122
-
123
- ### 变更
124
- - **自动跟随更跟手**:去掉跟随路径上的人为延时、大纲改为瞬时定位(不再用平滑动画追赶)、高亮过渡由 0.3 秒缩到 0.15 秒。跟随也不再依赖"挂载时抓到的那一个滚动容器"——改为在 document 捕获阶段监听并在每次运行时重新查询容器,另加低频轮询兜底,程序化跳转(原生回合轨道)之后也能继续跟随。
125
- - **正在阅读的回合改用封闭的蓝色框**标记(浅蓝填充 + 四周描边 + 左侧强调条),出现与消失都是渐显渐隐;其余回合不再压到很暗(0.6 → 0.85),面板静止透明度 0.45 → 0.72,整体可读性提升。
126
- - **无标题回合的时间行**提升为正文级字号与字重(12px / 600 / 正文色),不再是一行灰色小注;有标题与无标题的回合在成为"正在阅读"时外观一致。
127
- - 界面激活态配色收敛到单一色源:搜索按钮、层级筛选按钮(含收回动画期间)、「标题/全文」、「模糊」开关、层级芯片、搜索结果当前行统一使用同一个浅蓝。
128
- - 往上翻大纲时对宿主的「加载更早」点击加了 900ms 节流(连续滚动不会反复触发分页);大纲态"滚动既展开索引、也加载更早的对话"这一行为与 0.4.x 保持一致。
129
- - 所有界面文案收敛到一张字符串表,为后续中英双语做准备(0.5.0 的界面文字仍是中文)。
130
-
131
- ### 修复
132
- - 用对话右侧的原生回合轨道(刻度条)跳转之后,大纲不再自动跟随、正在阅读的回合也不再点亮:跟随的滚动监听绑在**挂载时抓到的那个滚动容器**上,而跳转重新分页时该容器会被替换,监听器留在被丢弃的节点上,从此收不到任何滚动事件。现在改为在 document 捕获阶段监听,并在每次运行时重新查询当前容器。
133
- - 没有 Markdown 标题的回合无法成为"正在阅读"的回合(不点亮、不跟随):跟随用的"节点 → 回合"映射只登记了带标题的消息,无标题回合的节点一个都没登记。现在该回合的所有节点(用户消息与每条模型回复)都会登记。
134
-
135
- ## [0.4.0] - 2026-09-11
136
-
137
- ### 新增
138
- - **搜索结果列表**:有搜索词时大纲切换为结果列表,逐条列出命中(标题关键字高亮、层级路径、回合时间、重复次数,全文模式附上下文片段)。列表按时间排列、**最新的命中在底部**,开始搜索时自动定位到最新命中,向上滚回看更早的命中;点击任一行会把该命中设为当前命中——和回车逐处跳同一条路径,会在对话里高亮并滚过去;`n/N` 回车逐处跳保留
139
- - **组头吸顶**:滚动大纲时,当前所在回合的组头固定在面板顶部,并与上方工具条紧贴
140
- - **层级筛选行可收起**:标题栏放大镜左边的 **层级** 按钮收起/展开 `1`–`6` 那一行(选择会记住;收起后筛选设置仍然生效)
141
- - **位置面包屑**:面板顶部显示你正在读的章节路径,点击可跳到该标题。判定规则是"视口中线之上最深的标题"(画面里占得最多的那一节);跳转落点也在中线之上,所以点完后面包屑显示的仍是同一个标题
142
- - **标题层级筛选**:面板顶部 `1`–`6` 芯片是各自独立的开关,可任意组合(例如只留 H1 与 H3、关掉中间的 H2),选择会记住;把最后一个亮着的层级也关掉时自动恢复显示全部六级
143
-
144
- ### 变更
145
- - **性能**:标题解析与文本提取改为按节点缓存——流式更新只重算真正变化的节点,不再每次重算整段历史;缓存会清理已离开会话的节点,保持有界
146
- - 回合组头(时间那一行)点击改为跳到**该回合模型回答的开头**(原来跳到用户消息位置)
147
- - **兼容性**:在 DSH **0.1.5-rc.1 与 0.1.5-rc.2** 上验证并声明兼容(`engines.dsh` 下限仍为 `>=0.1.5-rc.1`)。两版的宿主接口一致——会话级槽位 `conversation.input.overlay`、`dsh-client-ui-chat` 的 `useChat` hook 与客户端模块 seed 表都经实测核对相同。
148
- - `countOccurrences` 增加空查询守卫(空查询会让 `indexOf` 原地打转导致死循环;现有调用点都有守卫,此举为加固)
149
-
150
- ### 修复
151
- - 大纲首次载入内容时没有自动定位到最新回合:该副作用的依赖数组写在 `groups` 声明之前,渲染时读到的永远是 `0`,导致副作用只在挂载时执行一次。已把副作用移到 `groups` 之后并直接依赖 `groups.length`。
152
- - 拖动顶部横条调整面板垂直位置后,记录的仍是**拖动前**的位置(写入的是拖动开始时闭包里的旧值),刷新后面板跳回原位。现在写入拖动结束时的实际位置。
153
- - 同一段文本里同一关键字出现多次时,对话内高亮只包住**该文本节点里的第一处**:第二处既不染色,也无法被标成"当前命中",于是跳到第二处时找不到当前标记,退化成"只滚动、没有高亮"。现在每个文本节点内的所有出现都会依次包住,对话内命中序号与 `n/N` 完全对齐。
154
- - ``` 围栏代码块里的 `# 注释` / `## 示例` 会被当成标题混进大纲(既没有可跳转的目标,又会让它后面那些真标题的序号错位、跳到错误位置)。现在解析标题时会跳过围栏代码块(支持 ``` 与 ~~~、带 info string 的开栏、更长的闭栏、最多 3 空格缩进)。
155
-
156
- ## [0.4.1] - 2026-09-12
157
-
158
- ### 变更
159
- - **层级筛选改为弹出选择**:标题栏新增圆形图标按钮(三条递减横线,悬停反馈与放大镜一致),点击后从**按钮中心**放大弹出 H1–H6 选择层(靠右、带外阴影),收回时缩回按钮并渐隐,不再单独占一行;选择芯片标注 H1–H6,选中态配色与搜索的"标题 / 全文"切换一致
160
- - 移除面板顶部的"当前位置"面包屑行(0.4.0 新增,使用中显得多余)
161
-
162
- ## [0.3.3] - 2026-09-10
163
-
164
- ### 新增
165
- - 中间列切到其他视图(轨迹、上下文、插件视图)时,大纲面板与收起后的边缘把手会渐隐,切回对话视图时渐显。检测为轻量轮询(120ms);无法判断当前视图时按"可见"处理。
166
-
167
- ### 变更
168
- - 兼容性只声明 DSH `0.1.5-rc.1`(`engines.dsh`、`dsh.compatibility.dshReleases` 与 `peerDependencies`),即本插件验证过的版本。
169
- - README 更新:功能列表与「使用」章节补齐搜索、搜索范围切换、对话内高亮与回合跳转;兼容表列出最近两个版本各自支持的 DSH 版本。
170
- - GitHub Release 的描述默认取中文 CHANGELOG 段落,英文段落折叠在其下方可展开;CHANGELOG 拆分为 `CHANGELOG.md`(中文,默认)与 `CHANGELOG.en.md`(英文)。
171
-
172
- ## [0.3.2] - 2026-09-08
173
-
174
- ### 变更
175
- - 文档整理:README 的兼容表与功能列表更新,npm 包描述补充了关键字搜索与对话内高亮。
176
-
177
- ## [0.3.1] - 2026-09-08
178
-
179
- ### 修复
180
- - 面板与收起把手不再浮在 DSH 弹层之上:基础 z-index 改为 500(高于应用弹出层 z100 与对话宽度手柄 z8,低于 DSH 弹层 z1000),打开设置时设置面板会盖住大纲。
181
- - 圆形控件在 DSH 0.1.5-rc.1 上恢复为正圆:主题对所有元素应用了 `corner-shape: superellipse(1.5)`,会把 `border-radius: 50%` 变成方圆角;图标按钮、搜索范围切换、顶部拖条与边缘把手现声明 `corner-shape: round`。
182
-
183
- ### 变更
184
- - 兼容声明加入 DSH `0.1.5-rc.1`(当时 `engines.dsh` 仍为 `>=0.1.2-rc.1`)。
185
-
186
- ## [0.3.0] - 2026-08-24
187
-
188
- ### 修复
189
- - 适配当时的目标版本 DSH 0.1.2-rc.1:已被移除的 `@deepseek-ai/dsh-client-runtime` 不再导致插件加载失败(externals drift),运行时 hook 改为由会话作用域槽位的 props 注入。
190
- - 对话数据访问由 `useSession(s => s.chat.*)` 改为会话作用域的 `useChat`(`ChatSnapshot.order` + `nodes`,由 `dsh-client-ui-chat` 贡献);节点形状未变(`kind: user/assistant-step`、`location.turn`、`data.blocks`),因此分组、搜索、高亮与跳转逻辑未受影响。
191
- - 面板挂载改到会话作用域的 `conversation.input.overlay` 槽:该版本中会话级 hook 只到达已声明的会话槽,而 root 作用域 `shell.overlay` 里的 `SessionProvider` 绑定的是无 sessionId 的 root binding,导致子槽始终空渲染。面板本体仍以 `position: fixed` 自绘浮层,挂载槽只作为 hook 来源。
192
-
193
- ### 变更
194
- - `dsh.client.inject` 改为列出 `dsh-client-ui-chat` / `dsh-client-ui-conversation` / `dsh-client-ui-layout`,替代已移除的运行时包。
195
- - 从客户端 inject 列表中移除未使用的 `sessions` 服务。
196
-
197
- ### 新增
198
- - 版本守卫:`dsh.compatibility.dshReleases` 与 `engines.dsh` 声明(供 dshmarket 安装时做宿主兼容预检),并以 peerDependencies 约束相关 DSH 包版本;`chat` hook 不可用时,面板以控制台警告优雅降级。
199
-
200
- ## [0.2.2] - 2026-08-24
201
-
202
- ### 新增
203
- - 关键字搜索:标题栏放大镜打开搜索框,回车逐处跳转(`n/N` 计数),Esc 或再次点击放大镜关闭
204
- - 搜索范围切换:仅标题,或同时搜索用户消息与 AI 回复正文
205
- - 对话内高亮:命中的关键字在对话中高亮,当前命中单独标亮并滚动到视口中上部
206
- - 同一条消息内的多次命中都计入 `n/N`
207
- - 无标题的回合也有独立的时间条目;所有组头在时间旁显示该回合首行预览(点击跳转)
208
-
209
- ### 变更
210
- - 两种停靠的面板收起动画统一:由 clip-path 在侧栏/屏幕边缘裁切(移除阴影,避免裁切残影)
211
- - 非激活的大纲组降到 0.6 不透明度
212
-
213
- ## [0.1.1] - 2026-08-17
214
-
215
- ### 变更
216
- - 发布流程额外上传稳定命名的 tarball(`dsh-quick-toc.tgz`),使 `/releases/latest/download/` 始终解析到最新版本
217
-
218
- ## [0.1.0] - 2026-08-17
219
-
220
- ### 新增
221
- - 按回合分组的大纲:每条用户消息与其后续 AI 回复为一组,组头显示该组的结束时间
222
- - 自动跟随高亮:对话视口内可见的回合在大纲中点亮(可同时多组);大纲自动加载并滚动,使其保持可见
223
- - 平滑跳转:点击标题平滑滚动到对话中该标题的位置(带少量顶部偏移)
224
- - 左右停靠(拖顶部横条移动)、从边缘/角部调整大小、收起为边缘把手(点击展开)
225
- - 滚动条随停靠方向(停靠左侧时在左,停靠右侧时在右)
226
- - 分页渲染:默认显示最新的若干组;在大纲中滚到顶部加载更早的组
227
- - 自动「加载更早」:大纲到达顶部且已全部加载时,会点击对话自身的「加载更多」按钮
228
- - 组头时间跳转:点击组的时间标签跳到该回合开头
229
- - Markdown 感知标题:剥离 `**加粗**`、`*斜体*`、`` `代码` ``、`[链接](url)`、`~~删除线~~`
230
- - 面板状态持久化(停靠边、位置、尺寸),并从旧键名自动迁移
231
- - 对话无标题时自动隐藏;支持亮/暗主题
232
-
233
- ### 发布
234
- - npm:`dsh-quick-toc@0.1.0`
235
- - GitHub:`LyaxZ/dsh-quick-toc`,带自动发布流程(推送标签 → npm pack → release 资产)
1
+ # 更新日志
2
+
3
+ **dsh-quick-toc** 的重要变更都记录在这里。英文版见 [CHANGELOG.en.md](CHANGELOG.en.md)。
4
+
5
+ ## [0.7.2] - 2026-09-22
6
+
7
+ ### 新增
8
+ - **幕布缩放**:设置卡片新增「幕布缩放」滑块(50%–200%、每档 5%),把幕布里的文字、图标与按钮按比例缩放,幕布本身的尺寸不变;与「面板缩放」互相独立。幕布内容的默认大小比改动前小一档——滑块的 100% 即改动前的 90%。
9
+ - **支持 DSH 0.1.7-alpha.1**:同一份安装包在 0.1.5-rc.x 与 0.1.7-alpha.x 上都能用(设置接口、配置卡片槽位与会话切换各按宿主实际提供的那一套走),0.1.5-rc.2 与 0.1.7-alpha.1 上都实测通过。
10
+
11
+ ## [0.7.1] - 2026-09-19
12
+
13
+ ### 新增
14
+ - **「回到我滚到的位置」浮动按钮**:关闭面板或幕布时记录列表顶部的那一行,再次打开时在右上角显示向上的按钮,可回到该行原来的位置。两个界面分别记录;使用一次或自行滚回该处后按钮消失,直到下次关闭重新记录。
15
+
16
+ ### 变更
17
+ - **打开面板或幕布时,正在阅读的那一行落在列表顶部**(原先只有幕布如此,面板显示上次停留的位置)。
18
+ - **面板的收起/展开改为位移过渡**,不再逐帧重排整个面板,长会话中的收起动画不再变形。
19
+ - **顶部图标的几何与线宽调整**:幕布钮改为横矩形、箭头朝下;层级筛选与「只看提问」的线条加粗;✕ 与放大镜不再用平移微调位置。
20
+ - 设置卡片中「记住阅读位置」「自动加载历史」两行不再显示说明文字。
21
+
22
+ ### 修复
23
+ - **自动加载速度较慢**:视野中出现未加载的占位行时改为一次加载到位,只在接近预取范围时逐页加载;并修正把「正在加载」判断为「已经是最早的消息」的误报。
24
+ - **加载历史记录时向上滚动被拉回**:高度补偿改为与内容变化同帧完成,锚点取视野中第一个已加载的行,宿主自身翻页时同样补偿。
25
+ - **使用一段时间后出现卡顿**:自动跟随不再对会话中的每条消息逐个测量高度。
26
+ - **自动加载历史时中间的对话向上移动**:翻页前不再抬升对话区。
27
+ - **一次向上滚动会连续加载多页**:预取判断改为从视野中最近的占位行起算,并加入迟滞。
28
+ - **幕布展开时列表先停在偏上的位置、向上跳转的落点不准、打开时先自上而下滚动**:统一为「正在阅读的那一行对齐列表顶部、瞬时完成」。
29
+ - **顶部液滴下压到底后仍留有一线厚度,随后整体消失**:改为压到底即完全没入分割线。
30
+
31
+ ## [0.7.0] - 2026-09-19
32
+
33
+ ### 新增
34
+ - **全屏「幕布」大纲**:对话顶边的标签条中嵌入一枚液滴把手,点击后大纲以整幅宽度从标签条下方展开,高度取对话区的剩余部分、下沿圆角,不遮挡也不压暗下方的对话。点击任意条目、按 Esc 或点右上角 ✕ 收起;面板标题栏的「幕布」圆钮是另一个入口。它是把面板本体搬入容器,因此翻页、搜索、悬停预览、键盘光标与阅读位置都是同一套。
35
+ - **幕布中的宽版排版**:一行三段——层级徽标、更大的标题、该节正文的开头;层级筛选排成一行。点击放大镜,搜索栏从右侧展开。
36
+ - **每行末尾的「跳到本节末尾」按钮**:指针停在标题行、组头或搜索结果上时,右端显示圆钮,点击跳到该节的结束位置(标题行停在下一个同级或更高级标题之前,组头停在整轮对话的末尾)。
37
+ - **跨会话检索**:搜索范围增加第三档「会话」,用宿主的全文索引搜索其他会话的正文(只搜正文,一次最多 20 条),点击结果切换到该会话并继续查找。无法打开的会话会被略过并报出条数,宿主未开启索引时直接说明。
38
+ - **记住每会话阅读位置**(默认开启):重新打开会话时回到上次读到的那一轮;记录带 seq,该轮不在对话窗口中时也会自动加载。位置只保存在本机,超过半小时不再恢复。
39
+ - **键盘导航**:↑/↓ 在大纲中移动光标,Enter 激活当前行,Home / End 到首尾,Esc 收起面板;点击面板任意位置后即可使用,不必先 Tab 进入。
40
+ - **只看提问**:标题栏的语音气泡按钮把大纲折叠为每轮的时间与提问首行;切换为渐隐渐显,开启时层级筛选不可用。
41
+
42
+ ### 变更
43
+ - **收起后的边缘把手改为沿边线滑入**:展开时把手先淡出、面板随后滑入;收起时把手沿边线滑回并被裁切。
44
+
45
+ ### 修复
46
+ - **面板不再覆盖其他插件的浮层**:层级改为插入应用层叠序中的空档(把手 12、面板 14、幕布 16、悬停预览 18),仍在对话内容之上,但在宿主与其他插件的浮层之下。
47
+
48
+ ## [0.6.3] - 2026-09-15
49
+
50
+ ### 修复
51
+ - **配置卡片的展开箭头与宿主不一致**:原先使用文本字符 `⌄`,比宿主的 14×14 图标更细,旋转时位置偏移;现改为与宿主相同的内联 SVG 箭头,绕自身中心翻转。
52
+
53
+ ## [0.6.2] - 2026-09-15
54
+
55
+ ### 新增
56
+ - **收起把手的垂直位置**:设置卡片新增滑块(0%–100%、每档 1%),决定面板收起后把手在对话区中的高度:0% 在最下、100% 在最上,默认 50%。
57
+
58
+ ### 变更
59
+ - **写入默认值等于「未自定义」**:卡片中的字段回到默认值后会从设置的用户层移除,「已自定义」与「重置」标记随之消失。
60
+
61
+ ### 修复
62
+ - **面板尺寸有时无法保存**:尺寸写入有 0.4 秒去抖,而台账在发起写入时即被标记——拖动后 0.4 秒内再次调整会取消前一次的写入,该尺寸此后不再保存。现在台账只在真正写入时标记。
63
+ - **偏小的面板尺寸无法保存**:读回的下限(180×160)与拖动的下限(120×60)不一致,现统一为 120×60。
64
+ - **高度为「自动」时第一次拖动会使面板跳动**:拖拽起点改为面板的实测高度。
65
+
66
+ ## [0.6.1] - 2026-09-15
67
+
68
+ ### 新增
69
+ - **面板缩放滑块**:设置卡片新增「面板缩放」(50%–200%、每档 5%),把面板内容等比缩放,面板本身的尺寸不变。拖动时只更新读数,松手后写入设置。
70
+ - **窄面板的顶栏**:面板变窄时四颗按钮保持在一行——先压缩中间的空白,挤满后整行可横向滚动,顶部灰色拖拽条随之渐隐。
71
+
72
+ ### 变更
73
+ - **跳转动画改为浏览器自身的平滑滚动**(按真实时间推进,60Hz 与 240Hz 屏幕上时长一致);目标在滚动过程中移位或动画被打断时会重新瞄准,仅当浏览器把该调用执行为瞬移时才改用逐帧绘制。
74
+ - **面板尺寸取消上下限**:只保留仍能拖回的 120px 宽 / 60px 高下限。
75
+
76
+ ### 修复
77
+ - **长距离跳转在 240Hz 屏幕上过快**:原动画按帧数计时,240Hz 下仅约 190ms。现在按真实时间推进,与刷新率无关。
78
+ - **拖动面板尺寸后会自动回到原尺寸**:面板把「传出改动」与「采纳外部改动」记录在同一份台账中,拖动期间一旦有设置写入,就会用尚未保存的旧值把面板拉回。现在两条路径分开记录。
79
+
80
+ ## [0.6.0] - 2026-09-14
81
+
82
+ ### 新增
83
+ - **界面中英双语**:语言设置可选 `跟随宿主`(默认)、`中文`、`English`;中文时间戳保留「昨天 / 前天」,英文使用 `yesterday` 与日期形式。
84
+ - **插件配置卡片**:**设置 → 插件 → 插件配置** 中的「对话大纲」卡片集中管理语言、默认停靠边缘、显示的标题层级、模糊搜索、悬停预览与诊断开关;改动过的字段标有「已自定义」并支持单独重置。
85
+ - **面板与卡片实时同步**:两者读写同一份偏好,任一侧改动后另一侧立即生效,无需刷新。
86
+ - **偏好保存到 DSH 设置**:偏好写入宿主设置文档(跟随配置),浏览器本地保留一份镜像供无法写入设置的页面使用;0.5.x 的本地值在宿主层首次应答时导入一次。
87
+
88
+ ### 变更
89
+ - **长距离跳转恢复动画**:由插件逐帧绘制(按时长而非帧数),每帧重新瞄准目标、落点后短暂复检,跨页远跳不再半途停止。
90
+ - **面板拉高后大纲自动填满**,最新一组下方不再留白。
91
+ - **「正在阅读」蓝框的渐显渐隐时间加长到 0.4 秒**。
92
+ - **顶边距、宽度、高度移出设置**,改为只能拖拽调整。
93
+ - **偏好写入合并**:不再在指针移动时反复写入存储,改为合并后延迟写入;诊断开关进入设置卡片,打开后立即打印。
94
+
95
+ ### 修复
96
+ - **面板在部分会话中崩溃(React #310)**:渲染路径上的 hook 数量不一致,面板连同槽位一起消失。现在拆分为不调用 hook 的外层守卫与内层组件。
97
+
98
+ ## [0.5.1] - 2026-09-13
99
+
100
+ ### 新增
101
+ - **「回到底部」浮动按钮**:列表不在底部时显示,点击回到最新一条,到底后隐藏。
102
+ - **回合时间带日期**:昨天、前天分别显示「昨天 / 前天 + 时间」,更早显示 `YY-MM-DD HH:MM`(按自然日判定)。
103
+ - **失败回合的报错**:请求超时、上游报错等回合在组头下显示 `请求失败` 与报错原文,点击跳到该位置,报错原文也可被搜索命中。
104
+
105
+ ### 变更
106
+ - **标题栏改为一边两个按钮**(左:层级筛选、停靠切换;右:搜索、收起),并移除左侧的三条杠。
107
+ - **层级筛选弹层改为左对齐按钮**。
108
+ - **挂载诊断日志默认静默**,需要时把 `dsh-quick-toc.debug` 设为 `1` 后刷新。
109
+ - **长距离跳转改为即时定位**,落地后进行短暂校验。
110
+
111
+ ### 修复
112
+ - **失败或中止的回合被误标为「未加载」**:现在这些回合按已加载处理,失败回合额外显示报错行。
113
+ - **从大纲向上加载更早消息时,对话区会回到最新一条**:翻页前先把对话区移出贴底区域。
114
+ - **无标题回合的组头格式与其他组头不一致**:现在共用同一套样式。
115
+
116
+ ## [0.5.0] - 2026-09-12
117
+
118
+ ### 新增
119
+ - **全量回合索引**:接入宿主投影后大纲覆盖整段会话,未加载的回合带「未加载」标记与宿主提供的预览,点击后加载该回合并滚动过去。
120
+ - **标题行副标题**:每个标题下方显示该节正文的第一句,便于区分同名标题。
121
+ - **悬停预览**:指针停在标题行约 0.26 秒后显示预览卡片(标题、时间、层级路径、该节开头);面板停靠右侧时显示在左侧。
122
+ - **搜索归一化(常开)**:大小写、全角半角与空白差异视为同一个匹配。
123
+ - **「模糊」开关**:允许关键字中间夹少量其他文字,状态会被记住。
124
+ - **未加载的回合也可被搜索到**:全文范围同时搜索这些回合的预览文本。
125
+ - **边界提示**:搜索结果下方提示可加载更早的消息;滚动到最早或最后仍继续滚动时,面板底部显示提示,停留约 2.6 秒。
126
+
127
+ ### 变更
128
+ - **自动跟随更及时**:移除人为延时、改为瞬时定位、缩短高亮过渡;跟随不再依赖挂载时获取的滚动容器,改为在 document 捕获阶段监听并在每次运行时重新查询。
129
+ - **正在阅读的回合改用封闭蓝框**标记,其余回合的暗度减弱,面板静止透明度提高到 0.72。
130
+ - 无标题回合的时间行提升为正文级字号与字重。
131
+ - 界面激活态配色统一到单一色源。
132
+ - 向上滚动时的「加载更早」加入节流,避免连续触发分页。
133
+ - 界面文案统一到一张字符串表,为后续双语做准备。
134
+
135
+ ### 修复
136
+ - **用对话右侧的回合轨道跳转后,大纲不再跟随、也不再点亮**(滚动监听绑定在被替换的容器上):改为在 document 捕获阶段监听并重新查询容器。
137
+ - **没有 Markdown 标题的回合不会被标记为「正在阅读」**(映射只登记了带标题的消息):现在该回合的所有节点都会登记。
138
+
139
+ ## [0.4.0] - 2026-09-11
140
+
141
+ ### 新增
142
+ - **搜索结果列表**:有搜索词时大纲切换为结果列表(标题高亮、层级路径、回合时间、重复次数,全文模式附片段),最新的命中在底部,点击任一行即设为当前命中并在对话中高亮滚动;`n/N` 回车逐处跳保留
143
+ - **组头吸顶**:当前回合的组头固定在面板顶部
144
+ - **层级筛选行可收起**:标题栏的「层级」按钮收起/展开 `1`–`6` 那一行
145
+ - **位置面包屑**:面板顶部显示正在阅读的章节路径,点击跳到该标题
146
+ - **标题层级筛选**:`1`–`6` 芯片各自独立,可任意组合;全部关闭时恢复显示六级
147
+
148
+ ### 变更
149
+ - **性能**:标题解析与文本提取按节点缓存,流式更新只重算真正变化的节点
150
+ - 组头(时间行)点击改为跳到该回合模型回答的开头
151
+ - 声明兼容 DSH `0.1.5-rc.1` 与 `0.1.5-rc.2`
152
+ - `countOccurrences` 增加空查询守卫
153
+
154
+ ### 修复
155
+ - **首次载入没有定位到最新回合**:副作用的依赖写在声明之前,只执行了一次
156
+ - **拖动顶部横条后记录的位置是拖动前的**,刷新后面板回到原位
157
+ - **同一文本节点中的第二处命中不被高亮**,跳转到该处时只滚动、不高亮
158
+ - **围栏代码块中的 `#` 行被当作标题**,使其后真标题的序号错位
159
+
160
+ ## [0.4.1] - 2026-09-12
161
+
162
+ ### 变更
163
+ - **层级筛选改为弹出选择**:标题栏新增圆形按钮,点击后从按钮中心弹出 H1–H6 选择层,收回时缩回并渐隐,不再单独占一行
164
+ - 移除面板顶部的位置面包屑行(0.4.0 新增)
165
+
166
+ ## [0.3.3] - 2026-09-10
167
+
168
+ ### 新增
169
+ - 中间列切换到其他视图时,大纲面板与边缘把手渐隐,切回对话视图时渐显
170
+
171
+ ### 变更
172
+ - 兼容性只声明 DSH `0.1.5-rc.1`
173
+ - README 补充搜索与跳转相关说明;兼容表列出最近两个版本各自支持的 DSH 版本
174
+ - CHANGELOG 拆分为中英两份;Release 描述默认取中文段,英文段折叠在下方
175
+
176
+ ## [0.3.2] - 2026-09-08
177
+
178
+ ### 变更
179
+ - 文档整理:README 的兼容表与功能列表更新,npm 描述补充关键字搜索与对话内高亮
180
+
181
+ ## [0.3.1] - 2026-09-08
182
+
183
+ ### 修复
184
+ - 面板与收起把手不再浮在 DSH 弹层之上(z-index 改为 500)
185
+ - 圆形控件在 DSH 0.1.5-rc.1 上恢复为正圆:该主题的 `corner-shape` 会把 50% 圆角变为方圆角
186
+
187
+ ### 变更
188
+ - 兼容声明加入 DSH `0.1.5-rc.1`
189
+
190
+ ## [0.3.0] - 2026-08-24
191
+
192
+ ### 修复
193
+ - 适配 DSH 0.1.2-rc.1:不再因 `dsh-client-runtime` 被移除而加载失败,运行时 hook 改由会话作用域槽位的 props 注入
194
+ - 对话数据访问由 `useSession` 改为会话作用域的 `useChat`
195
+ - 面板挂载改到会话作用域的 `conversation.input.overlay` 槽,解决子槽始终空渲染
196
+
197
+ ### 变更
198
+ - `dsh.client.inject` 改为列出 `dsh-client-ui-chat` / `-conversation` / `-layout`,替代已移除的运行时包
199
+ - 从客户端 inject 列表移除未使用的 `sessions` 服务
200
+
201
+ ### 新增
202
+ - 版本守卫:声明 `dsh.compatibility.dshReleases` 与 `engines.dsh` 供市场做安装前兼容预检,并以 peerDependencies 约束相关 DSH 包;`chat` hook 不可用时优雅降级
203
+
204
+ ## [0.2.2] - 2026-08-24
205
+
206
+ ### 新增
207
+ - 关键字搜索:放大镜打开搜索框,回车逐处跳转(`n/N` 计数),Esc 或再次点击放大镜关闭
208
+ - 搜索范围切换:仅标题,或同时搜索用户消息与 AI 回复正文
209
+ - 对话内高亮:命中的关键字在对话中高亮,当前命中单独标亮并滚动到视口中上部
210
+ - 同一条消息内的多次命中都计入 `n/N`
211
+ - 无标题的回合也有独立的时间条目;所有组头显示该回合首行预览
212
+
213
+ ### 变更
214
+ - 两种停靠的面板收起动画统一(沿侧栏/屏幕边缘裁切,移除阴影)
215
+ - 非激活的大纲组降到 0.6 不透明度
216
+
217
+ ## [0.1.1] - 2026-08-17
218
+
219
+ ### 变更
220
+ - 发布流程额外上传稳定命名的 tarball(`dsh-quick-toc.tgz`),让 `/releases/latest/download/` 始终指向最新版本
221
+
222
+ ## [0.1.0] - 2026-08-17
223
+
224
+ ### 新增
225
+ - 按回合分组的大纲:每条用户消息与其后续 AI 回复为一组,组头显示该组的结束时间
226
+ - 自动跟随高亮:对话视口内的回合在大纲中点亮,大纲自动滚动保持可见
227
+ - 平滑跳转:点击标题平滑滚动到对话中该标题的位置
228
+ - 左右停靠、拖拽调整大小、收起为边缘把手
229
+ - 滚动条随停靠方向(停靠左侧时在左,右侧时在右)
230
+ - 分页渲染:默认显示最新的若干组,向上滚动加载更早的组
231
+ - 自动「加载更早」:大纲到达顶部且已全部加载时,会点击对话自身的加载按钮
232
+ - 组头时间跳转:点击时间标签跳到该回合开头
233
+ - Markdown 感知标题:剥离 `**加粗**`、`*斜体*`、`` `代码` ``、`[链接](url)`、`~~删除线~~`
234
+ - 面板状态持久化(停靠边、位置、尺寸),并从旧键名自动迁移
235
+ - 对话无标题时自动隐藏;支持亮/暗主题
236
+
237
+ ### 发布
238
+ - npm:`dsh-quick-toc@0.1.0`
239
+ - GitHub:`LyaxZ/dsh-quick-toc`,带自动发布流程(推送标签 → npm pack → release 资产)