dsh-section-nav
English | 简体中文
A DeepSeek Harness plugin that brings the Section Nav for ChatGPT experience to the DSH web client: a lightweight section rail beside the current assistant answer, with chapter bookmarks stored locally in the browser.
This is a DSH port of Section-Nav-for-ChatGPT by scandishoper (MIT). The ChatGPT extension adapter and manifest were replaced with a DSH adapter and a dsh bundle manifest. See NOTICE and LICENSE.
Features
- Section rail for the current answer — headings rendered in the latest/currently read assistant answer appear in a compact rail beside the transcript.
- Reading-position tracking — the active section follows the transcript reading line, with the same hysteresis behavior as the original extension.
- One-click section navigation — clicking a heading scrolls to it and briefly highlights the target.
- Local chapter bookmarks — bookmark any section, reopen the bookmark drawer, and jump back later.
- Adaptive presentation — full, compact, mini, and hidden rail modes follow the available space next to the chat column.
- Theme following — the rail reads the host page's computed text and surface colors, so it follows DSH light/dark themes.
- Bilingual copy — Chinese and English strings are registered through the DSH locale service.
- No server storage — bookmarks live in
localStorage under dshSectionNav.bookmarks.v1; nothing is uploaded.
Compatibility
The plugin targets the DSH web client's chat DOM contract:
- assistant rows:
[data-chat-flow-kind="assistant-step"]
- transcript container:
[data-chat-flow]
- stable answer keys:
data-chat-anchor-key / data-chat-flow-key
- turn indexes:
data-chat-turn
- headings:
h1, h2, h3 inside the answer, excluding reasoning disclosures
It is a pure browser-side plugin. The host half only mounts the Loader seat; every feature lives in lib/client.js.
The implementation has been smoke-tested against the packaged Oh-DSH 0.1.12 runtime (@deepseek-ai/dsh 0.1.2-alpha.3) and follows the current DSH client contracts used by 0.1.x web/desktop releases.
Install
From the plugin manager
Open Plugins in the DSH sidebar and use Add plugin with:
github:jolaaa999/dsh-section-nav
From the CLI
dsh plugin --profile web add github:jolaaa999/dsh-section-nav
The package commits its built lib/ artifacts, so a git install does not need a build step or an install-script approval.
From a local checkout
dsh plugin --profile web add .
Run that command from this repository's root. The package manifest declares dsh.bundle.patch, so the profile adds dsh-section-nav as a layer automatically.
Usage
- Open a DSH chat with an assistant answer containing
#, ##, or ### headings.
- The section rail appears next to the transcript when there is room.
- Click a rail item to scroll to that heading.
- Click the star beside a rail item to bookmark it.
- Click the star/count button in the rail header to open the bookmark drawer.
- Use
Escape, a click outside, or the close button to close the drawer.
Development
pnpm install
pnpm run typecheck
pnpm run build
pnpm run build first emits the ESM host half to lib/index.js, then builds the browser half to lib/client.js and lib/client.js.map.
Repository layout
src/index.ts — host half; a Loader seat with no host-side behavior.
src/client/index.tsx — Cordis client entry, service injection, and lifecycle.
src/client/sectionNav.tsx — controller: rail mount, trackers, bookmarks, route/session reset, and cleanup.
src/core/adapter.ts — DSH chat DOM adapter; the only file with DSH selectors.
src/core/* — adapted section parser, answer tracker, section tracker, rail positioning, bookmark service/resolver/recovery, and mutation watching.
src/client/components/* — React rail and bookmark drawer components.
cordis.patch.yml — DSH bundle layer that registers the plugin row.
lib/ — committed build artifacts used by git and tarball installs.
Configuration
There are no DSH config fields. The plugin intentionally follows the original extension's behavior and persists only bookmarks:
localStorage['dshSectionNav.bookmarks.v1']
Known limitations
- Only
h1–h3 headings are shown, matching the original extension.
- The rail hides itself when the available space beside the chat column is too narrow.
- A bookmark whose answer is outside the currently loaded session window is marked unavailable until that history page loads.
- Headings inside reasoning disclosures are ignored; sections belong to the assistant's answer text.
- No cross-device bookmark sync and no server-side storage.
Plugin marketplace metadata
Recommended GitHub repository topics:
dsh
deepseek-harness
dsh-plugin
plugin
ui
sidebar
navigation
bookmarks
The repository is intended to be discoverable by DSH plugin catalogs that scan GitHub for dsh-plugin / deepseek-harness topics and package manifests.
License
MIT. This port retains the original project's copyright and license notice; see LICENSE and NOTICE.