dsh-official-port-nav
其他 活跃维护

dsh-official-port-nav

tianhanly/dsh-official-port-nav

完美复现DeepSeek官方右侧聊天导航栏的交互逻辑与视觉样式,可直接集成至Harness平台使用,开箱即用无需额外配置,还原度接近原生体验。

0
Stars 标星
0
Forks 分支
0
Watchers 关注
0
Open Issues
JavaScript
主要语言
None
开源协议
207 KB
仓库大小
23 天前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:tianhanly/dsh-official-port-nav
git clone https://github.com/tianhanly/dsh-official-port-nav.git
git clone git@github.com:tianhanly/dsh-official-port-nav.git
README.md main

dsh-official-port-nav

English
中文

A DSH (DeepSeek Harness) plugin that replicates DeepSeek Web's conversation quick-navigation feature.

A minimal minimap lives on the far right of the chat: a vertical strip of capsule bars when collapsed. Hover it and a message-index panel fades in around the bars without moving them; click any entry to jump instantly to that message with a flash highlight. While you scroll the conversation, the bar mapping and the blue "current" marker follow in real time — a pixel-faithful match to the official DeepSeek experience.

Side-by-Side Comparison

Collapsed (1)

Official (DeepSeek) Plugin (this package)
official collapsed plugin collapsed

Expanded (2)

Official (DeepSeek) Plugin (this package)
official expanded plugin expanded

Pairs are matched by the trailing number in the filename: 1 = collapsed, 2 = expanded.

Features

  • Grows in place: hovering the right-edge strip fades the panel in (border first, then text); the bars never move — the panel wraps around them. Moving out fades it away instantly.
  • Inverted mapping: the collapsed state is a mapping of the expanded panel's viewport — as the panel wheel scrolls, the bars move with every row in real time.
  • Auto-location: scrolling the chat updates the blue current marker automatically (no click needed); the panel viewport centers on the current message.
  • Click-to-jump: clicking a bar or row instantly scrolls the chat so the target message lands at the top, then flashes it for 1.8s.
  • Detail preview: hovering a row for 400ms pops a compact tooltip (max 5 lines, ellipsis beyond that).
  • Custom scrollbar: a 6px thin wheel with no arrow buttons, slides to the very bottom; click the track to jump, drag the thumb to scrub.
  • Details: indexes user messages only (max 10 bars); normal grey / hover slightly-brighter / current blue; 12px viewport inset with 30px edge fades; scroll position preserved on collapse.

Installation

dsh plugin --profile web add dsh-official-port-nav

Then restart DSH so the bundle enters the boot graph.

Local development

cd dsh-official-port-nav
dsh plugin --profile web add .

link: installs read the client bundle live from disk — edits to lib/client.js take effect on a browser refresh. Changes to package.json or cordis.patch.yml require re-adding or restarting.

File Structure

dsh-official-port-nav/
├── lib/
│   ├── client.js               # browser half: __ModuleLoader__ bundle (built artifact)
│   └── index.js                # host half: no-op placeholder
├── cordis.patch.yml            # bundle patch mounting the plugin row
├── dsh-client.js               # dynamic-plugin source (archive; not used at runtime)
├── docs/
│   ├── official1.png           # official, collapsed
│   ├── official2.png           # official, expanded
│   ├── plugin1.png             # plugin, collapsed
│   └── plugin2.png             # plugin, expanded
├── ConversationNavigator.tsx   # v1 UI prototype by ChatGPT (archive)
├── ConversationNavigator.css   # v1 UI styles (archive)
├── package.json
└── README.md / README.en.md

Technical Notes

  • Mounted on shell.overlay — the frame-wide floating layer; additive, never changes the chat layout.
  • Data bridge reads the chat DOM (data-chat-flow-kind / data-chat-flow-key) read-only; zero intrusion into chat rendering.
  • All timers go through ctx.timer (the client-half sandbox provides no native timers).
  • Current-message detection: throttled scroll events (120ms) + IntersectionObserver + MutationObserver + fallback polling.
  • Every style tag, listener, and timer is cleaned up with the plugin's Cordis fiber.