Skip to content

v0.5.0

Latest

Choose a tag to compare

@xohmai xohmai released this 14 Oct 01:28

大列表秒开 + 修复 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)同样兼容。