前言¶
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。
安裝與啓用¶
- 安裝插件
在 Web profile 下運行:
dsh plugin --profile web install
- 配置依賴與 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"
}
}
- 預熱索引
首次冷啓動會全量摺疊一次以填充索引。可以使用預熱命令提前完成:
node <profile>/node_modules/dsh-title-index/lib/bench.mjs
注意事項¶
- 已棄用:該插件目前已標記爲 deprecated。DeepSeek Harness 0.1.2rc 已內置實現了更快的
@函數。 - 冷啓動耗時:冷啓動一次(索引缺失或格式升級後)約需要 8–9 秒。
- 依賴內部行爲:插件依賴官方引擎的內部實現細節。
結語¶
dsh-title-index 通過引入磁盤索引機制,顯著降低了 Web 端會話標題查詢的開銷。目前該功能已集成至 DSH 官方版本,社區目錄與 GitHub 倉庫仍保留此插件作爲參考實現。