dsh-tool-set-session-title:用模型工具统一对话标题命名

前言

在 DeepSeek Harness(DSH)里跑智能体时,侧栏会堆很多会话。Harness 自带「首条提示自动标题」能起个初稿,但格式不统一,后续用户消息还可能继续触发改名,和你在项目里约定的「按日期 + 类型 + 主题」对不上。手工在 Web 侧栏改标题可以,却得离开对话流程;若要让模型在收尾时自己把当前会话或历史会话改成规范名字,就需要模型侧可调用的工具。下面介绍社区插件 dsh-tool-set-session-title(维护者 HH12-web,分类:客户端),它把「当前会话命名」和「任意历史会话重命名」接到 Harness 的会话标题服务上,并强制一套可校验的标题格式。

这是什么

dsh-tool-set-session-title 是 DeepSeek Harness 的组合包插件:向模型暴露两个工具,把对话标题写成 MMDD|类型|主题 形式(例如 1022|修复|登录超时)。写入的是 user 来源的 session/title 事件,因此会「钉住」标题——取代 harness 的自动标题(first-prompt provider),之后的用户消息也不会再自动改名。

工具 作用 底层路径
set_session_title(title, force?) 命名当前对话 ctx.sessionTitle.rename(session, title)
rename_conversation(session_id, title, force?) 重命名任意已有对话(含已关闭的历史对话) ctx.sessionController.rename(与 Web 侧栏改名同一路径)

包版本在资料中为 0.1.4,许可证为 MIT。GitHub 仓库:HH12-web/dsh-tool-set-session-title;社区目录页:skillhub 插件页。

标题规则与 force

默认标题须匹配格式校验:

^\d{4}\|(功能|设计|修复|优化|发布|探索|文档|研究)\|[^|]+$

即四位月日、竖线、八种类型之一、竖线、主题(主题中不能再含 |)。不符合时工具会报错并附上规范说明。

字节上限在写入前预检:上限从部署里挂载的标题服务读取(ctx.get("sessionTitle").config.maxTitleBytes)。超限会直接报错并给出实际字节数,避免被服务静默截断;若设置 force: true,表示接受服务的安全截断而仍尝试写入。

force: true 同时可绕过格式与长度校验,仅在用户明确要求非规范标题时使用。

子代理调用 set_session_title 时,若能取到存活 agent 注册表(ctx.get("agents"),惰性加载),会沿会话血缘上溯到仍然存活的父会话,改的是人在侧栏看到的那个对话。

安装与启用

desktop profile 下 dsh plugin --profile desktop ... 会被 CLI 显式拒绝(由 Electron 应用独占管理),因此资料中的安装走 pnpm + 本地 tarball,且安装形态必须是真实包目录(link: 软链在运行中进程里不会成为包解析拦截层,不可靠)。

1、在插件源码目录打包:

cd <repo>/dsh-tool-set-session-title
mkdir -p ~/.dsh/profiles/desktop/vendor
pnpm pack --pack-destination ~/.dsh/profiles/desktop/vendor

产出形如 dsh-tool-set-session-title-<version>.tgz 的文件。

2、在 profile 目录安装(相对路径,保持 profile 自包含):

cd ~/.dsh/profiles/desktop
pnpm add ./vendor/dsh-tool-set-session-title-<version>.tgz

3、首次安装还要把包名 dsh-tool-set-session-title 追加进该 profile 的 package.json 的 dsh.profile.bundles。

4、重启 Harness,新模块才会被加载;替换已安装包后的热更不会换掉进程里已缓存的模块,必须重启。

说明:Web 侧栏 插件 → 添加插件 也接受本地绝对路径或压缩包,但需注意 link: 形态的上述限制。自包含校验可在 profile 目录执行 pnpm install --frozen-lockfile,资料中验证结果为 Already up to date。

插件以当前 DSH 进程权限运行;安装前请自行查看仓库源码与 MIT 许可证。社区目录站点与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。

典型用法与验证

在会话中让模型调用上述两个工具之一,传入符合规范的 title(或在你明确要求时用 force: true)。标题应立刻变成新值,且此后不再被自动标题覆盖。对历史会话使用 rename_conversation 时需传入 session_id。

资料建议的验证方式包括:

  • 侧栏 插件 页能看到组合包 dsh-tool-set-session-title。
  • 复制 profile 到隔离的 DSH_HOME,用 --profile <副本> --no-open --port 0 起一次性实例,确认工具注册且行为正确(覆盖 schema 转换等仅真实运行才能覆盖的路径),再销毁。

开发者在包目录可跑单测(不依赖完整 harness 安装):

node --import ./test/setup-stub.mjs --test ./test/title-tools.test.mjs
# 或
pnpm test

适用场景与运行时边界

适合需要在对话流程末尾由模型自动落标题、或批量整理历史会话名称的 DSH 用户;也适合团队统一 MMDD|类型|主题 命名以便在侧栏检索。

使用时需注意资料记载的边界:

  • 热更不 import 新模块:profile 配置重载只重新应用 patch,新工具需重启后才可用。
  • rename_conversation 对正被另一个进程持有的活跃会话会被拒绝(already owned by an active write handle);此类对话应在 Web 侧栏改名,或由该对话所在进程内的 agent 调 set_session_title。
  • 子代理会话(parentSession 血缘、侧栏隐藏)会被服务层拒绝(owned by subagent routing),属设计内行为。
  • 跨进程只追加标题事件时,磁盘投影缓存(storages/session_projcache/sessions/<id>.json)不一定刷新;同进程改名会自动刷新。

实现上,插件通过 cordis.patch.yml 在 profile 层注入全局工具;inject 仅列 profile 根作用域存在的服务(本插件用 ["tools", "sessionTitle"]),agent 注册表在 execute 里惰性取用,避免 preset 作用域服务导致 apply 永不执行的问题。

卸载

cd ~/.dsh/profiles/desktop
pnpm remove dsh-tool-set-session-title

并从 package.json 的 dsh.profile.bundles 移除该包名,然后重启 Harness。

结尾

dsh-tool-set-session-title 把「当前会话」与「历史会话」的改名能力收敛到两个模型工具,并用格式与字节预检减少侧栏标题被静默截断或反复被自动标题改掉的情况。更多细节与 issue 见 GitHub 仓库,目录索引见 skillhub 插件页。

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

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

小夜