前言¶
在 DeepSeek Harness(DSH)里做长对话或发散追问时,经常从某一轮分叉出新会话,新会话再继续分叉。Web 侧默认的会话列表是线性的:分支一多,很难一眼看出「从哪一轮切出去」「主线还在哪」,旧会话也容易被挤到后面。Session Tree 是维护者 lulaalu 发布的客户端插件,在同一工作区内把「会话 → 每一轮对话 → 分叉」画成一张图,在 Web UI 里单独一页浏览,不改动对话页本身,也不复制或额外存储对话正文。
这是什么¶
Session Tree(npm 包名 @lulaalu/dsh-session-tree)的定位是:按工作区展示 DeepSeek Harness 会话、轮次与分叉分支的 Web 地图。它是一个 DSH 插件 bundle:Host 侧 index.js 的 apply() 为空,全部 UI 在 Web 客户端;只读取 DSH 已有的会话投影(如 ctx.sessions、turnOutline),不读写 session 文件、不改 session 格式。
入口在 DSH Web 左侧边栏图标列(Plugins、Schedules 之后)新增的树形图标;点击后主区域整页切换到「会话树」,不是对话页浮层。
社区目录页:lulaalu/dsh-session-tree。源码与文档:GitHub lulaalu/dsh-session-tree。
设计理念(读图前先知道坐标系)¶
插件把一轮对话(一次 prompt + 一次回复)作为图的最小节点;一个会话占一行,节点按时间横排;分叉从某一轮连到新会话的一行。父会话被隐藏时,子会话继承来的历史用虚线/淡显标出,避免图从中间断开。横向是对话在推进,纵向是分支在生长。
核心功能¶
下面能力均来自仓库 README 中的功能表与说明。
| 能力 | 说明 |
|---|---|
| 按工作区一张图 | 页顶下拉切换工作区,默认最近活跃的工作区。 |
| 一行一会话、一列一轮 | 节点显示该轮 prompt / 回复摘要。 |
| 分叉可视化 | 从被切出的轮次连到新会话;中间会话隐藏时用虚线重连到最近可见祖先。 |
| 继承历史 | 父会话不在视图时,子会话就地淡显继承段。 |
| 子会话 | 迷你节点挂在调用轮下方;可收起并显示数量徽标。 |
| 归档会话 | 「显示归档」打开后,归档行用浅灰底与降低不透明度区分。 |
| 节点操作 | 行内「⋯」:重命名、置顶/取消置顶、分叉、归档/取消归档、复制 Session ID。 |
| 点击定位 | 点节点打开会话并定位到该轮(高亮闪一下)。 |
页面顶部还提供视图开关:显示继承历史、显示子会话、显示归档、回合连线、行分隔、清晰边框;右侧 ⚙ 可调强调色(写入浏览器 localStorage)。名字列可拖右边缘调宽。
安装与启用¶
环境要求¶
- DeepSeek Harness 0.2.x(Web UI;
webprofile 或桌面 App 的desktopprofile)。 package.json声明engines.dsh为>=0.2.0 <0.3.0;不满足时 DSH 会拒绝加载,可用dsh plugin allow-version豁免(见 README)。- 插件为纯 JavaScript,无构建步骤;从 GitHub 安装不需要给 pnpm 授权运行构建脚本。
先确认 CLI 可用:
dsh --version
注意:npm 上不带 scope 的 dsh-session-tree 是另一个项目,不要使用 dsh plugin add dsh-session-tree。认准仓库 lulaalu/dsh-session-tree。
方式 A:从 GitHub 安装(README 推荐)¶
Web 环境:
dsh plugin --profile web add github:lulaalu/dsh-session-tree#v0.1.1
桌面 App 将 --profile web 换成 --profile desktop。
方式 B:从 npm 安装¶
dsh plugin --profile web add @lulaalu/dsh-session-tree
当前资料中 npm 版本为 0.1.1。
方式 C:插件商店索引(自建市场源)¶
- 设置 → 插件 → 发现 → 索引源,添加
https://cdn.jsdelivr.net/gh/lulaalu/dsh-session-tree@main/market/index.json - 在发现页搜索「会话树」或
Session Tree安装。
卸载¶
dsh plugin --profile web remove @lulaalu/dsh-session-tree
装完后若看不到树形图标:桌面 App 需重启;命令行环境需重启 dsh web 并刷新页面。常见原因是装到了另一套 profile,需用对应的 --profile 再装一次。
典型用法¶
- 打开会话树页,在顶部下拉选择要查看的工作区。
- 在右侧图区浏览各会话行与轮次节点;悬停节点右上角可从该轮分叉。
- 点击任意节点,跳回对应对话页并定位到该轮。
- 用顶部开关控制继承历史、子会话、归档与连线样式;需要时用行内「⋯」管理会话或复制 Session ID。
插件不保存对话正文;分叉关系来自 DSH 会话 header 中的 parentSession / isSeeded,子会话来自 origin === 'subagent',不维护第二份关系表。
适用场景与注意¶
适合:在同一工作区内频繁分叉会话、需要对照分支来源与主线进度的 DSH Web 用户。
已知限制(README 原文):全新子会话的 spawn 轮次若 DSH 未向客户端暴露,会暂时挂在父会话最后一轮下方;定位到某轮为「尽力而为」(loadThrough(seq) + DOM 滚动),极长历史可能翻不到;暂无搜索、导出与多选批量操作。
安全与信任:插件以当前 DSH 进程权限运行,安装前请自行查看 源码 与 MIT 许可证。SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
Session Tree 用只读方式把同一工作区的会话、轮次与分叉关系可视化,补上线性会话列表在分支场景下的定位短板。需要安装命令与细节时,以 GitHub README 为准:
- 目录页:https://www.skillhub.cn/plugins/lulaalu/dsh-session-tree
- 仓库:https://github.com/lulaalu/dsh-session-tree