前言¶
DeepSeek Harness (DSH) 维护会话标题的方式是记录仅日志的 session/title 事件(零令牌),由 @deepseek-ai/dsh-session-title 服务提供。该服务由确定性提示词回退或可选的 LLM 提供商写入。
但在 0.2.0-rc.2 版本中,自动生成标题的能力存在缺陷(例如将指令本身的词汇“会话标题”回写为标题),且 SessionTitleService.rename 的能力并未暴露给模型侧(无工具、无 CLI 子命令、API 受限)。该插件补全了这一缺口,将现有的重命名服务作为工具暴露给模型。
插件介绍¶
dsh-set-session-title 是一个面向模型的 set_session_title 工具。它允许智能代理重命名其自身的会话,无需人工干预。
- 作者: CancerTiN
- 类别: 模型推理
- 许可证: MIT
核心功能¶
- 重命名能力: 允许代理通过工具调用重命名当前会话。
- 写入事件: 向日志写入
session/title事件,标记来源为用户。 - 优先级覆盖: 用户来源的标题具有权威性,会覆盖正在进行的自动生成,后续提示词也不会触发自动生成(除非显式刷新)。
- 作用域限制: 仅限调用代理自身的会话 (
exec.agent.session),不支持跨会话重命名。 - 数据规范化: 输入会被修剪、去除终端控制序列,并受部署配置的
maxTitleBytes限制(dsh-base默认为 80)。若规范化后为空则拒绝写入。 - 零成本: 不消耗任何对话令牌,不改变消息内容。
安装与启用¶
使用官方插件管理器安装。推荐使用带版本标签的 Git 规范,以确保可重现性。
dsh plugin --profile <name> add github:CancerTiN/dsh-set-session-title#v0.1.1
注:若不指定 #v0.1.1,将跟随默认分支,而非锁定发布版本。
安装后,插件会通过 manifest 声明的 dsh.bundle.patch 补丁将工具注册到配置树中。部分构建版本可能需要重启配置文件才能生效。
使用方法¶
调用方式¶
在对话中询问代理,或在技能中直接调用。工具接受一个 JSON 参数:
{"title": "安装终端插件并核验连通性"}
返回结果¶
{"title": "安装终端插件并核验连通性", "eventSeq": 1307}
验证标题¶
通过投影缓存或持久化日志读取回标题:
通过投影缓存(GUI 读取源):
python3 -c "import json;print(json.load(open('$DSH_HOME/storages/session_projcache/sessions/$DSH_SESSION_ID.json'))['record']['rows']['title'])"
通过持久化日志:
zstd -dc "$DSH_HOME"/sessions/*/"$DSH_SESSION_ID"/session.v4.jsonl.zstd | grep session/title | tail -1
注意事项与限制¶
- 权限限制: 仅限调用会话,无跨会话重命名功能;拒绝非代理调用者(纯主机侧执行会被拒绝)。
- 前置依赖: 部署必须包含
session-title服务(@deepseek-ai/dsh-session-title)。缺少该服务会导致插件加载时报错。 - 依赖管理: 本插件故意不声明任何依赖,以避免在 pnpm 环境下因模块身份分裂导致其他工具调用失败。
结语¶
该插件填补了 DSH 在会话标题修正上的空白,提供了一种零成本、零令牌消耗的方式来让智能代理管理自身上下文。对于需要精细控制会话命名或修复自动生成错误的场景,这是一个必要的补充。