Repository navigation
Releases: notload/dsh-session-toc
Releases · notload/dsh-session-toc
Release list
v0.2.0
dsh-session-toc v0.2.0
触发性更新:新提问 ~1.2s 自动进目录
- 原目录只在切换会话时构建一次,新提问不即时刷新。
- 改进:监听会话快照(订阅 + 轮询兜底),检测到新 user 提问(seq 增大) 本地即时插入列表尾部(不等 host 慢读)+ 节流全量矫正(host 覆盖对齐);首帧建基线防重复。
- 实测:3082 输入新问题,约 1.2s 内目录自动 +1。
测试 44/44。npm dsh-session-toc@0.2.0。
v0.1.9
dsh-session-toc v0.1.9
issue#9 美术交互改进(C 悬浮圆角 / B 主题跟随 / A 设置抽屉化)
- C 视觉悬浮圆润化:卡片四角 12px + 右侧 8px 悬浮(不贴屏);收起 dock 解耦独立四角圆钮;折叠窄条圆角 + 宽 18px + right:8px;active 条目左侧 3px 强调条(box-shadow inset);目标高亮闪烁 1.2s0.8s;折叠/展开 120ms 出现动画(respect prefers-reduced-motion);阴影升级 0 12px 32px(浅更淡深更沉)。
- B 主题跟随 auto 三档:auto(默认,跟随 DSH 全局主题,读不到退化系统 prefers-color-scheme)/ light / dark;旧档 dark/light 一次性迁移为 auto;
data-dsh-toc-theme写 resolved(现有 8 组 CSS 变量复用);matchMedia + MutationObserver 监听、随面板卸载释放(防监听泄漏)。 - A 设置抽屉化:控制条只留齿轮 ;popover 收纳主题三档单选 / 背景不透明度 / 重载目录;ESC + 外点关闭;折叠态也保留小齿轮。
测试 44/44。已发布 npm dsh-session-toc@0.1.9。
下一版本(v0.1.10)将加入 D 可拖拽定位。
v0.1.8
dsh-session-toc v0.1.8
修复 issue#8 唯一残留红灯:memory-leak-probe
根因(已本机 100% 复现)
不是 createBoundedCache 泄漏,而是探针判据依赖 --expose-gc 的强制 GC:不带 flag 裸跑时 gc() 空转,V8 自然 GC 锯齿被线性回归判成泄漏。
| 跑法 | heapSlope/轮 | first1/4 | last1/4 | rel | 判定 |
|---|---|---|---|---|---|
| 本机不带 flag(=用户跑法) | 140041 | 9.34MB | 17.2MB | 0.8412 | 红灯 |
| 用户机器 v0.1.7 报告 | 135991 | 9.1MB | 17.0MB | 0.866 | 红灯 |
| 本机带 --expose-gc | 64~174 | ~5.9MB | 持平 | 0.001 | 绿 |
修复
- 测试文件自带兜底:不带 --expose-gc 直接跑会自动以强制 GC 重跑自身,任何跑法判据都有效,不再误报
- 新增 FinalizationRegistry 正面证明用例:LRU 淘汰对象必须可被 GC 回收(无引用残留的直接证明)
- host-memory.test.js 同样加固;package.json test 脚本补 --test-isolation=none(Node 24 spawn EPERM)
- README:注明「目录读取不受 DSH 上下文压缩影响」+ 判据原理与正确跑法
测试 44/44(npm test / 裸跑 / 带 flag 三种跑法全绿)。
已发布 npm dsh-session-toc@0.1.8
v0.1.7
dsh-session-toc v0.1.7
修复 issue#8 残余卡顿(切换会话 + 目录冷读)
- 客户端:补加载循环增加取消机制切换会话/面板卸载立即中止旧会话后台补加载(jump 日志带 cancelled 原因),不再放大切换卡顿
- 客户端:目录冷读错峰缓存未命中先用浏览器已加载节点秒出目录,全量请求延迟 120ms、响应在 rAF 应用,避开切换渲染高峰
- 宿主:目录路由收窄为仅 GET(POST 返回 405 + Allow),闭环隔离测试矩阵
- 测试:43/43 全绿,新增「POST 405 且不触发 readSession」用例
- 依据:issue#7 隔离测试方案落地的 3082 测试实例 + 进程级 CPU 采样基线(切换卡顿主因在 DSH 本体,详见 DSH本体问题报告)
已发布 npm dsh-session-toc@0.1.7
dsh-session-toc v0.1.6
dsh-session-toc v0.1.6
长对话适配 + 修复 issue#5 / #6
- 客户端:点击跳转改为「已加载即秒回 / 未加载渐进补」——rAF 分帧 + 距离估算页数 + 加载中占位,修复长对话下「点远距离条目越卡」「切换会话不秒开」
- 宿主:缓存增加字节预算上限,兜住长对话多个大缓存共存
- 测试:host-memory 改长对话规模 + 双 GC + 中位数判据;新增 memory-leak-probe / client-estimate / 缓存字节预算用例
- 已发布 npm
dsh-session-toc@0.1.6
v0.1.5
修复
#3 服务端来源鉴权缺失(安全)
- 新增请求来源校验:
/session-toc/questions拒绝无浏览器信号(sec-fetch-site或同源Origin)的裸 HTTP 请求。 - curl / 脚本 / 局域网主机等非浏览器客户端一律返回 403(
FORBIDDEN),即使 sessionId 真实存在也不再返回会话提问全文。 - 保留原有会话归属校验(
isSessionVisible)作为第二道防线。
#4 client 端 UI 性能
- 移除
findScrollContainer的全页querySelectorAll('*')+ 逐元素getComputedStyle扫描(首次点击主线程阻塞的主因),改为候选 class 选择器 + 挂载时预热缓存。 loadOlder补加载由逐页await rAF改为requestIdleCallback分帧,并新增「定位中…」标题占位。- 跳转滚动由
smooth改为auto(即时跳转,去掉超大 DOM 上的平滑滚动开销)。 - 新增客户端 entries 缓存(LRU 上限 32),切换回已打开会话先命中缓存秒开、再后台刷新。
测试
- 新增
test/auth.test.js(8 用例)+ 裸请求 403 回归用例。 - 全部 34 个用例通过(
node --test --test-isolation=none)。
v0.1.4
v0.1.4 性能与安全加固(issue #2 完整修复)
本轮完整落地 issue #2 的性能问题与代码审查建议。
性能:切换会话不再全量重放
- 落盘索引:读取结果落盘到
$DSH_HOME/storages/session-toc/<id>.json,跨进程/重启秒开;persisted 会话按revision(框架 stat 级变更 token)失效。 - 进程内 LRU 缓存(上限 64 会话):命中直接返回已序列化 JSON。
- live 会话增量失效:用
ctx.sessions零 IO 比对lastSeq,仅新消息追加时才重读。 - 三层降频:进程内缓存 落盘索引
readSession兜底。
安全加固
- CORS 收敛:去掉
Access-Control-Allow-Origin: *,跨源读取由浏览器同源策略拦截。 - 会话可见性鉴权:sessionId 需属于 live/persisted 可见列表,否则返回
SESSION_NOT_FOUND。 - 输入校验:sessionId 长度/字符白名单校验。
- 错误脱敏:错误响应不再回显内部错误详情。
其他
peerDependencies补上react-dom(client.js使用了createPortal)。- 测试扩展至 25 个,覆盖缓存、提取、内存稳态、readSession 频率、落盘索引、鉴权。
完整改动见 main 分支。
v0.1.3
v0.1.3 运行内存优化
本次更新聚焦宿主(host)侧的运行内存与磁盘 IO 治理:
- 有界 LRU 缓存:
/session-toc/questions的读取结果改为 30s TTL、上限 32 会话的有界 LRU 缓存;命中直接返回已序列化 JSON,每次请求开头主动清理过期项,避免切换多个会话后历史 payload 永久驻留内存。 - 文本截断:目录文案收敛为「首行 + 300 字符」;一条 2000 字用户消息的序列化体积从约 2442 字节降至 340 字节(约 14%)。
- 单次序列化:缓存字符串而非对象,命中时不再重复
JSON.stringify,减少大字符串反复分配。 - 单循环提取:
extractUserQuestions单次遍历,文本/图片文件名合并无中间数组。 - 配套测试:新增缓存正确性、宿主提取正确性、内存稳态(多轮强制 GC 采样)、
readSession频率等 22 个测试用例。
完整改动见 main 分支。
dsh-session-toc v0.1.2
修复
- 长会话目录加载失败:会话日志含本 harness 不认识的新事件类型(如
background-agents/fact,报SessionFormatUnsupportedError)时,不再静默清空目录:- host 对读取结果做 3 秒短时缓存,避免重复请求反复解析长会话日志;
- 失败返回结构化错误码(
SESSION_FORMAT_UNSUPPORTED/SESSION_READ_FAILED); - 前端降级为"浏览器已加载节点"的目录(部分可用),并显示"目录加载失败(已显示部分已加载内容)+ 重试"提示条。
- 排除上下文注入:只保留
source.kind === 'user'的事件,session-reference、workspace等注入式上下文不再进目录。
安装
dsh plugin --profile web add link:$(pwd)(在插件解压目录里执行;Windows 下把 $(pwd) 换成完整绝对路径。)
使用前置
需要本机已安装 pnpm,且 DSH 的 web profile 存在。
免责声明
本插件为个人开发、免费开源,仅供学习与自用,不提供任何官方技术支持。
插件由 DeepSeek Harness 协助开发,作者本人不负责任何因使用本插件造成的损失。
插件零侵入,不改动任何 DeepSeek 内置组件与数据;如与 DSH 版本不兼容,请以官方版本为准。
使用即表示你已了解并接受以上条款。