dsh-ai-session-rename
给 DeepSeek Harness 用的插件:右键会话 → 根据对话内容重新命名。
读取这个会话里你自己发过的消息,用这个会话当前使用的模型生成一个简短标题,写回成会话标题。名字比内置的自动标题更长、更具体(中文约 8–14 字)。
装
三种方式,任选其一。
从 npm(推荐)——已发布到 npm:
plugin_manager → install_bundle → dsh-ai-session-rename
从 GitHub 预构建包——不用克隆、不用装依赖:
plugin_manager → install_bundle → https://github.com/buaafish/dsh-ai-session-rename/releases/latest/download/dsh-ai-session-rename.tgz
从本地目录——改代码调试时用:
plugin_manager → install_bundle → <本仓库绝对路径>
装完刷新页面菜单项就出现;index.js 那部分要重启一次应用才加载。
卸载走 plugin_manager → remove_bundle,别手动删目录。
用
两种方式,同一份实现:
侧边栏右键:在会话列表里右键某个会话 → 「根据对话重新命名」(排在「重命名」下面)。 顶部先出现「正在根据对话生成标题…」,成功显示「已重命名为「…」」,失败给出具体原因。
对话里直接说:让 agent 调工具
session_rename_ai。它只能改当前会话,传别的会话 id 会被拒绝,避免 agent 悄悄改掉你没在看的会话。
标题长什么样
- 中文 / 日文 / 韩文约 8–14 字,其它语言约 3–6 个词。
- 一行纯文本:不带引号、编号、Markdown、emoji、句尾标点。
- 描述具体话题或任务,不写「聊天」「对话」这类空词。
- 只用真人输入(
source.kind === 'user'),注入的上下文和目标续轮不算;最多取最近 40 条,每条截断到 2000 字符。
用哪个模型
优先用这个会话自己最后一次请求的路由,也就是你在会话里选了什么模型就用什么。会话还没发过请求时退回全局默认模型。
生成是一次独立调用(maxTokens: 96、温度 0.2、45 秒超时),不会混进会话历史。
一个取舍:标题会被锁定
DSH 里显式改标题的事件源是 user,而 user 源会让自动标题生成不再调度这个会话。本插件复用了内置的重命名通路,因此:
- 好处:侧边栏和标签页会像手动重命名一样立刻更新,行为和官方「重命名」一致。
- 代价:这个会话之后不会再有自动标题,直到你再次显式改标题。
「不锁定」只能自己 append 一条 source: { kind: 'provider', … } 的标题事件绕过 rename(),但那样标题会在下次 refresh() 时被 provider 覆盖,反而更不可控,所以没这么做。
可调参数
都在 index.js 顶部:
| 常量 | 默认 | 作用 |
|---|---|---|
MAX_MESSAGES |
40 | 最多取几条用户消息 |
MAX_MESSAGE_CHARS |
2000 | 单条消息截断长度 |
MAX_INPUT_BYTES |
24000 | 拼好的 prompt 上限 |
MAX_OUTPUT_TOKENS |
96 | 生成上限 |
TIMEOUT_MS |
45000 | 单次调用超时 |
MAX_TITLE_CHARS |
24 | 标题硬截断 |
SYSTEM_PROMPT |
— | 改风格/长度要求改这里 |
结构
index.js Host 端:POST /api/ai-session-rename 生成标题 + session_rename_ai 工具
client.js Client 端:右键菜单项、自有图标、生成中/失败提示
cordis.patch.yml 把插件插进 Loader
locale/*.json 插件列表里的名称与描述(en / zh)
docs/DETAIL.md 插件详情页文档
icon.svg 插件图标
两个入口共用 generateTitle(),标题逻辑不重复实现。写入交给内置 remote.session.rename(会恢复冷会话、校验标题、更新投影),自己再写一遍只会多一条不一致的路径。
已知限制
- 生成失败时不会自动重试。
- 会话里一条用户消息都没有时无法命名。
- 会话没记录模型路由、也没配置默认模型时会明确报错。
License
MIT
No comments yet. Be the first to write one.