前言¶
DeepSeek Harness(DSH)把对话重命名能力开放给用户,但 Agent 在默认情况下无法修改当前会话的标题。当会话标题需要携带状态(例如 [wip] / [pending] / [done] 前缀),或者标题需要基于已完成工件生成而不是仅基于第一条提示时,Agent 无法自己维护标题就成为一个痛点。dsh-plugin-session-rename 插件通过给 Agent 一个原生工具,让 Agent 可以直接调用 Cordis 的 sessionTitle.rename 服务,真实地重命名当前对话。
插件定位¶
- 名称:dsh-plugin-session-rename
- 维护者:CCLUCKY
- 分类:记忆
- 功能:给 Agent 提供一个原生工具
session_rename(title: string),直接调用 Cordis 的sessionTitle.rename(session, title)服务,真实重命名当前对话
安装与启用¶
从 npm 官方源安装(推荐):
dsh plugin --profile <profile> add dsh-plugin-session-rename
安装后,插件会通过声明 dsh.bundle.patch 自动追加到 dsh.profile.bundles,并挂载为 session-rename 这一行。
从源码安装(适用于发布前):
dsh plugin --profile <profile> add git+https://github.com/ccclucky/dsh-plugin-session-rename.git
本地 checkout 安装(仅用于开发):
在 profile 目录下创建或修改 cordis.patch.yml:
# ~/.dsh/profiles/<profile>/cordis.patch.yml
- insert:
- id: session-rename
name: './plugins/session-rename/index.js'
注意:npm、git 和本地 row 三种方式同时使用会生成重复的 session-rename 行,请只使用一种。
典型用法¶
Agent 可以通过自然语言请求重命名,例如:
rename this conversation to "[done] 迁移收尾"
或者 Agent 直接调用工具:
{
"title": "[wip] 迁移进行中"
}
重命名成功后,返回如下结果:
{
"title": "[wip] 迁移进行中",
"eventSeq": 514,
"source": "user"
}
插件对错误做了显式处理,不会静默失败:
- 空标题或仅空白字符会被拒绝,不会调用服务;
- 无所属 Agent 或 Agent 没有活跃会话的调用会被拒绝;
- 服务将标题规范化为空时,会传播服务的错误。
工作原理¶
每次调用 sessionTitle.rename(session, title) 会向会话日志追加一个 session/title 事件,source: user。这带来三个后果:
| 属性 | 效果 |
|---|---|
| 可复现 | 对话、分叉、恢复等操作会从日志重建标题 |
| 固定 | 正在进行的自动标题生成会被覆盖,后续提示不再自动重命名 |
| 实时 | 会话列表和聊天头部会在事件到达时立即重绘,无需刷新页面 |
技术细节¶
- 无外部依赖:插件不导入任何外部模块,直接依赖 DSH 运行时提供的
sessionTitle服务。 - 零导入:注册工具使用原始 JSON Schema,不依赖
defineTool的类型化方言,避免加载器激活失败。 - 会话归属:模型无法操作其他会话,会话来源为
exec.agent.session,不从工具参数传入。 - 兼容模式:插件通过
inject = ['tools', 'sessionTitle']注入依赖,当 profile 中缺少任一服务时插件保持非活跃而非报错。 - 生命周期:工具注册在
ctx.effect(...)中,禁用 row 时工具会自动注销。
测试与兼容性¶
- 运行测试:
node --test(14 个契约测试,无外部依赖,无需安装 DSH)。 - DSH 版本:插件面向 DSH 0.2.x 插件 API,
package.json声明engines.dsh: ">=0.2.1-rc.2 <0.3.0"。 - Node.js 版本:要求
>=20。
适用场景¶
- 需要在会话标题中标注工作状态(如
[wip]、[done]); - 标题需要基于已完成工件生成,而不是第一条提示;
- 希望在状态变化时由 Agent 自动修正标题,而不是依赖用户手动操作。
注意事项¶
- 插件以当前 DSH 进程的权限运行,安装前建议阅读源码与许可证(MIT)。
- 确保使用支持的 DSH 版本(0.2.x),否则安装会被拒绝。
- 同时使用 npm、git 和本地安装方式会产生重复的
session-rename行,请保持单一安装方式。
总结¶
dsh-plugin-session-rename 通过一个原生工具,让 Agent 可以在状态变化时真实地重命名当前对话,而不是只在模型内部修改标题。它不依赖外部库,兼容 DSH 0.2.x,适合需要在会话标题中携带状态或自动维护标题的场景。插件已在 npm 发布 v1.0.0,支持从官方源和 GitHub 源安装。
- 插件目录页:https://www.skillhub.cn/plugins/ccclucky/dsh-plugin-session-rename
- GitHub 仓库:https://github.com/ccclucky/dsh-plugin-session-rename