Seryta/dsh-node-nav 预览 preview

Seryta/dsh-node-nav

DSH(DeepSeek Harness)Web GUI 的客户端插件:在聊天区右侧显示一列等距节点串,每条用户消息对应一个节点。hover/focus 时显示消息文本预览,点击平滑滚动到对应消息并短暂高亮,active 药丸跟随阅读位置滑动。

catalog descriptioncatalog 简介 / catalog description:对话节点导航:DSH Web GUI 右侧节点串,hover 预览、点击跳转、active 药丸跟随阅读位置

Project Overview项目介绍

dsh-node-nav is a native client plugin built exclusively for the DeepSeek Harness (DSH) Web GUI. To install the plugin, you can run the one-line command dsh plugin --profile web add github:Seryta/dsh-node-nav in your terminal, then restart the dsh web process and refresh your browser page to activate it. You can also clone the repository to your local machine and install it from the local directory with the command dsh plugin --profile web add ./dsh-node-nav. The plugin is written in pure vanilla JavaScript with zero dependencies and no build step required when installing from the remote git repository.

This plugin is designed for DSH users who frequently work with long multi-turn conversations. It adds a vertical bar of nodes on the right edge of the chat area, with one node matching each user message. Nodes support hover and keyboard focus previews that show the message text and sent time, and clicking a node scrolls the page to the matching message with a brief highlight. It also adds an input history feature: when the input box is empty, you can use the up and down arrow keys to browse and recall past user inputs, matching the common terminal readline workflow. A fixed node at the bottom lets you jump straight to the latest message in one click.

This plugin uses a dual-track data approach that pulls all user messages from the server session log, so it can navigate to unloaded historical messages without expanding all history pages upfront. It has a few known limitations: it relies on internal DSH client contracts for message anchors and input state, so breaking changes to these contracts in future DSH versions will require plugin updates. Input history only works for the currently open attached session, and clicking unloaded nodes relies on the existing "load earlier" button, with a maximum of 30 consecutive load batches. The plugin is released under the permissive open source MIT license, and is free to use, modify, and redistribute.

dsh-node-nav 是专为 DeepSeek Harness(DSH)Web 客户端开发的原生对话导航插件。它会在聊天区右侧显示一个纵向节点栏,每个用户消息对应一个节点,支持鼠标悬停预览消息内容和发送时间,点击后平滑滚动到对应消息并短暂高亮,当前阅读位置会用标注药丸实时跟随。插件可从服务端会话日志提取全量历史用户消息,无需提前展开加载全部历史分页,避免页面冗余膨胀,还会自动避让右侧打开的详情面板。

这款插件面向需要处理多轮长对话的 DSH 用户,解决长会话滚动查找历史消息不便的问题。日常使用时,用户可通过右侧节点快速定位任意历史用户消息,无需手动滚动漫长的聊天记录,未加载的历史节点也能点击触发加载并定位。对于经常复用或编辑过往提示的用户,插件还提供输入历史翻找功能,在输入框为空时按上下箭头即可快速遍历过往用户输入,重置规则符合终端交互惯例。

插件是零依赖、零构建的纯手写 JavaScript,安装方式非常简单,可通过 DSH 命令行直接从 GitHub 远程安装,安装后重启 DSH Web 端并刷新页面即可使用,也可克隆仓库后从本地目录添加。它依赖 DSH 客户端的内部契约,存在少量已知限制,采用 MIT 许可完全免费开源使用。

Pre-install check安装前体检Compatibility · Security兼容性 · 安全性 1 warning1 项注意
  • Only 2 stars - very few users, little community feedback星标只有 2,几乎没人在用,遇到问题缺少社区反馈
DSH walks through these 9 checksDSH 会逐条核对这 9 项

Compatibility兼容性

  • DSH, Node, OS and profile requirementsDSH 版本 / Node 版本 / 操作系统 / profile 是否满足要求
  • External dependencies and runtimes (Electron / Python / Docker, ...)外部依赖与运行时(Electron / Python / Docker 等)是否齐备
  • Conflicts with installed plugins: command names, skill / tool names, ports, duplicate MCP registration与已装插件是否冲突:命令名、skill / tool 重名、端口占用、重复 MCP 注册

Security安全性

  • Repo matches the facts registered here; archived or abandoned?仓库是否与页面登记一致,是否归档或长期停更
  • Safety of preinstall / install / postinstall and install.sh / setup.ps1preinstall / install / postinstall 与 install.sh、setup.ps1 是否安全
  • curl|bash, download-then-execute, obfuscation, unrelated domains → stop immediatelycurl|bash、下载即执行、混淆代码、无关域名 → 立刻停止
  • Typosquatting or unmaintained packages among the new dependencies新增依赖里有没有 typosquatting 或无人维护的包
  • Requested permissions vs. what the feature actually needs申请了哪些权限、是否超出功能所需(filesystem / network / shell / clipboard)
  • Any sudo / admin requirement, plus uninstall and rollback是否要求 sudo / 管理员权限,以及卸载与回滚方式

Anything uncertain must be marked unknown with a note on how to confirm it. This site's signal screen is a static snapshot, not a security audit.拿不准的必须标「未知」并说明要我怎么确认。本站的信号筛查是静态快照,不能替代安全审计。

Or use CLI install (for developers)或使用命令行安装(适合开发者)

CLI Install命令行安装

dsh plugin --profile web add github:Seryta/dsh-node-nav

把 Seryta/dsh-node-nav 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

dsh-node-nav — 对话节点导航

DSH(DeepSeek Harness)Web GUI 的客户端插件:在聊天区右侧显示一列等距节点串,每条用户消息对应一个节点。hover/focus 时显示消息文本预览,点击平滑滚动到对应消息并短暂高亮,active 药丸跟随阅读位置滑动。

节点串总览(浅色模式)

功能

功能 说明
节点串 右缘纵向节点串,每条用户消息一个圆点;最多同时显示 15 个,窗口随阅读位置滑动(无滚动条),两端渐隐提示更多
全量历史节点 host 半部从会话日志提取全部用户消息(含分页未加载的历史),导航在点击前就覆盖全部历史,页面保持原生分页不展开
底部节点 rail 最底端固定一个方形「跳到底部(最新消息)」节点,形状与提示区别于消息节点
hover/focus 预览 显示服务端全文(300 字符截断)与时间,键盘焦点同样触发
点击跳转 scrollIntoView 居中 + 品牌蓝高亮环 1.2 秒
active 跟随 滚动时药丸实时标出视口内最顶部的用户消息
输入历史 输入框为空时按 ↑ 回填最近一条用户输入,连续 ↑ 翻更早、↓ 翻回;编辑/发送后指针重置
details 避让 右侧详情面板打开时节点串自动左移
深色模式 跟随 body[data-ds-dark-theme]
reduced-motion 系统减少动效偏好下禁用动画
自动隐藏 非对话页时不显示

截图

节点串总览(浅色模式):每个圆点对应一条用户消息,底部方形节点一键跳到底部,药丸标出当前阅读位置。

节点串总览(浅色模式)

hover/focus 预览:鼠标悬停(或键盘聚焦)节点时显示该条用户消息的服务端全文与时间。

hover 消息预览

active 药丸跟随:滚动聊天区时,药丸实时移动到视口内最顶部的用户消息节点。

active 药丸跟随滚动

深色模式:跟随 body[data-ds-dark-theme] 自动切换配色。

深色模式

输入历史(↑ / ↓)

输入框(draft)为空时:

  • ↑:回填最近一条用户输入;连续 ↑ 翻更早(到最早一条为止);
  • ↓:翻回更近一条;回到最新位置后 ↓ 清空 draft(与 readline/TUI 惯例一致);
  • 开始编辑回填文本、发送或清空后,指针重置(下次 ↑ 从最近一条重新开始);
  • 菜单打开时(触发词在 draft 中)天然不抢上下键;IME 组合中不拦截;
  • 数据复用 /plugins/dsh-node-nav/api/users(仅 source.kind === 'user' 的真实输入,纯图片消息 [图片] 占位不参与历史)。

数据源:服务端会话日志 + DOM 行状态(双轨)

  • 全量列表:host 半部端点 /plugins/dsh-node-nav/api/users 从 attached 会话的 session log 提取全部真实用户消息(source.kind === 'user'),返回 [{ id, seq, time, text }]——导航覆盖全部历史,页面不展开,无历史预加载副作用;
  • DOM 行状态:锚点 key 形如 <seq>:input-message<uuid>,uuid 即消息 id,用 [data-chat-anchor-key$="<id>"] 判定该消息行是否已加载进页面;
  • 端点不可用/冷会话(未 attached)时回退到纯 DOM 扫描。

未加载的节点以虚线半透明显示;点击时连续触发页面「加载更早」(上限 30 批)直到该行进入 DOM,再滚动定位。hover 预览显示服务端全文与时间。

安装

dsh plugin --profile web add github:Seryta/dsh-node-nav

安装后重启 dsh web 并刷新页面。插件是纯手写 JS(零构建、零依赖),git 安装不会触发任何构建脚本。

也可以 clone 后从本地目录安装:

git clone https://github.com/Seryta/dsh-node-nav.git
dsh plugin --profile web add ./dsh-node-nav

与同类插件的差异

项目 数据源 本插件的取舍
dsh-navbar DOM 扫描(同款思路) 本插件采用相同的 DOM 扫描契约,但保留 React + shell.overlay 槽位形态(可停用/启用),并补充 details 面板避让
dsh-turn-index 会话快照 binding(id).session 快照方案在部分 dsh 版本上只见最近窗口节点,故本插件改走 DOM

已知限制

  • 输入历史与跳转依赖 dsh 客户端契约:[data-chat-anchor-key](行锚点)、[data-composer-card](composer 容器)与 provide 通道 hooks.input / props.inputActions(输入状态与写入口);harness 大版本改动这些契约时需同步适配。
  • 输入历史仅覆盖当前打开的(live)会话:host 端点只查 attached 会话,未打开的历史会话无 composer 焦点,不适用输入历史。
  • 未加载节点点击依赖页面「加载更早」按钮存在(上限 30 批);按钮被移除的 harness 版本中,点击未加载节点会提示目标消息未能定位。

License

MIT

← 上一个 Prev dsh-diff-card 下一个 Next dsh-voice-agent →