Repository navigation
Releases
v1.5.1 — a documentation release: Chinese-first README, screenshots, badges
v1.5.1 — a documentation release: Chinese-first README, screenshots, badges
Install or upgrade:
dsh plugin --profile web add dsh-chat-locatorThen restart dsh web once. Settings live in your browser since 1.4.0, so there is nothing to migrate.
Changed
Nothing in index.js or client.js behaves differently from 1.5.0. This release exists so npm's package page shows the same README as the repository: npm renders the copy inside the published tarball, and a published package's contents cannot be replaced afterwards.
- The README opens in Chinese. The Chinese version is now the default
README.md; English moved toREADME.en.md, with a language link at the top of both.zh-CN/README.mdis gone — a single pair of READMEs, not two overlapping copies. - Screenshots. Two captures now sit in the README: the settings page (
Settings → Conversation locator), and the length gradient on the rail with the hovered tick at its longest. Sources live indocs/images/. - Badges. The header row gained the Awesome DSH Plugin badge (this plugin is in that community list), and the powered-by-dsh badge moved from the bottom of the page up into that row.
- Docs parity.
CONTRIBUTING.md,.github/PULL_REQUEST_TEMPLATE.mdand the issue-template "Settings reference" link now point at the right README after the swap. - The "Web" qualifier is gone. DSH runs in the browser and as the desktop app, so the title line, the intro, the platform badge,
package.json's description and the docs now say plain "DSH" instead of "DSH Web". The plugin itself is unchanged: it is a client-side plugin and works wherever the conversation rail does. - Screenshots in the community list. A repo-root
screenshots.jsonlists the two captures, so the Awesome DSH Plugin listing (awesome-dsh-plugin.com) shows them as a thumbnail strip on the plugin card. No PR is needed for this: the list reads the file straight from this repository.
Notes
- Zero runtime dependencies, no build step. Requires dsh 0.1.7 or newer.
npm test: 151 assertions, unchanged, nothing installed, all green.- Published to npm by CI with a provenance attestation (Sigstore transparency log).
dsh-chat-locator v1.5.1(简体中文)
安装或升级:
dsh plugin --profile web add dsh-chat-locator装完重启一次 dsh web。设置从 1.4.0 起就住在浏览器里,没有别的要迁移。
变更
index.js 与 client.js 的行为与 1.5.0 完全一致。发这一版是为了让 npm 包页面显示与仓库相同的 README —— npm 渲染的是已发布 tarball 里的那份副本,而发布后的包内容无法替换。
- README 默认改为中文。 中文版现在是默认的
README.md,英文版移到README.en.md,两边顶部都有语言链接。删除了zh-CN/README.md—— 只留一对 README,不再有两份重叠的中文文档。 - 加了截图。 README 新增两张截图:设置页(
设置 → 对话定位条),以及轨道上的长度渐变 —— 悬停那根最长、两侧依次收回。源图放在docs/images/。 - 徽章。 顶部徽章行加了 Awesome DSH Plugin(本插件已收录进那个社区列表);powered-by-dsh 徽章从文末挪到了这一行。
- 文档一致性。 互换后
CONTRIBUTING.md、.github/PULL_REQUEST_TEMPLATE.md与 issue 模板里的「Settings reference」链接已改指正确的 README。 - 去掉了「Web」这个限定。 DSH 既有浏览器版也有桌面版,所以标题行、开篇、平台徽章、
package.json的描述与文档里现在只写「DSH」,不再写「DSH Web」。插件本身没变:它是客户端插件,有对话轨道的地方就能用。 - 社区列表里的截图。 仓库根目录新增
screenshots.json,列出那两张截图,于是 Awesome DSH Plugin 列表(awesome-dsh-plugin.com)的插件卡片会以缩略图条展示它们。这一步不需要提 PR —— 列表直接从本仓库读这个文件。
说明
- 零运行时依赖、无构建步骤,需要 dsh 0.1.7 或更新。
npm test:151 条断言,与 1.5.0 相同,零安装全绿。- 由 CI 发布到 npm,带 provenance attestation(已写入 Sigstore 透明日志)。
Full diff: v1.5.0...v1.5.1
v1.5.0 — every left-rail defect fixed, 140 lines lighter
v1.5.0 — every left-rail defect fixed, 140 lines lighter
Install or upgrade:
dsh plugin --profile web add dsh-chat-locatorThen restart dsh web once. Settings already live in your browser since 1.4.0, so there is nothing to migrate.
Fixed (each one reproduced before it was changed)
- Left mode was effectively invisible. The override placed the rail at about -20px — outside the chat column, where sticky layout clips it. It now mirrors the built-in
left: 12px. - Left ticks were ragged. Only
::before'sleftwas mirrored, nottransform-origin, so normal and unloaded ticks were indented by different amounts. - The left hover/click target collapsed to zero width, which made ticks hard to hit and pushed the focus ring outside the chat area. The button keeps the full frame width and the ring mirrors to the left edge.
- Hovering the current turn wiped the whole gradient. The built-in rail sets
markActiveormarkPreview(never both) and the gradient anchor only knew the latter. The anchor is now:is(.…_markPreview, .…_mark:hover). - A larger preview font clipped its last line — the height formula forgot the prompt line (7px short at 18px / 6 lines). It now accounts for it: 100 / 148 / 217 / 58.
- Settings changes were never persisted.
update()mutated the snapshot object in place,createSnapshotStoredeep-freezes it, and zustand short-circuits onObject.is— so nothing was written and a reload reverted every change. Writes now copy the record first. - Corrupt stored JSON (
null,[], a string) made the settings store throw; there is a type guard now. - A 400 ms rescan window could swallow a late mount — a rail arriving inside the window and then never changing missed the override for good.
- Remounting stacked a second
<style>, and a tag removed by someone else stayed gone. It is replaced now, and re-attached when missing. - Diagnostics could report a stale prefix after the rail unmounted.
- The preview enter animation depended on stylesheet order; it now uses its own
@keyframesname,!important, and a reduced-motion guard.
Changed
- One table, one policy. Four parallel field lists and a three-layer store collapsed into
FIELDS+createSettingsPolicy(): default, range, step, normalization and UI row for a setting now come from a single place.client.js970 → 830 lines,index.js32 → 14. - "Restore defaults" writes one empty user layer instead of unsetting fields one by one, which also drops stale and unknown keys.
- Tests: 118 → 151 assertions. The stubs now model
createSnapshotStorefaithfully (deep freeze, same-reference short circuit, persist on notify) and assert the stub contract itself, so this class of bug cannot hide again. - Docs (README, design notes, CONTRIBUTING, SECURITY, templates) rewritten for 1.5.0 and trimmed;
design-notes522 → 273 lines. package.jsonno longer injects@deepseek-ai/dsh-client-runtime, which does not exist in dsh 0.2.1-rc.2.
Notes
- Zero runtime dependencies, no build step. Requires dsh 0.1.7 or newer.
npm testrunsnode --checkon both halves plus 151 assertions, with nothing installed.- Published to npm with a provenance attestation (Sigstore transparency log).
dsh-chat-locator v1.5.0(简体中文)
安装或升级:
dsh plugin --profile web add dsh-chat-locator装完重启一次 dsh web。设置从 1.4.0 起就住在浏览器里,没有别的要迁移。
修复(每一条都先复现、再改)
- 左置模式基本不可见:覆盖样式把定位条推到约 -20px,落在对话区之外,被 sticky 布局整体裁掉;现在镜像内置的
left: 12px。 - 左侧刻度参差:只镜像了
::before的left,没镜像transform-origin,普通刻度与未加载刻度的缩进不一致。 - 左置时悬停/点击面塌成 0 宽:按钮宽度被压没、键盘焦点环画到对话区外;现在按钮保留整帧宽度,焦点环镜像到左端。
- 悬停当前轮时整段渐变消失:内置定位条只加
markActive或markPreview(二选一),旧锚点只认后者。 - 预览字号放大后裁掉最后一行:高度公式漏算提示词行高(18px / 6 行实测裁掉 7px),现改为提示词行高 + 正文行高 × 行数。
- 设置改动根本不落盘:
update()就地修改快照对象,而createSnapshotStore会深冻结入参、zustand 又按Object.is短路 —— 不通知也不落盘,刷新即回滚。现在写入前一律复制记录。 - 损坏的存量 JSON(
null/[]/ 字符串)会让设置构造抛错,已加类型守卫。 - 400ms 重扫门限内的竞态:轨道恰好在该窗口内挂上、此后 DOM 不再变化时,覆盖样式永远不会生效。
- 重新挂载会叠加第二份
<style>,被第三方摘掉的标签也不会自愈;现在改为替换,缺失时自动补回。 - 排障钩子在轨道卸载后仍报告过期前缀。
- 进场动画依赖样式表顺序:改用自有
@keyframes名 +!important+ 减弱动效保护。
变更
- 一张表、一个策略:四套并行字段清单与三层 store 收敛为
FIELDS+createSettingsPolicy();每个设置项的默认值、区间、步进、归一化与界面行都出自同一处。client.js970 → 830 行,index.js32 → 14 行。 - **「恢复默认」**由逐字段 unset 改为一次写空用户层,同时清掉历史与未知字段。
- 测试 118 → 151 条断言,测试桩忠实建模
createSnapshotStore(深冻结、同引用短路、通知时才落盘),并断言桩契约本身,避免这类 bug 再次隐身。 - 文档同步到 1.5.0 并精简,
design-notes522 → 273 行。 package.json移除 0.2.1-rc.2 中不存在的@deepseek-ai/dsh-client-runtime。
说明
- 零运行时依赖、无构建步骤,需要 dsh 0.1.7 或更新。
npm test在零安装下跑两侧node --check+ 151 条断言。- 发布带 provenance attestation(已写入 Sigstore 透明日志)。
Full diff: v1.4.3...v1.5.0
v1.4.3 — first publish through CI with a provenance attestation
dsh-chat-locator v1.4.3
Install or upgrade:
dsh plugin --profile web add dsh-chat-locatorThen restart dsh web once. (Settings have lived in your browser since 1.4.0, so there is nothing else to migrate.)
Release plumbing
- The shipped bytes are unchanged. Inside the tarball the only difference from 1.4.2 is the version string in
package.jsonandPLUGIN_VERSIONinclient.js, which the self-check forces to agree. No behaviour change, nothing to migrate. - First release published by CI through npm trusted publishing (OIDC) — no npm token, no one-time password, and the tarball now carries a provenance attestation (
https://slsa.dev/provenance/v1, Sigstore transparency log) that names the repository, the commit and the workflow that built it. - The workflow runs
node test/verify-client.mjs(127 assertions) before publishing, refuses to publish when the tag does not matchpackage.json, and skips a version that is already on the registry instead of republishing it.
Notes
- Zero runtime dependencies and no build step. Requires dsh 0.1.7 or newer.
node test/verify-client.mjsruns 127 assertions with nothing installed.
dsh-chat-locator v1.4.3(简体中文)
安装或升级:
dsh plugin --profile web add dsh-chat-locator装完重启一次 dsh web。(设置从 1.4.0 起就住在你的浏览器里,没有别的要迁移。)
发布流程
- 发布内容没有变化。 tarball 里与 1.4.2 的唯一差别是
package.json的版本号与client.js的PLUGIN_VERSION(自检强制两者一致)。行为零变化,没有要迁移的东西。 - 第一个由 CI 通过 npm trusted publishing(OIDC)发布的版本 —— 不需要 npm token、不需要一次性验证码,tarball 现在带有 provenance attestation(
https://slsa.dev/provenance/v1,已写入 Sigstore 透明日志),可以核对它是从哪个仓库、哪个提交、哪个工作流构建出来的。 - 工作流在发布前跑
node test/verify-client.mjs(127 项断言);tag 与package.json不一致就拒绝发布;版本已在 registry 上就跳过而不是重发。
说明
- 零运行时依赖、无构建步骤。需要 dsh 0.1.7 或更新。
node test/verify-client.mjs在零安装的情况下跑 127 项断言。
v1.4.2 — unchanged plugin bytes, a release pipeline that guards itself
dsh-chat-locator v1.4.2
Install or upgrade:
dsh plugin --profile web add dsh-chat-locatorThen restart dsh web once. (Settings have lived in your browser since 1.4.0, so there is nothing else to migrate.)
Release plumbing
- The plugin's shipped bytes are unchanged from 1.4.1. Inside the tarball only two strings differ —
versioninpackage.jsonandPLUGIN_VERSIONinclient.js, which the self-check forces to agree. No behaviour change, nothing to migrate. - The release workflow now guards itself, exactly like
@hawkongz/dsh-task-reminder: the tag must matchpackage.json(a manual dispatch can no longer publish whatever happens to sit on the branch), and a version already on the registry is skipped instead of republished (re-pushing a tag no longer turns the build red). - Published to npm as
dsh-chat-locator@1.4.2. This one was a local publish, so it carries no provenance attestation; the next release is meant to go through CI/OIDC with provenance.
Notes
- Zero runtime dependencies and no build step. Requires dsh 0.1.7 or newer.
node test/verify-client.mjsruns 127 assertions with nothing installed.
dsh-chat-locator v1.4.2(简体中文)
安装或升级:
dsh plugin --profile web add dsh-chat-locator装完重启一次 dsh web。(设置从 1.4.0 起就住在你的浏览器里,没有别的要迁移。)
发布流程
- 插件的发布内容与 1.4.1 完全一致。 tarball 里只有两处字符串不同 ——
package.json的version与client.js的PLUGIN_VERSION(自检强制两者一致)。行为零变化,没有要迁移的东西。 - 发布工作流现在自带守卫,与
@hawkongz/dsh-task-reminder完全一致:tag 必须与package.json的版本对上(手动 dispatch 不会再拿分支上的版本乱发);版本已在 registry 上就跳过发布而不是重发(重推 tag 不再弄红构建)。 - npm 包名:
dsh-chat-locator@1.4.2。 这一次是本地发布,因此没有 provenance attestation;下一版计划由 CI/OIDC 带 provenance 发布。
说明
- 零运行时依赖、无构建步骤。需要 dsh 0.1.7 或更新。
node test/verify-client.mjs在零安装的情况下跑 127 项断言。
v1.4.1 — the active tick keeps its width, clearer stepper labels, docs that match the code
dsh-chat-locator v1.4.1
Install or upgrade:
dsh plugin --profile web add dsh-chat-locatorThen restart dsh web once. (Settings have lived in your browser since 1.4.0, so there is nothing else to migrate.)
Fixed
- The active turn's tick is no longer resized by the neighbour rules. The length-gradient rules now carry a
:not(.<prefix>_markActive)guard, so the documented promise — "the active tick is never rewritten" — is actually true; hovering the active tick still grows its peak. - The four settings steppers are distinguishable to screen readers. Each −/+ button's accessible name now includes its row ("Tick thickness increase", …) instead of eight identical "Increase"/"Decrease".
- A DOM mutation batch no longer rebuilds the stylesheet. The override rule text is memoized on (class prefix, settings snapshot); the 400 ms rescan gate and the same-frame write on a settings change are unchanged.
Docs and packaging
- The published package now ships its documentation:
docs/, thezh-CN/translation,CONTRIBUTING.mdandSECURITY.mdjoinfiles, so the links in the README resolve from the tarball too. - The docs no longer credit the plugin with preview-text handling it never did — the
\s+collapsing and the 50/120-character truncation budgets belong to the built-inTurnNavigator; this plugin only styles it. railPrefix: nullno longer lists "a container narrower than 900px" as a cause (the built-in hides the frame with a container query, so the rail is still found); the length gradient is documented as reach 3 / exponent 2;SECURITY.mdtracks the 1.4 line; the release procedure now documents "tag & push, CI publishes", with the local publish marked as the attestation-free fallback.- Dead exports, duplicate assertions and a duplicated tick-radius expression are gone;
node test/verify-client.mjsruns 127 assertions with nothing installed.
Notes
- Zero runtime dependencies and no build step. Requires dsh 0.1.7 or newer.
- Published to npm as
dsh-chat-locator@1.4.1.
dsh-chat-locator v1.4.1(简体中文)
安装或升级:
dsh plugin --profile web add dsh-chat-locator装完重启一次 dsh web。(设置从 1.4.0 起就住在你的浏览器里,没有别的要迁移。)
修复
- 当前轮那根刻度不再被邻居规则改写。 长度渐变的规则加上了
:not(.<prefix>_markActive)守卫,「当前轮的宽度不被改写」这句说明终于名副其实;悬停当前轮时峰值照旧会涨。 - 四个步进器对读屏可区分了。 每个 −/+ 按钮的可达名带上所属设置(「横线粗细 增大」……),不再是八个一模一样的「增大 / 减小」。
- DOM 变更批次不再重拼整段样式表。 覆盖规则文本按(类名前缀 + 配置快照)记忆化;400ms 重扫门限与「配置一变同帧写入」都没变。
文档与打包
- 发布包开始带上自己的文档:
docs/、zh-CN/中文版、CONTRIBUTING.md、SECURITY.md都进了files,README 里的链接在 tarball 里也打得开。 - 文档不再把「
\s+折叠」「提示词 50 / 回复 120 字符截断」算在插件头上 —— 那是内置TurnNavigator的行为,插件只负责加样式。 railPrefix: null不再把「容器窄于 900px」列为成因(内置用容器查询隐藏框架,轨道仍会被发现);长度渐变按代码写成 reach 3 / 指数 2;SECURITY.md跟上 1.4 线;发布流程改成「打 tag、由 CI 发布」,本地npm publish标为无 provenance 的兜底。- 清掉死出口、恒真断言与重复的刻度圆角表达式;
node test/verify-client.mjs在零安装的情况下跑 127 项断言。
说明
- 零运行时依赖、无构建步骤。需要 dsh 0.1.7 或更新。
- npm 包名:
dsh-chat-locator@1.4.1。
v1.4.0 — Settings in the browser, the 0.1.7 gradient fix, and a gradient switch
{"value" => "## dsh-chat-locator v1.4.0\n\nInstall or upgrade:\n\nbash\ndsh plugin --profile web add dsh-chat-locator\n\n\nThen restart dsh web once so the new bundle is mounted. (Settings no longer wait for the host — they live in your browser.)\n\n### Changed\n\n* Settings moved into the browser. dsh 0.1.7 removed the client settingsScope service, so the plugin now persists its configuration with createSnapshotStore (@deepseek-ai/dsh-client-store) under the local storage key dsh.chat-locator.settings. Settings survive browser restarts but no longer sync across browsers or machines, and any chat-locator: section left in the DSH settings document by 1.3.0 or older is ignored — the first run after upgrading shows factory values. Requires dsh 0.1.7 or newer.\n\n* The host half is now a stub. With nothing left to register, index.js is a no-op kept only because the patch row resolves to it; the schemastery peer dependency is gone.\n\n* The gradient was fixed for dsh 0.1.7. The built-in rail removed the _markPosition wrapper — ticks are now sibling buttons — so the curved taper silently matched nothing and disappeared. The selectors walk the new sibling structure, and every width rule pins transform because 0.1.7 measures ticks with scaleX.\n\n* New: the length gradient has its own switch. Off returns every tick to its built-in width with the rail, jumping, paging, and preview untouched, and it also drops the frame widening — no 32px peak means no invisible interaction strip. Default on. Unlike the hover preview (no switch since 1.3.0), the gradient is decorative, so this one earns its row.\n\n* Dead code removed. The session-staging path, the unsupported status, the legacy host notices, and the back-fill logic are gone with it.\n\n### Notes\n\n* Zero runtime dependencies and no build step. node test/verify-client.mjs runs 125 assertions with nothing installed.\n* Installing or updating requires one dsh web restart — the composed plugin tree is built at startup. See docs/design-notes.md.\n\n---\n\n## dsh-chat-locator v1.4.0(简体中文)\n\n安装或升级:\n\nbash\ndsh plugin --profile web add dsh-chat-locator\n\n\n装完重启一次 dsh web 挂载新 bundle。(设置不再等宿主 —— 它们住在你的浏览器里。)\n\n### 变更\n\n* 设置搬进浏览器。 dsh 0.1.7 移除了客户端 settingsScope 服务,插件改用 createSnapshotStore(@deepseek-ai/dsh-client-store)把配置持久化在本地存储键 dsh.chat-locator.settings。设置撑得过浏览器重启,但不再跨浏览器 / 跨设备同步;1.3.0 及更早版本留在 DSH 设置文档里的 chat-locator: 段会被忽略 —— 升级后首次打开看到出厂值。需要 dsh 0.1.7 或更新版本。\n\n* 宿主半侧变成空桩。 没有什么要注册的了,index.js 只因 patch 行解析到它而保留;schemastery 这个 peer 依赖一并移除。\n\n* 渐变按 0.1.7 修复。 内置轨道删掉了 _markPosition 包裹层 —— 刻度变成相邻兄弟按钮 —— 曲线渐变于是静默失效。选择器按新结构重建,每条宽度规则同时钉住 transform(0.1.7 用 scaleX 量刻度)。\n\n* 新增:长度渐变开关。 关掉后所有刻度回到内置宽度,轨道、跳转、分页与预览不受影响;框架加宽也一并撤掉 —— 没有 32px 峰值,就没有那条隐形交互带。默认开。与 1.3.0 起没有开关的悬停预览不同,长度渐变纯属装饰,所以它配拥有自己的一行。\n\n* 死代码清理。 会话暂存链路、unsupported 状态、旧宿主提示与补写逻辑全部移除。\n\n### 说明\n\n* 零运行时依赖、无构建步骤。node test/verify-client.mjs 在没有任何安装的情况下跑 125 项断言。\n* 安装或更新后需要重启一次 dsh web:插件树在启动时合成。详见 docs/design-notes.md。\n", "PSPath" => "C:\Users\20105\OneDrive\Desktop\ds\release-notes-1.4.0.md", "PSParentPath" => "C:\Users\20105\OneDrive\Desktop\ds", "PSChildName" => "release-notes-1.4.0.md", "PSDrive" => {"CurrentLocation" => "Users\20105\OneDrive\Desktop\ds", "Name" => "C", "Provider" => {"ImplementingType" => "Microsoft.PowerShell.Commands.FileSystemProvider", "HelpFile" => "System.Management.Automation.dll-Help.xml", "Name" => "FileSystem", "PSSnapIn" => "Microsoft.PowerShell.Core", "ModuleName" => "Microsoft.PowerShell.Core", "Module" => nil, "Description" => "", "Capabilities" => 52, "Home" => "C:\Users\20105", "Drives" => "C"}, "Root" => "C:\", "Description" => "OS", "MaximumSize" => nil, "Credential" => {"UserName" => nil, "Password" => nil}, "DisplayRoot" => nil}, "PSProvider" => {"ImplementingType" => {"Module" => "System.Management.Automation.dll", "Assembly" => "System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", "TypeHandle" => "System.RuntimeTypeHandle", "DeclaringMethod" => nil, "BaseType" => "System.Management.Automation.Provider.NavigationCmdletProvider", "UnderlyingSystemType" => "Microsoft.PowerShell.Commands.FileSystemProvider", "FullName" => "Microsoft.PowerShell.Commands.FileSystemProvider", "AssemblyQualifiedName" => "Microsoft.PowerShell.Commands.FileSystemProvider, System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", "Namespace" => "Microsoft.PowerShell.Commands", "GUID" => "b4755d19-b6a7-38dc-ae06-4167f801062f", "IsEnum" => false, "GenericParameterAttributes" => nil, "IsSecurityCritical" => true, "IsSecuritySafeCritical" => false, "IsSecurityTransparent" => false, "IsGenericTypeDefinition" => false, "IsGenericParameter" => false, "GenericParameterPosition" => nil, "IsGenericType" => false, "IsConstructedGenericType" => false, "ContainsGenericParameters" => false, "StructLayoutAttribute" => "System.Runtime.InteropServices.StructLayoutAttribute", "Name" => "FileSystemProvider", "MemberType" => 32, "DeclaringType" => nil, "ReflectedType" => nil, "MetadataToken" => 33556359, "GenericTypeParameters" => "", "DeclaredConstructors" => "Void .ctor() Void .cctor()", "DeclaredEvents" => "", "DeclaredFields" => "System.Collections.ObjectModel.Collection1[System.Management.Automation.WildcardPattern] excludeMatcher System.Management.Automation.PSTraceSource tracer Char[] s_remoteCopyNameInvalidChars Int32 FILETRANSFERSIZE System.String ProviderName", "DeclaredMembers" => "System.String NormalizePath(System.String) System.IO.FileSystemInfo GetFileSystemInfo(System.String, Boolean ByRef) Boolean IsFilterSet() System.Object GetChildNamesDynamicParameters(System.String) System.Object GetChildItemsDynamicParameters(System.String, Boolean) System.Object CopyItemDynamicParameters(System.String, System.String, Boolean) Boolean IsNetworkMappedDrive(System.Management.Automation.PSDriveInfo) Boolean IsSupportedDriveForPersistence(System.Management.Automation.PSDriveInfo) System.String GetRootPathForNetworkDriveOrDosDevice(System.IO.DriveInfo) System.Collections.ObjectModel.Collection1[System.Management.Automation.PSDriveInfo] InitializeDefaultDrives() System.Object GetItemDynamicParameters(System.String) Void InvokeDefaultAction(System.String) Void GetChildItems(System.String, Boolean, UInt32) Void GetChildNames(System.String, System.Management.Automation.ReturnContainers) Boolean CheckItemExists(System.String, Boolean ByRef) System.Object RemoveItemDynamicParameters(System.String, Boolean) Void RemoveFileInfoItem(System.IO.FileInfo, Boolean) Boolean ItemExists(System.String) System.Object ItemExistsDynamicParameters(System.String) Boolean HasChildItems(System.String) Void CopyItemLocalOrToSession(System.String, System.String, Boolean, Boolean, System.Management.Automation.PowerShell) Void InitilizeFunctionPSCopyFileFromRemoteSession(System.Management.Automation.PowerShell) Boolean ValidRemoteSessionForScripting(System.Management.Automation.Runspaces.Runspace) Void InitilizeFunctionsPSCopyFileToRemoteSession(System.Management.Automation.PowerShell) Boolean PathIsReservedDeviceName(System.String, System.String) Boolean IsAbsolutePath(System.String) System.String GetCommonBase(System.String, System.String) System.String CreateNormalizedRelativePathFromStack(System.Collections.Generic.Stack1[System.String]) Boolean IsItemContainer(System.String) Void MoveDirectoryInfoUnchecked(System.IO.DirectoryInfo, System.String, Boolean) Boolean IsSameVolume(System.String, System.String) System.Object GetPropertyDynamicParameters(System.String, System.Collections.ObjectModel.Collection1[System.String]) System.Object SetPropertyDynamicParameters(System.String, System.Management.Automation.PSObject) System.Object ClearPropertyDynamicParameters(System.String, System.Collections.ObjectModel.Collection1[System.String]) System.Object GetContentWriterDynamicParameters(System.String) System.Object ClearContentDynamicParameters(System.String) Int32 SafeGetFileAttributes(System.String) System.Security.AccessControl.ObjectSecurity NewSecurityDescriptorFromPath(System.String, System.Security.AccessControl.AccessControlSections) System.Security.AccessControl.ObjectSecurity NewSecurityDescriptorOfType(System.String, System.Security.AccessControl.AccessControlSections) System.Security.AccessControl.ObjectSecurity NewSecurityDescriptor(ItemType) System.Management.Automation.ErrorRecord CreateErrorRecord(System.String, System.String) System.String GetHelpMaml(System.String, System.String) System.Management.Automation.ProviderInfo Start(System.Management.Automation.ProviderInfo) System.Management.Automation.PSDriveInfo NewDrive(System.Management.Automation.PSDriveInfo) Void MapNetworkDrive(System.Management.Automation.PSDriveInfo) System.Management.Automation.PSDriveInfo RemoveDrive(System.Management.Automation.PSDriveInfo) System.String GetUNCForNetworkDrive(System.String) System.String GetSubstitutedPathForNetworkDosDevice(System.String) Boolean IsValidPath(System.String) Void GetItem(System.String) System.IO.FileSystemInfo GetFileSystemItem(System.String, Boolean ByRef, Boolean) Boolean ConvertPath(System.String, System.String, System.String ByRef, System.String ByRef) Void GetPathItems(System.String, Boolean, UInt32, Boolean, System.Management.Automation.ReturnContainers) Void Dir(System.IO.DirectoryInfo, Boolean, UInt32, Boolean, System.Management.Automation.ReturnContainers, InodeTracker) System.Management.Automation.FlagsExpression1[System.IO.FileAttributes] FormatAttributeSwitchParamters() System.String Mode(System.Management.Automation.PSObject) Void RenameItem(System.String, System.String) Void NewItem(System.String, System.String, System.Object) ItemType GetItemType(System.String) Void CreateDirectory(System.String, Boolean) Boolean CreateIntermediateDirectories(System.String) Void RemoveItem(System.String, Bool...
v1.3.0 — Remove the hover preview toggle
dsh-chat-locator v1.3.0
Install or upgrade:
dsh plugin --profile web add dsh-chat-locatorThen restart dsh web once so the host half is imported.
Changed
-
The hover preview toggle is gone. The rail exists to be browsed, so a switch that turns the preview off worked against the feature it belongs to: with previews off the rail shows tick positions and nothing else. The hover preview, its curved length gradient, and the settings sample card are now unconditional.
Show the conversation locator(显示对话定位条) remains the only master switch, and it hides the whole rail. -
The
previewfield was removed from the settings schema. A storedpreview: falseis ignored rather than migrated — no action needed on upgrade. -
The settings page now has six rows instead of seven;
Restore defaultsunsets all six.
Notes
- Zero runtime dependencies and no build step.
node test/verify-client.mjsruns 115 assertions with nothing installed. - Installing or updating requires one
dsh webrestart, because the host process caches imported modules and alink:-installed workspace directory is not in HMR's watch roots. Seedocs/design-notes.md.
dsh-chat-locator v1.3.0(简体中文)
安装或升级:
dsh plugin --profile web add dsh-chat-locator装完重启一次 dsh web,让宿主半侧被导入。
变更
-
去掉「悬停预览」开关。 定位条的存在意义就是浏览,而一个能关掉预览的开关恰好与它自己的用途相悖 —— 关掉之后轨道只剩下一排刻度位置。现在悬停预览、曲线长度渐变、设置页小样都恒定生效。唯一保留的总开关是「显示对话定位条」,它隐藏整条轨道。
-
preview字段已从设置 schema 移除。设置文档里残留的preview: false会被忽略,不做迁移 —— 升级时无需任何操作。 -
设置页从七行变为六行;「恢复默认」逐项清空这六项。
说明
- 零运行时依赖、无构建步骤。
node test/verify-client.mjs在没有任何安装的情况下跑 115 项断言。 - 安装或更新后需要重启一次
dsh web:宿主进程会缓存已导入的模块,而link:安装的工作区目录不在 HMR 的监视根里。详见docs/design-notes.md。
v1.2.0 — Curved length gradient, preview font size and width, restore defaults
dsh-chat-locator v1.2.0
Turns the DSH Web turn rail into a configurable, persistent plugin.
Install:
dsh plugin --profile web add dsh-chat-locatorThen restart dsh web once so the host half is imported.
Added
- Tick thickness (
横线粗细) — 1–8px instead of a fixed 2px, without touching the 10px tick spacing. - Rail side (
轨道位置) — left or right; the hover preview automatically opens on the opposite side. - Hover preview (
悬停预览) — a plain-text card with the turn's prompt and response. Thinking content cannot reach it by construction, whitespace is collapsed so it cannot contain a blank line, and long text is ellipsised. - Preview line count (
预览正文行数) — 1–6 lines; the card grows with the content and only the overflow is clipped. - Preview font size and card width (
预览字号/预览框宽度) — 10–18px and 200–420px. Font size and line height scale as a pair, and the card height is computed from the same line height, so larger text is never crowded or clipped. - A curved length gradient — the tick under the pointer grows to 32px and its neighbours taper along
21 / 14 / 12, so the rail reads as a hook pointing at your position rather than a straight diagonal. - Restore defaults (
恢复默认) — all seven settings back to factory values via per-fieldunset, not by rewriting the defaults. - A dedicated settings page — Settings → 对话定位条, with a live sample rail and sample preview card.
- Bilingual documentation — English and 简体中文 READMEs, plus design notes covering the three implementation constraints and the gradient tuning history.
Fixed
- The hovered tick is no longer clipped. The built-in rail frame is 28px wide and its scroller's
overflow-y: autoturns the frame into the ticks' clip box, so any peak wider than 28px was cut off. The frame is now widened to longest-tick + 4px (36px); the ticks are right-aligned, so nothing moves.
Notes
- Zero runtime dependencies and no build step.
node test/verify-client.mjsruns 121 assertions with nothing installed. - Installing or updating requires one
dsh webrestart, because the host process caches imported modules and alink:-installed workspace directory is not in HMR's watch roots. Seedocs/design-notes.md. - Ticks at distance ≥ 3 from the pointer keep their built-in widths, so the rail still looks like the one DSH ships.
dsh-chat-locator v1.2.0(简体中文)
把 DSH Web 的轮次轨道变成可配置的持久插件。
安装:
dsh plugin --profile web add dsh-chat-locator装完重启一次 dsh web,让宿主半侧被导入。
新增
- 横线粗细 —— 1–8px,不再是固定的 2px,且不动 10px 的刻度间距。
- 轨道位置 —— 左侧或右侧;悬停预览会自动改到另一侧展开。
- 悬停预览 —— 纯文本卡片,显示该轮提示词与回复。思考内容从结构上进不去,空白串被折叠所以不可能出现空白行,长文本加省略号截断。
- 预览正文行数 —— 1–6 行;卡片跟着内容变高,只有超出的部分被裁掉。
- 预览字号与预览框宽度 —— 10–18px 与 200–420px。字号与行高成对放大,卡片高度用同一套行高计算。
- 曲线长度渐变 —— 指针下那根长到 32px,两侧沿
21 / 14 / 12收回。 - 恢复默认 —— 七项一键回到出厂值,走逐字段
unset。 - 独立设置页 —— 设置 → 对话定位条,页内带实时小样轨道与示例预览卡。
- 双语文档 —— 英文与简体中文 README,外加记录三条实现约束与渐变调参过程的《设计说明》。
修复
- 悬停那根不再被裁掉。内置轨道框架宽 28px,而框架里滚动容器的
overflow-y: auto让框架成为刻度的裁剪盒。现在框架加宽到「最长刻度 + 4px」(36px);刻度右对齐,位置一点没动。
说明
- 零运行时依赖、无构建步骤。
node test/verify-client.mjs在没有任何安装的情况下跑 121 项断言。 - 安装或更新后需要重启一次
dsh web。 - 距指针第 3 格起的刻度保持内置宽度,轨道整体观感仍与 DSH 出厂时一致。