xiguazhiPrince/dsh-session-map ↗★ 0
dsh-session-map
为DSH会话提供分支树状图谱画布以展示会话派生关系 适合拥有大量分叉会话,需要直观查看、跳转和管理会话树状结构的用户。
同名包的其他仓库
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:xiguazhiPrince/dsh-session-map说明文档
阅读完整 README ↗使用
三个入口
| 座位 | 内容 |
|---|---|
conversation.view | 「概览」标签页(order 20)、「会话图谱」标签页(order 30)—— 默认关闭,见下 |
conversation.session.header.utilities | 会话头部的「会话图谱」开关(order 40);右侧栏已打开时再点一次关闭 |
sidebar.right.pane.tab | 常驻标签页 dsh-session-map.overview 与 dsh-session-map.map |
工具栏
| 控件 | 作用 |
|---|---|
| 「当前会话树 / 全部会话」 | 画布范围:当前会话所在的那棵树,或者列表里的全部会话 |
| 「竖向 / 横向」 | 树的生长方向:自上而下,或者自左向右 |
| 「全局显示用户输入」 | 一次铺开所有会话的用户输入串;关闭后逐条线单独展开 |
| 「隐藏子代理会话」 | 过滤 origin: subagent 的会话(默认开) |
| − / + / 100% / 适应窗口 / 定位当前 | 缩放与取景 |
| 键盘图标 | 快捷键表 |
画布交互
- 滚轮上下平移,Shift + 滚轮左右平移,Ctrl / ⌘ + 滚轮缩放;
- 拖动空白平移(不会选中文字),点空白收起菜单;
- 点击会话节点弹出操作菜单:跳转到该会话 / 在画布中居中;
- 点击链首的胶囊展开或收起该线的用户输入;fork 继承的输入前缀折叠成
+N 继承胶囊; - 点击输入珠子弹出该轮的操作。
画布默认只画当前会话的会话树
图谱打开时只铺开当前会话所在的那棵树:从树根(parentId 链上仍被列表列出的最远祖先)到它的所有后代,含与当前会话并列的兄弟分支。同一棵树上「还有谁从同一个父节点分叉」正是读当前会话时的上下文,所以整棵树一起给。
工具栏上的「当前会话树 / 全部会话」两段开关切换这个范围。范围只改画什么,不动几何:同一棵树在两种范围下的坐标完全一致。列表里还没有当前会话(快照尚未落地那一行)时,画布不缩成空图,而是照旧铺开全部,并在工具栏说明原因。
默认值写在 src/client/views.ts 的 DEFAULT_MAP_SCOPE('current'),由 src/client/index.ts 装进插件 run 的开关。和其它工具栏开关一样,它挂在插件 run 上,所以那是每次页面加载的默认值:刷新后回到「当前会话树」。
画布默认竖向生长
树自上而下长:子会话在父会话下方,兄弟分支左右排开,一张卡片的用户输入串挂在它下面、竖着排成一列;分支从父卡片的链尾拉一条曲线到子卡片的顶边。横向模式是自左向右,输入串往右排。
工具栏上的「竖向 / 横向」两段开关切换方向。两个方向共用同一套布局:深度轴与分栏轴互换,画什么、折叠与展开状态、以及同一个节点在两种方向下的相对关系都不变;横向模式与引入竖向之前逐字段一致(含坐标与边路径)。
默认值写在 src/client/views.ts 的 DEFAULT_MAP_DIRECTION('vertical'),同样由 src/client/index.ts 装进插件 run,所以也是每次页面加载的默认值。
对话标签栏的两个标签页默认关闭
「概览」和「会话图谱」这两个 conversation.view 入口由浏览器本地偏好控制,默认不注册。头部开关和右侧栏的两个标签页不受影响,图谱仍然可以从右侧栏正常使用;上图里的图谱就是右侧栏那个标签页。
在页面控制台里改,刷新后生效(不需要重新构建或重启):
localStorage.setItem('dsh.session-map.conversationViews', 'true') // 打开
localStorage.setItem('dsh.session-map.conversationViews', 'false') // 显式关闭
localStorage.removeItem('dsh.session-map.conversationViews') // 回到出厂默认
出厂默认写在 src/client/index.ts 的 DEFAULT_CONVERSATION_VIEWS。
为什么不用 profile 里的 config:浏览器半由 web boot 用裸 { name } 创建(packages/client/web/src/boot-client.ts:50),而 boot manifest 的插件行只带 id / inject / immediately——宿主行的 config 到不了客户端插件。给这个包写 config 不会有任何效果。