Khorsheed/dsh-plugins--packages-session-title-edit ↗★ 0

@khorsheed/dsh-client-session-title-edit

Session title editing in the web GUI chat header: an edit control beside the title that renames the current session through the official session.rename RPC (the user-sourced title pins against automatic regeneration) 适合需要直接在聊天头部重命名会话以方便整理的用户。

패키지
@khorsheed/dsh-client-session-title-edit
호환성
미검증
Harness peer 범위
^0.1.0-rc.6
Cordis peer 범위
^4.0.1
버전
0.2.4
라이선스
MIT
최근 업데이트
2026. 9. 28.

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Khorsheed/dsh-plugins#548eeabe331c121621b2d08deab4278ad81d6312&path:packages/session-title-edit

@khorsheed/dsh-client-session-title-edit

English | 中文

会话标题想改就改:点标题旁的小铅笔,回车就存。

自动起的会话标题常常词不达意,过两天想找回某个会话全靠运气。这个插件在聊天区顶部的标题旁放了一支铅笔:点一下,标题就地变成输入框,预填好当前名字并全选;Enter 保存、Escape 取消,名字起得太长会先被警告拦下,绝不悄悄截断。改名走的是官方 session.rename 接口,标题永远不会进入模型上下文,模型对此一无所知。

聊天区头部标题旁的铅笔按钮,悬停显示「重命名会话」

特性

  • 头部铅笔——会话标题右侧的条目切换出内联编辑器,预填当前标题并全选。
  • 可预期的按键——Enter 提交、Escape 取消、空草稿禁用保存、宿主拒绝时内联提示。
  • 宽度自适应——输入框随草稿变宽,上限为官方 220px。
  • 预算把关——超过宿主 80 UTF-8 字节标题预算的草稿被警告拦下,绝不静默截断。
  • 零足迹——走官方 session.rename RPC;标题永远不会进入模型上下文(无 token 或 KV 缓存影响)。

点击铅笔后标题就地变成输入框,直接修改后回车保存

安装

dsh plugin --profile web add @khorsheed/dsh-client-session-title-edit

安装后重启 web 实例;卸载即移除本插件添加的全部界面。

dsh plugin --profile web remove @khorsheed/dsh-client-session-title-edit

Compatibility

  • npm 发布线(宿主 0.1.7-rc.2,下一版 0.2.4):✅ 完整——改名走官方 session.rename;就地覆盖在 0.1.5 与 0.1.7 两条宿主线上都可用(同一套文本定位同时覆盖 0.1.5/0.1.6 的 disabled crumb 按钮与 0.1.7-alpha.1 起的纯文本 crumb),双线单测 + 两条宿主线实机验收通过;minHost 地板保持 0.1.2-rc.1 不动。
  • 已发布版本 0.2.3 及更早:在 0.1.7-alpha.1 起的宿主上,标题 crumb 不再是 disabled 按钮,就地覆盖会退回 actions 行内编辑器(改名本身仍可用,只是不再盖在标题上);升到 0.2.4 即恢复。
  • 源码线(deepseek-harness master,0.1.7-rc.2):✅(verifiedHost: 0.1.7-rc.2)

版本线对照:0.2.0 起支持宿主 0.1.2-rc.1 及以后;宿主 0.1.0-rc.6 ~ 0.1.1-rc.2 的用户请停留在 0.1.x 发布线(末版 0.1.0)。

已知限制

  • 原位编辑是 DOM 层过渡方案——官方 header 仍无标题槽位,编辑器通过 data-ste-inplace 隐藏官方标题节点、并在其测量矩形上覆盖输入框。定位按「crumbs nav 最后一段里文本等于当前标题的节点」完成,因此两条宿主线共用一套代码:0.1.5/0.1.6 的当前 crumb 是 disabled 按钮,0.1.7-alpha.1 起(上游 92101e1a5b,为让标题进入窗口拖拽条)改成了纯文本 span.crumbCurrent。标题尚未投影、或官方 DOM 再次变化时,退回 actions 行内编辑器(改名不受影响)。
  • 无乐观更新——header 标题只在宿主投影结算重命名后刷新。
  • 字节预算归宿主所有,由客户端把关——客户端镜像宿主的 80 字节上限;宿主提高上限后,需常量同步跟进编辑器才会放宽。

实现原理

内部结构(点击展开)

src/index.ts            导出(apply/inject + TitleEditActionProps)
src/client/index.ts     插件主体;贡献 header-actions 条目
src/client/TitleEditAction.tsx  铅笔条目、内联编辑器、覆盖与宽度适配
src/client/title-length.ts      MAX_TITLE_BYTES 镜像 + 宿主归一化
src/client/locales.ts   本地化警告与错误
src/client/slots.ts     槽位声明

纯浏览器侧插件:重命名走官方 session.rename RPC(session.rename → sessions.rename → ctx.sessionTitle.rename),因此无需宿主半边、无需新增 RPC、无需改动任何官方包。

编辑是原位的:点击铅笔后,通过 data-ste-inplace 隐藏官方标题节点,并在其测量矩形上覆盖本插件的输入框。标题节点由「当前标题文本」定位(crumbs nav 最后一段里文本等于 displayTitle 的叶子节点),因此 0.1.5/0.1.6 的 disabled crumb 按钮与 0.1.7-alpha.1 起的 span.crumbCurrent 共用同一条路径;祖先 crumb 与官方 lineage 槽的内容都不会被误隐藏。输入框宽度借助隐藏的、与输入框同字体的镜像 span 按草稿适配,下限为标题节点原宽度、上限为官方 crumb 的 220px 上限。

对模型没有任何变化:标题是仅投影的会话属性,永不进入模型上下文;重命名只是追加一条带用户来源的 session/title 事件——无 token 或 KV 缓存影响,投影落地后 header 标题随之刷新。另外,@deepseek-ai/dsh-session-title 限制接受的标题长度(maxTitleBytes,生产默认 80 UTF-8 字节);编辑器镜像该上限以及宿主截断前的归一化(剥离转义/控制/方向序列、折叠空白、去首尾空白),把关恰好在宿主会截断时触发。

开发

隶属 dsh-plugins monorepo(packages/session-title-edit)。问题与贡献请移步该仓库。

变更记录

见 CHANGELOG.md。