给模型一个 rename_session 工具,让 agent 在对话中直接重命名会话。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:9Ashwin/dsh-session-rename
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
A DSH (DeepSeek Harness) plugin that gives the model a rename_session tool — so the agent can retitle a session from inside the conversation.
一个 DSH 插件:给模型一个 rename_session 工具,让 agent 在对话中直接重命名当前会话。
Why
DSH 的会话标题有三个来源——首条用户消息的确定性回退、可选的 LLM 生成 provider、显式重命名——但只有 Host 侧 API(ctx.sessionTitle.rename(session, title))和线级的 session.rename。内置的 Web 客户端里没有改名入口,也没有任何模型可见的工具。这个插件补上模型这一侧。
它不做自动总结。要不要改名、改成什么,由模型按你的规则决定——典型用法是在 AGENTS.md 里约定:开始一个新需求时,把需求 id 写进会话标题。
The tool
rename_session
| 参数 | 必填 | 说明 |
|---|---|---|
title |
是 | 新标题。归一化后必须含可见字符。 |
session_id |
否 | 目标会话 id。省略即重命名当前会话——日常用法。 |
返回 { session_id, title, seq }(格式化 JSON 文本)。
标题语义由 @deepseek-ai/dsh-session-title 决定:写入一条 source.kind === 'user' 的 session/title 事件,钉住标题——进行中的自动生成被取代,后续用户消息也不再触发自动修订。标题只进会话日志,绝不进入模型输入。
Install
dsh plugin --profile web add -w github:9Ashwin/dsh-session-rename
-w是给 pnpm 的:新版 profile 目录里有pnpm-workspace.yaml,不加它会以ERR_PNPM_ADDING_TO_ROOT失败。若你的 profile 没有这个文件,去掉-w即可。
然后重启 dsh web。dsh plugin add 会读取本包的 dsh.bundle 清单并自动把
dsh-session-rename 追加进 dsh.profile.bundles。
本地开发用 link:(绝对路径):
dsh plugin --profile web add -w link:/absolute/path/to/dsh-session-rename
卸载:
dsh plugin --profile web remove -w dsh-session-rename
Recipe: name the session after the work item
把这条加进你的 AGENTS.md,模型就会在有需求 id 时自己改名:
- 开始一个新需求(出现 PRD-NNN、Issue #NNN 等需求 id)时,调用 `rename_session`,
把会话标题改成 `<需求 id> <一句话描述>`,例如 `PRD-042 重构 router 层`。
title 由模型组织,插件不做任何拼装——所以规则想怎么写就怎么写(带不带 id、用哪种编号、要不要加阶段前缀都行)。
Design notes
零运行时依赖。 本插件不 import 任何 @deepseek-ai/* 包:工具对象按
ctx.tools.register() 的契约手写(defineTool 只是 spec→JSON Schema 的转换器,
SessionId 只是恒等 brand)。这样做的原因很实际:
- CLI 自带的
dsh-tools与 profile 侧解析到的版本经常不一致; - 以
link:/github:安装的插件若import官方包,Node 会从插件的 realpath 逐级向上找node_modules,而 profile 的node_modules/@deepseek-ai/未必有对应版本。
结果是同一个 peer 被解析成两个版本、链接期抛
does not provide an export named ...。不 import 就同时避开这两个问题。
代价是自己做参数校验(defineTool 原本会包一层 JSON Schema 校验),test.mjs 覆盖了这些分支。
Limitations
- 只能改已加载的会话。 传
session_id时走ctx.agents.get(),冷会话会报not loaded — open or switch to it first。省略session_id走当前会话,无此限制。 - 没有专属卡片。 纯 host 插件,工具调用在对话流里显示为通用卡片;要专属视图需要
额外注册客户端的
tool.call.toolview。 - 不自动触发。 改成什么、什么时候改,由模型(即你的规则)决定。
Development
node test.mjs
行为断言零依赖,永远运行;另外两项断言会用宿主真实的 schema 校验器验证工具定义,
解析不到 @deepseek-ai/dsh-tools 时自动跳过(可用 DSH_TOOLS=/abs/path 指定)。
License
MIT
链接
同类插件
Minglink/dsh-infinite-gen-4★ 3781
DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投影在输入框上方显示实时破甲状态徽标。
ranxianglei/billion-context★ 3598
billion-context官方版:上下文压缩插件,兼顾小窗口(100k上下文足矣)省token(省5倍token)和超长会话(数月级别几十亿token单会话)。
liangmianya/dsh-synapse★ 641
DeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
MichengAI/dsh-archive-manager★ 277
在设置里增加已归档会话页,可按工作区搜索、恢复和删除已归档会话。
Nwflower/dsh-chat-import★ 275
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。
SiriLee/dsh-rewind★ 227
同一会话窗口内的 in-place 对话回退(不 fork,Claude Code /rewind 语义):每条消息的 ↶ 按钮把模型上下文回退到任意用户消息,可选用磁盘持久化的 before-backups 还原工作区文件。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。