Minglink/dsh-infinite-gen-4
Minglink/dsh-infinite-gen-5DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投影在输入框上方显示实时破甲状态徽标。
钢琴键风格的会话内导航条:每根键对应一条用户消息,悬停预览、点击跳转到完整历史的任意消息。官方双面 dsh 插件,不改 DSH 源码。
简体中文 | 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.session.getSnapshot() no longer carries the navigation projection); this plugin
now reads the full chat snapshot from the official uiConversation service
(viewStore.get('chat')), the same source as the official turn navigator, and
extracts historical replies from the on-disk log — every turn previews its reply.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.uiConversation.binding(currentId).viewStore.get('chat') → full chat snapshot
(with navigation, 0.1.2+; subscribed via useSyncExternalStore)ctx.sessions.binding(currentId).session → ConversationSnapshot
(fallback for pre-0.1.2 / when uiConversation is unavailable)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.
Requirements: Node.js >= 18.
pnpm install # dev dependencies (vitest, eslint, prettier)
pnpm test # run the unit test suite (31 tests)
pnpm lint # eslint check
pnpm format # prettier formatting
Layout notes:
lib/shared.js so the host and browser halves share one
implementation and the tests cover it once.lib/client.js and refresh the page; host changes (index.js) need a
plugin reload.window.__dssnNavDebug__ exposes diagnostics (entryCount, fullCount,
stats) for CDP inspection.MIT