Repository navigation
大列表秒开 + 修复 IM 渠道会话无法删除(#3)
数百个会话(实测 520+ 个 / 400MB 日志)首次加载从 60s+ 降到亚秒级;IM 渠道(微信等 dsh-im-connect 接入)会话此前完全无法删除/还原,本版起支持。
大幅提速
- 列表改为流式:新增
GET /list-stream(NDJSON)先发总数、再逐会话吐行,加载进度实时可见(「已加载 N / M 个会话」);旧/list路由保留兼容 - 标题解析重构:冷会话优先走 DSH 投影缓存(与侧栏
session.list同源、零解压、identity 见证防串会话),仅未命中者合并成一次批量解压——修复 v0.4.x 逐会话调用的准平方级开销(520 会话 60s+ 跑不完) - 三阶段流水线(并行 stat 预检 → 批量标题解析 → 16 路行池)+ mtime 记录缓存:重复加载只剩 stat 成本
- 修复 mtime 缓存对未迁移旧格式(v0)会话永不命中的问题(
locate()返回当前代路径,v0 会话磁盘上只有旧代文件,stat 必 ENOENT)——8s 稳态的元凶 - 修复投影缓存对旧格式 header(缺
isSeeded)identity 全部落空的问题:重启后的首次加载不再退回全量解压
体验
- 首次加载过渡动画水平垂直居中,带实时计数;回收站页签同款居中动画(其接口毫秒级,无需计数)
- 切换页签不再重新加载(仅数据为空时拉取);带数据的重新加载静默刷新,旧列表保持可操作
修复:IM 渠道会话(#3)
DSH 核心约定 SessionId 是 unvalidated 字符串(落盘前必须转义),插件此前错误假设 id 是文件系统安全的:
- id 白名单放宽为纯防注入(
[A-Za-z0-9._:@~-]{8,200},仍拒绝/\空白),含:/@的 IM id(如im:weixin_…@im.wechat)不再被 400 误杀(删除/预览/解除归档全解锁) - 回收站条目名改用与核心
encodeSegment逐字对齐的~XXXX转义(:→~003A、@→~0040),Windows 保留字符安全;还原/清空的 id 始终取自条目内meta.json,绝不反解条目名 ENTRY_RE同步收紧为转义输出字符集(含~、绝不含:/@);转义膨胀越界的极端 id 在动手前拒绝,维持「凡删除成功创建的条目必然能还原」不变式
诊断
/list-stream的done行携带各阶段耗时(inventoryMs/prepMs/titleMs/rowMs)与标题来源计数(recordCache/snapshot/predecessor/batched)
升级
dsh plugin --profile web add github:xohmai/dsh-session-delete#v0.5.0装完重启 dsh web 生效;旧版 DSH(≤0.1.1-rc.x)同样兼容。