dsh-carrick-optimize:启动预热 session 列表,缩短历史侧栏首屏等待

前言

在 DSH(DeepSeek Harness)里打开 Web 界面时,历史会话侧栏往往要等第一次 session/list 返回后才能渲染。DSH 的实现会遍历各项目与会话目录,打开日志头、解压并 stat 文件;资料中举例约 1,200 个 session 时,单次调用大约需要一秒,浏览器会在这段时间内空等。

若不处理,每次冷启动或首次拉列表都会重复这一扫描。下面介绍的 dsh-carrick-optimize 由维护者 Carrick-K7 发布,归类为「记忆」相关插件,把 session 发现挪到进程启动后预热,并用 stale-while-revalidate 缓存结果,让首屏历史列表更快可用。

这是什么

dsh-carrick-optimize 是一个体量较小的 DSH 插件(当前包版本 0.1.0,许可证 MIT)。它针对 ctx.sessionPersistence.list() 所代表的 session 列表发现路径做优化:启动后延迟预热列表,请求命中缓存;同时在 session/created、session/disposed 时失效缓存,避免新会话被 TTL 拖慢。运行中会话的合并仍交给 sessionQuery,标题与 live session 保持原有 freshness。

插件通过 cordis.patch.yml 挂入 profile,patch 的是 DSH 内部服务;DSH 大版本升级后需要重新验证是否仍兼容。

核心功能

资料中明确列出的行为如下。

  1. 列表预热与缓存:启动后在可配置延迟后调用 ctx.sessionPersistence.list(),后续请求先走 stale-while-revalidate 缓存,后台再校验刷新。
  2. 事件驱动失效:监听 session/created、session/disposed,即时作废列表缓存,不必等到 listTtlMs 结束。
  3. 可选会话级预热:可配置最近更新的 N 个 session,预写入 session-query 观察缓存;单日志与总压缩字节有上限,过大文件会跳过。
  4. 卸载清理:插件 unload 时恢复被 patch 的原方法并清除定时器;若目标服务不存在或已被 patch,插件保持 idle 并打 warning。

README 在 DSH 0.2.1-rc.3、801 个 session 上测得:首次 session/list 约 306–376ms 降到 47–94ms。该数字来自仓库说明,环境与 session 规模不同会有差异。

不覆盖的范围(资料原文强调):任意「冷」会话仍可能需要完整 Zstandard 日志解码;分页与 projection 仍依赖完整事件数组。插件 bundle 加载不受此插件影响。

安装与启用

面向 Web profile 的安装命令以 README 为准,安装后需重启 DSH。

dsh plugin --profile web add git+https://github.com/Carrick-K7/dsh-carrick-optimize.git#v0.1.0
# restart DSH

若使用本地打包产物:

dsh plugin --profile web add file:/path/to/dsh-carrick-optimize-0.1.0.tgz

安装后,cordis.patch.yml 会向 profile 插入条目(示例):

- insert:
    - id: carrick-optimize
      name: dsh-carrick-optimize

插件以当前 DSH 进程权限运行。安装前建议在 GitHub 阅读源码与 MIT 许可证,确认 patch 行为可接受。

配置

在 profile patch 里覆盖 carrick-optimize 的 config 即可。README 示例:

- id: carrick-optimize
  config:
    listTtlMs: 60000
    prewarmList: true
    prewarmDelayMs: 500
    prewarmSessions: 2
配置项 默认值 含义
enabled true 关闭插件
listTtlMs 60000 后台重新校验前的缓存窗口(毫秒)
prewarmList true 启动时预热列表
prewarmDelayMs 500 启动预热前的延迟(毫秒)
prewarmSessions 2 预热的最近 session 数量;0 表示关闭
prewarmMaxSessionBytes 24 MiB 超过此大小的单条日志跳过预热
prewarmTotalBytes 48 MiB 预热阶段压缩字节总预算

典型用法无需改代码:装好插件、按需调上述字段,重启 DSH 后打开 Web 历史侧栏即可感受首屏列表延迟变化。若 session 体量很大,可先保持默认,再按机器负载调整 prewarmSessions 与字节上限。

适用场景与注意

适合:本地或服务器上 session 数量多、频繁用 Web 历史列表浏览与切换的用户;目标 DSH 版本与插件声明一致(资料写明面向 DSH 0.2.1-rc.3,Cordis 4)。

注意:

  • 兼容性绑定内部 API ctx.sessionPersistence.list;DSH 升级后应跑一遍历史列表与新建/销毁 session,并查看日志是否有 idle / warning。
  • 预热只加速列表与已预热 session 的首次打开,不能替代完整日志解码成本。
  • 社区目录 skillhub.cn 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系;安装来源以你信任的仓库与 tag 为准。

结尾

dsh-carrick-optimize 把耗时的 session 目录扫描前移到启动阶段,并用缓存与事件失效平衡 freshness 与首屏速度。若你主要痛点是 Web 历史侧栏「第一次打开要等 list」,可以按 README 安装 v0.1.0 并微调配置。

  • 目录页:https://www.skillhub.cn/plugins/Carrick-K7/dsh-carrick-optimize
  • 源码与文档:https://github.com/Carrick-K7/dsh-carrick-optimize
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜