前言¶
在 DeepSeek Harness(DSH)里,左侧工作区会堆很多会话。默认自动标题往往只反映第一句,或者和后面几轮讨论对不上;手动改标题可以,但长对话一多就懒得逐条改。社区里也有依赖全局标题服务、或按固定规则命名的做法;本插件走的是另一条路:在你已经聊过的会话上,从本机持久化日志里取最近的用户输入,用该会话最后一次实际用过的模型现场生成一个新标题,确认后再写回,不碰全局 sessionTitle 配置。
下面介绍维护者 wyewyewye 发布的 DSH 插件 dsh-session-title-regen(GitHub 仓库 wyewyewye/dsh-session-title-regen,社区目录分类为「模型推理」)。插件以 MIT 许可发布,当前 package 版本为 0.1.1,声明需要 DSH >=0.1.7-rc.1,并在 compatibility 中标注与 0.2.1-rc.3 兼容。
这是什么¶
一句话:dsh-session-title-regen 在每条会话行右侧的「…」扩展菜单里增加「AI 重新生成标题」,读取该会话事件日志里最近 10 轮用户 prompt,沿日志里最后一条 request/header 折叠出的 provider/model 调用 LLM,生成标题后经可编辑预览对话框确认,再通过内置 rename 路径写回侧边栏。
数据不联网、不读全局标题缓存;写回只是一条标准 session/title 事件,与手动重命名格式相同。无设置面板、无环境变量、不新增持久化配置文件。
核心功能¶
入口与交互¶
client 半(lib/client.js)向 sidebar.workspaces.session.menu.item 注入 order 500 的菜单项,位于「复制会话 ID」之后,与置顶、重命名、分叉、归档等同列。点击后弹出预览对话框(显示所用模型),可改字再确认;侧边栏标题即时更新,其它设备按普通标题事件同步。
数据来源与模型选择¶
node 半注册 loopback 路由 POST /api/dsh-session-title-regen/generate,body 为 {sessionId, currentTitle?}。经 ctx.sessionQuery.readSession 读冷会话日志:
- 采集最近 10 轮用户 prompt(
user/message且source.kind === "user",跳过工具结果与空白消息); - 输入总上限 16 KB,超限则丢弃最旧的 prompt;
- 从最后一条
request/header得到该会话最近使用的模型路由,经ctx.llm.prepareCall生成标题。
调用参数:maxTokens=512、30 秒超时;思考档位优先 none,否则取最低档(若 profile 支持)。旧标题仅作上下文,语义上始终产出新标题;归一化逻辑对齐官方 dsh-session-title-all-prompts-llm 思路。
与内置标题服务的关系¶
标题生成不经过全局 sessionTitle provider,不替换内置 provider,与官方自动标题、其它标题类插件互不影响。
安装与启用¶
安装来源会影响 client 半能否进入浏览器 bundle:DSH 的 client-modules 扫描器会静默跳过 junction/symlink 形态的 bundle 目录;github:、npm、tarball 会装成真实目录。pnpm 的 link:<目录> / file:<目录> 本地依赖只会建 junction,常见现象是装完菜单不出现、也不报错。
Web(dsh web)¶
在 PowerShell 中执行:
dsh plugin --profile web add github:wyewyewye/dsh-session-title-regen
# 重启 dsh web,浏览器 F5
dsh plugin 会在成功后把包名追加进 dsh.profile.bundles,无需手改。装完后需重启宿主(client bundle 仅在启动时进入 bundle 图,仅刷新页面不够)。
官方桌面客户端(Electron)¶
桌面端使用 desktop profile,命令行 dsh plugin 按设计拒绝 --profile desktop。应在桌面端会话里让宿主内置的 plugin_manager 安装 github:wyewyewye/dsh-session-title-regen,装完后完全退出客户端(含托盘)再打开。
本地开发(tarball)¶
源码目录 pnpm pack 后,在 profile 目录用 file:./vendor/dsh-session-title-regen-<版本>.tgz 安装,并把 "dsh-session-title-regen" 手动追加进 dsh.profile.bundles,再重启 DSH。不要用 link: 或直接 file:<目录>。
安装前建议自行查看仓库源码与 MIT 许可证;插件在当前 DSH 进程权限下读会话日志并调用 LLM,与你在该 profile 里配置的模型提供商一致。
典型用法¶
- 安装并重启 DSH(Web 或桌面端按上文方式)。
- 选一个已经聊过几轮、且日志里存在模型请求记录的会话(空会话没有
request/header,会报no-model-route)。 - 会话行右侧「…」→「AI 重新生成标题」→ 在预览里核对模型与标题文案 → 确认写回。
验证 bundle 是否登记(Web profile):
dsh --profile web --dump-config | Select-String title-regen
路由是否注册(裸 curl 可能被浏览器信任栅栏返回 401/403,属预期):
curl -X POST http://127.0.0.1:3080/api/dsh-session-title-regen/generate
更新 Web 端可重跑同一安装命令取默认分支最新;固定版本可用 github:wyewyewye/dsh-session-title-regen#v0.1.0(tag 与 GitHub Release 同步)。更新后同样需重启宿主。
卸载 Web:
dsh plugin --profile web remove dsh-session-title-regen
已写入的标题仍是普通会话标题事件,卸载后照常显示,无插件专属残留文件。
适用场景与注意¶
适合:侧边栏会话多、希望按最近讨论内容批量整理标题,且希望标题模型与该会话里实际用过的模型一致,而不想改全局自动标题策略的 DSH 用户。
注意:
- 「…」里没有菜单项:依次检查
dsh.profile.bundles、是否重启宿主、node_modules\dsh-session-title-regen是否为真实目录而非 junction。 session-not-found:会话已删或冷日志路径异常。- llama.cpp 等后端若报
empty-title:可能与默认开启思考、输出预算被思考 token 占满有关;README 建议在 profile 的reasoningEfforts里把 off 档映射为后端认的显式关闭值(如off: none);插件自 v0.1.1 起将输出预算提到 512 token。 - DSH 大版本若变更事件格式或 UI 槽位,插件可能需适配;以
package.json的compatibility为准。
DeepSeek Harness 生态强调「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-session-title-regen 把「重命名会话」做成一次可预览的、基于本机日志与 Session 级模型路由的 LLM 调用:零配置、不写独立配置表,卸载干净。需要安装说明与 FAQ 时,以仓库 README 为准。