fengs2021
dsh-session-title-cold
DSH 插件:冷会话标题回填——把持久化日志的 session/title 事件折叠进 projection 缓存,会话列表显示真实标题而不是工作区目录名
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 16, 2026
- Updated
- Aug 16, 2026
Introduction
冷会话标题回填(dsh-session-title-cold)
session.list 的行若来自持久化冷会话(从未打开过、尤其 subagent 子会话),
projection 缓存里没有它们的行,列表拿不到标题,侧边栏只能 fallback 显示
工作区目录名(如 dsh),一屏全是 "dsh" 分不清谁是谁。
本插件启动后后台扫描全部持久化会话,把每个已注册 projection unit
(title / sessionStats / sessionListMetadata 等)折叠到最新事件并写回
projection 缓存;之后 session.list 每行都带 projections.values.title,
前端列表直接显示真实标题(fallback 自首条消息,或 LLM/用户重命名)。
特性
- 零侵入:不改 dsh 源码,纯服务端插件,利用官方 projection 注册/缓存扩展点;
- 增量:已有缓存行的会话只读事件尾部(restoreFloor → readFrom), 每 10 分钟刷新一次,rename 等新标题变化自动吸收;
- fail-soft:单个会话失败只记 debug 日志,不阻断批次;live 会话自动跳过 (它们的缓存由运行时落盘路径维护,避免覆盖新状态)。
安装
- 插件目录:
~/.dsh/plugins/dsh-session-title-cold/ - profile 注册(cordis.patch.yml):
- insert:
- id: session-title-cold
name: dsh-session-title-cold
重启 dsh-web 后,启动 5 秒后台回填(日志 [title-cold] 回填完成:N 个会话),
刷新网页侧边栏即可看到全部真实标题。
配置(可选)
- id: session-title-cold
name: dsh-session-title-cold
config:
backfillDelayMs: 5000 # 启动后多久开始回填
refreshIntervalMs: 600000 # 增量刷新周期
concurrency: 3 # 并发读盘数
工作原理
sessionProjections.restoreFloor(checkpoint)得出增量读起点;sessionPersistence.readFrom(id, floor)读尾部事件(带 seq);sessionProjections.restore(checkpoint, events, floor)折叠出全部 unit 快照 (含title,来自session/title事件,如 fallback/用户重命名);- 只把
title行合并进缓存并sessionProjectionCache.putSoft写回 (cold 会话其余 unit 的 state 可能含非纯 JSON 值,跳过不写,避免not losslessly JSON-serializable拒绝整行); - 前端下一次
session.list即带projections.values.title,displayTitleOf不再 fallback 到目录名。