At a glance
What it does
A Git-style timeline rail for finding and jumping to messages in long DeepSeek Harness conversations.
Demo Profile
Not declared in supplied evidence
Evidence-verified
Checked Sep 12, 2026, 1:51 PM UTC
Code-evidenced contributions
What it adds to DSH
Adds a Git-style, per-user-message timeline for browsing, searching, and jumping through DeepSeek Harness conversations.
Mechanism evidence ↗Before you choose it
dsh-milestone adds a right-side milestone rail to the DeepSeek Harness web UI, with one dot per user message. Hover to preview message and turn metadata, click to jump, search the current session or across sessions, and bookmark messages with shareable #msg= links. The rail can collapse into a movable floating ball.
Best for
DeepSeek Harness web users who work in long, multi-turn conversations and need quicker message navigation.
Common tasks
- Jump back to an earlier prompt without manually scrolling through a long conversation.
- Search the full current session for message text and move through matches.
- Bookmark a message or share a URL that returns to a specific message.
- Review turn metadata such as duration, first-token time, token usage, model, and completion reason when available.
Permissions and data
A browser-side DeepSeek Harness UI plugin that reads session projection data and saves selected interface preferences locally.
Permissions- Injects into the DeepSeek Harness web client through declared client modules and an overlay slot.
- Reads the plugin's registered session projection to render messages and metadata.
- Stores bookmarks, toolbar preferences, and floating-ball position in browser localStorage.
- Uses full-session message content for current-session search; cross-session search uses the Harness native index according to the README.
- No credentials are declared in the supplied evidence.
Limitations
- Jumping to older messages may require loading earlier history into the DOM and can fail for extremely deep history after its bounded loading attempts.
- TTFT and tokens-per-second are hidden for unfinished turns.
- Cross-session search returns excerpts up to 240 characters and at most 20 results.
- Very long sessions can make projection updates and full-session search slower.
What DSHub checked
- The package manifest declares a web client bundle and peer dependencies for DeepSeek Harness client packages and React.
- The bundle patch structure and immutable Git source commit were verified.
- The README documents timeline navigation, search, bookmarks, deep links, and local persistence.
What DSHub did not check
- Installation and runtime behavior were not executed from the supplied evidence.
- The README's reported test counts and feature behavior were not independently verified.
- Exact Harness version detection is not declared in the supplied manifest.
Pinned install
Install dsh-milestone
This plugin bundle does not have a DSH Plugin install action. Use its source documentation for the delivery method.
Maintainer source
Project README
dsh-milestone
DeepSeek Harness 的会话里程碑导航条
像 Git 提交图一样,一眼定位每一次提问,一键跳转到任何位置。
<p> <a href="https://www.npmjs.com/package/dsh-milestone"><img src="https://img.shields.io/npm/v/dsh-milestone?color=2563eb" alt="npm version"></a> <a href="https://www.npmjs.com/package/dsh-milestone"><img src="https://img.shields.io/npm/dm/dsh-milestone" alt="npm downloads"></a> <a href="./LICENSE"><img src="https://img.shields.io/npm/l/dsh-milestone" alt="license"></a> <a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/topic-dsh--plugin-2563eb" alt="dsh-plugin"></a> </p></div>English: A Git-style milestone timeline for the DeepSeek Harness web UI — one dot per user message, hover for content and metadata (time, turn, duration, TTFT, tokens), click to jump anywhere, and collapse the whole rail into a draggable floating ball. Full-session list, in-session & cross-session search,
#msg=deep-link bookmarks, keyboard navigation. Install:dsh plugin --profile demo add dsh-milestone.
为什么需要它?
- 上百轮对话之后,想找回「第 17 轮那个提问」?只能不停往上翻,在代码块和思考过程里大海捞针。
- 右侧挂一条圆点时间线:一个提问一个圆点,悬停看内容,点击瞬间跳转——长对话的「导航地图」。
- 官方 slot 机制挂载,不修改 harness 源码,装完即用。
快速开始
# 从 npm 安装(推荐)
dsh plugin --profile demo add dsh-milestone
# 或从 GitHub 源码安装
dsh plugin --profile demo add "github:SnowCrescenter-tech/dsh-milestone#main"
# 启动 Web UI
npx @deepseek-ai/dsh web # → http://127.0.0.1:3080
打开一个多轮对话(至少 2 条提问),会话视图右侧就会出现里程碑条。
要求 Node.js
>= 24(harness 官方要求)。
功能详解
圆点时间线
每个提问一个圆点,点击平滑跳转;悬停即看内容与元信息。圆点等距排列、不随对话长度变形,颜色由浅入深标出先后,同 Git 提交图。滚轮可在里程碑条上直接滑动选点,视口内最近的提问亮起白环。
折叠为悬浮球
一键把整条时间线收成一颗半透明悬浮球:点击展开,拖动可把它放到屏幕任意角落(拖动时不触发展开),松手即记住位置,刷新或下次会话仍在。设置里可选「固定 / 可拖动」,也可一键重置位置——右侧被其它面板(如 dsh-better-sidebar、explorer)占用时,把它拖到顺手的地方即可。
全部提问列表
一键打开面板,序号 + 轮次 + 预览一次看全,点击任意一条直接跳转。列表直接来自整个会话的投影,不用手动翻页——对藏在最早期的消息来说,比在小圆点上逐个找快得多。
站内搜索
搜索框过滤圆点,匹配的是完整消息内容(不是 80 字摘要)且覆盖整个会话(不受对话当前加载窗口限制),实时显示命中数 N/M。Enter 跳到下一个匹配,Esc 一键清空。
跨会话搜索
一键搜索所有会话的消息内容(harness 原生索引),点击命中结果直接打开对应会话。
收藏书签与深链接
悬停圆点点星收藏,刷新后仍在(按会话持久化),顶部「★」一键只看收藏。跳转时 URL 自动带上 #msg= 锚点,刷新或分享后仍回到同一条消息。
悬停元信息
时间 · 轮次 · 用时 · 结束原因 · TTFT · tok/s · 模型 · 用途 · token 用量,一张卡片看全。数据来自插件自注册的会话投影,零额外依赖:
┌──────────────────────────────────────────┐
│ 第 3 / 5 条 · 第 2 轮 ☆ 复制 ✂ │ ← 序号 + 轮次 + 收藏/复制/fork
│ 帮我优化这段代码的性能 │ ← 消息预览(前 80 字)
│ 5 分钟前 · 用时 1m30s · 首字 1.2s · 12.4 tok/s │ ← 时间 · 耗时 · TTFT · 吞吐
│ v4 · continue · 1280 / 2560 tok │ ← 模型 · 用途 · token 用量
└──────────────────────────────────────────┘
更多效率功能
- 键盘导航:
↑↓移动 ·Enter跳转 ·Home/End首尾,全程不用鼠标。 - turn 分组折叠:长轮次折成一条,汇总圆点带可见 ×N 徽标,一眼知道藏着几条。
- 折叠为悬浮球:整条时间线收成可拖动的小球,位置记忆、可固定可拖动。
- 复制与 fork:一键复制提问全文 / 从此处分支。
- 聚焦模式:淡化 / 折叠思考与工具调用,强度可调、自由搭配。
- 折叠工具栏:功能键默认收起,常用键可钉到折叠外;搜索 / 列表等浮层点击外部自动关闭。
- 个性化:强调色 / 圆点大小 / 距侧边距离 / 左右位置即调即存;中文 / English 一键切换。
工作原理
双半边浏览器插件(空 node half + shell.overlay slot 挂载的 client half),零侵入:
shell.overlay (root scope)
└─ milestone.rail (session scope, 自声明子槽)
└─ useProjection('milestone.messages') → 圆点列表 + 悬停 + 跳转
- 注入点:
shell.overlay全框架浮动层,附加式、点击穿透,不碰现有 UI。 - 数据源:插件自注册的
milestone.messages会话投影——host 端对完整事件日志做 fold(turn/start/user/message/assistant/chunk/assistant/message/turn/end),client 端经useProjection读取整会话的消息与每轮元数据;圆点列表与站内搜索覆盖整个会话,与 DOM 当前加载窗口无关。 - 跳转:以消息锚点做 DOM 定位,
scrollIntoView平滑滚动。 - 分页:顶部「···」按需把更早的对话载入 DOM(跳转 / 深链接定位所需);提问列表本身来自投影,无需逐页加载。
- 持久化:书签、工具栏偏好与悬浮球位置经
store.persist写入 localStorage。 - 纯函数分层:过滤、位置计算、圆点状态、悬浮球几何集中在纯函数层(
rail-logic.ts/ball-position.ts),单测覆盖。
版本与兼容
- 当前官方支持线:
0.1.5线(0.1.5-rc.1是 npmlatest、0.1.5-rc.2是next;peer 范围>=0.1.5-rc.1 <0.3.0-0同时覆盖两者)。 - peer/dev 范围为收紧的
>=0.1.5-rc.1 <0.3.0-0(dsh-client-locale/dsh-client-store/dsh-client-ui-slots):依赖解析到旧线时会得到明确的 ERESOLVE,而不是静默错配。 - 0.1.5 起流式时序内嵌在
assistant/message/assistant/attempt的紧凑stream中(独立的assistant/chunk事件已移除),TTFT 由官方assistantStreamFirstTokenTime读取;TokenUsage字段更名为inputTokens/outputTokens/totalTokens并拆分缓存计数,插件的input显示为三项之和(缓存计入),保持旧的「提示词 token」含义。 - 会话数据自 0.1.2 起改经会话投影提供(插件注册
milestone.messages,client 端useProjection读取);defineStore由@deepseek-ai/dsh-client-store提供。 - 已知上游打包缺陷:
@deepseek-ai/dsh-client-store@0.1.5-rc.1的lib/index.js运行时引用zustand/immer,清单却把它们放在devDependencies未声明为依赖——导入该模块即报Cannot find package 'zustand'。本仓库用 pnpmpackageExtensions兜底补全(见pnpm-workspace.yaml)。 - harness 当前版本在浏览器端没有可信来源(
host.describe().version是占位值),因此不做精确探测,以插件声明的支持线为准。
已知限制
<details> <summary>查看更多已知限制(点击展开)</summary>⚠️ 圆点列表与站内搜索现由会话投影驱动,覆盖整个会话,与 DOM 加载窗口无关;但跳转到很早的消息仍需先把该消息载入 DOM,插件会自动触发加载再定位。
- TTFT / tok/s 依赖 turn 位置数据,未完成的 turn 不显示(自动隐藏)。
- 徽章的瞬态状态(运行中 / 等待输入)只点亮最新一条提问。
- 书签按会话隔离,不跨会话共享。
- fork 从选中消息所在轮次开始分支,不会自动打开子会话(需在会话列表手动打开)。
- 深链接目标若早于已加载窗口,会先自动加载更早历史再定位;受加载上限约束,极端深的历史可能定位失败。
- 跨会话搜索仅返回片段(≤240 字符)、最多 20 条结果,命中过多时请细化关键词。
- 极长会话(约 500 条提问以上)下,插件随会话投影下发的「整会话全文」会随提示词总量增长(1000 条约 1 MB),更新与站内搜索会略变慢。这是整会话全文搜索能力的代价——官方暂无「会话内」查询 API,砍掉全文即等于砍掉该功能,故当前保留。
更新日志
<details> <summary>v0.7.2 / v0.7.1 / v0.7.0 / v0.6.6 / v0.6.5 / v0.6.4(点击展开)</summary>v0.7.2 · 点击旧圆点自动翻页定位(深跳鲁棒性)· 459 项测试
- 点旧圆点不再"没反应":里程碑条覆盖整个会话,但 DOM 只渲染已加载窗口——此前点一个很早的圆点会静默无反应。现在会自动按页载入更早历史直到定位(有界 20 页),定位期间该圆点脉冲提示,失败则安静结束。
- 站内搜索的"下一个匹配"跳转同样受益。
v0.7.1 · 升级不再被卡(可选 peer + 兼容边界)· 恢复模型与错误徽标 · 跟随官方 0.1.5-rc.2 · 457 项测试
- 升级不再被 ERESOLVE 卡死:三个 DSH 客户端包 peer 改为 optional——官方换 rc 线时只告警、不再拒绝安装;并新增渲染期兼容边界:契约一旦变化,给出明确提示("与当前 DSH 版本不兼容,请升级插件"),不再静默消失或拖垮宿主 UI。
- 恢复悬停卡的模型:改从 0.1.5 的
request/context事件读取 provider / model(此前恒为null)。 - 恢复错误 / 重试徽标:由
turn/end的结束原因(error / max-tokens)与assistant/attempt结算次数重建(此前徽标恒空)。 - 跟随官方
0.1.5-rc.2(npmlatest仍为 rc.1;peer 范围>=0.1.5-rc.1 <0.3.0-0同时覆盖两者);上游dsh-client-store漏声明zustand/immer的兜底扩到整条 0.1.5 线。 - CI 新增
advisory / dsh next:持续对官方next线跑类型检查与测试,提前预警破坏性变更(首跑即发现 rc.2 与上述打包缺陷)。
v0.7.0 · 跟随官方 0.1.5(会话投影数据层)· 折叠为可拖动悬浮球(issue #4)· 447 项测试
- 跟随官方 0.1.5:会话数据由插件自注册的
milestone.messages投影提供——host 端对完整事件日志 fold,client 端useProjection读取;圆点列表与站内搜索覆盖整个会话,与 DOM 加载窗口解耦。TTFT 改从结算事件内嵌的紧凑stream读取(独立的assistant/chunk已移除),TokenUsage字段更名并计入缓存;peer 收紧到0.1.5-rc.1线,移除dsh-client-runtime依赖(含dsh.client.inject)。 - 折叠为悬浮球(issue #4):里程碑条可一键收成半透明悬浮球,自由拖到屏幕任意位置;点击展开、拖动移动(拖动与点击互斥),位置按 localStorage 记忆;设置里可选「固定 / 可拖动」并一键重置位置。
v0.6.6 · 全部提问列表自动加载整个会话 · 折叠圆点 ×N 徽标 · 轮次连续显示 · 397 项测试
- 全部提问列表一次看全:打开时自动加载整个会话的历史,不再受初始加载窗口限制,点击任意一条直达。
- 折叠轮次不藏消息:汇总圆点带可见 ×N 计数徽标,悬停气泡显示覆盖的条数区间(第 a–b / m 条)。
- 轮次编号连续化:显示轮号按圆点顺序重编号(1、2、3…),不再跳空或重复;分组与折叠逻辑不变。
- 列表点击外部自动关闭:与搜索、跨会话搜索浮层同一套外部点击关闭契约。
- README 重写为产品宣传结构:演示图第一屏,功能介绍分组清晰。
v0.6.5 · 新手教程改为锚定真实组件的教练气泡引导,设置模态对比度修复 · 近 400 项测试
v0.6.4 · 首次使用引导:4 步双语教学 + 内置演示,印象即写、关页不重弹
更早版本见 GitHub Releases。
</details>License
<p align="center"> 如果它帮你省下了一次翻找,欢迎给个 Star,或推荐给同样在 DeepSeek Harness 里长聊的开发者。 </p>
Operate deliberately
Install and manage
Prerequisites and target Profile
Target: Demo Profile
Delivery: Dsh Bundle Git — SnowCrescenter-tech/dsh-milestone#3bdd8d1327f30b64a1119aeb62c752ef1e12c713。
Verify, update, and remove
Show lifecycle commands
dsh plugin --profile demo listCompatibility and access
DeepSeek Harness web client bundle with declared peer dependencies: Not declared in supplied evidence。
Review compatibility evidence ↗
Risk facts
Persists bookmarks, toolbar preferences, and floating-ball position in browser localStorage.
Evidence ↗Full-session message text is delivered to the plugin's session projection to support in-session search; very long sessions can grow the transferred data.
Evidence ↗Evidence and editorial reviewManifest, Bundle patch, distribution and freshness
Immutable evidence
Review status and source activity
Prefer the pinned Git bundle action: supplied evidence flags an npm repository/source mismatch, while the immutable Git bundle structure is verified.
AI reviewed Sep 12, 2026, 1:51 PM UTC。GitHub facts last checked Sep 12, 2026, 1:51 PM UTC。
No material source change has been recorded since this evidence baseline.