dsh-session-location: Display workspace and Git branch on the single list session row

前言

在 DeepSeek Harness(DSH)里同时开着多条智能体会话时,侧边栏常用「单列表」把会话摊平显示,而不是按工作区分组。分组视图里本来就有工作区标题;单列表里每条行往往只有会话标题,看不出这条会话属于哪个项目、当前检出的是哪条 Git 分支。要确认归属,只能逐个点进会话或回到文件树对照目录。

dsh-session-location 是社区维护的 DSH 客户端插件(维护者 xinjiguaike),在单列表模式下于每个会话行标题下方追加一行:所属工作区 · 当前 Git 分支,便于在不切换分组方式的情况下做项目与分支对齐。

这是什么

  • 包名:dsh-session-location
  • 当前版本(package.json):0.2.0
  • 许可证:MIT
  • 引擎要求:DSH >= 0.2.2-rc.1 < 0.3.0-0(不满足时宿主会拒绝安装)

插件逻辑全部在浏览器半区 client.js 完成,通过宿主已有的 remote.workspaceFiles.read 读取工作目录下的 Git 信息,不新增宿主服务或路由。

核心功能

显示内容与示例

单列表(In one list)模式下,标题下方多出一行标签,例如:

▢ 修复未登录页面鉴权漏洞                    1小时
  📁 hermes · ⎇ fix/auth-redirect

工作区名优先取该会话所属工作区的标题(重命名过的标题也会生效);取不到时用工作目录的 basename;没有 cwd 时显示「未分组」。分支通过读取 .git/HEAD,或对 linked worktree / 子模块先解析 .git 中的 gitdir: 再读对应 HEAD 得到。读取结果按目录缓存 60 秒。

不是 Git 目录、读取失败或文件过大时,只显示工作区、不显示分支,且不抛错;降级仅影响这一行标签,不会破坏会话行本身。

生效范围与界面细节

  • 只在「单列表」分组模式生效。按工作区 / 按工作区树模式自带分组标题,插件不改动那些视图。
  • 带标签的行高由 32px 调整为 44px;无标签行保持原样。
  • 工作区图标使用宿主产品图标集的 folder-close(与文件树一致);分支使用插件自带的 Git 分支字形。

开关位置

设置 → 通用 → 「在会话列表中显示工作区与分支」。偏好存在浏览器 localStorage,按浏览器生效;切换后列表立即更新,无需重启。README 说明该选项放在 settings.general.item,是因为会话列表右上角「分组方式 / 排序方式 / 筛选会话」下拉属于宿主 ui-workspace 内部组件,插件无法向其中插入条目。

实现上的约束(了解即可)

宿主没有「行内第二行」的官方插槽。插件使用两个会话行装饰 seat:sidebar.session.row.leading(idle 行,hover 时标签仍可见)与 sidebar.session.row.trailing(有运行 / 待审批 / 未读状态点时由 trailing 补上标签)。标签经样式绝对定位到标题下一行。若宿主 DOM 结构变化,最坏情况是标签不显示、行高不变,而不是侧边栏错乱。

安装与启用

要求 DSH 版本在 package.json 的 engines.dsh 范围内。插件尚未进入 awesome-dsh-plugin 精选列表,dsh-market 市场里暂时搜不到,需用下列方式安装。

桌面端(DSH Desktop):插件页 → 添加插件 → 包里输入 dsh-session-location(或 GitHub Release 的 tarball 地址、仓库地址),安装后按提示重启或刷新。

dsh web 或任意 profile(将 <profile> 换成实际 profile 名,dsh web 默认为 web):

# 1) 从 npm 安装(推荐;国内镜像也会同步)
dsh plugin --profile <profile> add dsh-session-location

# 2) 或预构建 tarball(不执行任何构建脚本)
dsh plugin --profile <profile> add https://github.com/xinjiguaike/dsh-session-location/releases/latest/download/dsh-session-location.tgz

# 3) 或直接从 GitHub 源码安装
dsh plugin --profile <profile> add github:xinjiguaike/dsh-session-location

装完后刷新页面;桌面端若未生效可重启一次应用。安装前建议在 GitHub 仓库 查看源码与 LICENSE;客户端插件在浏览器中与当前 DSH 会话上下文交互,应自行确认是否符合使用环境的安全预期。

典型用法

  1. 将侧边栏会话分组方式设为 单列表。
  2. 在 设置 → 通用 中打开 「在会话列表中显示工作区与分支」。
  3. 列表刷新后,每条会话标题下应出现「工作区 · 分支」一行(无 Git 信息时可能只有工作区名)。

若希望在所有分组模式下都显示第二行标签,README 指出可修改 client.js 里 CSS 中两处 [class*="_flatList"] 前缀(属于本地定制,非默认行为)。

适用场景与注意

适合:长期在 DSH 中并行多个仓库或多分支会话、且习惯用单列表浏览的开发者和智能体使用者;需要快速区分「这条会话在哪个 workspace、哪条 branch」而不想频繁切换分组视图。

注意:

  • 分支信息依赖对工作目录下 .git 相关文件的只读访问;权限与 DSH 宿主为该会话提供的文件 API 一致。
  • 与 README 已核对的同 profile 侧边栏类插件(如 dsh-better-sidebar、dsh-session-manager 等)未占用相同 seat;若自行叠加大量会话行插件,仍建议在插件管理器中确认 slot 是否冲突。
  • 社区目录页与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方「应用商店」从属关系;星标与收录状态以各页面当时数据为准。

结尾

dsh-session-location 用一行副标签补齐单列表模式下缺失的「项目 + 分支」上下文,改动面集中在会话行装饰与本地偏好,安装命令与版本约束以仓库 README 与 package.json 为准。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye