dsh-session-titler:按需为整段 DSH 会话生成标题,确认后才写入

前言

在 DeepSeek Harness(DSH)里,左侧会话列表靠标题区分不同任务。DSH 自带或第三方插件可以自动给会话起名,但常见策略是「首条 prompt」或「每条 prompt」触发,很难做到「聊完一大段、觉得标题不合适时再手动要一条摘要式标题」。若自己改标题,又得从长对话里提炼要点。

下面介绍的 dsh-session-titler(维护者 ZilongYang)走另一条路:在 Web UI 里点一次按钮,用模型把整段会话压成一条标题提案;只有你点「确认修改」才会写入,取消、Esc 或点遮罩都不会动会话数据。插件分类为「模型推理」,当前 npm 包版本 0.2.1(MIT)。

这是什么

dsh-session-titler 是 DSH 的 Host + Web Client 双半插件:Host 半注册只读 HTTP 路由并调用 LLM;Client 半在现有页面上挂顶栏按钮和会话行菜单,弹出可编辑的确认框。它不注册 ctx.sessionTitle 的 provider(该槽位是独占的,会顶掉 DSH 自带的自动标题 provider),因此不会改写你已有的自动起名行为,只在你显式点击时生成。

社区目录页:skillhub.cn/plugins/ZilongYang/dsh-session-titler。源码与说明:github.com/ZilongYang/dsh-session-titler。DSH 生态强调「一切皆插件」;SkillHub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系。

核心功能

两处入口,不新增页面

入口 位置
顶栏 ✦ 生成标题 会话标题栏,在「创造模式」芯片右侧、「费用 ¥0」芯片之前
会话行 生成标题 左侧会话行「…」菜单,在「重命名」下面、「分叉会话」上面

空白会话没有可总结内容时,按钮会置灰。

生成 → 编辑 → 确认才写入

  1. 点击入口后,Client 向 Host 发起 POST /session-titler/propose(请求体 { "sessionId": "session-…" },≤ 8 KiB)。
  2. Host 读取当前会话的「模型表面」(已考虑压缩/替换),组装 transcript(默认 32 KiB 预算,条目级截断),按会话路由候选调用 LLM(purpose: 'session-title')。
  3. 弹窗展示标题提案,可改字、可「重新生成」;点 确认修改 时走与官方「重命名」相同的 session.rename(title) 路径。
  4. 生成阶段不写会话日志;未确认前数据库里标题不变。

模型路由与回退

路由候选从新到旧:活会话 requestHeader().config → 日志里每条 request/header → agentDefaultModel。每个候选需在 llm.listProviders() 中有已注册 adapter。若会话记录的路由在当前 profile 无 adapter,会回退到更早可用路由或默认模型;响应里 fallback: true 时,弹窗会标注「使用模型:…(…已回退)」。

可调策略(改代码后需重启 Host)

策略集中在 Host 侧 title.js 顶部 POLICY,插件不带 Config 段:

键 默认 含义
maxInputBytes 32768 送进模型的 transcript 字节上限
maxOutputTokens 256 标题输出 token 上限
timeoutMs 30000 单次调用墙钟超时
maxTitleBytes 120 接受标题的 UTF-8 字节上限
userCharsPerMessage / assistantCharsPerMessage 2000 / 3000 单条消息裁剪上限

超长会话先按单条裁剪,再从中间整条丢弃(保留开头与结尾),仍超限则截尾部,并在返回值中标记 truncated: true。

安装与启用

DSH 要求版本 >=0.2.0-rc.1 且 <0.3.0-0(见 package.json 的 engines.dsh);落在范围外时插件市场装前检查会拒绝安装。

桌面版(DeepSeek Harness.app)

desktop profile 由 Electron 应用独占,命令行 dsh plugin --profile desktop … 会报错。请在应用内左侧「插件」页安装;收录后也可搜 titler 安装。

命令行管理的 profile

web、main 或自建 profile 可用:

# 从 npm 安装(推荐)
dsh plugin --profile <你的profile> add dsh-session-titler

# 从 GitHub 源码安装(跟踪 main 分支)
dsh plugin --profile <你的profile> add github:ZilongYang/dsh-session-titler#main

# 本地开发:link 挂载
dsh plugin --profile <你的profile> add link:/绝对路径/dsh-session-titler

装完若看不到按钮:Host 半在进程内,需重启一次 dsh 或桌面应用后再刷新页面(Client 半刷新即可)。

卸载(CLI profile):

dsh plugin --profile <你的profile> remove dsh-session-titler

桌面版在应用内「插件」页停用或卸载。

典型用法

  1. 打开任意已有内容的会话。
  2. 点标题栏 ✦ 生成标题,或会话行 … → 生成标题。
  3. 等待约 2–4 秒,在弹窗中查看或编辑提案。
  4. 点 确认修改;左侧列表标题立即更新,刷新页面仍保持。

点「取消」、Esc 或点遮罩均不会写入任何数据。

适用场景与注意

适合谁

  • 长对话后想用一句话概括整段任务,又不想覆盖现有自动标题插件的行为。
  • 需要在改标题前先看模型提案、手动微调再落库的场景。

兼容与权限

  • README 声明在 0.2.0-rc.2、0.2.1-alpha.2、0.2.1-rc.2 等版本上已验证;<0.2.0-rc.1 与 >=0.3.0 不在支持范围。
  • 插件以当前 DSH Host 进程权限运行,会读取会话内容并调用已配置的 LLM;安装前应自行查看源码与 MIT 许可证,确认 provider 与数据边界符合你的环境。
  • Host 路由带 loopback / 同源请求围栏(防 DNS rebinding、CSRF),不是替代身份鉴权。

常见错误码(节选)

code 含义
no-content 表面无 user/assistant 文本
no-adapter 会话路由与默认模型均无已注册 adapter
timeout 30 s 内未返回
forbidden 围栏未通过

结尾

dsh-session-titler 把「整段会话 → 一条标题」做成显式、可编辑、确认后写入的操作,且不占用 DSH 独占的自动标题 provider 槽位。若你在 CLI 或桌面版 DSH 上管理 profile,按上文命令安装并在会话里点 生成标题 即可试用。

  • 目录页:https://www.skillhub.cn/plugins/ZilongYang/dsh-session-titler
  • GitHub:https://github.com/ZilongYang/dsh-session-titler
羽毛球分组比赛记分
小程序二维码

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

小夜