dsh-plugin-session-project:在单列表会话行下显示所属工作区名称

前言

DeepSeek Harness(DSH)侧边栏里,会话可以按工作区分组,也可以切成「单列表」——所有会话平铺在一列里。单列表扫标题很快,但看不出这条会话属于哪个项目(工作区),切回分组视图又占纵向空间。下面介绍社区客户端插件 dsh-plugin-session-project(维护者 Schrei5):在单列表视图里,把每个会话所属工作区的名称显示在标题下方;分组视图(按工作区 / 按工作区树)不变,因为分组标题已经给出项目名。

这是什么

dsh-plugin-session-project 是一个 DSH 客户端插件(dsh.client,平台 web),同时自带 DSH bundle 补丁层。它解决的是:单列表会话行只有标题时,缺少「这条会话在哪个工作区」的上下文。插件不改动 React 树,通过样式表在会话行下方绘制工作区标题;数据来自客户端服务 workspaces.list 与 sessions.list。

核心功能

  1. 仅单列表生效
    侧边栏视图选项 → 分组方式 → 单列表 时,每个会话标题下方多一行项目(工作区)名。若侧边栏里已有工作区分组行,插件不生成任何样式。

  2. 名称规则
    - 取该会话所属工作区的标题。
    - 仍是首次使用的自动标题 default-workspace 时,显示本地化文案「默认工作区 / Default workspace」。
    - 不属于任何工作区的会话显示「未分组 / Ungrouped」。
    - 已归档会话的项目名与标题一样使用更淡的 caption 颜色。

  3. 搜索与布局
    搜索结果的会话行不受影响(无项目名,行高不变)。单列表里会话行高由 32px 调整为 48px,多出的 16px 用于项目名;标题、状态点、时间、悬停操作按钮位置保持原样。

  4. 分组视图
    按工作区或按工作区树的分组视图行为与安装前一致。

安装与启用

最低 DSH 版本:0.2.0-rc.2。配置改动由 dsh-hmr(默认开启)热应用,一般无需重启应用。

方式一:装进 profile(推荐)

本包既是 bundle 又是 client plugin,安装后可在插件页面看到并开关。

# 1) 装进 profile(git 地址 / 本地目录 / tarball 都行)
dsh plugin --profile desktop add github:Schrei5/dsh-plugin-session-project
# 或:dsh plugin --profile desktop add /path/to/dsh-plugin-session-project

# 2) 选用这个 bundle(Web 插件页面里打开开关,或改 profile 的 dsh.profile.bundles)

方式二:手写补丁层

不装包时,可在 profile 补丁里插入一行指向本包入口(与方式二选一,勿与方式一同时用,否则会出现两个同 id 的行):

# ~/.dsh/profiles/<profile>/cordis.patch.yml
- insert:
    - id: session-project-label
      name: /absolute/path/to/dsh-plugin-session-project/lib/index.js

典型用法

  1. 按上文命令将插件加入当前 profile(例如 desktop),在 Web 插件页面打开对应 bundle,或确认 dsh.profile.bundles 已包含它。
  2. 打开 DSH 侧边栏,将分组方式设为 单列表。
  3. 浏览会话列表:每条会话标题下方应出现其工作区名称;切换到「按工作区」分组后,不应再出现重复的项目名行。
  4. 需要暂停时:在插件页面关闭 bundle,或在补丁行上设置 disabled: true。

移除示例:

dsh plugin --profile <profile> remove dsh-plugin-session-project

并从 dsh.profile.bundles 中去掉该包;若用手写补丁,删除对应的 - insert: 段即可。

实现要点(便于排查)

文件 作用
lib/index.js 宿主侧入口,供 Loader 挂载与 manifest 中的 dsh.client
lib/client.js 浏览器侧:生成样式表并订阅会话 / 工作区 / 语言变化
cordis.patch.yml bundle 补丁:插入 session-project-label

浏览器侧用 data-row-key="session:<id>" 定位会话行,通过 ::after { content: … } 绘制项目名。

适用场景与注意

适合谁
经常在 DSH 里用单列表浏览大量跨工作区会话的开发者;希望在不分组的前提下仍能一眼看到会话归属项目。

兼容性
实现依赖 @deepseek-ai/dsh-client-ui-workspace 当前的会话行 DOM 结构(data-row-key、32px 单行 flex、.title / .time 等)。上游结构变化时,标签位置或行高可能走样;插件通常不会报错,但样式可能需要作者同步更新。

安全与信任
插件以当前 DSH 进程权限在客户端运行,会读取工作区与会话列表相关客户端 API。安装前请自行查看仓库源码与 MIT 许可证;社区目录(SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。

本地用 link: 指向仓库目录开发时,改完 lib/client.js 后主机可能需在重载或重启后重新快照客户端产物;稳妥做法是重启一次 DSH。

结尾

dsh-plugin-session-project 用最小侵入的方式补全单列表会话的「所属工作区」信息,分组视图保持原样。需要时可从社区目录页或 GitHub 仓库获取安装说明与截图:

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

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

小夜