dsh-title-index:DeepSeek Harness Web 端会话标题索引加速插件

前言

DeepSeek Harness (DSH) 的设计理念是“一切皆插件”。在 Web 端使用 @ 触发会话候选时,DSH 官方引擎会对每个持久化会话完整解压并逐行解析 session.jsonl.zstd 来获取最新标题。随着会话数量增加,每次按键都要扫描大量日志,且缓存机制(LRU 仅缓存 5 个)难以应对高频查询。dsh-title-index 旨在通过磁盘索引解决这一性能瓶颈。

是什么

这是一个为 dsh Web 端会话标题读取加磁盘索引的插件,由维护者 gtaifu 开发,遵循 MIT 许可证。

核心功能

替换官方行
通过 cordis.patch.yml 禁用官方 session-query-sqlite 行并插入新行,注入名为 dsh-title-index 的服务。该插件继承官方 SqliteSessionQueryEngine 类,仅覆盖 readTitleSnapshots 方法,其余行为(如 listSessions、搜索等)保持官方实现。

索引机制
插件在磁盘上维护一个索引文件(默认 <DSH_HOME>/title-index.json),以 (sessionId, mtimeMs, size) 作为失效键。当命中索引时,直接返回缓存的标题快照;未命中时(新会话或日志有追加),走官方折叠逻辑并将结果写回索引。

自动失效重折叠
当标题生成插件重写日志导致文件 mtime 变化时,索引会自动失效,下次查询时重新折叠。

降级策略
对于活动会话、官方读取失败或索引损坏的情况,插件会原样回退到官方路径,不会劣化用户体验。

实测性能
在约 60MB zstd 日志的 114 个会话环境中,Top-50 @ 菜单标题读取时间从官方的 ~9.7s 降低至 ~0.3s。

安装与启用

  1. 安装插件
    在 Web profile 下运行:
    dsh plugin --profile web install
  1. 配置依赖与 bundle
    在 profile 的 package.json 中添加依赖,并在 dsh.profile.bundles 中配置。必须将 dsh-title-index 排在 @deepseek-ai/dsh-web-app 之后,以保证补丁在官方行定义之后生效。
    {
      "dsh": {
        "profile": {
          "bundles": [
            "@deepseek-ai/dsh-base",
            "@deepseek-ai/dsh-web-app",
            "dsh-title-index"
          ]
        }
      },
      "dependencies": {
        "dsh-title-index": "github:gtaifu/dsh-title-index"
      }
    }
  1. 预热索引
    首次冷启动会全量折叠一次以填充索引。可以使用预热命令提前完成:
    node <profile>/node_modules/dsh-title-index/lib/bench.mjs

注意事项

  • 已弃用:该插件目前已标记为 deprecated。DeepSeek Harness 0.1.2rc 已内置实现了更快的 @ 函数。
  • 冷启动耗时:冷启动一次(索引缺失或格式升级后)约需要 8–9 秒。
  • 依赖内部行为:插件依赖官方引擎的内部实现细节。

结语

dsh-title-index 通过引入磁盘索引机制,显著降低了 Web 端会话标题查询的开销。目前该功能已集成至 DSH 官方版本,社区目录与 GitHub 仓库仍保留此插件作为参考实现。

GitHub | 社区目录

羽毛球分组比赛记分
小程序二维码

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

小夜