dsh-section-nav
Manifest validDSH plugin: section navigation rail and local chapter bookmarks for DeepSeek Harness chat answers
dsh-section-nav
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
dshbundle manifest. SeeNOTICEandLICENSE.
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
localStorageunderdshSectionNav.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,h3inside 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–h3headings 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.
Comments
Loading…
Similar plugins
by LeonSone
DSH web plugin: 模仿 deepseek 网页版界面右侧的问题条 — 右缘一条竖向问题栏,列出当前会话每一轮的用户提问,点击平滑滚动定位。DeepSeek Harness right-edge question rail.
★ 0
MIT
JavaScript
Sep 4, 2026
dsh plugin --profile web add dsh-question-railby jjxjjjjiik-bot
1:1 port of DeepSeek's official web right-side chat navigation rail (ScrollNav) as a DeepSeek Harness (DSH) plugin
★ 32
MIT
JavaScript
Aug 26, 2026
dsh plugin --profile web add dsh-chat-timelineby songying2024
DeepSeek Harness (DSH) left-side bookmark dock plugin
★ 0
MIT
JavaScript
Aug 22, 2026
dsh plugin --profile web add dsh-bookmarks-dockby Tabbit-Browser
Tabbit Browser plugins for Deepseek Harness
★ 101
MIT
TypeScript
Sep 10, 2026
dsh plugin --profile web add dsh-tabbitby xccpddym
Bubble navigation for DSH (DeepSeek Harness): a draggable accelerator ball listing all of your questions (numbered + timed), plus a full conversation outline panel with category filters. Click to jump
★ 0
MIT
JavaScript
Aug 17, 2026
dsh plugin --profile web add dsh-bubble-navby secyborg
DSH web plugin: a Codex-style command-history rail covering the WHOLE session
★ 0
MIT
JavaScript
Aug 26, 2026
dsh plugin --profile web add dsh-command-rail