dsh-session-title-regen:用会话自身模型,从最近对话重生成标题

前言

在 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 里配置的模型提供商一致。

典型用法

  1. 安装并重启 DSH(Web 或桌面端按上文方式)。
  2. 选一个已经聊过几轮、且日志里存在模型请求记录的会话(空会话没有 request/header,会报 no-model-route)。
  3. 会话行右侧「…」→「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 为准。

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

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

小夜