AbelKeithsun/dsh-question-nav ↗★ 2
@luziyang2026/dsh-question-nav
In-session question navigator for the DSH web GUI: a vertical minimap of round dots overlaid on the edge of the conversation column (left or right, configurable in settings), one dot per user question — hover enlarges and shows the full question text, click jumps to that message.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:AbelKeithsun/dsh-question-nav说明文档
阅读完整 README ↗dsh-question-nav
In-session question navigator for the DeepSeek Harness (DSH) Web GUI: a vertical column of small round dots overlaid on the left edge of the conversation column — one dot per user question. Hover a dot to enlarge it and see the question's full text immediately; click a dot to scroll the chat to that question.
It is an external plugin bundle with zero runtime dependencies — the browser
half (lib/client.js) externalizes everything to the DSH shell, so it adds
only a small bundle to the GUI at load time.
Package: @luziyang2026/dsh-question-nav (npm · GitHub).
Preview

What it does
- Left-edge dot minimap (embedded, not reserving any width). The rail's anchor edge is configurable — Settings → Plugins → Question Nav → Rail alignment switches it between the left and right edge of the conversation column.
- Vertically centered in the conversation column.
- One dot = one turn that asked a question (strictly aligned with the Trajectory view's turn numbering), with a small count above the dot column.
- Full history, persisted, no render-window expansion: the plugin's host
half registers a
questionIndexsession projection — the projection registry folds the whole event log (read-only, the chat's paged window is never touched), the official projection cache persists it across restarts, and push frames deliver new questions live. - Hover: the dot enlarges and an instant tooltip (portal-rendered, no
native-title delay) shows the turn label (
Turn N) plus the turn's full question text (all of them, when one turn batched several). - Click: jumps to that question. Only then does the jump loop page the
window (
loadOlder()) to bring that specific page into view — never the whole history up front. - Empty/left areas of the rail pass pointer events through to the conversation (it never blocks the chat).
Requirements
- DeepSeek Harness Web GUI (a runnable DSH profile; the
dshCLI). - Node.js
>= 20(matches the DSH SDK peer range).
Install
Install the prebuilt package from npm and add it to a profile:
dsh plugin --profile web add @luziyang2026/dsh-question-nav
Then restart the DSH Web GUI to load the new bundle.
Build from source / develop locally
This repository is a standalone plugin project — build it, then add the checkout to a profile as an installable bundle:
pnpm install # install devDependencies (DSH SDK peers, tsdown, vitest)
pnpm build # tsc declarations + tsdown client bundle -> lib/
dsh plugin --profile web add ./dsh-question-nav
Development
pnpm typecheck # tsc --noEmit
pnpm test # vitest run
pnpm build # build host lib/index.js + client lib/client.js
How it is built
The client half uses the shared DSH client-bundle preset
(tsdown.client.ts, vendored into this repo), which emits
a window.__ModuleLoader__.load({ id, factory }) closure-factory
artifact with CSS Modules inlined and externals resolved through the loader
module table.
License
MIT.