dsh-session-title-refresh
DeepSeek Harness 独立 Web 插件。仅在侧边栏会话原有的「⋯」菜单中增加 重新总结会话标题。不注册顶部按钮、输入框下方按钮或设置项,不添加全局样式,不修改 DSH 源码。
使用
打开会话菜单,点击「重新总结会话标题」。菜单项显示进行中、成功或失败状态;请求期间重复点击不会重复调用。关闭再打开菜单仍可看到该会话的请求状态,失败时显示原因并允许重试。
插件根据该会话的人类文字消息生成标题,优先保留最近消息,空间允许时保留第一条消息。JSON 输入最多 24 KiB;单条过长的最新消息保留尾部,不切断 Unicode 码点。附件、工具输出、插件注入和系统提示不进入这次标题请求。选择会话待使用的模型;没有待使用选择时采用最后一次请求模型,再没有则采用默认模型。
成功后调用 DSH 的 sessionTitle.rename() 保存为显式指定的标题,因此会固定该标题,不会被正在运行的自动命名覆盖。再次点击此菜单可重新生成。模型请求和消息序号通过现有 session/title-llm-request 事件记录,标题通过现有 session/title 事件保存,侧边栏通过 DSH 原有数据流更新。
修正的旧行为
旧版调用 sessionTitle.refresh(),但默认 session-title-first-prompt-llm 即使手动刷新也只选第一条人类消息,可能成功返回几乎相同的标题。旧版也只在 live session 表查找会话,未加载的历史会话会失败。
新版通过公开的 Typert agent lookup 加载目标会话,并使用目标 Agent 的服务作用域;通过共享 generateSessionTitleWithLlm 辅助方法执行独立的标题请求,不替换全局自动命名 provider。正在生成时若用户另外改名或发起更新的总结请求,旧结果不会覆盖新标题。
菜单实现
DSH 当前没有会话行菜单扩展槽。插件仅观察新增的 [role="menu"] 节点,沿该菜单的 React owner 链寻找包含 rename/fork/archive 的菜单和准确的会话行,取其 node.id。不根据几何位置、当前选中会话或显示标题猜测目标;同名会话不会混淆。无法确认所属会话时不添加入口。
新增菜单项沿用原菜单项的 CSS 类。没有 React 组件、输入框、localStorage 偏好项、全局 CSS 或合成 Escape 事件。卸载时移除观察器和菜单项,并中止未完成的请求。
安装
需要 Node.js 22.19.0 或更高版本、pnpm,以及兼容的 DeepSeek Harness Web 环境。插件本身没有任何第三方或 DSH 内部依赖,只通过运行时的 Cordis 服务契约工作,因此不引入 DSH 本体代码,也不需要跟随 DSH 源码目录。DSH 的插件接口仍可能随版本变化,使用其他版本时请先验证兼容性。
在你的 DSH Web profile 目录中安装指定 tag(默认目录为 ~/.dsh/profiles/web,Windows 通常为 %USERPROFILE%\.dsh\profiles\web):
pnpm add 'github:leolee9086/dsh-session-title-refresh#v0.2.0'
也可以从 GitHub Releases 下载构建好的 .tgz 包,在同一 profile 目录执行:
pnpm add ./dsh-session-title-refresh-0.2.0.tgz
然后在该 profile 的 cordis.patch.yml 中加入下列配置;已有 insert 列表时,只需向列表追加这一个插件项,不要重复注册:
- insert:
- id: session-title-refresh
name: dsh-session-title-refresh
包内已带 cordis.patch.yml,因此也可以直接作为 bundle 挂载:
- name: dsh-session-title-refresh
重载插件或重启 DSH 后刷新浏览器页面。仓库 tag 和 Release 包都包含 lib/ 构建产物,安装使用不需要克隆或修改 DSH 源码。
本地开发
git clone https://github.com/leolee9086/dsh-session-title-refresh.git
cd dsh-session-title-refresh
pnpm install --frozen-lockfile
pnpm test
pnpm build
唯一的开发依赖是用于测试的 jsdom。运行时零依赖:标题生成通过运行环境提供的 ctx.get('llm')、会话与标题服务完成,不 import 任何 DSH 包。pnpm build 校验后将 src/ 下的文件复制到 lib/;提交源码变更时应同时提交最新构建产物。
pnpm pack
打包前会自动执行测试和构建。包内只包含运行产物、cordis.patch.yml、包元数据、中文 README 和 MIT 许可证。
HTTP 接口
POST /api/session-title/resummarize,JSON 请求 { "sessionId": "session-…" }。使用 DSH Connection 的 Host/Origin 校验和浏览器 Cookie 身份验证。
- 成功:
{ok:true,title,eventSeq,messageSeqs,source:{kind:'user',provider,model}}。 - 错误:
{ok:false,reason,error?},包含不存在、没有文字、无可用模型、超时、被更新请求取代及模型上游错误。 - 标题已提交但持久化检查失败时,返回
ok:true和warning,不会误报为保留了旧标题。
请求体上限 8 KiB;模型输出预算 2048 tokens;模型超时 90 秒;整个请求上限 120 秒。每次手动总结至多新增一次辅助模型请求,不向主对话插入消息。
验证及边界
node --test tests/*.test.mjs 覆盖独立菜单注入、同名会话定位、重复点击、状态及卸载、历史会话解析、模型选择、输入预算、鉴权、失败保留标题、并发覆盖保护和真实共享生成方法的流组装及日志事件。
客户端依赖 DSH 菜单的 React owner 和 ARIA 结构;DSH 升级改变该结构时可能需要更新本插件。文案目前为简体中文。浏览器关闭请求或插件卸载会取消未完成的生成;已接受的标题不会因此回滚。
License
赞赏
如果这个项目帮到了你,可以请我喝杯咖啡:

也欢迎通过 爱发电 支持。
No comments yet. Be the first to write one.