前言¶
DeepSeek Harness (DSH) 的核心设计理念是「一切皆插件」。在长会话中定位特定提问,尤其是存在运行中插话或需要切换标签页时,操作较为繁琐。dsh-plugin-question-index 插件在主聊天区左缘提供问题刻度轨道,点击提问即可自动滚动定位。
核心功能¶
- 问题刻度轨道:固定在主聊天区左缘,每个用户问题对应一条短横线。轨道内可独立滚动,不撑爆页面。
- 仅对话可见:只在「对话」Tab 展示,切换到「轨迹」等其他页签时自动隐藏。
- 原文浮层:鼠标移入某条横线时,该线平滑延长,并在右侧显示完整问题原文。原文浮层可独立滚动阅读。
- 索引列表:按顺序列出当前会话全部提问(含运行中插话发送的「插话」,带角标)。
- 点击定位:点击问题后,会话内容平滑滚动到该提问所在行(约视口上方 1/4 处)。
- 键盘访问:Tab 聚焦横线后显示摘要,Enter / Space 定位到对应问题。
安装与启用¶
使用官方安装命令添加插件:
dsh plugin --profile web add github:antlordGit/dsh-plugin-question-index
安装完成后重启 dsh web(或等待补丁层热重载)。
注意:React 不需要单独安装。客户端 bundle 里的
require("react")由 DSH shell 的模块表提供。插件只做加法,注册shell.overlay的一个列表条目,不替换任何产品 UI。
典型用法¶
- 快速定位:点击左缘任一问题横线,聊天内容会自动平滑滚动到该提问位置。
- 查看原文:鼠标移入某条横线,横线延长并在右侧显示完整问题原文,方便在长对话中快速回忆上下文。
工程实现要点¶
该插件通过增量槽位和轻量 DOM 桥接实现交互:
- 界面挂载:使用
slots.inject('shell.overlay', …)注册全局浮层列表条目,随 Fiber 卸载自动清理。 - 浮层托管:根节点设置
pointer-events:none,仅面板/按钮恢复pointer-events:auto以保证交互。 - 数据来源:使用全局标准 props
useSessions获取sessions.binding(id).session,数据零 Host RPC、零持久化。 - 跳转锚点:利用聊天节点
key上的data-chat-anchor-key属性,与产品滚动恢复契约对齐。 - 视图切换:点击定位时,若当前不在「对话」Tab,会自动点击头部第一个标签按钮(
order=0)切回对话。 - 样式:引用
--dsw-alias-*主题令牌(如--dsw-alias-bg-overlay、--dsw-alias-brand-primary),支持明暗主题自动适配。
适用场景与注意¶
该插件适合需要频繁查看长对话上下文、快速定位特定提问的场景。
注意:本插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。