dsh-session-title-convention:把 DSH 自动会话标题整理成可配置的【阶段+状态】约定格式

前言

在 DeepSeek Harness(DSH)里,会话列表里的标题多半来自模型或宿主的自动生成。时间一长,列表里会出现长短不一、语义分散的标题,很难从侧边栏一眼区分「在哪个仓库、在做什么、进展如何」。人工逐个改名能管住质量,但成本高,也容易和自动标题来回覆盖。

下面介绍社区 Host 插件 dsh-session-title-convention(维护者 TangUsers,分类:客户端)。它在不改动你手工改过的标题的前提下,监听自动标题事件,把符合改写条件的会话标题统一成可配置的 【阶段+状态】工作区|模块|MMDD|简述 形式。工作区名、模块规则、生效目录都来自本机配置,插件包本身不捆绑具体项目信息。

这是什么

dsh-session-title-convention 是 DSH 的 Host 插件,当前版本 0.1.0(MIT 许可证,Node.js ≥ 20)。它解决的是「自动会话标题难以扫读列表」的问题:把 fallback / provider 来源、且尚未符合约定的标题改写成固定结构;user 来源(人工改名)永不触碰。阶段词表为中文(盘点 / 设计 / 实现 / 验证 / 收口 / 归档),状态为 🟢 🟡 🔴 ✅ 🧊;工作区标签、模块匹配、时区与目录范围均可配置。

目标格式如下:

【<阶段><状态>】<工作区>|<模块>|<创建日期 MMDD>|<问题简述>

未配置 workspace 时,工作区名取会话 cwd 的目录名。

目录页:https://www.skillhub.cn/plugins/TangUsers/dsh-session-title-convention
源码与文档:https://github.com/TangUsers/dsh-session-title-convention

核心功能

标题改写规则

  1. 监听 session/title 事件:仅当来源为 fallback 或 provider,且标题不符合约定时才改写。
  2. fallback 标题延迟 8 秒(默认 fallbackDelayMs: 8000)再处理,以便等待 provider 生成更合适的标题;provider 标题立即处理。
  3. 模块名按 moduleRules 依次用正则匹配当前标题;都不命中时使用 defaultModule(默认「通用」)。
  4. 日期取会话 header.createdAt 的月日,四位数(如 1103),时区由 timeZone 决定,默认本机时区。
  5. 改写通过 sessionTitle.rename() 完成,结果标记为 user 来源,插件不会反复改写自己的输出,也不会覆盖人工标题。

生效范围

仅处理满足以下条件的会话:

  • cwd 位于配置的 roots 之下(roots 为空表示所有工作区的会话都会改写);
  • 非 subagent、非 seeded 会话。

可选 sweepOnStart:宿主启动约 2 秒后,将最近 sweepMaxAgeMinutes 分钟内仍为不合规自动标题的会话一并整理(默认关闭)。

session_title 工具

插件向代理注册 session_title 工具,可只改阶段、状态、模块或简述,不必整名重写。阶段词表与状态 emoji 固定;约定允许阶段为空。

示例(仅传需要改的字段,其余沿用当前标题):

{ "stage": "实现", "status": "🟢", "module": "会话治理", "brief": "xxx" }

安装与启用

插件以当前 DSH 进程权限运行,安装前建议通读源码并确认 MIT 许可证是否满足你的合规要求。

推荐从市场安装(便于检查更新):

install_bundle dsh-session-title-convention

或从 GitHub 安装:

install_bundle github:TangUsers/dsh-session-title-convention

也可在 profile 的 package.json 中声明依赖:

"dsh-session-title-convention": "^0.1.0"

装完后需重启宿主才生效:Desktop 退出重开,Web 端重启服务(Host 插件不支持热加载)。安装后默认作用于所有会话;若只想在特定仓库使用,请先配置 roots(见下文)。

典型配置

在 profile 的 cordis.patch.yml 中按插件 id session-title-convention 覆盖配置(本机配置,不随插件分发)。

限定只对某个仓库生效:

- id: session-title-convention
  config:
    roots:
      - /path/to/repo

完整示例:

- id: session-title-convention
  config:
    workspace: 某个工作区名
    roots:
      - /path/to/repo
    defaultModule: 通用
    timeZone: Asia/Shanghai
    moduleRules:
      - ['权限|授权|菜单', 权限治理]
      - ['迁移|migration|V\\d+__', 数据库迁移]

常用配置项(摘自官方 README):

键 默认 说明
workspace '' 工作区名;空则取会话 cwd 目录名
roots [] 生效目录;空 = 所有会话
defaultStage '' 默认阶段;约定允许省略
defaultStatus 🟢 默认状态
defaultModule 通用 未命中任何规则时的模块
maxBrief 40 简述最大长度
timeZone '' 日期时区;空 = 本机
fallbackDelayMs 8000 fallback 标题的延迟
sweepOnStart false 启动时整理存量会话
sweepMaxAgeMinutes 1440 sweep 只处理该时限内的会话;0 = 不限
moduleRules [] [正则, 模块] 或 {pattern, module}

标题只会被自动改写一次(随后固化为 user 来源),但一旦改写就会在会话列表中长期可见,安装前请确认全局 roots 是否符合预期。

适用场景与注意

适合谁: 长期在多个仓库或多个模块间切换、希望会话列表具备统一命名约定的 DSH 用户;需要把「阶段 / 状态 / 模块 / 日期」编码进标题、便于检索与扫一眼跟进进度的团队或个人。

注意:

  1. roots 默认为空时,每个工作区的每个会话都可能被改写;若不希望误伤其他目录,务必先配 roots。
  2. 人工改名不会被插件覆盖;与自动标题的边界由 session/title 的来源字段区分。
  3. 本地改插件源码时,需用目录绝对路径 install_bundle /path/to/dsh-session-title-convention 安装,且改代码后要先卸载再装才会加载新模块代际,直接改文件不会热更新。

结尾

dsh-session-title-convention 把 DSH 自动生成的会话标题收敛到可配置的 【stage+status】workspace|module|MMDD|brief 结构,并保留人工标题与代理侧 session_title 微调能力。若你正在整理会话列表命名,可在 SkillHub 查看插件条目,或在 GitHub 阅读完整 README 与配置说明。

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

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

小夜