DeepSeek Harness 会话重命名插件

前言

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
羽毛球分组比赛记分
小程序二维码

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

小夜