OpenViking
volcengine
Self-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.
kiligzzz/dsh-session-nav
Piano-key style in-conversation navigation bar for the DeepSeek Harness web GUI: one key per user message, hover preview tooltip, click-to-jump across full history. Official dual-face dsh plugin, no dsh source changes.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:kiligzzz/dsh-session-nav
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
简体中文 | English
A piano-key style in-conversation navigation bar for the DeepSeek Harness Web GUI: one key per real user message of the current session. Hover a key to preview that turn's user message plus the model reply; click a key to smoothly jump to that message. Built on the official DSH dual-face plugin mechanism (host + browser half), no DSH source changes.
| Overview | Hover preview | Click to jump |
|---|---|---|
![]() |
![]() |
![]() |
| A 43-turn session — every user question is one key, compact cluster vertically centered in the message area. | Hover a key to see the user message (single line) plus the model reply (up to 3 lines). | Click any key to auto-page through history (same channel as the official "Load earlier" button) and land the target at the viewport top. |
Screenshots taken from a real 43-turn session (DSH记忆注入验证优化, light theme).
Reference implementation: KeLearns/dsh-navigation-bar (visual spec and interactions aligned, code independently rewritten).
sessionPersistence.readFrom), not from the browser's loaded
window — long sessions (hundreds of turns) show every user question at once;
merged with the live snapshot and deduplicated by message UUID (no duplicate keys).#D2D3D3 / #767779 / #1A1C1F, dark #454545 / #A3A3A3 / #FFFFFF.-webkit-line-clamp double insurance), vertically
centered on the key.data-ds-dark-theme + prefers-color-scheme fallback.dsh plugin --profile web add github:kiligzzz/dsh-session-nav
dsh plugin --profile web add link:<this-directory>
Note: the plugin roster is loaded when the instance starts — after installing a new
plugin, restart the dsh web instance, then refresh the page. Editing
lib/client.js only needs a page refresh (dynamically loaded client bundle).
| File | Description |
|---|---|
index.js |
Host half: reads the full session log and exposes the same-origin route /_dsh/session-nav/questions |
lib/client.js |
Browser half (hand-written bundle, no build step; window.__ModuleLoader__.load) |
cordis.patch.yml |
Bundle patch: inserts the plugin row into the web profile roster |
package.json |
dsh.bundle.patch + dsh.client (platform web) declarations |
Data sources (all official APIs):
ctx.sessions.binding(currentId).session → ConversationSnapshot
(useSyncExternalStore live subscription)ctx.sessionPersistence.readFrom(sessionId, 0) → full session log (host half)[data-conversation-scroll], message rows
[data-chat-anchor-key]session.loadOlder() (same channel as the official "Load earlier" button)Event-driven geometry tracking: scroll capture / resize / lazily attached scrollport
ResizeObserver → rAF-merged recomputes; no perpetual MutationObserver, no timers.
Anchor rows go through an isConnected-validated cache so virtualized list recycling
stays cheap.
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: conversation。