
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
dsh-conversation-navigator
Advanced tools
DSH(DeepSeek Harness)会话导航插件:按轮折叠的对话大纲面板,支持节点点击跳转、滚动位置高亮与轨迹视图同款配色。
English | 中文
DeepSeek Harness(DSH)Web 端会话导航面板:在对话页右侧悬浮展示按轮折叠的对话大纲,点击任意节点平滑跳转,滚动对话时实时高亮当前阅读位置,步次徽标配色与内置"轨迹"视图统一。
纯浏览器插件(无宿主行为)、纯 JavaScript、零构建、零 npm 依赖(按钮/Tooltip 复用 DSH 内核 seed 的官方 primitives)。
| 深色模式 | 浅色模式 |
|---|---|
![]() | ![]() |
深色 / 浅色模式下的会话导航面板。三种形态:显示轮次、隐藏轮次、极简·左(极简·右自 0.2.6 暂缓,代码保留;极简收起仅露行内指示条,悬停展开定位面板)。更多截图见 assets/screenshots。
▸ N,展开时旋转为 ▾)平滑展开/折叠该轮的步次明细(助手回复、工具调用、命令、压缩点等)--dsw 主题 token,自动适配明暗主题)Button/Tooltip 组件与官方图标(搜索、关闭);其余操作图标(导航、加载更早、加载全部、回到最新、全部折叠、切换轮次等)取自 Lucide 描边图标集(ISC License,lucide.dev),currentColor 自动适配明暗主题本插件是官方规范的组合包(dsh.bundle manifest + dsh.client 声明),纯 JavaScript、无构建步骤,推荐用官方 CLI 安装:
# 方式一:npm(发布后,用户无需任何构建授权)
dsh plugin --profile web add dsh-conversation-navigator
# 方式二:GitHub(纯 JS 包无需 prepare/allowBuilds,直接可用)
dsh plugin --profile web add github:gjj-star/dsh-conversation-navigator
# 方式三:本地 tarball
pnpm pack
dsh plugin --profile web add ./dsh-conversation-navigator-<version>.tgz
dsh plugin 在 profile 目录内转发给 pnpm,因此需要 pnpm 在 PATH 上;安装会自动把本包追加进 profile 的 dsh.profile.bundles,其自带的 cordis.patch.yml 层负责插入插件行。重启 dsh web 后生效。双形态默认值:官方 < 0.1.2-rc.1(无内置导航)时面板默认展开;官方 ≥ 0.1.2-rc.1(会话视图内置 TurnNavigator 轮次轨道)时面板默认关闭、默认形态为「极简·左」、搜索框默认收起,由标题栏「导航」按钮主动呼出,与官方右侧轨道零重叠。
手动方式(不依赖 pnpm):把仓库放进
<DSH_HOME>\profiles\<profile>\node_modules\dsh-conversation-navigator,并在 profile 的cordis.patch.yml顶层数组追加example.patch.yml的内容。
修改 lib/client.js 后重启 dsh web 即可;停靠状态、拖动位置、极简左对齐、面板宽高持久化于 localStorage(dsh-cnvnav:ui:v2;面板的展开/收起 open 不再持久化——新宿主每次启动都从默认关闭开始,搜索关键词等界面状态仍只存于页面会话内。
已发布到 npm(
dsh-conversation-navigator,徽章实时显示最新版本);升级已安装副本:市场更新或dsh plugin --profile web add dsh-conversation-navigator后重启。
conversation.session.header.utilities(标题栏「导航」开关)+ shell.overlay(浮动面板)useSession;新宿主(官方 ≥ 0.1.2-rc.1)走 uiConversation.binding(binding).target("chat") 快照——主通道为官方 timeline.turnOrder + locations 索引分组,ChatNodeStore.values() 兜底(依节点自带 location 或 anchorSeq 对照轮次边界归组),再用官方 turnOutline 投影(sessions.projectionStore(sid).get("turnOutline") / slot 标准 props 的 useProjection,与官方 rail 的 mergeTurnRailItems 同源)补上被组装器漏挂的用户消息与加载窗口外的轮次;随 loadOlder 自动重派生sessions 服务的 binding(sessionId).session.loadOlder() 分页向后加载,「加载全部」循环至 hasMore=false[data-chat-anchor-key](与产品内部 paging/scroll 定位同源),scrollIntoView 平滑滚动[data-conversation-scroll] 滚动容器的 scroll 事件(节流 120ms),计算视口顶部首个可见节点user 与 assistant-step 节点提取检索文本(dialogueText),大小写不敏感匹配,命中片段以 <mark> 高亮并按首个命中位置截取显示窗口fullDialogueText(用户节点全部文本块拼接),用 Tooltip 展示并限宽 340pxviewMode 三态循环(full/hidden/minimal-left,「极简·右」minimal 已注释保留),隐藏时仅把轮次头标题替换为轨迹徽标(titleNode 策略);极简左对齐以 scrollport.left + 12 钉在对话区左缘(定位 key 含 r.left,并用 ResizeObserver 监听对话区宽度变化,左侧栏展开/折叠时紧贴跟随);搜索框展开时按钮让位docked 状态;place() 对自由放置的面板只做视口夹边、不再自动停靠;位置、停靠状态与对齐选择存于 localStorage(dsh-cnvnav:ui:v1)style.width(240–560),高度只调 maxHeight 并保持 height:auto,使实际高度恒为 min(内容, 上限) 而不产生空白;拖动以起点为基准线性跟随(base + 位移),上限与 place() 的容器/视口钳制同源,松手零回弹;宽高随 panelWidth/panelHeight 持久化Button/Tooltip/搜索与关闭图标复用 @deepseek-ai/dsh-client-ui-primitives,其余图标为 Lucide 内联 SVG(ISC License);面板容器自建 <style> 注入,颜色使用 --dsw-* 主题 token;插件卸载时随 fiber 清理dsh.client.platform: web),依赖内核 seed 的 react、slots、sessions 服务与 @deepseek-ai/dsh-client-ui-primitives;dsh.client.inject 声明 @deepseek-ai/dsh-client-ui-conversation(dsh-client-runtime 已于官方 v0.1.2-rc.1 移除,不再注入)uiConversation 服务即新宿主(官方 ≥ 0.1.2-rc.1),不硬编码版本号。uiConversation 已加入客户端 exports.inject 声明,运行时保证其先就绪,宿主检测稳定不再随加载时序翻转。旧宿主保持全功能导航器(默认展开);新宿主与官方内置 TurnNavigator 共存:默认关闭 + 「极简·左」 + 搜索框默认收起,官方轨道负责跳转,本插件专注关键词搜索、批量「加载全部」与步次级徽标uiConversation 服务、conversation.session.header.utilities 空 props 契约、chat target 快照(timeline/locations/nodes/navigation/legacy)与 turnOutline 投影;旧宿主(无 uiConversation)经 useSession 路径兼容保留,未在 0.1.2-rc.1 之前的官方版本上逐一回归@deepseek-ai/dsh-client-ui-conversation 以 peerDependencies + semver 范围声明(awesome-dsh-plugin 约定,dshmarket 的依赖检查据此展示宿主兼容性)[data-chat-anchor-key] / [data-conversation-scroll] 是当前 DSH 聊天视图的 DOM 锚点约定(官方 v0.1.2-rc.1 中已验证仍在),DSH 升级后若锚点变化,只需调整 lib/client.js 中 findAnchor / computeActiveKey 两个函数timer 硬依赖:客户端的 timer 服务存在则用于节流,不存在时自动退化为未节流模式官方 v0.1.2-rc.1 对会话数据层做了一次爆破性更新(会话节点从 session.chat 快照迁移到 uiConversation 的 chat target 快照),因此插件按宿主版本分叉:
宿主 dsh-client-ui-conversation | 对应插件版本 | npm 标签 |
|---|---|---|
≥ 0.1.2-rc.1(有 uiConversation 服务) | 0.2.6 及以后(当前 0.2.11) | latest(默认) |
≤ 0.1.1-rc.2(无 uiConversation,旧 session.chat 快照) | 0.2.5 及以前 | legacy |
dsh plugin --profile web add dsh-conversation-navigator)。npm i dsh-conversation-navigator@legacy(= 0.2.5)。peerDependencies 声明 >=0.1.2-rc.1 <0.3.0(会话数据层与 UI primitives 两个包)。IconXxxOutline16 静默改为 IconXxxOutlineRegular / Medium(0.1.2~0.1.6 只有旧名)。0.2.11 起插件在一处集中解析、新名优先 → 旧名回退,缺失时打印可诊断的报错并退化为占位组件,不再让整个 slot 因 minified React error #130 被判崩溃;CI 对已发布 DSH 版本做宿主导出契约检查(scripts/check-host-exports.mjs)。lib/
index.js # 宿主侧空入口(纯浏览器插件)
client.js # 浏览器端完整实现(window.__ModuleLoader__ 模块格式)
assets/
screenshots/ # 截图(README 主图 + 市场截图墙)
scripts/
check-host-exports.mjs # CI: 宿主导出契约检查(图标改名这类静默移除)
cordis.patch.yml # 组合包补丁层(插入插件行)
example.patch.yml # 手动安装时的补丁示例
统计区间 2026-08-17 → 2026-09-20(GitHub Actions 每日自动刷新):
| npm 下载 | GitHub 独立访客 | GitHub 独立克隆者 | Stars | Forks |
|---|---|---|---|---|
| 6,206 | 540 | 335 | 23 | 1 |
MIT
FAQs

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.