dsh-session-tree:把 DSH 左侧栏变成可嵌套的会话树

前言

在 DeepSeek Harness(DSH)里跑带子智能体(subagent)的任务时,会话数量会快速变多:主会话下面挂着一层层子任务,内置左侧会话列表往往是扁平的,很难一眼看出「谁是谁的子节点」。要在某条子智能体对话里继续多轮追问,还得在列表里来回找 id。

orphiczhou/dsh-session-tree 是一个客户端侧的 DSH profile bundle,由维护者 orphiczhou 发布,用树形视图替换默认左侧栏,并按 Host 报告的 workspace 分组;同时注册 Host 工具 tree_send,向树里任意可继续的子智能体会话发消息(包括内置 send_message 到不了的兄弟节点)。许可证为 MIT,当前 package 版本为 1.0.4。

这是什么

一句话:左侧栏显示「每个会话 + 其嵌套 subagent 后代」,点行即可进入多轮对话;Agent 可通过 tree_send 跨树发消息。

DSH 没有集中式插件商店,插件以普通 npm/Git 包分发,README 即安装说明。本插件属于 客户端 类 bundle,通过 Cordis patch 注入侧边栏,依赖 @deepseek-ai/dsh-client-ui-sidebar 与 @deepseek-ai/dsh-client-ui-workspace。

核心功能

下面介绍 README 中已列出的能力,均可在启用后于界面或 Host 工具列表中验证。

树形会话与 workspace 分组

能力 说明
Tree view 按 parentId 把 origin: 'subagent' 的子会话嵌套在持久父会话下,深度不限(渲染缩进最多 8 层)。
Workspace grouping 会话挂在 Host 报告的 workspace 下,折叠标题显示名称、路径及(折叠时)会话数;无 workspace 的归入 Ungrouped,始终在最后。
Lazy expansion 默认折叠;展开某节点才构建其子树,每层缩进 13 px。
Bounded fan-out 单层最多渲染 300 个子行,超出显示 N more omitted,避免静默丢弃。

状态、搜索与视图选项

  • 四态状态点:运行中(蓝、脉冲)、已完成未读(绿)、已完成已读(灰)、等待回复(橙),颜色跟随 DSH 主题 token。
  • 搜索框:按标签或 session id 过滤,匹配项仍保留在对应 workspace 标题下。
  • Header … 菜单:按最后更新或标题排序(置顶会话始终在前)、归档显示策略(隐藏 / 显示 / 仅归档)、全部展开 / 折叠、重新加载标题。
  • 折叠侧栏:侧栏收成图标轨时,提供 ≡ 按钮重新展开。

行内操作与导航

  • 点击 ▶ 展开或折叠;有子节点时在右侧显示子数量。
  • 点击行主体:顶层会话走内置 openSession(sessionId);subagent 行走 openSession({ parentSessionId, childSessionId, mode }),可继续的多轮 subagent 可追问,一次性 subagent 只读(与 DSH 本身行为一致)。
  • subagent 行的 ↗ 在右侧栏以 subagentchat 资源单独打开,左侧栏位置不变。
  • Header + 新建会话(弥补内置浏览器入口被 shadow 的情况)。
  • 行 …(悬停可见):置顶 / 取消置顶、重命名(Enter 提交、Esc 取消、失焦提交)、Fork(仅普通会话)、归档 / 取消归档。

tree_send 与 SessionTree inspect

内置 send_message 按「当前 live sender」授权,只允许直接父子相邻;兄弟 subagent 之间无法互发。tree_send 改为按目标会话的 持久父地址 授权,因此可向树中任意 可继续 的 subagent 投递消息。

参数 必填 含义
target 是 要发消息的可继续 subagent 的 session id。
message 是 消息正文。

插件还注册只读 Cordis Inspect 提供者 SessionTree:通过 cordis_inspect_query 可读取侧栏 实际渲染 的行序、层级、缩进与样式,便于 Agent 自检 UI 而无需人工读屏。

tree_send 仅在 Host 同时存在 tools、subagents、sessionQuery 服务时注册;否则 bundle 仍会加载,只是不提供该工具。

安装与启用

先做安装,再在 Plugins 页确认 bundle 已启用。

图形界面

  1. 打开侧边栏 Plugins 页。
  2. 选择 Add plugin。
  3. 在 spec 中粘贴仓库 URL 并确认:
https://github.com/orphiczhou/dsh-session-tree

bundle 加入当前 profile 后,左侧栏会切换为树视图,无需重启。

命令行

在终端执行(owner/repo 为 GitHub 简写,与完整 clone URL 等价;--profile <name> 可指定非默认 profile):

dsh plugin add orphiczhou/dsh-session-tree

该命令在 profile 目录内通过 pnpm 安装仓库,并在 dsh.profile.bundles 中登记一条目。本包为纯 ESM、无 build 步骤,pnpm ≥ 10 不会因 build script 需要额外 allowlist。

本地路径

若已有本地目录,使用绝对路径:

dsh plugin --profile <name> add /absolute/path/to/dsh-session-tree

验证

  • 打开已启用该 bundle 的 profile:左侧栏标题应为 Sessions(中文 UI 下为 会话树),即本插件而非内置浏览器列表。
  • 展开带 child count 的行,应看到嵌套的 subagent 行。
  • 若界面仍是内置列表:在 Plugins 页确认名为 session-tree 的行已启用;仍无效则查阅仓库 Troubleshooting 章节。
  • 可选:让 Agent 列出 Host 工具,应出现 tree_send(在具备上述服务的前提下)。

典型用法

展开并打开对话

  1. 用 ▶ 展开有子节点的会话,查看嵌套 subagent。
  2. 点击目标行进入该会话;需在右侧并行查看 subagent 时,点该行 ↗。
  3. 在 Header 用 + 开新顶层会话;用搜索框按标题或 id 定位。

批量整理视图

  1. Header … → 选 Order by(Last updated 或 Title)。
  2. 按需切换 Archived sessions 显示策略。
  3. 任务结束后可用 Expand all / Collapse all;标题过期时用 Reload titles 从 Host 重新拉取。

Agent 向兄弟 subagent 发消息

当编排需要让某个 subagent 通知同层另一个可继续 subagent 时,在具备 tree_send 的 Host 上调用该工具,传入 target(目标 session id)与 message。不要依赖 send_message 做兄弟节点通信。

用 inspect 核对侧栏渲染

调试 UI 或写自动化时,可通过 cordis_inspect_query 查询 SessionTree 提供者,获取当前侧栏真实 DOM 结构与样式,而不是让用户口述屏幕内容。

适用场景与注意

适合谁

  • 频繁 spawn subagent、需要看清父子关系和多 workspace 混用的 DSH 用户。
  • 需要在 Agent 侧向树内任意可继续 subagent(含兄弟节点)发消息的编排场景。
  • 希望 Agent 通过 Cordis inspect 读取侧栏实际布局的开发者。

安装前须知

  • 插件以 当前 DSH 进程权限 运行;安装前应阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全与合规要求。
  • DSH 插件由社区维护;SkillHub 目录页 为独立生态索引,与 DeepSeek / 幻方无官方从属关系,也不是应用内商店。
  • 星标、版本以仓库与 package 为准;功能边界以 README 为准,勿假设未文档化的配置项。

结尾

dsh-session-tree 把左侧栏从扁平列表改成按 workspace 分组、可懒加载展开的会话树,并补上 tree_send 与 SessionTree inspect,方便人机两边在复杂 subagent 拓扑里导航与通信。

  • 目录页:https://www.skillhub.cn/plugins/orphiczhou/dsh-session-tree
  • 源码与完整说明:https://github.com/orphiczhou/dsh-session-tree
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye