Skip to content

Releases: notload/dsh-session-toc

v0.2.0

Choose a tag to compare

@notload notload released this 26 Aug 15:12

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

Choose a tag to compare

@notload notload released this 26 Aug 14:49

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

Choose a tag to compare

@notload notload released this 25 Aug 16:27

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

Choose a tag to compare

@notload notload released this 25 Aug 12:49

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

Choose a tag to compare

@notload notload released this 25 Aug 06:16

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

Choose a tag to compare

@notload notload released this 24 Aug 14:49

修复

#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

Choose a tag to compare

@notload notload released this 24 Aug 11:26

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

Choose a tag to compare

@notload notload released this 24 Aug 06:24

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

Choose a tag to compare

@notload notload released this 23 Aug 16:14
b6784fb

修复

  • 长会话目录加载失败:会话日志含本 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 版本不兼容,请以官方版本为准。
使用即表示你已了解并接受以上条款。

dsh-session-toc v0.1.1

Choose a tag to compare

@notload notload released this 23 Aug 05:14
01aa9b0

修复了上下文注入也会进回话目录里面的bug