前言¶
在 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
核心功能¶
标题改写规则¶
- 监听
session/title事件:仅当来源为fallback或provider,且标题不符合约定时才改写。 fallback标题延迟 8 秒(默认fallbackDelayMs: 8000)再处理,以便等待 provider 生成更合适的标题;provider标题立即处理。- 模块名按
moduleRules依次用正则匹配当前标题;都不命中时使用defaultModule(默认「通用」)。 - 日期取会话
header.createdAt的月日,四位数(如1103),时区由timeZone决定,默认本机时区。 - 改写通过
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 用户;需要把「阶段 / 状态 / 模块 / 日期」编码进标题、便于检索与扫一眼跟进进度的团队或个人。
注意:
roots默认为空时,每个工作区的每个会话都可能被改写;若不希望误伤其他目录,务必先配roots。- 人工改名不会被插件覆盖;与自动标题的边界由
session/title的来源字段区分。 - 本地改插件源码时,需用目录绝对路径
install_bundle /path/to/dsh-session-title-convention安装,且改代码后要先卸载再装才会加载新模块代际,直接改文件不会热更新。
结尾¶
dsh-session-title-convention 把 DSH 自动生成的会话标题收敛到可配置的 【stage+status】workspace|module|MMDD|brief 结构,并保留人工标题与代理侧 session_title 微调能力。若你正在整理会话列表命名,可在 SkillHub 查看插件条目,或在 GitHub 阅读完整 README 与配置说明。