dsh-quick-toc 0.7.12 → 0.7.13

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.en.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  All notable changes to **dsh-quick-toc** are documented here. Chinese version: [CHANGELOG.md](CHANGELOG.md).
4
4
 
5
+ ## [0.7.13] - 2026-09-28
6
+
7
+ ### Changed
8
+ - **The compatibility section keeps only the conclusions**: the README no longer walks through the historical per-release verification; it keeps the declared host range, why a prerelease needs an explicit branch, the 0.2.0-rc.1 admission note and the market's rule for reading compatibility information. The per-release support statements stay in the changelog.
9
+
5
10
  ## [0.7.12] - 2026-09-28
6
11
 
7
12
  ### Changed
package/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  **dsh-quick-toc** 的重要变更都记录在这里。英文版见 [CHANGELOG.en.md](CHANGELOG.en.md)。
4
4
 
5
+ ## [0.7.13] - 2026-09-28
6
+
7
+ ### 变更
8
+ - **兼容性说明只保留结论**:README 的兼容性小节不再逐版复述历史验收过程,只保留声明的宿主范围、预发布版本为什么要显式留分支、0.2.0-rc.1 的准入说明,以及市场读取兼容信息的规则。逐版的支持情况仍在更新日志里。
9
+
5
10
  ## [0.7.12] - 2026-09-28
6
11
 
7
12
  ### 变更
package/README.en.md CHANGED
@@ -51,7 +51,7 @@ A conversation TOC plugin for [DeepSeek Harness](https://github.com/deepseek-ai/
51
51
 
52
52
  Each major line lists only its newest patch (the defects a new feature introduces are fixed in the patches that follow, so within one major line the newest patch is the one to use; older patches keep working — the plugin does not break existing interfaces).
53
53
 
54
- `engines.dsh` is declared as **`>=0.1.5-rc.3 <0.1.7-0 || >=0.1.7-alpha.1 <0.3.0-0`**, with the peer ranges shaped the same way (a prerelease must be given an explicit branch: node-semver admits one only when some comparator in the range sits on that version's exact `major.minor.patch` tuple and carries a prerelease tag of its own, so a plain `>=0.1.5-rc.1` never matches `0.1.7-alpha.1`). **0.2.0-rc.1 was tested** with no code change: only the declared ceiling moved from `<0.2.0-0` to `<0.3.0-0`, because a ceiling below 0.2.0 makes DSH's plugin-compatibility preflight **refuse to load this plugin** (the exact message: `Plugin dsh-quick-toc@0.7.11 is incompatible with dsh 0.2.0-rc.1: peerDependencies {…}`, leaving only a per-version exemption or a plugin version that declares the range). With the widened range an isolated `DSH_HOME` was exercised point by point: the host starts without a warning, `--dump-config` holds exactly one entry for this plugin and no error/duplicate, the Plugins page's official group carries the entry with its configuration card already open (11 fields), a click on the card lands in the profile's settings document, and the console stays clean; the panel and its collapse animation were also fine on a long session (a real 79 MB one). 0.7.3 was tested on **0.1.5-rc.3** and **0.1.7-alpha.2** (the panel and the curtain, row jumps and older-history loading, the title/full-text/cross-session searches, switching sessions from a cross-session hit, the configuration card and the host settings document's reads and writes were each exercised), and neither release needed a code change — checked offline as well: rc.3 differs from rc.2 only in each package's `package.json` version (plus two sidebar files), and alpha.2's changes sit in the session controller and the chat renderer while every interface and node shape this plugin uses is still there (`turnOutline`, `turn-error`, `useChat`, `data-chat-anchor-key`, `sessions.search`, `loadThrough`, `settings.*` and both card slots; the two extra `data-conversation-scroll` hits in alpha.2 are stylesheet text, not a second scroll container). 0.7.2 was tested on **0.1.5-rc.2** (the curtain scale was confirmed point by point: at three factors the curtain box keeps its width, height and position while only the content scales, both slider ends, the write-on-release behaviour and the default rendering were exercised, and the two scales were confirmed independent); 0.7.1 was tested on **0.1.5-rc.2** (the "back to where I left" floating button, the leave positions the panel and the curtain record separately, the row being read landing at the top when a surface opens, and the absence of the button after closing at the bottom were each confirmed); 0.7.0 was tested on the same release (the full-width curtain and its droplet handle, the jump-to-section-end buttons, cross-session search, keyboard navigation, the questions-only view and the remembered reading position were each exercised in a real browser; the panel scale, a dragged size reaching storage and coming back, and the collapsed handle's position had been measured before that); on **0.1.5-rc.1** the plugin's loading and client-module delivery were tested for real (the host boots without errors, `--dump-config` carries the quick-toc entry, the combined client bundle URL lists `dsh-quick-toc/client.js`, and the bytes it serves contain this release's curtain handle, jump-to-section-end and reading-position markers). The host interfaces it relies on — the `turnOutline` projection, the session-scoped `useProjection`, the client `sessions` service and its `loadThrough` jump loader (since 0.5.0), the `turn-error` node used for failed turns (since 0.5.1), and the host `settings` service (`installSection`), the client `settingsScope` and the `settings.plugin.item` card slot added in 0.6.0, and the client `sessions.search` that 0.7.0's cross-session search calls — were checked one by one against the installed 0.1.5-rc.1 and 0.1.5-rc.2 bundles, whose code is byte-identical between the two releases (`dsh-client-ui-chat` differs by a single CSS declaration unrelated to this plugin, and the package that carries `search`, `dsh-api-session-controller`, is byte-identical down to the same limits: at most 20 hits per search, 240 code points per snippet), so both releases are claimed. Older DSH versions are unverified and therefore not claimed; on an older DSH the newest usable plugin version is **0.3.2**. **0.1.7-alpha.1 passes too**, in a real instance inside an isolated `DSH_HOME`: the host boots without errors, and the panel and curtain, row jumps and older-history loading, the title/full-text/cross-session searches and switching sessions from a cross-session hit were each exercised in a real browser, with the settings document's reads and writes confirmed as well. To that end 0.7.2 speaks both host lines — on 0.1.5-rc.x it uses the host's `settings.installSection`, the client `settingsScope` and the `settings.plugin.item` card slot; on 0.1.7-alpha.x it uses `settings.configure`, the client `configForms` and the `plugins.bundle.config` card slot, and switches sessions through `uiWorkspace.openSession`. The plugin picks whichever exists at runtime, and **declares no settings service in `inject` at all** (declaring one a host does not provide parks the whole package, which on 0.1.7-alpha.1 stopped the entire web boot from finishing). On install or update, the market (dshmarket) reads `engines.dsh` (or `dsh.engines.dsh`) and the `@deepseek-ai/dsh-*` peer ranges present in the local install from the npm `latest` manifest, shows the host requirement a plugin declares on its card, and offers an optional filter that hides only entries confirmed to mismatch the running host; `dsh.compatibility.dshReleases` is this repository's own record, read by neither DSH nor the market. **0.1.7-rc.1 passes as well** (the 0.1.7 line on the rc channel: `settingsScope`, `settings.plugin.item`, `sessions.open` and `installSection` are all gone, and it carries the same `configForms` / `plugins.bundle.config` / `uiWorkspace` / `settings.configure` seams as 0.1.7-alpha.x — their interface definitions compare byte for byte): in an isolated `DSH_HOME` sandbox the host booted with no error, and on a real 13k-node session the panel, the curtain, Esc, the dock switch (left 288 to right 1238, transform only) and the collapse (parking at 1526, handle back in place) were all exercised with no browser console error. `engines.dsh`'s floor moved up to **0.1.5-rc.3** accordingly (the older rc.1/rc.2 are no longer declared).
54
+ `engines.dsh` is declared as **`>=0.1.5-rc.3 <0.1.7-0 || >=0.1.7-alpha.1 <0.3.0-0`**, with the peer ranges shaped the same way (a prerelease needs an explicit branch: node-semver admits one only when some comparator in the range sits on that version's exact `major.minor.patch` tuple and carries a prerelease tag of its own). **0.2.0-rc.1 was tested** with no code change: only the ceiling moved from `<0.2.0-0` to `<0.3.0-0`, because a ceiling below 0.2.0 makes DSH's plugin-compatibility preflight refuse to load the plugin. When installing or updating, the market reads the npm-latest `engines.dsh` and the peer ranges of the `@deepseek-ai/dsh-*` packages present on the machine; `dsh.compatibility.dshReleases` is this repository's own record — neither DSH nor the market reads it.
55
55
 
56
56
  ## Install
57
57
 
@@ -117,6 +117,7 @@ A missing `turnOutline` means the host has no such projection, and the staged `j
117
117
  - The curtain and the docked panel **share one list DOM**: the curtain only moves the panel itself into a full-width container that drops from the lower edge of the tab strip (in curtain mode the panel swaps to a different geometry — relative positioning, 100% width and height, no panel scale), and that container stays mounted as a zero-size pass-through while the curtain is up, so opening or closing it never rebuilds the list or loses the scroll position. Cross-session search goes through the client `ctx.get("sessions")` service's `search(query, signal)` (the host's session full-text index, at most 20 hits per search); each session's reading position lives in this browser (`dsh-quick-toc.readPos.v1`, valid for half an hour).
118
118
  - The configuration card is registered into all three seats at once, and which one it lands in is the running host's business: on 0.1.5-rc.3 it is `settings.plugin.item` (keyed on the plugin's namespace; the slot is dispatched only for namespaces the Host actually serves, so a deployment without the host half simply shows no card and the panel is unaffected); on either 0.1.7 line (alpha and rc) it is two places on the sidebar's Plugins page — the plugin's own entry in the Official group (`plugins.item`, `id` `quick-toc`, `label` from "Conversation Outline", `order` 50) and the configuration area of its bundle page (`plugins.bundle.config`, keyed on the npm package name). Both 0.1.7 seats hand the card a `view`, so it starts expanded there (opening the entry or the bundle page IS the expansion gesture); the rc line's configuration cell passes no props at all and keeps the collapsed list shape. Every registration happens only once a settings scope has bound, and the card and the panel share the store above, which is what makes the two live in both directions.
119
119
  - Changes to `lib/client.js` show up after a page refresh (client modules are served under a content hash and DSH's client HMR pushes reloads); changes to `lib/index.js` (the host half) need a DSH restart
120
+ - Revisions to the release wording land only in the **repository** and on the **GitHub Release page**: the `CHANGELOG.md` bundled in an already-published npm version is the one from release time, and **npm version contents are immutable** (0.7.5/0.7.6 still carry the long-form text from before the 2026-09-19 rewrite, and 0.7.9 still carries one sentence that was corrected afterwards). Every release runs `relnotes.mjs`, which checks that the repo (zh/en), the npm tarball (zh/en) and the release body (zh/en) all read identically.
120
121
 
121
122
  ## License
122
123
 
package/README.md CHANGED
@@ -51,7 +51,7 @@
51
51
 
52
52
  每个大版本只列该系列最新的一个补丁版本(新功能引入的缺陷都在其后的补丁里修掉了,所以同一个大版本内直接用最新补丁即可;旧补丁仍可继续用,插件不破坏既有接口)。
53
53
 
54
- `engines.dsh` 声明为 **`>=0.1.5-rc.3 <0.1.7-0 || >=0.1.7-alpha.1 <0.3.0-0`**,peer 范围同形(预发布版本必须显式留分支:node-semver 只在一个范围的某个比较符与该版本落在同一个 `major.minor.patch` 元组、且自身带预发布标签时才放行它,所以写成 `>=0.1.5-rc.1` 是匹配不到 `0.1.7-alpha.1` 的)。**0.2.0-rc.1 上实测通过**:插件代码未改动,只是把范围上限从 `<0.2.0-0` 放宽到 `<0.3.0-0`——上限卡在 0.2.0 之前时,DSH 的插件兼容性预检会**直接拒绝加载本插件**(实测原文:`Plugin dsh-quick-toc@0.7.11 is incompatible with dsh 0.2.0-rc.1: peerDependencies {…}`,只给精确版本豁免或换一个声明兼容的版本);放宽后隔离 `DSH_HOME` 里逐项实测:宿主启动无告警、`--dump-config` 中本插件只有一条且无 error/duplicate、插件页「官方」组里有条目且配置卡片默认展开(11 个字段)、点卡片写入落到 profile 的设置文档、控制台无错误;长会话(79 MB 的真实会话)上面板与收起动画也正常。0.7.3 在 **0.1.5-rc.3** 与 **0.1.7-alpha.2** 上实测通过(面板与幕布、点行跳转与翻历史、标题/全文/跨会话三档检索、跨会话命中切换会话、设置卡片与宿主设置文档的读写都逐项跑过),这两版不需要任何代码改动——离线核对:rc.3 相对 rc.2 只有各包 `package.json` 的版本号差异(外加侧边栏两个文件),alpha.2 的改动集中在会话控制器与聊天渲染,但插件依赖的接口与节点形状逐项核对后仍在(`turnOutline`、`turn-error`、`useChat`、`data-chat-anchor-key`、`sessions.search`、`loadThrough`、`settings.*` 与两张卡片槽位都在,`data-conversation-scroll` 在 alpha.2 里新增的两处命中是样式表文本、不是第二个滚动容器)。0.7.2 在 **0.1.5-rc.2** 上实测通过(幕布缩放逐项确认:三档因子下幕布盒子的宽高与位置不变、只有内容按比例缩放,50%–200% 两端、松手写入、以及默认值渲染都比对过;面板与幕布两套缩放各自独立);0.7.1 在 **0.1.5-rc.2** 上实测通过(「回到我离开的位置」浮动按钮、面板与幕布分别记录的离开位置、打开时落在正在阅读的那一行、以及在底部关闭再打开不出按钮都逐项确认);0.7.0 在同一版本上实测通过(全屏幕布与液滴把手、跳到本节末尾、跨会话检索、键盘导航、只看提问、记住阅读位置都在真实浏览器里逐项跑过;面板缩放、尺寸的落盘与读回、收起把手的位置等既有能力此前已实测);**0.1.5-rc.1** 上实测了插件加载与客户端模块下发(宿主启动无报错、`--dump-config` 里有 quick-toc 条目、客户端组合包 URL 里列出 `dsh-quick-toc/client.js`,取回的下发内容包含本版新增的幕布把手、跳到本节末尾与阅读位置等标记),它依赖的宿主接口——`turnOutline` 投影、会话级槽位的 `useProjection`、客户端 `sessions` 服务与 `loadThrough` 跳转加载器(0.5.0 起)、失败回合所用的 `turn-error` 节点(0.5.1 起)、以及 0.6.0 新增的宿主 `settings` 服务(`installSection`)、客户端 `settingsScope` 与 `settings.plugin.item` 配置卡片槽位、以及 0.7.0 跨会话检索所用的客户端 `sessions.search`——在 0.1.5-rc.1 与 0.1.5-rc.2 的安装包中逐个核对存在(这些宿主包的代码在两版之间逐字节相同,`dsh-client-ui-chat` 仅差一条与本插件无关的 CSS 声明;`search` 所在的 `dsh-api-session-controller` 两版逐字节相同,含「一次最多 20 条、片段上限 240 字符」的同一套上限),因此两版都声明兼容。更早的 DSH 版本未经验证,不作声明;在更早的 DSH 上可安装的最新插件版本是 **0.3.2**。**0.1.7-alpha.1 上也实测通过**(隔离的 `DSH_HOME` 里跑真实实例):宿主启动无报错、面板与幕布、点行跳转与翻历史、标题/全文/跨会话三档检索、跨会话命中切换会话,都在真实浏览器里逐项跑过,设置文档的读写也逐项确认。**0.1.7-rc.1 上也实测通过**(rc 通道上的 0.1.7 线:`settingsScope` / `settings.plugin.item` / `sessions.open` / `installSection` 都已不存在,与 0.1.7-alpha.x 是同一套 `configForms` / `plugins.bundle.config` / `uiWorkspace` / `settings.configure`,接口定义逐字比对相同):隔离 `DSH_HOME` 沙盒里宿主启动无报错,在 1.3 万节点的真实会话上面板展开、幕布、Esc 收起、停靠切换(左 288 → 右 1238,纯位移)与收起(停在 1526、把手回到原位)逐项跑过,浏览器 console 无报错;`engines.dsh` 的最小版本随之收到 **0.1.5-rc.3**(更早的 rc.1/rc.2 不再声明)。为此 0.7.2 同时支持两条宿主线——0.1.5-rc.x 上是宿主的 `settings.installSection` + 客户端 `settingsScope` + `settings.plugin.item` 卡片槽位,0.1.7-alpha.x 上换成 `settings.configure` + 客户端 `configForms` + `plugins.bundle.config` 卡片槽位、并用 `uiWorkspace.openSession` 切换会话;插件在运行时按服务是否存在二选一,且**不再把任一设置服务写进 `inject`**(声明一个宿主没有的服务会让整个包停在 pending,0.1.7-alpha.1 上这曾让整页 Web 起不来)。安装或更新时,市场(dshmarket)读取 npm 上 `latest` 版本的 `engines.dsh`(或 `dsh.engines.dsh`)与本机存在的 `@deepseek-ai/dsh-*` peer 范围,在卡片上显示该插件声明的宿主要求,并提供「只显示与当前宿主确认匹配的条目」这一可选过滤;`dsh.compatibility.dshReleases` 是本仓库自己的记录,DSH 与市场都不读取。
54
+ `engines.dsh` 声明为 **`>=0.1.5-rc.3 <0.1.7-0 || >=0.1.7-alpha.1 <0.3.0-0`**,peer 范围同形(预发布版本要显式留分支:node-semver 只在一个范围的某个比较符与该版本落在同一个 `major.minor.patch` 元组、且自身带预发布标签时才放行它)。0.2.0-rc.1 上实测通过:插件代码未改动,只是把上限从 `<0.2.0-0` 放宽到 `<0.3.0-0`——上限卡在 0.2.0 之前时,DSH 的插件兼容性预检会直接拒绝加载本插件。安装或更新时,市场读的是 npm latest 的 `engines.dsh` 与本机 `@deepseek-ai/dsh-*` 的 peer 范围;`dsh.compatibility.dshReleases` 只是本仓库自己的记录,DSH 与市场都不读。
55
55
 
56
56
  ## 安装
57
57
 
@@ -117,6 +117,7 @@ dsh plugin --profile web add <插件目录路径>
117
117
  - 幕布与停靠面板**共用同一份列表 DOM**:幕布只是把面板本体搬进一个从标签条下沿落下的整宽容器(面板在幕布态换一套几何:相对定位、宽高 100%、不套用面板缩放),容器本身常驻挂载、收起时是一个 0×0 的直通盒,所以开关幕布不会重建列表、也不会丢掉滚动位置。跨会话检索走客户端 `ctx.get("sessions")` 的 `search(query, signal)`(走宿主的会话全文索引,一次最多 20 条);每个会话的阅读位置存在浏览器本地(`dsh-quick-toc.readPos.v1`,半小时内有效)。
118
118
  - 插件配置卡片按宿主实际提供的槽位注册,三处一起挂、装上哪一处由宿主决定:0.1.5-rc.3 上是 `settings.plugin.item`(`key` 为插件命名空间,该槽按宿主实际服务的命名空间派发,宿主半未加载时卡片自然不出现,面板不受影响);0.1.7 两条线(alpha 与 rc)上是侧边栏「插件」页的两处——「官方」分组里插件自己的条目(`plugins.item`,`id` 为 `quick-toc`,`label` 取「对话大纲」,`order` 50)与该 bundle 页面上的配置区(`plugins.bundle.config`,`key` 为 npm 包名)。0.1.7 的插件页渲染这两处时都会带上 `view`,卡片因此默认展开(点进条目或 bundle 页本身就是展开动作);rc 线的配置单元不带任何 props,卡片保持收拢的列表形态。所有注册都只在设置作用域绑定成功后才做,卡片与面板共享上面那个 store,因此两边实时互通。
119
119
  - 修改 `lib/client.js` 后刷新页面即可看到变化(客户端模块按内容哈希发版,DSH 的客户端 HMR 也会推送重载);改 `lib/index.js`(宿主半)需重启 DSH
120
+ - 发布说明的措辞修订只落在**仓库**与 **GitHub Release 页面**上:npm 上已发布版本包内的 `CHANGELOG.md` 是发布当时的版本,**npm 的版本内容不可变**,改不了(例如 0.7.5/0.7.6 包内仍是 2026-09-19 改写前的长版、0.7.9 包内仍有一句后来被修正的说法)。每次发版会用 `relnotes.mjs` 核对"仓库中英 == npm 包内中英 == Release 正文中英"四处一致。
120
121
 
121
122
  ## License
122
123
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-quick-toc",
3
- "version": "0.7.12",
3
+ "version": "0.7.13",
4
4
  "description": "Conversation TOC for DeepSeek Harness (DSH): a whole-session, turn-grouped Markdown outline with hover previews, a level filter, a full-width curtain, jump-to-end buttons, title/full-text/cross-session search and a Chinese/English interface.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",